10
10
11
11
#include " command_buffer.hpp"
12
12
#include " common.hpp"
13
+ #include " context.hpp"
14
+ #include " event.hpp"
15
+ #include " kernel.hpp"
16
+ #include " memory.hpp"
17
+ #include " queue.hpp"
13
18
14
19
// / The ur_exp_command_buffer_handle_t_ destructor calls CL release
15
20
// / command-buffer to free the underlying object.
16
21
ur_exp_command_buffer_handle_t_::~ur_exp_command_buffer_handle_t_ () {
17
22
urQueueRelease (hInternalQueue);
18
23
19
- cl_context CLContext = cl_adapter::cast<cl_context>( hContext) ;
24
+ cl_context CLContext = hContext-> CLContext ;
20
25
cl_ext::clReleaseCommandBufferKHR_fn clReleaseCommandBufferKHR = nullptr ;
21
26
cl_int Res =
22
27
cl_ext::getExtFuncFromContext<decltype (clReleaseCommandBufferKHR)>(
@@ -44,7 +49,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferCreateExp(
44
49
UR_RETURN_ON_FAILURE (
45
50
urQueueCreate (hContext, hDevice, &QueueProperties, &Queue));
46
51
47
- cl_context CLContext = cl_adapter::cast<cl_context>( hContext) ;
52
+ cl_context CLContext = hContext-> CLContext ;
48
53
cl_ext::clCreateCommandBufferKHR_fn clCreateCommandBufferKHR = nullptr ;
49
54
UR_RETURN_ON_FAILURE (
50
55
cl_ext::getExtFuncFromContext<decltype (clCreateCommandBufferKHR)>(
@@ -54,7 +59,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferCreateExp(
54
59
const bool IsUpdatable = pCommandBufferDesc->isUpdatable ;
55
60
56
61
ur_device_command_buffer_update_capability_flags_t UpdateCapabilities;
57
- cl_device_id CLDevice = cl_adapter::cast< cl_device_id >( hDevice) ;
62
+ cl_device_id CLDevice = hDevice-> CLDevice ;
58
63
CL_RETURN_ON_FAILURE (
59
64
getDeviceCommandBufferUpdateCapabilities (CLDevice, UpdateCapabilities));
60
65
bool DeviceSupportsUpdate = UpdateCapabilities > 0 ;
@@ -68,16 +73,19 @@ UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferCreateExp(
68
73
IsUpdatable ? CL_COMMAND_BUFFER_MUTABLE_KHR : 0u , 0 };
69
74
70
75
cl_int Res = CL_SUCCESS;
71
- auto CLCommandBuffer = clCreateCommandBufferKHR (
72
- 1 , cl_adapter::cast<cl_command_queue *>(&Queue), Properties, &Res);
76
+ const cl_command_queue CLQueue = Queue->CLQueue ;
77
+ auto CLCommandBuffer =
78
+ clCreateCommandBufferKHR (1 , &CLQueue, Properties, &Res);
73
79
CL_RETURN_ON_FAILURE_AND_SET_NULL (Res, phCommandBuffer);
74
80
75
81
try {
76
82
auto URCommandBuffer = std::make_unique<ur_exp_command_buffer_handle_t_>(
77
83
Queue, hContext, hDevice, CLCommandBuffer, IsUpdatable, IsInOrder);
78
84
*phCommandBuffer = URCommandBuffer.release ();
79
- } catch (... ) {
85
+ } catch (std::bad_alloc & ) {
80
86
return UR_RESULT_ERROR_OUT_OF_RESOURCES;
87
+ } catch (...) {
88
+ return UR_RESULT_ERROR_UNKNOWN;
81
89
}
82
90
83
91
CL_RETURN_ON_FAILURE (Res);
@@ -102,7 +110,7 @@ urCommandBufferReleaseExp(ur_exp_command_buffer_handle_t hCommandBuffer) {
102
110
UR_APIEXPORT ur_result_t UR_APICALL
103
111
urCommandBufferFinalizeExp (ur_exp_command_buffer_handle_t hCommandBuffer) {
104
112
UR_ASSERT (!hCommandBuffer->IsFinalized , UR_RESULT_ERROR_INVALID_OPERATION);
105
- cl_context CLContext = cl_adapter::cast<cl_context>( hCommandBuffer->hContext ) ;
113
+ cl_context CLContext = hCommandBuffer->hContext -> CLContext ;
106
114
cl_ext::clFinalizeCommandBufferKHR_fn clFinalizeCommandBufferKHR = nullptr ;
107
115
UR_RETURN_ON_FAILURE (
108
116
cl_ext::getExtFuncFromContext<decltype (clFinalizeCommandBufferKHR)>(
@@ -134,7 +142,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferAppendKernelLaunchExp(
134
142
UR_ASSERT (!(phCommandHandle && !hCommandBuffer->IsUpdatable ),
135
143
UR_RESULT_ERROR_INVALID_OPERATION);
136
144
137
- cl_context CLContext = cl_adapter::cast<cl_context>( hCommandBuffer->hContext ) ;
145
+ cl_context CLContext = hCommandBuffer->hContext -> CLContext ;
138
146
cl_ext::clCommandNDRangeKernelKHR_fn clCommandNDRangeKernelKHR = nullptr ;
139
147
UR_RETURN_ON_FAILURE (
140
148
cl_ext::getExtFuncFromContext<decltype (clCommandNDRangeKernelKHR)>(
@@ -162,10 +170,9 @@ UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferAppendKernelLaunchExp(
162
170
IsInOrder ? nullptr : pSyncPointWaitList;
163
171
uint32_t WaitListSize = IsInOrder ? 0 : numSyncPointsInWaitList;
164
172
CL_RETURN_ON_FAILURE (clCommandNDRangeKernelKHR (
165
- hCommandBuffer->CLCommandBuffer , nullptr , Properties,
166
- cl_adapter::cast<cl_kernel>(hKernel), workDim, pGlobalWorkOffset,
167
- pGlobalWorkSize, pLocalWorkSize, WaitListSize, SyncPointWaitList,
168
- RetSyncPoint, OutCommandHandle));
173
+ hCommandBuffer->CLCommandBuffer , nullptr , Properties, hKernel->CLKernel ,
174
+ workDim, pGlobalWorkOffset, pGlobalWorkSize, pLocalWorkSize, WaitListSize,
175
+ SyncPointWaitList, RetSyncPoint, OutCommandHandle));
169
176
170
177
try {
171
178
auto Handle = std::make_unique<ur_exp_command_buffer_command_handle_t_>(
@@ -225,7 +232,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferAppendMemBufferCopyExp(
225
232
(void )phEventWaitList;
226
233
(void )phEvent;
227
234
(void )phCommand;
228
- cl_context CLContext = cl_adapter::cast<cl_context>( hCommandBuffer->hContext ) ;
235
+ cl_context CLContext = hCommandBuffer->hContext -> CLContext ;
229
236
cl_ext::clCommandCopyBufferKHR_fn clCommandCopyBufferKHR = nullptr ;
230
237
UR_RETURN_ON_FAILURE (
231
238
cl_ext::getExtFuncFromContext<decltype (clCommandCopyBufferKHR)>(
@@ -238,10 +245,9 @@ UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferAppendMemBufferCopyExp(
238
245
IsInOrder ? nullptr : pSyncPointWaitList;
239
246
uint32_t WaitListSize = IsInOrder ? 0 : numSyncPointsInWaitList;
240
247
CL_RETURN_ON_FAILURE (clCommandCopyBufferKHR (
241
- hCommandBuffer->CLCommandBuffer , nullptr , nullptr ,
242
- cl_adapter::cast<cl_mem>(hSrcMem), cl_adapter::cast<cl_mem>(hDstMem),
243
- srcOffset, dstOffset, size, WaitListSize, SyncPointWaitList, RetSyncPoint,
244
- nullptr ));
248
+ hCommandBuffer->CLCommandBuffer , nullptr , nullptr , hSrcMem->CLMemory ,
249
+ hDstMem->CLMemory , srcOffset, dstOffset, size, WaitListSize,
250
+ SyncPointWaitList, RetSyncPoint, nullptr ));
245
251
246
252
return UR_RESULT_SUCCESS;
247
253
}
@@ -268,7 +274,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferAppendMemBufferCopyRectExp(
268
274
size_t OpenCLDstRect[3 ]{dstOrigin.x , dstOrigin.y , dstOrigin.z };
269
275
size_t OpenCLRegion[3 ]{region.width , region.height , region.depth };
270
276
271
- cl_context CLContext = cl_adapter::cast<cl_context>( hCommandBuffer->hContext ) ;
277
+ cl_context CLContext = hCommandBuffer->hContext -> CLContext ;
272
278
cl_ext::clCommandCopyBufferRectKHR_fn clCommandCopyBufferRectKHR = nullptr ;
273
279
UR_RETURN_ON_FAILURE (
274
280
cl_ext::getExtFuncFromContext<decltype (clCommandCopyBufferRectKHR)>(
@@ -281,11 +287,10 @@ UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferAppendMemBufferCopyRectExp(
281
287
IsInOrder ? nullptr : pSyncPointWaitList;
282
288
uint32_t WaitListSize = IsInOrder ? 0 : numSyncPointsInWaitList;
283
289
CL_RETURN_ON_FAILURE (clCommandCopyBufferRectKHR (
284
- hCommandBuffer->CLCommandBuffer , nullptr , nullptr ,
285
- cl_adapter::cast<cl_mem>(hSrcMem), cl_adapter::cast<cl_mem>(hDstMem),
286
- OpenCLOriginRect, OpenCLDstRect, OpenCLRegion, srcRowPitch, srcSlicePitch,
287
- dstRowPitch, dstSlicePitch, WaitListSize, SyncPointWaitList, RetSyncPoint,
288
- nullptr ));
290
+ hCommandBuffer->CLCommandBuffer , nullptr , nullptr , hSrcMem->CLMemory ,
291
+ hDstMem->CLMemory , OpenCLOriginRect, OpenCLDstRect, OpenCLRegion,
292
+ srcRowPitch, srcSlicePitch, dstRowPitch, dstSlicePitch, WaitListSize,
293
+ SyncPointWaitList, RetSyncPoint, nullptr ));
289
294
290
295
return UR_RESULT_SUCCESS;
291
296
}
@@ -377,7 +382,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferAppendMemBufferFillExp(
377
382
[[maybe_unused]] ur_event_handle_t *phEvent,
378
383
[[maybe_unused]] ur_exp_command_buffer_command_handle_t *phCommand) {
379
384
380
- cl_context CLContext = cl_adapter::cast<cl_context>( hCommandBuffer->hContext ) ;
385
+ cl_context CLContext = hCommandBuffer->hContext -> CLContext ;
381
386
cl_ext::clCommandFillBufferKHR_fn clCommandFillBufferKHR = nullptr ;
382
387
UR_RETURN_ON_FAILURE (
383
388
cl_ext::getExtFuncFromContext<decltype (clCommandFillBufferKHR)>(
@@ -390,9 +395,9 @@ UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferAppendMemBufferFillExp(
390
395
IsInOrder ? nullptr : pSyncPointWaitList;
391
396
uint32_t WaitListSize = IsInOrder ? 0 : numSyncPointsInWaitList;
392
397
CL_RETURN_ON_FAILURE (clCommandFillBufferKHR (
393
- hCommandBuffer->CLCommandBuffer , nullptr , nullptr ,
394
- cl_adapter::cast<cl_mem>(hBuffer), pPattern, patternSize, offset, size,
395
- WaitListSize, SyncPointWaitList, RetSyncPoint, nullptr ));
398
+ hCommandBuffer->CLCommandBuffer , nullptr , nullptr , hBuffer-> CLMemory ,
399
+ pPattern, patternSize, offset, size, WaitListSize, SyncPointWaitList ,
400
+ RetSyncPoint, nullptr ));
396
401
397
402
return UR_RESULT_SUCCESS;
398
403
}
@@ -448,21 +453,34 @@ UR_APIEXPORT ur_result_t UR_APICALL urEnqueueCommandBufferExp(
448
453
uint32_t numEventsInWaitList, const ur_event_handle_t *phEventWaitList,
449
454
ur_event_handle_t *phEvent) {
450
455
451
- cl_context CLContext = cl_adapter::cast<cl_context>( hCommandBuffer->hContext ) ;
456
+ cl_context CLContext = hCommandBuffer->hContext -> CLContext ;
452
457
cl_ext::clEnqueueCommandBufferKHR_fn clEnqueueCommandBufferKHR = nullptr ;
453
458
UR_RETURN_ON_FAILURE (
454
459
cl_ext::getExtFuncFromContext<decltype (clEnqueueCommandBufferKHR)>(
455
460
CLContext, cl_ext::ExtFuncPtrCache->clEnqueueCommandBufferKHRCache ,
456
461
cl_ext::EnqueueCommandBufferName, &clEnqueueCommandBufferKHR));
457
462
458
463
const uint32_t NumberOfQueues = 1 ;
459
-
464
+ cl_event Event;
465
+ std::vector<cl_event> CLWaitEvents (numEventsInWaitList);
466
+ for (uint32_t i = 0 ; i < numEventsInWaitList; i++) {
467
+ CLWaitEvents[i] = phEventWaitList[i]->CLEvent ;
468
+ }
469
+ cl_command_queue CLQueue = hQueue->CLQueue ;
460
470
CL_RETURN_ON_FAILURE (clEnqueueCommandBufferKHR (
461
- NumberOfQueues, cl_adapter::cast<cl_command_queue *>(&hQueue),
462
- hCommandBuffer->CLCommandBuffer , numEventsInWaitList,
463
- cl_adapter::cast<const cl_event *>(phEventWaitList),
464
- cl_adapter::cast<cl_event *>(phEvent)));
465
-
471
+ NumberOfQueues, &CLQueue, hCommandBuffer->CLCommandBuffer ,
472
+ numEventsInWaitList, CLWaitEvents.data (), &Event));
473
+ if (phEvent) {
474
+ try {
475
+ auto UREvent =
476
+ std::make_unique<ur_event_handle_t_>(Event, hQueue->Context , hQueue);
477
+ *phEvent = UREvent.release ();
478
+ } catch (std::bad_alloc &) {
479
+ return UR_RESULT_ERROR_OUT_OF_RESOURCES;
480
+ } catch (...) {
481
+ return UR_RESULT_ERROR_UNKNOWN;
482
+ }
483
+ }
466
484
return UR_RESULT_SUCCESS;
467
485
}
468
486
@@ -502,11 +520,11 @@ void updateKernelArgs(std::vector<cl_mutable_dispatch_arg_khr> &CLArgs,
502
520
for (uint32_t i = 0 ; i < NumMemobjArgs; i++) {
503
521
const ur_exp_command_buffer_update_memobj_arg_desc_t &URMemObjArg =
504
522
ArgMemobjList[i];
523
+ cl_mem arg_value = URMemObjArg.hNewMemObjArg ->CLMemory ;
505
524
cl_mutable_dispatch_arg_khr CLArg{
506
525
URMemObjArg.argIndex , // arg_index
507
526
sizeof (cl_mem), // arg_size
508
- cl_adapter::cast<const cl_mem *>(
509
- &URMemObjArg.hNewMemObjArg ) // arg_value
527
+ &arg_value // arg_value
510
528
};
511
529
512
530
CLArgs.push_back (CLArg);
@@ -550,7 +568,7 @@ ur_result_t validateCommandDesc(
550
568
// Verify that the device supports updating the aspects of the kernel that
551
569
// the user is requesting.
552
570
ur_device_handle_t URDevice = CommandBuffer->hDevice ;
553
- cl_device_id CLDevice = cl_adapter::cast< cl_device_id >( URDevice) ;
571
+ cl_device_id CLDevice = URDevice-> CLDevice ;
554
572
555
573
ur_device_command_buffer_update_capability_flags_t UpdateCapabilities = 0 ;
556
574
CL_RETURN_ON_FAILURE (
@@ -602,7 +620,8 @@ UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferUpdateKernelLaunchExp(
602
620
validateCommandDesc (hCommandBuffer, pUpdateKernelLaunch[i]));
603
621
}
604
622
605
- cl_context CLContext = cl_adapter::cast<cl_context>(hCommandBuffer->hContext );
623
+ cl_context CLContext = hCommandBuffer->hContext ->CLContext ;
624
+
606
625
cl_ext::clUpdateMutableCommandsKHR_fn clUpdateMutableCommandsKHR = nullptr ;
607
626
UR_RETURN_ON_FAILURE (
608
627
cl_ext::getExtFuncFromContext<decltype (clUpdateMutableCommandsKHR)>(
@@ -658,8 +677,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferUpdateKernelLaunchExp(
658
677
updateNDRange (CLLocalWorkSize, CommandWorkDim, LocalWorkSizePtr);
659
678
}
660
679
661
- cl_mutable_command_khr CLCommand =
662
- cl_adapter::cast<cl_mutable_command_khr>(Command->CLMutableCommand );
680
+ cl_mutable_command_khr CLCommand = Command->CLMutableCommand ;
663
681
Config = cl_mutable_dispatch_config_khr{
664
682
CLCommand,
665
683
static_cast <cl_uint>(CLArgs.size ()), // num_args
@@ -737,7 +755,7 @@ ur_result_t UR_APICALL urCommandBufferAppendNativeCommandExp(
737
755
uint32_t numSyncPointsInWaitList,
738
756
const ur_exp_command_buffer_sync_point_t *pSyncPointWaitList,
739
757
ur_exp_command_buffer_sync_point_t *pSyncPoint) {
740
- cl_context CLContext = cl_adapter::cast<cl_context>( hCommandBuffer->hContext ) ;
758
+ cl_context CLContext = hCommandBuffer->hContext -> CLContext ;
741
759
cl_ext::clCommandBarrierWithWaitListKHR_fn clCommandBarrierWithWaitListKHR =
742
760
nullptr ;
743
761
UR_RETURN_ON_FAILURE (
0 commit comments