@@ -439,6 +439,67 @@ inline ur_result_t mock_urVirtualMemReserve(void *pParams) {
439439 return UR_RESULT_SUCCESS;
440440}
441441
442+ // Create dummy command buffer handle and store the provided descriptor as the
443+ // data
444+ inline ur_result_t mock_urCommandBufferCreateExp (void *pParams) {
445+ auto params =
446+ reinterpret_cast <ur_command_buffer_create_exp_params_t *>(pParams);
447+ const ur_exp_command_buffer_desc_t *descPtr = *(params->ppCommandBufferDesc );
448+ ur_exp_command_buffer_handle_t *retCmdBuffer = *params->pphCommandBuffer ;
449+ *retCmdBuffer = mock::createDummyHandle<ur_exp_command_buffer_handle_t >(
450+ static_cast <size_t >(sizeof (ur_exp_command_buffer_desc_t )));
451+ if (descPtr) {
452+ reinterpret_cast <mock::dummy_handle_t >(*retCmdBuffer)
453+ ->setDataAs <ur_exp_command_buffer_desc_t >(*descPtr);
454+ }
455+
456+ return UR_RESULT_SUCCESS;
457+ }
458+
459+ inline ur_result_t mock_urCommandBufferGetInfoExp (void *pParams) {
460+ auto params =
461+ reinterpret_cast <ur_command_buffer_get_info_exp_params_t *>(pParams);
462+
463+ auto cmdBufferDummyHandle =
464+ reinterpret_cast <mock::dummy_handle_t >(*params->phCommandBuffer );
465+ switch (*params->ppropName ) {
466+ case UR_EXP_COMMAND_BUFFER_INFO_DESCRIPTOR: {
467+ if (*params->ppPropValue ) {
468+ ur_exp_command_buffer_desc_t *propValue =
469+ reinterpret_cast <ur_exp_command_buffer_desc_t *>(
470+ *params->ppPropValue );
471+ *propValue =
472+ cmdBufferDummyHandle->getDataAs <ur_exp_command_buffer_desc_t >();
473+ }
474+ if (*params->ppPropSizeRet )
475+ **params->ppPropSizeRet = sizeof (ur_exp_command_buffer_desc_t );
476+ }
477+ return UR_RESULT_SUCCESS;
478+ default :
479+ return UR_RESULT_SUCCESS;
480+ }
481+ return UR_RESULT_SUCCESS;
482+ }
483+
484+ // Checking command handle behaviour only
485+ inline ur_result_t mock_urCommandBufferAppendKernelLaunchExp (void *pParams) {
486+ auto params =
487+ reinterpret_cast <ur_command_buffer_append_kernel_launch_exp_params_t *>(
488+ pParams);
489+
490+ auto cmdBufferDummyHandle =
491+ reinterpret_cast <mock::dummy_handle_t >(*params->phCommandBuffer );
492+ // Requesting a command handle when the command buffer is not updatable is an
493+ // error
494+ if (*(params->pphCommand ) &&
495+ cmdBufferDummyHandle->getDataAs <ur_exp_command_buffer_desc_t >()
496+ .isUpdatable == false ) {
497+ return UR_RESULT_ERROR_INVALID_OPERATION;
498+ }
499+
500+ return UR_RESULT_SUCCESS;
501+ }
502+
442503} // namespace MockAdapter
443504
444505// / The UrMock<> class sets up UR for adapter mocking with the set of default
@@ -484,6 +545,12 @@ template <sycl::backend Backend = backend::opencl> class UrMock {
484545 ADD_DEFAULT_OVERRIDE (urUsmP2PPeerAccessGetInfoExp,
485546 mock_urUsmP2PPeerAccessGetInfoExp)
486547 ADD_DEFAULT_OVERRIDE (urVirtualMemReserve, mock_urVirtualMemReserve)
548+ ADD_DEFAULT_OVERRIDE (urCommandBufferCreateExp,
549+ mock_urCommandBufferCreateExp);
550+ ADD_DEFAULT_OVERRIDE (urCommandBufferAppendKernelLaunchExp,
551+ mock_urCommandBufferAppendKernelLaunchExp);
552+ ADD_DEFAULT_OVERRIDE (urCommandBufferGetInfoExp,
553+ mock_urCommandBufferGetInfoExp);
487554#undef ADD_DEFAULT_OVERRIDE
488555
489556 ur_loader_config_handle_t UrLoaderConfig = nullptr ;
0 commit comments