2 * Copyright (c) 2012-2019 The Khronos Group Inc.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 * OpenCL is a trademark of Apple Inc. used under license by Khronos.
19 #include "icd_dispatch.h"
25 CL_API_ENTRY cl_int CL_API_CALL
26 clGetPlatformIDs(cl_uint num_entries,
27 cl_platform_id * platforms,
28 cl_uint * num_platforms) CL_API_SUFFIX__VERSION_1_0
30 KHRicdVendor* vendor = NULL;
33 // initialize the platforms (in case they have not been already)
36 if (!num_entries && platforms)
38 return CL_INVALID_VALUE;
40 if (!platforms && !num_platforms)
42 return CL_INVALID_VALUE;
44 // set num_platforms to 0 and set all platform pointers to NULL
49 for (i = 0; i < num_entries && platforms; ++i)
53 // return error if we have no platforms
56 return CL_PLATFORM_NOT_FOUND_KHR;
58 // otherwise enumerate all platforms
59 for (vendor = khrIcdVendors; vendor; vendor = vendor->next)
61 if (num_entries && platforms)
63 *(platforms++) = vendor->platform;
74 CL_API_ENTRY cl_int CL_API_CALL
75 clGetPlatformInfo(cl_platform_id platform,
76 cl_platform_info param_name,
77 size_t param_value_size,
79 size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
81 // initialize the platforms (in case they have not been already)
83 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(platform, CL_INVALID_PLATFORM);
84 return platform->dispatch->clGetPlatformInfo(
89 param_value_size_ret);
93 CL_API_ENTRY cl_int CL_API_CALL
94 clGetDeviceIDs(cl_platform_id platform,
95 cl_device_type device_type,
97 cl_device_id * devices,
98 cl_uint * num_devices) CL_API_SUFFIX__VERSION_1_0
100 // initialize the platforms (in case they have not been already)
102 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(platform, CL_INVALID_PLATFORM);
103 return platform->dispatch->clGetDeviceIDs(
111 CL_API_ENTRY cl_int CL_API_CALL
114 cl_device_info param_name,
115 size_t param_value_size,
117 size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
119 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
120 return device->dispatch->clGetDeviceInfo(
125 param_value_size_ret);
128 CL_API_ENTRY cl_int CL_API_CALL
129 clCreateSubDevices(cl_device_id in_device,
130 const cl_device_partition_property * properties,
132 cl_device_id * out_devices,
133 cl_uint * num_devices) CL_API_SUFFIX__VERSION_1_2
135 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(in_device, CL_INVALID_DEVICE);
136 return in_device->dispatch->clCreateSubDevices(
144 CL_API_ENTRY cl_int CL_API_CALL
145 clRetainDevice(cl_device_id device) CL_API_SUFFIX__VERSION_1_2
147 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
148 return device->dispatch->clRetainDevice(device);
151 CL_API_ENTRY cl_int CL_API_CALL
152 clReleaseDevice(cl_device_id device) CL_API_SUFFIX__VERSION_1_2
154 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
155 return device->dispatch->clReleaseDevice(device);
159 CL_API_ENTRY cl_context CL_API_CALL
160 clCreateContext(const cl_context_properties * properties,
162 const cl_device_id * devices,
163 void (CL_CALLBACK *pfn_notify)(const char *, const void *, size_t, void *),
165 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
167 // initialize the platforms (in case they have not been already)
169 if (!num_devices || !devices)
173 *errcode_ret = CL_INVALID_VALUE;
177 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(devices[0], CL_INVALID_DEVICE);
178 return devices[0]->dispatch->clCreateContext(
187 CL_API_ENTRY cl_context CL_API_CALL
188 clCreateContextFromType(const cl_context_properties * properties,
189 cl_device_type device_type,
190 void (CL_CALLBACK *pfn_notify)(const char *, const void *, size_t, void *),
192 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
194 cl_platform_id platform = NULL;
196 // initialize the platforms (in case they have not been already)
199 // determine the platform to use from the properties specified
200 khrIcdContextPropertiesGetPlatform(properties, &platform);
202 // validate the platform handle and dispatch
203 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(platform, CL_INVALID_PLATFORM);
204 return platform->dispatch->clCreateContextFromType(
212 CL_API_ENTRY cl_int CL_API_CALL
213 clRetainContext(cl_context context) CL_API_SUFFIX__VERSION_1_0
215 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(context, CL_INVALID_CONTEXT);
216 return context->dispatch->clRetainContext(context);
219 CL_API_ENTRY cl_int CL_API_CALL
220 clReleaseContext(cl_context context) CL_API_SUFFIX__VERSION_1_0
222 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(context, CL_INVALID_CONTEXT);
223 return context->dispatch->clReleaseContext(context);
226 CL_API_ENTRY cl_int CL_API_CALL
227 clGetContextInfo(cl_context context,
228 cl_context_info param_name,
229 size_t param_value_size,
231 size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
233 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(context, CL_INVALID_CONTEXT);
234 return context->dispatch->clGetContextInfo(
239 param_value_size_ret);
242 // Command Queue APIs
243 CL_API_ENTRY cl_command_queue CL_API_CALL
244 clCreateCommandQueue(cl_context context,
246 cl_command_queue_properties properties,
247 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
249 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
250 return context->dispatch->clCreateCommandQueue(
257 CL_API_ENTRY cl_int CL_API_CALL
258 clRetainCommandQueue(cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0
260 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
261 return command_queue->dispatch->clRetainCommandQueue(command_queue);
264 CL_API_ENTRY cl_int CL_API_CALL
265 clReleaseCommandQueue(cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0
267 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
268 return command_queue->dispatch->clReleaseCommandQueue(command_queue);
271 CL_API_ENTRY cl_int CL_API_CALL
272 clGetCommandQueueInfo(cl_command_queue command_queue,
273 cl_command_queue_info param_name,
274 size_t param_value_size,
276 size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
278 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
279 return command_queue->dispatch->clGetCommandQueueInfo(
284 param_value_size_ret);
287 // Memory Object APIs
288 CL_API_ENTRY cl_mem CL_API_CALL
289 clCreateBuffer(cl_context context,
293 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
295 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
296 return context->dispatch->clCreateBuffer(
304 CL_API_ENTRY cl_mem CL_API_CALL
305 clCreateImage(cl_context context,
307 const cl_image_format * image_format,
308 const cl_image_desc * image_desc,
310 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2
312 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
313 return context->dispatch->clCreateImage(
322 CL_API_ENTRY cl_int CL_API_CALL
323 clRetainMemObject(cl_mem memobj) CL_API_SUFFIX__VERSION_1_0
325 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(memobj, CL_INVALID_MEM_OBJECT);
326 return memobj->dispatch->clRetainMemObject(memobj);
330 CL_API_ENTRY cl_int CL_API_CALL
331 clReleaseMemObject(cl_mem memobj) CL_API_SUFFIX__VERSION_1_0
333 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(memobj, CL_INVALID_MEM_OBJECT);
334 return memobj->dispatch->clReleaseMemObject(memobj);
337 CL_API_ENTRY cl_int CL_API_CALL
338 clGetSupportedImageFormats(cl_context context,
340 cl_mem_object_type image_type,
342 cl_image_format * image_formats,
343 cl_uint * num_image_formats) CL_API_SUFFIX__VERSION_1_0
345 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(context, CL_INVALID_CONTEXT);
346 return context->dispatch->clGetSupportedImageFormats(
355 CL_API_ENTRY cl_int CL_API_CALL
356 clGetMemObjectInfo(cl_mem memobj,
357 cl_mem_info param_name,
358 size_t param_value_size,
360 size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
362 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(memobj, CL_INVALID_MEM_OBJECT);
363 return memobj->dispatch->clGetMemObjectInfo(
368 param_value_size_ret);
371 CL_API_ENTRY cl_int CL_API_CALL
372 clGetImageInfo(cl_mem image,
373 cl_image_info param_name,
374 size_t param_value_size,
376 size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
378 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(image, CL_INVALID_MEM_OBJECT);
379 return image->dispatch->clGetImageInfo(
384 param_value_size_ret);
388 CL_API_ENTRY cl_sampler CL_API_CALL
389 clCreateSampler(cl_context context,
390 cl_bool normalized_coords,
391 cl_addressing_mode addressing_mode,
392 cl_filter_mode filter_mode,
393 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
395 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
396 return context->dispatch->clCreateSampler(
404 CL_API_ENTRY cl_int CL_API_CALL
405 clRetainSampler(cl_sampler sampler) CL_API_SUFFIX__VERSION_1_0
407 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(sampler, CL_INVALID_SAMPLER);
408 return sampler->dispatch->clRetainSampler(sampler);
411 CL_API_ENTRY cl_int CL_API_CALL
412 clReleaseSampler(cl_sampler sampler) CL_API_SUFFIX__VERSION_1_0
414 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(sampler, CL_INVALID_SAMPLER);
415 return sampler->dispatch->clReleaseSampler(sampler);
418 CL_API_ENTRY cl_int CL_API_CALL
419 clGetSamplerInfo(cl_sampler sampler,
420 cl_sampler_info param_name,
421 size_t param_value_size,
423 size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
425 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(sampler, CL_INVALID_SAMPLER);
426 return sampler->dispatch->clGetSamplerInfo(
431 param_value_size_ret);
434 // Program Object APIs
435 CL_API_ENTRY cl_program CL_API_CALL
436 clCreateProgramWithSource(cl_context context,
438 const char ** strings,
439 const size_t * lengths,
440 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
442 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
443 return context->dispatch->clCreateProgramWithSource(
451 CL_API_ENTRY cl_program CL_API_CALL
452 clCreateProgramWithBinary(cl_context context,
454 const cl_device_id * device_list,
455 const size_t * lengths,
456 const unsigned char ** binaries,
457 cl_int * binary_status,
458 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
460 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
461 return context->dispatch->clCreateProgramWithBinary(
471 CL_API_ENTRY cl_program CL_API_CALL
472 clCreateProgramWithBuiltInKernels(cl_context context,
474 const cl_device_id * device_list,
475 const char * kernel_names,
476 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2
478 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
479 return context->dispatch->clCreateProgramWithBuiltInKernels(
487 CL_API_ENTRY cl_int CL_API_CALL
488 clRetainProgram(cl_program program) CL_API_SUFFIX__VERSION_1_0
490 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
491 return program->dispatch->clRetainProgram(program);
494 CL_API_ENTRY cl_int CL_API_CALL
495 clReleaseProgram(cl_program program) CL_API_SUFFIX__VERSION_1_0
497 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
498 return program->dispatch->clReleaseProgram(program);
501 CL_API_ENTRY cl_int CL_API_CALL
502 clBuildProgram(cl_program program,
504 const cl_device_id * device_list,
505 const char * options,
506 void (CL_CALLBACK *pfn_notify)(cl_program program, void * user_data),
507 void * user_data) CL_API_SUFFIX__VERSION_1_0
509 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
510 return program->dispatch->clBuildProgram(
519 CL_API_ENTRY cl_int CL_API_CALL
520 clCompileProgram(cl_program program,
522 const cl_device_id * device_list,
523 const char * options,
524 cl_uint num_input_headers,
525 const cl_program * input_headers,
526 const char ** header_include_names,
527 void (CL_CALLBACK * pfn_notify)(cl_program program, void * user_data),
528 void * user_data) CL_API_SUFFIX__VERSION_1_2
530 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
531 return program->dispatch->clCompileProgram(
538 header_include_names,
543 CL_API_ENTRY cl_program CL_API_CALL
544 clLinkProgram(cl_context context,
546 const cl_device_id * device_list,
547 const char * options,
548 cl_uint num_input_programs,
549 const cl_program * input_programs,
550 void (CL_CALLBACK * pfn_notify)(cl_program program, void * user_data),
552 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2
554 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
555 return context->dispatch->clLinkProgram(
567 CL_API_ENTRY cl_int CL_API_CALL
568 clSetProgramSpecializationConstant(cl_program program,
571 const void* spec_value) CL_API_SUFFIX__VERSION_2_2
573 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
574 return program->dispatch->clSetProgramSpecializationConstant(
581 CL_API_ENTRY cl_int CL_API_CALL
582 clSetProgramReleaseCallback(cl_program program,
583 void (CL_CALLBACK * pfn_notify)(cl_program program, void * user_data),
584 void * user_data) CL_API_SUFFIX__VERSION_2_2
586 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
587 return program->dispatch->clSetProgramReleaseCallback(
593 CL_API_ENTRY cl_int CL_API_CALL
594 clUnloadPlatformCompiler(cl_platform_id platform) CL_API_SUFFIX__VERSION_1_2
596 // initialize the platforms (in case they have not been already)
598 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(platform, CL_INVALID_PLATFORM);
599 return platform->dispatch->clUnloadPlatformCompiler(platform);
602 CL_API_ENTRY cl_int CL_API_CALL
603 clGetProgramInfo(cl_program program,
604 cl_program_info param_name,
605 size_t param_value_size,
607 size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
609 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
610 return program->dispatch->clGetProgramInfo(
615 param_value_size_ret);
618 CL_API_ENTRY cl_int CL_API_CALL
619 clGetProgramBuildInfo(cl_program program,
621 cl_program_build_info param_name,
622 size_t param_value_size,
624 size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
626 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
627 return program->dispatch->clGetProgramBuildInfo(
633 param_value_size_ret);
636 // Kernel Object APIs
637 CL_API_ENTRY cl_kernel CL_API_CALL
638 clCreateKernel(cl_program program,
639 const char * kernel_name,
640 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
642 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(program, CL_INVALID_PROGRAM);
643 return program->dispatch->clCreateKernel(
649 CL_API_ENTRY cl_int CL_API_CALL
650 clCreateKernelsInProgram(cl_program program,
653 cl_uint * num_kernels_ret) CL_API_SUFFIX__VERSION_1_0
655 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
656 return program->dispatch->clCreateKernelsInProgram(
663 CL_API_ENTRY cl_int CL_API_CALL
664 clRetainKernel(cl_kernel kernel) CL_API_SUFFIX__VERSION_1_0
666 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
667 return kernel->dispatch->clRetainKernel(kernel);
670 CL_API_ENTRY cl_int CL_API_CALL
671 clReleaseKernel(cl_kernel kernel) CL_API_SUFFIX__VERSION_1_0
673 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
674 return kernel->dispatch->clReleaseKernel(kernel);
677 CL_API_ENTRY cl_int CL_API_CALL
678 clSetKernelArg(cl_kernel kernel,
681 const void * arg_value) CL_API_SUFFIX__VERSION_1_0
683 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
684 return kernel->dispatch->clSetKernelArg(
691 CL_API_ENTRY cl_int CL_API_CALL
692 clGetKernelInfo(cl_kernel kernel,
693 cl_kernel_info param_name,
694 size_t param_value_size,
696 size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
698 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
699 return kernel->dispatch->clGetKernelInfo(
704 param_value_size_ret);
707 CL_API_ENTRY cl_int CL_API_CALL
708 clGetKernelArgInfo(cl_kernel kernel,
710 cl_kernel_arg_info param_name,
711 size_t param_value_size,
713 size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_2
715 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
716 return kernel->dispatch->clGetKernelArgInfo(
722 param_value_size_ret);
725 CL_API_ENTRY cl_int CL_API_CALL
726 clGetKernelWorkGroupInfo(cl_kernel kernel,
728 cl_kernel_work_group_info param_name,
729 size_t param_value_size,
731 size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
733 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
734 return kernel->dispatch->clGetKernelWorkGroupInfo(
740 param_value_size_ret);
744 CL_API_ENTRY cl_int CL_API_CALL
745 clWaitForEvents(cl_uint num_events,
746 const cl_event * event_list) CL_API_SUFFIX__VERSION_1_0
748 if (!num_events || !event_list)
750 return CL_INVALID_VALUE;
752 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(event_list[0], CL_INVALID_EVENT);
753 return event_list[0]->dispatch->clWaitForEvents(
758 CL_API_ENTRY cl_int CL_API_CALL
759 clGetEventInfo(cl_event event,
760 cl_event_info param_name,
761 size_t param_value_size,
763 size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
765 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(event, CL_INVALID_EVENT);
766 return event->dispatch->clGetEventInfo(
771 param_value_size_ret);
774 CL_API_ENTRY cl_int CL_API_CALL
775 clRetainEvent(cl_event event) CL_API_SUFFIX__VERSION_1_0
777 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(event, CL_INVALID_EVENT);
778 return event->dispatch->clRetainEvent(event);
781 CL_API_ENTRY cl_int CL_API_CALL
782 clReleaseEvent(cl_event event) CL_API_SUFFIX__VERSION_1_0
784 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(event, CL_INVALID_EVENT);
785 return event->dispatch->clReleaseEvent(event);
789 CL_API_ENTRY cl_int CL_API_CALL
790 clGetEventProfilingInfo(cl_event event,
791 cl_profiling_info param_name,
792 size_t param_value_size,
794 size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
796 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(event, CL_INVALID_EVENT);
797 return event->dispatch->clGetEventProfilingInfo(
802 param_value_size_ret);
805 // Flush and Finish APIs
806 CL_API_ENTRY cl_int CL_API_CALL
807 clFlush(cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0
809 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
810 return command_queue->dispatch->clFlush(command_queue);
813 CL_API_ENTRY cl_int CL_API_CALL
814 clFinish(cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0
816 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
817 return command_queue->dispatch->clFinish(command_queue);
820 // Enqueued Commands APIs
821 CL_API_ENTRY cl_int CL_API_CALL
822 clEnqueueReadBuffer(cl_command_queue command_queue,
824 cl_bool blocking_read,
828 cl_uint num_events_in_wait_list,
829 const cl_event * event_wait_list,
830 cl_event * event) CL_API_SUFFIX__VERSION_1_0
832 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
833 return command_queue->dispatch->clEnqueueReadBuffer(
840 num_events_in_wait_list,
845 CL_API_ENTRY cl_int CL_API_CALL
846 clEnqueueReadBufferRect(
847 cl_command_queue command_queue,
849 cl_bool blocking_read,
850 const size_t * buffer_origin,
851 const size_t * host_origin,
852 const size_t * region,
853 size_t buffer_row_pitch,
854 size_t buffer_slice_pitch,
855 size_t host_row_pitch,
856 size_t host_slice_pitch,
858 cl_uint num_events_in_wait_list,
859 const cl_event * event_wait_list,
860 cl_event * event) CL_API_SUFFIX__VERSION_1_1
862 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
863 return command_queue->dispatch->clEnqueueReadBufferRect(
875 num_events_in_wait_list,
880 CL_API_ENTRY cl_int CL_API_CALL
881 clEnqueueWriteBuffer(cl_command_queue command_queue,
883 cl_bool blocking_write,
887 cl_uint num_events_in_wait_list,
888 const cl_event * event_wait_list,
889 cl_event * event) CL_API_SUFFIX__VERSION_1_0
891 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
892 return command_queue->dispatch->clEnqueueWriteBuffer(
899 num_events_in_wait_list,
904 CL_API_ENTRY cl_int CL_API_CALL
905 clEnqueueWriteBufferRect(
906 cl_command_queue command_queue,
908 cl_bool blocking_read,
909 const size_t * buffer_origin,
910 const size_t * host_origin,
911 const size_t * region,
912 size_t buffer_row_pitch,
913 size_t buffer_slice_pitch,
914 size_t host_row_pitch,
915 size_t host_slice_pitch,
917 cl_uint num_events_in_wait_list,
918 const cl_event * event_wait_list,
919 cl_event * event) CL_API_SUFFIX__VERSION_1_1
921 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
922 return command_queue->dispatch->clEnqueueWriteBufferRect(
934 num_events_in_wait_list,
939 CL_API_ENTRY cl_int CL_API_CALL
940 clEnqueueFillBuffer(cl_command_queue command_queue,
942 const void * pattern,
946 cl_uint num_events_in_wait_list,
947 const cl_event * event_wait_list,
948 cl_event * event) CL_API_SUFFIX__VERSION_1_2
950 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
951 return command_queue->dispatch->clEnqueueFillBuffer(
958 num_events_in_wait_list,
963 CL_API_ENTRY cl_int CL_API_CALL
964 clEnqueueCopyBuffer(cl_command_queue command_queue,
970 cl_uint num_events_in_wait_list,
971 const cl_event * event_wait_list,
972 cl_event * event) CL_API_SUFFIX__VERSION_1_0
974 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
975 return command_queue->dispatch->clEnqueueCopyBuffer(
982 num_events_in_wait_list,
987 CL_API_ENTRY cl_int CL_API_CALL
988 clEnqueueCopyBufferRect(
989 cl_command_queue command_queue,
992 const size_t * src_origin,
993 const size_t * dst_origin,
994 const size_t * region,
995 size_t src_row_pitch,
996 size_t src_slice_pitch,
997 size_t dst_row_pitch,
998 size_t dst_slice_pitch,
999 cl_uint num_events_in_wait_list,
1000 const cl_event * event_wait_list,
1001 cl_event * event) CL_API_SUFFIX__VERSION_1_1
1003 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1004 return command_queue->dispatch->clEnqueueCopyBufferRect(
1015 num_events_in_wait_list,
1020 CL_API_ENTRY cl_int CL_API_CALL
1021 clEnqueueReadImage(cl_command_queue command_queue,
1023 cl_bool blocking_read,
1024 const size_t * origin,
1025 const size_t * region,
1029 cl_uint num_events_in_wait_list,
1030 const cl_event * event_wait_list,
1031 cl_event * event) CL_API_SUFFIX__VERSION_1_0
1033 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1034 return command_queue->dispatch->clEnqueueReadImage(
1043 num_events_in_wait_list,
1048 CL_API_ENTRY cl_int CL_API_CALL
1049 clEnqueueWriteImage(cl_command_queue command_queue,
1051 cl_bool blocking_write,
1052 const size_t * origin,
1053 const size_t * region,
1054 size_t input_row_pitch,
1055 size_t input_slice_pitch,
1057 cl_uint num_events_in_wait_list,
1058 const cl_event * event_wait_list,
1059 cl_event * event) CL_API_SUFFIX__VERSION_1_0
1061 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1062 return command_queue->dispatch->clEnqueueWriteImage(
1071 num_events_in_wait_list,
1076 CL_API_ENTRY cl_int CL_API_CALL
1077 clEnqueueFillImage(cl_command_queue command_queue,
1079 const void * fill_color,
1080 const size_t origin[3],
1081 const size_t region[3],
1082 cl_uint num_events_in_wait_list,
1083 const cl_event * event_wait_list,
1084 cl_event * event) CL_API_SUFFIX__VERSION_1_2
1086 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1087 return command_queue->dispatch->clEnqueueFillImage(
1093 num_events_in_wait_list,
1098 CL_API_ENTRY cl_int CL_API_CALL
1099 clEnqueueCopyImage(cl_command_queue command_queue,
1102 const size_t * src_origin,
1103 const size_t * dst_origin,
1104 const size_t * region,
1105 cl_uint num_events_in_wait_list,
1106 const cl_event * event_wait_list,
1107 cl_event * event) CL_API_SUFFIX__VERSION_1_0
1109 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1110 return command_queue->dispatch->clEnqueueCopyImage(
1117 num_events_in_wait_list,
1122 CL_API_ENTRY cl_int CL_API_CALL
1123 clEnqueueCopyImageToBuffer(cl_command_queue command_queue,
1126 const size_t * src_origin,
1127 const size_t * region,
1129 cl_uint num_events_in_wait_list,
1130 const cl_event * event_wait_list,
1131 cl_event * event) CL_API_SUFFIX__VERSION_1_0
1133 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1134 return command_queue->dispatch->clEnqueueCopyImageToBuffer(
1141 num_events_in_wait_list,
1146 CL_API_ENTRY cl_int CL_API_CALL
1147 clEnqueueCopyBufferToImage(cl_command_queue command_queue,
1151 const size_t * dst_origin,
1152 const size_t * region,
1153 cl_uint num_events_in_wait_list,
1154 const cl_event * event_wait_list,
1155 cl_event * event) CL_API_SUFFIX__VERSION_1_0
1157 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1158 return command_queue->dispatch->clEnqueueCopyBufferToImage(
1165 num_events_in_wait_list,
1170 CL_API_ENTRY void * CL_API_CALL
1171 clEnqueueMapBuffer(cl_command_queue command_queue,
1173 cl_bool blocking_map,
1174 cl_map_flags map_flags,
1177 cl_uint num_events_in_wait_list,
1178 const cl_event * event_wait_list,
1180 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
1182 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(command_queue, CL_INVALID_COMMAND_QUEUE);
1183 return command_queue->dispatch->clEnqueueMapBuffer(
1190 num_events_in_wait_list,
1196 CL_API_ENTRY void * CL_API_CALL
1197 clEnqueueMapImage(cl_command_queue command_queue,
1199 cl_bool blocking_map,
1200 cl_map_flags map_flags,
1201 const size_t * origin,
1202 const size_t * region,
1203 size_t * image_row_pitch,
1204 size_t * image_slice_pitch,
1205 cl_uint num_events_in_wait_list,
1206 const cl_event * event_wait_list,
1208 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
1210 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(command_queue, CL_INVALID_COMMAND_QUEUE);
1211 return command_queue->dispatch->clEnqueueMapImage(
1220 num_events_in_wait_list,
1226 CL_API_ENTRY cl_int CL_API_CALL
1227 clEnqueueUnmapMemObject(cl_command_queue command_queue,
1230 cl_uint num_events_in_wait_list,
1231 const cl_event * event_wait_list,
1232 cl_event * event) CL_API_SUFFIX__VERSION_1_0
1234 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1235 return command_queue->dispatch->clEnqueueUnmapMemObject(
1239 num_events_in_wait_list,
1244 CL_API_ENTRY cl_int CL_API_CALL
1245 clEnqueueMigrateMemObjects(cl_command_queue command_queue,
1246 cl_uint num_mem_objects,
1247 const cl_mem * mem_objects,
1248 cl_mem_migration_flags flags,
1249 cl_uint num_events_in_wait_list,
1250 const cl_event * event_wait_list,
1251 cl_event * event) CL_API_SUFFIX__VERSION_1_2
1253 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1254 return command_queue->dispatch->clEnqueueMigrateMemObjects(
1259 num_events_in_wait_list,
1264 CL_API_ENTRY cl_int CL_API_CALL
1265 clEnqueueNDRangeKernel(cl_command_queue command_queue,
1268 const size_t * global_work_offset,
1269 const size_t * global_work_size,
1270 const size_t * local_work_size,
1271 cl_uint num_events_in_wait_list,
1272 const cl_event * event_wait_list,
1273 cl_event * event) CL_API_SUFFIX__VERSION_1_0
1275 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1276 return command_queue->dispatch->clEnqueueNDRangeKernel(
1283 num_events_in_wait_list,
1288 CL_API_ENTRY cl_int CL_API_CALL
1289 clEnqueueTask(cl_command_queue command_queue,
1291 cl_uint num_events_in_wait_list,
1292 const cl_event * event_wait_list,
1293 cl_event * event) CL_API_SUFFIX__VERSION_1_0
1295 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1296 return command_queue->dispatch->clEnqueueTask(
1299 num_events_in_wait_list,
1304 CL_API_ENTRY cl_int CL_API_CALL
1305 clEnqueueNativeKernel(cl_command_queue command_queue,
1306 void (CL_CALLBACK * user_func)(void *),
1309 cl_uint num_mem_objects,
1310 const cl_mem * mem_list,
1311 const void ** args_mem_loc,
1312 cl_uint num_events_in_wait_list,
1313 const cl_event * event_wait_list,
1314 cl_event * event) CL_API_SUFFIX__VERSION_1_0
1316 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1317 return command_queue->dispatch->clEnqueueNativeKernel(
1325 num_events_in_wait_list,
1330 CL_API_ENTRY cl_int CL_API_CALL
1331 clEnqueueMarkerWithWaitList(cl_command_queue command_queue,
1332 cl_uint num_events_in_wait_list,
1333 const cl_event * event_wait_list,
1334 cl_event * event) CL_API_SUFFIX__VERSION_1_2
1336 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1337 return command_queue->dispatch->clEnqueueMarkerWithWaitList(
1339 num_events_in_wait_list,
1344 CL_API_ENTRY cl_int CL_API_CALL
1345 clEnqueueBarrierWithWaitList(cl_command_queue command_queue,
1346 cl_uint num_events_in_wait_list,
1347 const cl_event * event_wait_list,
1348 cl_event * event) CL_API_SUFFIX__VERSION_1_2
1350 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1351 return command_queue->dispatch->clEnqueueBarrierWithWaitList(
1353 num_events_in_wait_list,
1358 CL_API_ENTRY void * CL_API_CALL
1359 clGetExtensionFunctionAddressForPlatform(cl_platform_id platform,
1360 const char * function_name) CL_API_SUFFIX__VERSION_1_2
1362 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(function_name, NULL);
1364 // make sure the ICD is initialized
1367 // return any ICD-aware extensions
1369 // Most extensions, including multi-vendor KHR and EXT extensions,
1370 // do not need to be ICD-aware and do not require any ICD loader
1371 // modifications. The KHR and EXT extensions below were added for
1372 // backwards compatibility only.
1373 #define CL_COMMON_EXTENSION_ENTRYPOINT_ADD(name) if (!strcmp(function_name, #name) ) return (void *)(size_t)&name
1375 // Functions supporting the creation of OpenCL Memory Objects
1376 // from OpenGL Objects (cl_apple_gl_sharing, cl_khr_gl_sharing)
1377 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLBuffer);
1378 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLTexture);
1379 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLTexture2D);
1380 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLTexture3D);
1381 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLRenderbuffer);
1382 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetGLObjectInfo);
1383 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetGLTextureInfo);
1384 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireGLObjects);
1385 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseGLObjects);
1387 // cl_khr_gl_sharing
1388 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetGLContextInfoKHR);
1391 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateEventFromGLsyncKHR);
1394 // cl_khr_d3d10_sharing
1395 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetDeviceIDsFromD3D10KHR);
1396 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D10BufferKHR);
1397 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D10Texture2DKHR);
1398 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D10Texture3DKHR);
1399 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireD3D10ObjectsKHR);
1400 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseD3D10ObjectsKHR);
1401 // cl_khr_d3d11_sharing
1402 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetDeviceIDsFromD3D11KHR);
1403 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D11BufferKHR);
1404 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D11Texture2DKHR);
1405 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D11Texture3DKHR);
1406 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireD3D11ObjectsKHR);
1407 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseD3D11ObjectsKHR);
1408 // cl_khr_dx9_media_sharing
1409 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetDeviceIDsFromDX9MediaAdapterKHR);
1410 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromDX9MediaSurfaceKHR);
1411 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireDX9MediaSurfacesKHR);
1412 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseDX9MediaSurfacesKHR);
1415 // cl_ext_device_fission
1416 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateSubDevicesEXT);
1417 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clRetainDeviceEXT);
1418 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clReleaseDeviceEXT);
1420 /* cl_khr_egl_image */
1421 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromEGLImageKHR);
1422 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireEGLObjectsKHR);
1423 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseEGLObjectsKHR);
1425 /* cl_khr_egl_event */
1426 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateEventFromEGLSyncKHR);
1428 /* cl_khr_sub_groups */
1429 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetKernelSubGroupInfoKHR);
1431 #undef CL_COMMON_EXTENSION_ENTRYPOINT_ADD
1433 // This is not an ICD-aware extension, so call into the implementation
1434 // to get the extension function address.
1436 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(platform, NULL);
1437 return platform->dispatch->clGetExtensionFunctionAddressForPlatform(
1443 CL_API_ENTRY cl_int CL_API_CALL
1444 clSetCommandQueueProperty(cl_command_queue command_queue,
1445 cl_command_queue_properties properties,
1447 cl_command_queue_properties * old_properties) CL_EXT_SUFFIX__VERSION_1_0_DEPRECATED
1449 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1450 return command_queue->dispatch->clSetCommandQueueProperty(
1457 CL_API_ENTRY cl_int CL_API_CALL
1458 clCreateSubDevicesEXT(
1459 cl_device_id in_device,
1460 const cl_device_partition_property_ext * partition_properties,
1461 cl_uint num_entries,
1462 cl_device_id * out_devices,
1463 cl_uint * num_devices) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
1465 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(in_device, CL_INVALID_DEVICE);
1466 return in_device->dispatch->clCreateSubDevicesEXT(
1468 partition_properties,
1474 CL_API_ENTRY cl_int CL_API_CALL
1475 clRetainDeviceEXT(cl_device_id device) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
1477 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
1478 return device->dispatch->clRetainDeviceEXT(device);
1481 CL_API_ENTRY cl_int CL_API_CALL
1482 clReleaseDeviceEXT(cl_device_id device) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
1484 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
1485 return device->dispatch->clReleaseDeviceEXT(device);
1488 CL_API_ENTRY cl_mem CL_API_CALL
1489 clCreateImage2D(cl_context context,
1491 const cl_image_format * image_format,
1493 size_t image_height,
1494 size_t image_row_pitch,
1496 cl_int * errcode_ret) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
1498 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
1499 return context->dispatch->clCreateImage2D(
1510 CL_API_ENTRY cl_mem CL_API_CALL
1511 clCreateImage3D(cl_context context,
1513 const cl_image_format * image_format,
1515 size_t image_height,
1517 size_t image_row_pitch,
1518 size_t image_slice_pitch,
1520 cl_int * errcode_ret) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
1522 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
1523 return context->dispatch->clCreateImage3D(
1536 CL_API_ENTRY cl_int CL_API_CALL
1537 clUnloadCompiler(void) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
1542 CL_API_ENTRY cl_int CL_API_CALL
1543 clEnqueueMarker(cl_command_queue command_queue,
1544 cl_event * event) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
1546 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1547 return command_queue->dispatch->clEnqueueMarker(
1552 CL_API_ENTRY cl_int CL_API_CALL
1553 clEnqueueWaitForEvents(cl_command_queue command_queue,
1555 const cl_event * event_list) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
1557 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1558 return command_queue->dispatch->clEnqueueWaitForEvents(
1564 CL_API_ENTRY cl_int CL_API_CALL
1565 clEnqueueBarrier(cl_command_queue command_queue) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
1567 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1568 return command_queue->dispatch->clEnqueueBarrier(command_queue);
1571 CL_API_ENTRY void * CL_API_CALL
1572 clGetExtensionFunctionAddress(const char *function_name) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
1574 size_t function_name_length = 0;
1575 KHRicdVendor* vendor = NULL;
1577 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(function_name, NULL);
1579 // make sure the ICD is initialized
1581 function_name_length = strlen(function_name);
1583 // return any ICD-aware extensions
1585 // Most extensions, including multi-vendor KHR and EXT extensions,
1586 // do not need to be ICD-aware and do not require any ICD loader
1587 // modifications. The KHR and EXT extensions below were added for
1588 // backwards compatibility only.
1589 #define CL_COMMON_EXTENSION_ENTRYPOINT_ADD(name) if (!strcmp(function_name, #name) ) return (void *)(size_t)&name
1591 // Functions supporting the creation of OpenCL Memory Objects
1592 // from OpenGL Objects (cl_apple_gl_sharing, cl_khr_gl_sharing)
1593 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLBuffer);
1594 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLTexture);
1595 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLTexture2D);
1596 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLTexture3D);
1597 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLRenderbuffer);
1598 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetGLObjectInfo);
1599 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetGLTextureInfo);
1600 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireGLObjects);
1601 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseGLObjects);
1603 // cl_khr_gl_sharing
1604 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetGLContextInfoKHR);
1607 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateEventFromGLsyncKHR);
1610 // cl_khr_d3d10_sharing
1611 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetDeviceIDsFromD3D10KHR);
1612 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D10BufferKHR);
1613 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D10Texture2DKHR);
1614 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D10Texture3DKHR);
1615 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireD3D10ObjectsKHR);
1616 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseD3D10ObjectsKHR);
1617 // cl_khr_d3d11_sharing
1618 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetDeviceIDsFromD3D11KHR);
1619 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D11BufferKHR);
1620 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D11Texture2DKHR);
1621 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D11Texture3DKHR);
1622 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireD3D11ObjectsKHR);
1623 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseD3D11ObjectsKHR);
1624 // cl_khr_dx9_media_sharing
1625 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetDeviceIDsFromDX9MediaAdapterKHR);
1626 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromDX9MediaSurfaceKHR);
1627 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireDX9MediaSurfacesKHR);
1628 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseDX9MediaSurfacesKHR);
1631 // cl_ext_device_fission
1632 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateSubDevicesEXT);
1633 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clRetainDeviceEXT);
1634 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clReleaseDeviceEXT);
1636 /* cl_khr_egl_image */
1637 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromEGLImageKHR);
1638 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireEGLObjectsKHR);
1639 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseEGLObjectsKHR);
1641 /* cl_khr_egl_event */
1642 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateEventFromEGLSyncKHR);
1644 /* cl_khr_sub_groups */
1645 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetKernelSubGroupInfoKHR);
1647 #undef CL_COMMON_EXTENSION_ENTRYPOINT_ADD
1649 // fall back to vendor extension detection
1650 for (vendor = khrIcdVendors; vendor; vendor = vendor->next)
1652 size_t vendor_suffix_length = strlen(vendor->suffix);
1653 if (vendor_suffix_length <= function_name_length && vendor_suffix_length > 0)
1655 const char *function_suffix = function_name+function_name_length-vendor_suffix_length;
1656 if (!strcmp(function_suffix, vendor->suffix) )
1658 return vendor->clGetExtensionFunctionAddress(function_name);
1665 // GL and other APIs
1666 CL_API_ENTRY cl_mem CL_API_CALL clCreateFromGLBuffer(
1670 int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
1672 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
1673 return context->dispatch->clCreateFromGLBuffer(
1680 CL_API_ENTRY cl_mem CL_API_CALL clCreateFromGLTexture(
1686 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2
1688 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
1689 return context->dispatch->clCreateFromGLTexture(
1698 CL_API_ENTRY cl_mem CL_API_CALL clCreateFromGLTexture2D(
1704 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
1706 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
1707 return context->dispatch->clCreateFromGLTexture2D(
1716 CL_API_ENTRY cl_mem CL_API_CALL clCreateFromGLTexture3D(
1722 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
1724 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
1725 return context->dispatch->clCreateFromGLTexture3D(
1734 CL_API_ENTRY cl_mem CL_API_CALL clCreateFromGLRenderbuffer(
1737 cl_GLuint renderbuffer,
1738 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
1740 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
1741 return context->dispatch->clCreateFromGLRenderbuffer(
1748 CL_API_ENTRY cl_int CL_API_CALL clGetGLObjectInfo(
1750 cl_gl_object_type * gl_object_type,
1751 cl_GLuint * gl_object_name) CL_API_SUFFIX__VERSION_1_0
1753 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(memobj, CL_INVALID_MEM_OBJECT);
1754 return memobj->dispatch->clGetGLObjectInfo(
1760 CL_API_ENTRY cl_int CL_API_CALL clGetGLTextureInfo(
1762 cl_gl_texture_info param_name,
1763 size_t param_value_size,
1765 size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
1767 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(memobj, CL_INVALID_MEM_OBJECT);
1768 return memobj->dispatch->clGetGLTextureInfo(
1773 param_value_size_ret);
1776 CL_API_ENTRY cl_int CL_API_CALL clEnqueueAcquireGLObjects(
1777 cl_command_queue command_queue,
1778 cl_uint num_objects,
1779 const cl_mem * mem_objects,
1780 cl_uint num_events_in_wait_list,
1781 const cl_event * event_wait_list,
1782 cl_event * event) CL_API_SUFFIX__VERSION_1_0
1784 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1785 return command_queue->dispatch->clEnqueueAcquireGLObjects(
1789 num_events_in_wait_list,
1794 CL_API_ENTRY cl_int CL_API_CALL clEnqueueReleaseGLObjects(
1795 cl_command_queue command_queue,
1796 cl_uint num_objects,
1797 const cl_mem * mem_objects,
1798 cl_uint num_events_in_wait_list,
1799 const cl_event * event_wait_list,
1800 cl_event * event) CL_API_SUFFIX__VERSION_1_0
1802 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1803 return command_queue->dispatch->clEnqueueReleaseGLObjects(
1807 num_events_in_wait_list,
1812 CL_API_ENTRY cl_int CL_API_CALL clGetGLContextInfoKHR(
1813 const cl_context_properties *properties,
1814 cl_gl_context_info param_name,
1815 size_t param_value_size,
1817 size_t *param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
1819 cl_platform_id platform = NULL;
1821 // initialize the platforms (in case they have not been already)
1824 // determine the platform to use from the properties specified
1825 khrIcdContextPropertiesGetPlatform(properties, &platform);
1827 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(platform, CL_INVALID_PLATFORM);
1828 return platform->dispatch->clGetGLContextInfoKHR(
1833 param_value_size_ret);
1836 CL_API_ENTRY cl_event CL_API_CALL clCreateEventFromGLsyncKHR(
1839 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_1
1841 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
1842 return context->dispatch->clCreateEventFromGLsyncKHR(
1851 * cl_d3d10_sharing_khr
1855 CL_API_ENTRY cl_int CL_API_CALL
1856 clGetDeviceIDsFromD3D10KHR(
1857 cl_platform_id platform,
1858 cl_d3d10_device_source_khr d3d_device_source,
1860 cl_d3d10_device_set_khr d3d_device_set,
1861 cl_uint num_entries,
1862 cl_device_id *devices,
1863 cl_uint *num_devices)
1865 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(platform, CL_INVALID_PLATFORM);
1866 return platform->dispatch->clGetDeviceIDsFromD3D10KHR(
1876 CL_API_ENTRY cl_mem CL_API_CALL
1877 clCreateFromD3D10BufferKHR(
1880 ID3D10Buffer *resource,
1881 cl_int *errcode_ret)
1883 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
1884 return context->dispatch->clCreateFromD3D10BufferKHR(
1891 CL_API_ENTRY cl_mem CL_API_CALL
1892 clCreateFromD3D10Texture2DKHR(
1895 ID3D10Texture2D * resource,
1897 cl_int * errcode_ret)
1899 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
1900 return context->dispatch->clCreateFromD3D10Texture2DKHR(
1908 CL_API_ENTRY cl_mem CL_API_CALL
1909 clCreateFromD3D10Texture3DKHR(
1912 ID3D10Texture3D *resource,
1914 cl_int *errcode_ret)
1916 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
1917 return context->dispatch->clCreateFromD3D10Texture3DKHR(
1925 CL_API_ENTRY cl_int CL_API_CALL
1926 clEnqueueAcquireD3D10ObjectsKHR(
1927 cl_command_queue command_queue,
1928 cl_uint num_objects,
1929 const cl_mem *mem_objects,
1930 cl_uint num_events_in_wait_list,
1931 const cl_event *event_wait_list,
1934 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1935 return command_queue->dispatch->clEnqueueAcquireD3D10ObjectsKHR(
1939 num_events_in_wait_list,
1944 CL_API_ENTRY cl_int CL_API_CALL
1945 clEnqueueReleaseD3D10ObjectsKHR(
1946 cl_command_queue command_queue,
1947 cl_uint num_objects,
1948 const cl_mem *mem_objects,
1949 cl_uint num_events_in_wait_list,
1950 const cl_event *event_wait_list,
1953 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1954 return command_queue->dispatch->clEnqueueReleaseD3D10ObjectsKHR(
1958 num_events_in_wait_list,
1965 * cl_d3d11_sharing_khr
1969 CL_API_ENTRY cl_int CL_API_CALL
1970 clGetDeviceIDsFromD3D11KHR(
1971 cl_platform_id platform,
1972 cl_d3d11_device_source_khr d3d_device_source,
1974 cl_d3d11_device_set_khr d3d_device_set,
1975 cl_uint num_entries,
1976 cl_device_id * devices,
1977 cl_uint * num_devices)
1979 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(platform, CL_INVALID_PLATFORM);
1980 return platform->dispatch->clGetDeviceIDsFromD3D11KHR(
1990 CL_API_ENTRY cl_mem CL_API_CALL
1991 clCreateFromD3D11BufferKHR(
1994 ID3D11Buffer * resource,
1995 cl_int * errcode_ret)
1997 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
1998 return context->dispatch->clCreateFromD3D11BufferKHR(
2005 CL_API_ENTRY cl_mem CL_API_CALL
2006 clCreateFromD3D11Texture2DKHR(
2009 ID3D11Texture2D * resource,
2011 cl_int * errcode_ret)
2013 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
2014 return context->dispatch->clCreateFromD3D11Texture2DKHR(
2022 CL_API_ENTRY cl_mem CL_API_CALL
2023 clCreateFromD3D11Texture3DKHR(
2026 ID3D11Texture3D * resource,
2028 cl_int * errcode_ret)
2030 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
2031 return context->dispatch->clCreateFromD3D11Texture3DKHR(
2039 CL_API_ENTRY cl_int CL_API_CALL
2040 clEnqueueAcquireD3D11ObjectsKHR(
2041 cl_command_queue command_queue,
2042 cl_uint num_objects,
2043 const cl_mem * mem_objects,
2044 cl_uint num_events_in_wait_list,
2045 const cl_event * event_wait_list,
2048 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
2049 return command_queue->dispatch->clEnqueueAcquireD3D11ObjectsKHR(
2053 num_events_in_wait_list,
2058 CL_API_ENTRY cl_int CL_API_CALL
2059 clEnqueueReleaseD3D11ObjectsKHR(
2060 cl_command_queue command_queue,
2061 cl_uint num_objects,
2062 const cl_mem * mem_objects,
2063 cl_uint num_events_in_wait_list,
2064 const cl_event * event_wait_list,
2067 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
2068 return command_queue->dispatch->clEnqueueReleaseD3D11ObjectsKHR(
2072 num_events_in_wait_list,
2079 * cl_khr_dx9_media_sharing
2083 CL_API_ENTRY cl_int CL_API_CALL
2084 clGetDeviceIDsFromDX9MediaAdapterKHR(
2085 cl_platform_id platform,
2086 cl_uint num_media_adapters,
2087 cl_dx9_media_adapter_type_khr * media_adapters_type,
2088 void * media_adapters,
2089 cl_dx9_media_adapter_set_khr media_adapter_set,
2090 cl_uint num_entries,
2091 cl_device_id * devices,
2092 cl_uint * num_devices)
2094 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(platform, CL_INVALID_PLATFORM);
2095 return platform->dispatch->clGetDeviceIDsFromDX9MediaAdapterKHR(
2098 media_adapters_type,
2106 CL_API_ENTRY cl_mem CL_API_CALL
2107 clCreateFromDX9MediaSurfaceKHR(
2110 cl_dx9_media_adapter_type_khr adapter_type,
2111 void * surface_info,
2113 cl_int * errcode_ret)
2115 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
2116 return context->dispatch->clCreateFromDX9MediaSurfaceKHR(
2125 CL_API_ENTRY cl_int CL_API_CALL
2126 clEnqueueAcquireDX9MediaSurfacesKHR(
2127 cl_command_queue command_queue,
2128 cl_uint num_objects,
2129 const cl_mem * mem_objects,
2130 cl_uint num_events_in_wait_list,
2131 const cl_event * event_wait_list,
2134 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
2135 return command_queue->dispatch->clEnqueueAcquireDX9MediaSurfacesKHR(
2139 num_events_in_wait_list,
2144 CL_API_ENTRY cl_int CL_API_CALL
2145 clEnqueueReleaseDX9MediaSurfacesKHR(
2146 cl_command_queue command_queue,
2147 cl_uint num_objects,
2148 const cl_mem * mem_objects,
2149 cl_uint num_events_in_wait_list,
2150 const cl_event * event_wait_list,
2153 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
2154 return command_queue->dispatch->clEnqueueReleaseDX9MediaSurfacesKHR(
2158 num_events_in_wait_list,
2165 CL_API_ENTRY cl_int CL_API_CALL
2168 cl_int command_exec_callback_type,
2169 void (CL_CALLBACK *pfn_notify)(cl_event, cl_int, void *),
2170 void *user_data) CL_API_SUFFIX__VERSION_1_1
2172 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(event, CL_INVALID_EVENT);
2173 return event->dispatch->clSetEventCallback(
2175 command_exec_callback_type,
2180 CL_API_ENTRY cl_mem CL_API_CALL
2184 cl_buffer_create_type buffer_create_type,
2185 const void * buffer_create_info,
2186 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_1
2188 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(buffer, CL_INVALID_MEM_OBJECT);
2189 return buffer->dispatch->clCreateSubBuffer(
2197 CL_API_ENTRY cl_int CL_API_CALL
2198 clSetMemObjectDestructorCallback(
2200 void (CL_CALLBACK * pfn_notify)( cl_mem, void*),
2201 void * user_data ) CL_API_SUFFIX__VERSION_1_1
2203 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(memobj, CL_INVALID_MEM_OBJECT);
2204 return memobj->dispatch->clSetMemObjectDestructorCallback(
2210 CL_API_ENTRY cl_event CL_API_CALL
2213 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_1
2215 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
2216 return context->dispatch->clCreateUserEvent(
2221 CL_API_ENTRY cl_int CL_API_CALL
2222 clSetUserEventStatus(
2224 cl_int execution_status) CL_API_SUFFIX__VERSION_1_1
2226 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(event, CL_INVALID_EVENT);
2227 return event->dispatch->clSetUserEventStatus(
2232 CL_API_ENTRY cl_mem CL_API_CALL
2233 clCreateFromEGLImageKHR(
2235 CLeglDisplayKHR display,
2236 CLeglImageKHR image,
2238 const cl_egl_image_properties_khr *properties,
2239 cl_int *errcode_ret)
2241 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
2242 return context->dispatch->clCreateFromEGLImageKHR(
2251 CL_API_ENTRY cl_int CL_API_CALL
2252 clEnqueueAcquireEGLObjectsKHR(
2253 cl_command_queue command_queue,
2254 cl_uint num_objects,
2255 const cl_mem *mem_objects,
2256 cl_uint num_events_in_wait_list,
2257 const cl_event *event_wait_list,
2260 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
2261 return command_queue->dispatch->clEnqueueAcquireEGLObjectsKHR(
2265 num_events_in_wait_list,
2270 CL_API_ENTRY cl_int CL_API_CALL
2271 clEnqueueReleaseEGLObjectsKHR(
2272 cl_command_queue command_queue,
2273 cl_uint num_objects,
2274 const cl_mem *mem_objects,
2275 cl_uint num_events_in_wait_list,
2276 const cl_event *event_wait_list,
2279 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
2280 return command_queue->dispatch->clEnqueueReleaseEGLObjectsKHR(
2284 num_events_in_wait_list,
2289 /* cl_khr_egl_event */
2290 CL_API_ENTRY cl_event CL_API_CALL
2291 clCreateEventFromEGLSyncKHR(
2294 CLeglDisplayKHR display,
2295 cl_int *errcode_ret)
2297 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
2298 return context->dispatch->clCreateEventFromEGLSyncKHR(
2305 CL_API_ENTRY cl_command_queue CL_API_CALL
2306 clCreateCommandQueueWithProperties(
2308 cl_device_id device,
2309 const cl_queue_properties * properties,
2310 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_2_0
2312 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
2313 return context->dispatch->clCreateCommandQueueWithProperties(
2320 CL_API_ENTRY cl_mem CL_API_CALL
2324 cl_uint pipe_packet_size,
2325 cl_uint pipe_max_packets,
2326 const cl_pipe_properties * properties,
2327 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_2_0
2329 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
2330 return context->dispatch->clCreatePipe(
2339 CL_API_ENTRY cl_int CL_API_CALL
2342 cl_pipe_info param_name,
2343 size_t param_value_size,
2345 size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_2_0
2347 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(pipe, CL_INVALID_MEM_OBJECT);
2348 return pipe->dispatch->clGetPipeInfo(
2353 param_value_size_ret);
2356 CL_API_ENTRY void * CL_API_CALL
2359 cl_svm_mem_flags flags,
2361 cl_uint alignment) CL_API_SUFFIX__VERSION_2_0
2366 return context->dispatch->clSVMAlloc(
2373 CL_API_ENTRY void CL_API_CALL
2376 void * svm_pointer) CL_API_SUFFIX__VERSION_2_0
2378 if (!context || !svm_pointer) {
2381 context->dispatch->clSVMFree(
2386 CL_API_ENTRY cl_int CL_API_CALL
2388 cl_command_queue command_queue,
2389 cl_uint num_svm_pointers,
2390 void* svm_pointers[],
2391 void (CL_CALLBACK* pfn_free_func)(
2392 cl_command_queue queue,
2393 cl_uint num_svm_pointers,
2394 void* svm_pointers[],
2397 cl_uint num_events_in_wait_list,
2398 const cl_event* event_wait_list,
2399 cl_event* event) CL_API_SUFFIX__VERSION_2_0
2401 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
2402 return command_queue->dispatch->clEnqueueSVMFree(
2408 num_events_in_wait_list,
2413 CL_API_ENTRY cl_int CL_API_CALL
2415 cl_command_queue command_queue,
2416 cl_bool blocking_copy,
2418 const void * src_ptr,
2420 cl_uint num_events_in_wait_list,
2421 const cl_event * event_wait_list,
2422 cl_event * event) CL_API_SUFFIX__VERSION_2_0
2424 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
2425 return command_queue->dispatch->clEnqueueSVMMemcpy(
2431 num_events_in_wait_list,
2436 CL_API_ENTRY cl_int CL_API_CALL
2437 clEnqueueSVMMemFill(
2438 cl_command_queue command_queue,
2440 const void * pattern,
2441 size_t pattern_size,
2443 cl_uint num_events_in_wait_list,
2444 const cl_event * event_wait_list,
2445 cl_event * event) CL_API_SUFFIX__VERSION_2_0
2447 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
2448 return command_queue->dispatch->clEnqueueSVMMemFill(
2454 num_events_in_wait_list,
2459 CL_API_ENTRY cl_int CL_API_CALL
2461 cl_command_queue command_queue,
2462 cl_bool blocking_map,
2466 cl_uint num_events_in_wait_list,
2467 const cl_event * event_wait_list,
2468 cl_event * event) CL_API_SUFFIX__VERSION_2_0
2470 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
2471 return command_queue->dispatch->clEnqueueSVMMap(
2477 num_events_in_wait_list,
2482 CL_API_ENTRY cl_int CL_API_CALL
2484 cl_command_queue command_queue,
2486 cl_uint num_events_in_wait_list,
2487 const cl_event * event_wait_list,
2488 cl_event * event) CL_API_SUFFIX__VERSION_2_0
2490 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
2491 return command_queue->dispatch->clEnqueueSVMUnmap(
2494 num_events_in_wait_list,
2499 CL_API_ENTRY cl_sampler CL_API_CALL
2500 clCreateSamplerWithProperties(
2502 const cl_sampler_properties * sampler_properties,
2503 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_2_0
2505 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
2506 return context->dispatch->clCreateSamplerWithProperties(
2512 CL_API_ENTRY cl_int CL_API_CALL
2513 clSetKernelArgSVMPointer(
2516 const void * arg_value) CL_API_SUFFIX__VERSION_2_0
2518 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
2519 return kernel->dispatch->clSetKernelArgSVMPointer(
2525 CL_API_ENTRY cl_int CL_API_CALL
2526 clSetKernelExecInfo(
2528 cl_kernel_exec_info param_name,
2529 size_t param_value_size,
2530 const void * param_value) CL_API_SUFFIX__VERSION_2_0
2532 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
2533 return kernel->dispatch->clSetKernelExecInfo(
2540 CL_API_ENTRY cl_int CL_API_CALL
2541 clGetKernelSubGroupInfoKHR(
2542 cl_kernel in_kernel,
2543 cl_device_id in_device,
2544 cl_kernel_sub_group_info param_name,
2545 size_t input_value_size,
2546 const void * input_value,
2547 size_t param_value_size,
2549 size_t * param_value_size_ret) CL_EXT_SUFFIX__VERSION_2_0
2551 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(in_kernel, CL_INVALID_KERNEL);
2552 return in_kernel->dispatch->clGetKernelSubGroupInfoKHR(
2560 param_value_size_ret);
2563 CL_API_ENTRY cl_int CL_API_CALL
2564 clSetDefaultDeviceCommandQueue(
2566 cl_device_id device,
2567 cl_command_queue command_queue) CL_API_SUFFIX__VERSION_2_1
2569 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(context, CL_INVALID_CONTEXT);
2570 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
2571 return context->dispatch->clSetDefaultDeviceCommandQueue(
2577 CL_API_ENTRY cl_program CL_API_CALL
2578 clCreateProgramWithIL(
2582 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_2_1
2584 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
2585 return context->dispatch->clCreateProgramWithIL(
2592 CL_API_ENTRY cl_int CL_API_CALL
2593 clGetKernelSubGroupInfo(
2595 cl_device_id device,
2596 cl_kernel_sub_group_info param_name,
2597 size_t input_value_size,
2598 const void * input_value,
2599 size_t param_value_size,
2601 size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_2_1
2603 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
2604 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
2605 return kernel->dispatch->clGetKernelSubGroupInfo(
2613 param_value_size_ret);
2616 CL_API_ENTRY cl_kernel CL_API_CALL
2618 cl_kernel source_kernel,
2619 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_2_1
2621 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(source_kernel, CL_INVALID_KERNEL);
2622 return source_kernel->dispatch->clCloneKernel(
2627 CL_API_ENTRY cl_int CL_API_CALL
2628 clEnqueueSVMMigrateMem(
2629 cl_command_queue command_queue,
2630 cl_uint num_svm_pointers,
2631 const void ** svm_pointers,
2632 const size_t * sizes,
2633 cl_mem_migration_flags flags,
2634 cl_uint num_events_in_wait_list,
2635 const cl_event * event_wait_list,
2636 cl_event * event) CL_API_SUFFIX__VERSION_2_1
2638 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
2639 return command_queue->dispatch->clEnqueueSVMMigrateMem(
2645 num_events_in_wait_list,
2650 CL_API_ENTRY cl_int CL_API_CALL
2651 clGetDeviceAndHostTimer(
2652 cl_device_id device,
2653 cl_ulong * device_timestamp,
2654 cl_ulong * host_timestamp) CL_API_SUFFIX__VERSION_2_1
2656 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
2657 return device->dispatch->clGetDeviceAndHostTimer(
2663 CL_API_ENTRY cl_int CL_API_CALL
2665 cl_device_id device,
2666 cl_ulong * host_timestamp) CL_API_SUFFIX__VERSION_2_1
2668 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
2669 return device->dispatch->clGetHostTimer(