@@ -192,6 +192,16 @@ CONSTFIX char EnqueueReadGlobalVariableName[] =
192
192
// Names of host pipe functions queried from OpenCL
193
193
CONSTFIX char EnqueueReadHostPipeName[] = " clEnqueueReadHostPipeINTEL" ;
194
194
CONSTFIX char EnqueueWriteHostPipeName[] = " clEnqueueWriteHostPipeINTEL" ;
195
+ // Names of command buffer functions queried from OpenCL
196
+ CONSTFIX char CreateCommandBufferName[] = " clCreateCommandBufferKHR" ;
197
+ CONSTFIX char RetainCommandBufferName[] = " clRetainCommandBufferKHR" ;
198
+ CONSTFIX char ReleaseCommandBufferName[] = " clReleaseCommandBufferKHR" ;
199
+ CONSTFIX char FinalizeCommandBufferName[] = " clFinalizeCommandBufferKHR" ;
200
+ CONSTFIX char CommandNRRangeKernelName[] = " clCommandNDRangeKernelKHR" ;
201
+ CONSTFIX char CommandCopyBufferName[] = " clCommandCopyBufferKHR" ;
202
+ CONSTFIX char CommandCopyBufferRectName[] = " clCommandCopyBufferRectKHR" ;
203
+ CONSTFIX char CommandFillBufferName[] = " clCommandFillBufferKHR" ;
204
+ CONSTFIX char EnqueueCommandBufferName[] = " clEnqueueCommandBufferKHR" ;
195
205
196
206
#undef CONSTFIX
197
207
@@ -226,6 +236,58 @@ cl_int(CL_API_CALL *)(cl_command_queue queue, cl_program program,
226
236
cl_uint num_events_in_waitlist,
227
237
const cl_event *events_waitlist, cl_event *event);
228
238
239
+ using clCreateCommandBufferKHR_fn = CL_API_ENTRY cl_command_buffer_khr (
240
+ CL_API_CALL *)(cl_uint num_queues, const cl_command_queue *queues,
241
+ const cl_command_buffer_properties_khr *properties,
242
+ cl_int *errcode_ret);
243
+
244
+ using clRetainCommandBufferKHR_fn = CL_API_ENTRY
245
+ cl_int (CL_API_CALL *)(cl_command_buffer_khr command_buffer);
246
+
247
+ using clReleaseCommandBufferKHR_fn = CL_API_ENTRY
248
+ cl_int (CL_API_CALL *)(cl_command_buffer_khr command_buffer);
249
+
250
+ using clFinalizeCommandBufferKHR_fn = CL_API_ENTRY
251
+ cl_int (CL_API_CALL *)(cl_command_buffer_khr command_buffer);
252
+
253
+ using clCommandNDRangeKernelKHR_fn = CL_API_ENTRY cl_int (CL_API_CALL *)(
254
+ cl_command_buffer_khr command_buffer, cl_command_queue command_queue,
255
+ const cl_ndrange_kernel_command_properties_khr *properties,
256
+ cl_kernel kernel, cl_uint work_dim, const size_t *global_work_offset,
257
+ const size_t *global_work_size, const size_t *local_work_size,
258
+ cl_uint num_sync_points_in_wait_list,
259
+ const cl_sync_point_khr *sync_point_wait_list,
260
+ cl_sync_point_khr *sync_point, cl_mutable_command_khr *mutable_handle);
261
+
262
+ using clCommandCopyBufferKHR_fn = CL_API_ENTRY cl_int (CL_API_CALL *)(
263
+ cl_command_buffer_khr command_buffer, cl_command_queue command_queue,
264
+ cl_mem src_buffer, cl_mem dst_buffer, size_t src_offset, size_t dst_offset,
265
+ size_t size, cl_uint num_sync_points_in_wait_list,
266
+ const cl_sync_point_khr *sync_point_wait_list,
267
+ cl_sync_point_khr *sync_point, cl_mutable_command_khr *mutable_handle);
268
+
269
+ using clCommandCopyBufferRectKHR_fn = CL_API_ENTRY cl_int (CL_API_CALL *)(
270
+ cl_command_buffer_khr command_buffer, cl_command_queue command_queue,
271
+ cl_mem src_buffer, cl_mem dst_buffer, const size_t *src_origin,
272
+ const size_t *dst_origin, const size_t *region, size_t src_row_pitch,
273
+ size_t src_slice_pitch, size_t dst_row_pitch, size_t dst_slice_pitch,
274
+ cl_uint num_sync_points_in_wait_list,
275
+ const cl_sync_point_khr *sync_point_wait_list,
276
+ cl_sync_point_khr *sync_point, cl_mutable_command_khr *mutable_handle);
277
+
278
+ using clCommandFillBufferKHR_fn = CL_API_ENTRY cl_int (CL_API_CALL *)(
279
+ cl_command_buffer_khr command_buffer, cl_command_queue command_queue,
280
+ cl_mem buffer, const void *pattern, size_t pattern_size, size_t offset,
281
+ size_t size, cl_uint num_sync_points_in_wait_list,
282
+ const cl_sync_point_khr *sync_point_wait_list,
283
+ cl_sync_point_khr *sync_point, cl_mutable_command_khr *mutable_handle);
284
+
285
+ using clEnqueueCommandBufferKHR_fn = CL_API_ENTRY
286
+ cl_int (CL_API_CALL *)(cl_uint num_queues, cl_command_queue *queues,
287
+ cl_command_buffer_khr command_buffer,
288
+ cl_uint num_events_in_wait_list,
289
+ const cl_event *event_wait_list, cl_event *event);
290
+
229
291
template <typename T> struct FuncPtrCache {
230
292
std::map<cl_context, T> Map;
231
293
std::mutex Mutex;
@@ -255,6 +317,15 @@ struct ExtFuncPtrCacheT {
255
317
FuncPtrCache<clEnqueueWriteHostPipeINTEL_fn> clEnqueueWriteHostPipeINTELCache;
256
318
FuncPtrCache<clSetProgramSpecializationConstant_fn>
257
319
clSetProgramSpecializationConstantCache;
320
+ FuncPtrCache<clCreateCommandBufferKHR_fn> clCreateCommandBufferKHRCache;
321
+ FuncPtrCache<clRetainCommandBufferKHR_fn> clRetainCommandBufferKHRCache;
322
+ FuncPtrCache<clReleaseCommandBufferKHR_fn> clReleaseCommandBufferKHRCache;
323
+ FuncPtrCache<clFinalizeCommandBufferKHR_fn> clFinalizeCommandBufferKHRCache;
324
+ FuncPtrCache<clCommandNDRangeKernelKHR_fn> clCommandNDRangeKernelKHRCache;
325
+ FuncPtrCache<clCommandCopyBufferKHR_fn> clCommandCopyBufferKHRCache;
326
+ FuncPtrCache<clCommandCopyBufferRectKHR_fn> clCommandCopyBufferRectKHRCache;
327
+ FuncPtrCache<clCommandFillBufferKHR_fn> clCommandFillBufferKHRCache;
328
+ FuncPtrCache<clEnqueueCommandBufferKHR_fn> clEnqueueCommandBufferKHRCache;
258
329
};
259
330
// A raw pointer is used here since the lifetime of this map has to be tied to
260
331
// piTeardown to avoid issues with static destruction order (a user application
0 commit comments