@@ -84,6 +84,19 @@ ur_command_list_handler_t::ur_command_list_handler_t(
8484 ur::level_zero::urEventRelease (event);
8585 }) {}
8686
87+ ur_command_list_handler_t ::ur_command_list_handler_t (
88+ ze_command_list_handle_t hZeCommandList, event_pool *eventPool,
89+ bool ownZeHandle)
90+ : commandList(hZeCommandList,
91+ [ownZeHandle](ze_command_list_handle_t hZeCommandList) {
92+ if (ownZeHandle) {
93+ zeCommandListDestroy (hZeCommandList);
94+ }
95+ }),
96+ internalEvent (eventPool->allocate (), [=](ur_event_handle_t event) {
97+ ur::level_zero::urEventRelease (event);
98+ }) {}
99+
87100static event_flags_t eventFlagsFromQueueFlags (ur_queue_flags_t flags) {
88101 event_flags_t eventFlags = EVENT_FLAGS_COUNTER;
89102 if (flags & UR_QUEUE_FLAG_PROFILING_ENABLE)
@@ -102,6 +115,17 @@ ur_queue_immediate_in_order_t::ur_queue_immediate_in_order_t(
102115 computeHandler(hContext, hDevice, pProps, queue_group_type::Compute,
103116 eventPool.get()) {}
104117
118+ ur_queue_immediate_in_order_t ::ur_queue_immediate_in_order_t (
119+ ur_context_handle_t hContext, ur_device_handle_t hDevice,
120+ ur_native_handle_t hNativeHandle, ur_queue_flags_t flags, bool ownZeQueue)
121+ : hContext(hContext), hDevice(hDevice), flags(flags),
122+ eventPool (hContext->eventPoolCache.borrow(
123+ hDevice->Id.value(), eventFlagsFromQueueFlags(flags))),
124+ copyHandler(
125+ reinterpret_cast <ze_command_list_handle_t >(hNativeHandle), eventPool.get(), false /* we're using a single command list for both handlers, only own it by one of them */ ),
126+ computeHandler(reinterpret_cast <ze_command_list_handle_t >(hNativeHandle),
127+ eventPool.get(), ownZeQueue) {}
128+
105129ur_command_list_handler_t *
106130ur_queue_immediate_in_order_t ::getCommandListHandlerForCompute() {
107131 return &computeHandler;
@@ -161,9 +185,9 @@ ur_queue_immediate_in_order_t::queueGetInfo(ur_queue_info_t propName,
161185 return ReturnValue (false );
162186 }
163187 default :
164- logger::error (
165- " Unsupported ParamName in urQueueGetInfo: ParamName=ParamName={}(0x{})" ,
166- propName, logger::toHex (propName));
188+ logger::error (" Unsupported ParamName in urQueueGetInfo: "
189+ " ParamName=ParamName={}(0x{})" ,
190+ propName, logger::toHex (propName));
167191 return UR_RESULT_ERROR_INVALID_VALUE;
168192 }
169193
@@ -186,8 +210,9 @@ ur_result_t ur_queue_immediate_in_order_t::queueRelease() {
186210ur_result_t ur_queue_immediate_in_order_t::queueGetNativeHandle (
187211 ur_queue_native_desc_t *pDesc, ur_native_handle_t *phNativeQueue) {
188212 std::ignore = pDesc;
189- std::ignore = phNativeQueue;
190- return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
213+ *phNativeQueue = reinterpret_cast <ur_native_handle_t >(
214+ this ->computeHandler .commandList .get ());
215+ return UR_RESULT_SUCCESS;
191216}
192217
193218ur_result_t ur_queue_immediate_in_order_t::finalizeHandler (
0 commit comments