@@ -192,6 +192,16 @@ CONSTFIX char EnqueueReadGlobalVariableName[] =
192192// Names of host pipe functions queried from OpenCL
193193CONSTFIX char EnqueueReadHostPipeName[] = " clEnqueueReadHostPipeINTEL" ;
194194CONSTFIX 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" ;
195205
196206#undef CONSTFIX
197207
@@ -226,6 +236,58 @@ cl_int(CL_API_CALL *)(cl_command_queue queue, cl_program program,
226236 cl_uint num_events_in_waitlist,
227237 const cl_event *events_waitlist, cl_event *event);
228238
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+
229291template <typename T> struct FuncPtrCache {
230292 std::map<cl_context, T> Map;
231293 std::mutex Mutex;
@@ -255,6 +317,15 @@ struct ExtFuncPtrCacheT {
255317 FuncPtrCache<clEnqueueWriteHostPipeINTEL_fn> clEnqueueWriteHostPipeINTELCache;
256318 FuncPtrCache<clSetProgramSpecializationConstant_fn>
257319 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;
258329};
259330// A raw pointer is used here since the lifetime of this map has to be tied to
260331// piTeardown to avoid issues with static destruction order (a user application
0 commit comments