2 * Copyright (c) 2016 The Khronos Group Inc.
4 * Permission is hereby granted, free of charge, to any person obtaining a copy
5 * of this software source and associated documentation files (the "Materials"),
6 * to deal in the Materials without restriction, including without limitation
7 * the rights to use, copy, modify, compile, merge, publish, distribute,
8 * sublicense, and/or sell copies of the Materials, and to permit persons to
9 * whom the Materials are furnished to do so, subject the following terms and
12 * All modifications to the Materials used to create a binary that is
13 * distributed to third parties shall be provided to Khronos with an
14 * unrestricted license to use for the purposes of implementing bug fixes and
15 * enhancements to the Materials;
17 * If the binary is used as part of an OpenCL(TM) implementation, whether binary
18 * is distributed together with or separately to that implementation, then
19 * recipient must become an OpenCL Adopter and follow the published OpenCL
20 * conformance process for that implementation, details at:
21 * http://www.khronos.org/conformance/;
23 * The above copyright notice, the OpenCL trademark license, and this permission
24 * notice shall be included in all copies or substantial portions of the
27 * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
28 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
29 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
30 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
31 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
32 * OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS IN
35 * OpenCL is a trademark of Apple Inc. used under license by Khronos.
38 #include "icd_dispatch.h"
44 CL_API_ENTRY cl_int CL_API_CALL
45 clGetPlatformIDs(cl_uint num_entries,
46 cl_platform_id * platforms,
47 cl_uint * num_platforms) CL_API_SUFFIX__VERSION_1_0
49 KHRicdVendor* vendor = NULL;
52 // initialize the platforms (in case they have not been already)
55 if (!num_entries && platforms)
57 return CL_INVALID_VALUE;
59 if (!platforms && !num_platforms)
61 return CL_INVALID_VALUE;
63 // set num_platforms to 0 and set all platform pointers to NULL
68 for (i = 0; i < num_entries && platforms; ++i)
72 // return error if we have no platforms
75 return CL_PLATFORM_NOT_FOUND_KHR;
77 // otherwise enumerate all platforms
78 for (vendor = khrIcdVendors; vendor; vendor = vendor->next)
80 if (num_entries && platforms)
82 *(platforms++) = vendor->platform;
93 CL_API_ENTRY cl_int CL_API_CALL
94 clGetPlatformInfo(cl_platform_id platform,
95 cl_platform_info param_name,
96 size_t param_value_size,
98 size_t * param_value_size_ret) 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->clGetPlatformInfo(
108 param_value_size_ret);
112 CL_API_ENTRY cl_int CL_API_CALL
113 clGetDeviceIDs(cl_platform_id platform,
114 cl_device_type device_type,
116 cl_device_id * devices,
117 cl_uint * num_devices) CL_API_SUFFIX__VERSION_1_0
119 // initialize the platforms (in case they have not been already)
121 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(platform, CL_INVALID_PLATFORM);
122 return platform->dispatch->clGetDeviceIDs(
130 CL_API_ENTRY cl_int CL_API_CALL
133 cl_device_info param_name,
134 size_t param_value_size,
136 size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
138 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
139 return device->dispatch->clGetDeviceInfo(
144 param_value_size_ret);
147 CL_API_ENTRY cl_int CL_API_CALL
148 clCreateSubDevices(cl_device_id in_device,
149 const cl_device_partition_property * properties,
151 cl_device_id * out_devices,
152 cl_uint * num_devices) CL_API_SUFFIX__VERSION_1_2
154 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(in_device, CL_INVALID_DEVICE);
155 return in_device->dispatch->clCreateSubDevices(
163 CL_API_ENTRY cl_int CL_API_CALL
164 clRetainDevice(cl_device_id device) CL_API_SUFFIX__VERSION_1_2
166 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
167 return device->dispatch->clRetainDevice(device);
170 CL_API_ENTRY cl_int CL_API_CALL
171 clReleaseDevice(cl_device_id device) CL_API_SUFFIX__VERSION_1_2
173 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
174 return device->dispatch->clReleaseDevice(device);
178 CL_API_ENTRY cl_context CL_API_CALL
179 clCreateContext(const cl_context_properties * properties,
181 const cl_device_id * devices,
182 void (CL_CALLBACK *pfn_notify)(const char *, const void *, size_t, void *),
184 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
186 // initialize the platforms (in case they have not been already)
188 if (!num_devices || !devices)
192 *errcode_ret = CL_INVALID_VALUE;
196 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(devices[0], CL_INVALID_DEVICE);
197 return devices[0]->dispatch->clCreateContext(
206 CL_API_ENTRY cl_context CL_API_CALL
207 clCreateContextFromType(const cl_context_properties * properties,
208 cl_device_type device_type,
209 void (CL_CALLBACK *pfn_notify)(const char *, const void *, size_t, void *),
211 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
213 cl_platform_id platform = NULL;
215 // initialize the platforms (in case they have not been already)
218 // determine the platform to use from the properties specified
219 khrIcdContextPropertiesGetPlatform(properties, &platform);
221 // validate the platform handle and dispatch
222 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(platform, CL_INVALID_PLATFORM);
223 return platform->dispatch->clCreateContextFromType(
231 CL_API_ENTRY cl_int CL_API_CALL
232 clRetainContext(cl_context context) CL_API_SUFFIX__VERSION_1_0
234 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(context, CL_INVALID_CONTEXT);
235 return context->dispatch->clRetainContext(context);
238 CL_API_ENTRY cl_int CL_API_CALL
239 clReleaseContext(cl_context context) CL_API_SUFFIX__VERSION_1_0
241 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(context, CL_INVALID_CONTEXT);
242 return context->dispatch->clReleaseContext(context);
245 CL_API_ENTRY cl_int CL_API_CALL
246 clGetContextInfo(cl_context context,
247 cl_context_info param_name,
248 size_t param_value_size,
250 size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
252 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(context, CL_INVALID_CONTEXT);
253 return context->dispatch->clGetContextInfo(
258 param_value_size_ret);
261 // Command Queue APIs
262 CL_API_ENTRY cl_command_queue CL_API_CALL
263 clCreateCommandQueue(cl_context context,
265 cl_command_queue_properties properties,
266 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
268 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
269 return context->dispatch->clCreateCommandQueue(
276 CL_API_ENTRY cl_int CL_API_CALL
277 clRetainCommandQueue(cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0
279 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
280 return command_queue->dispatch->clRetainCommandQueue(command_queue);
283 CL_API_ENTRY cl_int CL_API_CALL
284 clReleaseCommandQueue(cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0
286 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
287 return command_queue->dispatch->clReleaseCommandQueue(command_queue);
290 CL_API_ENTRY cl_int CL_API_CALL
291 clGetCommandQueueInfo(cl_command_queue command_queue,
292 cl_command_queue_info param_name,
293 size_t param_value_size,
295 size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
297 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
298 return command_queue->dispatch->clGetCommandQueueInfo(
303 param_value_size_ret);
306 // Memory Object APIs
307 CL_API_ENTRY cl_mem CL_API_CALL
308 clCreateBuffer(cl_context context,
312 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
314 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
315 return context->dispatch->clCreateBuffer(
323 CL_API_ENTRY cl_mem CL_API_CALL
324 clCreateImage(cl_context context,
326 const cl_image_format * image_format,
327 const cl_image_desc * image_desc,
329 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2
331 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
332 return context->dispatch->clCreateImage(
341 CL_API_ENTRY cl_int CL_API_CALL
342 clRetainMemObject(cl_mem memobj) CL_API_SUFFIX__VERSION_1_0
344 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(memobj, CL_INVALID_MEM_OBJECT);
345 return memobj->dispatch->clRetainMemObject(memobj);
349 CL_API_ENTRY cl_int CL_API_CALL
350 clReleaseMemObject(cl_mem memobj) CL_API_SUFFIX__VERSION_1_0
352 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(memobj, CL_INVALID_MEM_OBJECT);
353 return memobj->dispatch->clReleaseMemObject(memobj);
356 CL_API_ENTRY cl_int CL_API_CALL
357 clGetSupportedImageFormats(cl_context context,
359 cl_mem_object_type image_type,
361 cl_image_format * image_formats,
362 cl_uint * num_image_formats) CL_API_SUFFIX__VERSION_1_0
364 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(context, CL_INVALID_CONTEXT);
365 return context->dispatch->clGetSupportedImageFormats(
374 CL_API_ENTRY cl_int CL_API_CALL
375 clGetMemObjectInfo(cl_mem memobj,
376 cl_mem_info param_name,
377 size_t param_value_size,
379 size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
381 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(memobj, CL_INVALID_MEM_OBJECT);
382 return memobj->dispatch->clGetMemObjectInfo(
387 param_value_size_ret);
390 CL_API_ENTRY cl_int CL_API_CALL
391 clGetImageInfo(cl_mem image,
392 cl_image_info param_name,
393 size_t param_value_size,
395 size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
397 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(image, CL_INVALID_MEM_OBJECT);
398 return image->dispatch->clGetImageInfo(
403 param_value_size_ret);
407 CL_API_ENTRY cl_sampler CL_API_CALL
408 clCreateSampler(cl_context context,
409 cl_bool normalized_coords,
410 cl_addressing_mode addressing_mode,
411 cl_filter_mode filter_mode,
412 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
414 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
415 return context->dispatch->clCreateSampler(
423 CL_API_ENTRY cl_int CL_API_CALL
424 clRetainSampler(cl_sampler sampler) CL_API_SUFFIX__VERSION_1_0
426 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(sampler, CL_INVALID_SAMPLER);
427 return sampler->dispatch->clRetainSampler(sampler);
430 CL_API_ENTRY cl_int CL_API_CALL
431 clReleaseSampler(cl_sampler sampler) CL_API_SUFFIX__VERSION_1_0
433 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(sampler, CL_INVALID_SAMPLER);
434 return sampler->dispatch->clReleaseSampler(sampler);
437 CL_API_ENTRY cl_int CL_API_CALL
438 clGetSamplerInfo(cl_sampler sampler,
439 cl_sampler_info param_name,
440 size_t param_value_size,
442 size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
444 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(sampler, CL_INVALID_SAMPLER);
445 return sampler->dispatch->clGetSamplerInfo(
450 param_value_size_ret);
453 // Program Object APIs
454 CL_API_ENTRY cl_program CL_API_CALL
455 clCreateProgramWithSource(cl_context context,
457 const char ** strings,
458 const size_t * lengths,
459 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
461 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
462 return context->dispatch->clCreateProgramWithSource(
470 CL_API_ENTRY cl_program CL_API_CALL
471 clCreateProgramWithBinary(cl_context context,
473 const cl_device_id * device_list,
474 const size_t * lengths,
475 const unsigned char ** binaries,
476 cl_int * binary_status,
477 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
479 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
480 return context->dispatch->clCreateProgramWithBinary(
490 CL_API_ENTRY cl_program CL_API_CALL
491 clCreateProgramWithBuiltInKernels(cl_context context,
493 const cl_device_id * device_list,
494 const char * kernel_names,
495 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2
497 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
498 return context->dispatch->clCreateProgramWithBuiltInKernels(
506 CL_API_ENTRY cl_int CL_API_CALL
507 clRetainProgram(cl_program program) CL_API_SUFFIX__VERSION_1_0
509 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
510 return program->dispatch->clRetainProgram(program);
513 CL_API_ENTRY cl_int CL_API_CALL
514 clReleaseProgram(cl_program program) CL_API_SUFFIX__VERSION_1_0
516 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
517 return program->dispatch->clReleaseProgram(program);
520 CL_API_ENTRY cl_int CL_API_CALL
521 clBuildProgram(cl_program program,
523 const cl_device_id * device_list,
524 const char * options,
525 void (CL_CALLBACK *pfn_notify)(cl_program program, void * user_data),
526 void * user_data) CL_API_SUFFIX__VERSION_1_0
528 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
529 return program->dispatch->clBuildProgram(
538 CL_API_ENTRY cl_int CL_API_CALL
539 clCompileProgram(cl_program program,
541 const cl_device_id * device_list,
542 const char * options,
543 cl_uint num_input_headers,
544 const cl_program * input_headers,
545 const char ** header_include_names,
546 void (CL_CALLBACK * pfn_notify)(cl_program program, void * user_data),
547 void * user_data) CL_API_SUFFIX__VERSION_1_2
549 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
550 return program->dispatch->clCompileProgram(
557 header_include_names,
562 CL_API_ENTRY cl_program CL_API_CALL
563 clLinkProgram(cl_context context,
565 const cl_device_id * device_list,
566 const char * options,
567 cl_uint num_input_programs,
568 const cl_program * input_programs,
569 void (CL_CALLBACK * pfn_notify)(cl_program program, void * user_data),
571 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2
573 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
574 return context->dispatch->clLinkProgram(
586 CL_API_ENTRY cl_int CL_API_CALL
587 clSetProgramSpecializationConstant(cl_program program,
590 const void* spec_value) CL_API_SUFFIX__VERSION_2_2
592 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
593 return program->dispatch->clSetProgramSpecializationConstant(
600 CL_API_ENTRY cl_int CL_API_CALL
601 clSetProgramReleaseCallback(cl_program program,
602 void (CL_CALLBACK * pfn_notify)(cl_program program, void * user_data),
603 void * user_data) CL_API_SUFFIX__VERSION_2_2
605 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
606 return program->dispatch->clSetProgramReleaseCallback(
612 CL_API_ENTRY cl_int CL_API_CALL
613 clUnloadPlatformCompiler(cl_platform_id platform) CL_API_SUFFIX__VERSION_1_2
615 // initialize the platforms (in case they have not been already)
617 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(platform, CL_INVALID_PLATFORM);
618 return platform->dispatch->clUnloadPlatformCompiler(platform);
621 CL_API_ENTRY cl_int CL_API_CALL
622 clGetProgramInfo(cl_program program,
623 cl_program_info param_name,
624 size_t param_value_size,
626 size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
628 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
629 return program->dispatch->clGetProgramInfo(
634 param_value_size_ret);
637 CL_API_ENTRY cl_int CL_API_CALL
638 clGetProgramBuildInfo(cl_program program,
640 cl_program_build_info param_name,
641 size_t param_value_size,
643 size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
645 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
646 return program->dispatch->clGetProgramBuildInfo(
652 param_value_size_ret);
655 // Kernel Object APIs
656 CL_API_ENTRY cl_kernel CL_API_CALL
657 clCreateKernel(cl_program program,
658 const char * kernel_name,
659 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
661 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(program, CL_INVALID_PROGRAM);
662 return program->dispatch->clCreateKernel(
668 CL_API_ENTRY cl_int CL_API_CALL
669 clCreateKernelsInProgram(cl_program program,
672 cl_uint * num_kernels_ret) CL_API_SUFFIX__VERSION_1_0
674 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
675 return program->dispatch->clCreateKernelsInProgram(
682 CL_API_ENTRY cl_int CL_API_CALL
683 clRetainKernel(cl_kernel kernel) CL_API_SUFFIX__VERSION_1_0
685 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
686 return kernel->dispatch->clRetainKernel(kernel);
689 CL_API_ENTRY cl_int CL_API_CALL
690 clReleaseKernel(cl_kernel kernel) CL_API_SUFFIX__VERSION_1_0
692 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
693 return kernel->dispatch->clReleaseKernel(kernel);
696 CL_API_ENTRY cl_int CL_API_CALL
697 clSetKernelArg(cl_kernel kernel,
700 const void * arg_value) CL_API_SUFFIX__VERSION_1_0
702 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
703 return kernel->dispatch->clSetKernelArg(
710 CL_API_ENTRY cl_int CL_API_CALL
711 clGetKernelInfo(cl_kernel kernel,
712 cl_kernel_info param_name,
713 size_t param_value_size,
715 size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
717 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
718 return kernel->dispatch->clGetKernelInfo(
723 param_value_size_ret);
726 CL_API_ENTRY cl_int CL_API_CALL
727 clGetKernelArgInfo(cl_kernel kernel,
729 cl_kernel_arg_info param_name,
730 size_t param_value_size,
732 size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_2
734 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
735 return kernel->dispatch->clGetKernelArgInfo(
741 param_value_size_ret);
744 CL_API_ENTRY cl_int CL_API_CALL
745 clGetKernelWorkGroupInfo(cl_kernel kernel,
747 cl_kernel_work_group_info param_name,
748 size_t param_value_size,
750 size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
752 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
753 return kernel->dispatch->clGetKernelWorkGroupInfo(
759 param_value_size_ret);
763 CL_API_ENTRY cl_int CL_API_CALL
764 clWaitForEvents(cl_uint num_events,
765 const cl_event * event_list) CL_API_SUFFIX__VERSION_1_0
767 if (!num_events || !event_list)
769 return CL_INVALID_VALUE;
771 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(event_list[0], CL_INVALID_EVENT);
772 return event_list[0]->dispatch->clWaitForEvents(
777 CL_API_ENTRY cl_int CL_API_CALL
778 clGetEventInfo(cl_event event,
779 cl_event_info param_name,
780 size_t param_value_size,
782 size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
784 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(event, CL_INVALID_EVENT);
785 return event->dispatch->clGetEventInfo(
790 param_value_size_ret);
793 CL_API_ENTRY cl_int CL_API_CALL
794 clRetainEvent(cl_event event) CL_API_SUFFIX__VERSION_1_0
796 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(event, CL_INVALID_EVENT);
797 return event->dispatch->clRetainEvent(event);
800 CL_API_ENTRY cl_int CL_API_CALL
801 clReleaseEvent(cl_event event) CL_API_SUFFIX__VERSION_1_0
803 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(event, CL_INVALID_EVENT);
804 return event->dispatch->clReleaseEvent(event);
808 CL_API_ENTRY cl_int CL_API_CALL
809 clGetEventProfilingInfo(cl_event event,
810 cl_profiling_info param_name,
811 size_t param_value_size,
813 size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
815 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(event, CL_INVALID_EVENT);
816 return event->dispatch->clGetEventProfilingInfo(
821 param_value_size_ret);
824 // Flush and Finish APIs
825 CL_API_ENTRY cl_int CL_API_CALL
826 clFlush(cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0
828 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
829 return command_queue->dispatch->clFlush(command_queue);
832 CL_API_ENTRY cl_int CL_API_CALL
833 clFinish(cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0
835 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
836 return command_queue->dispatch->clFinish(command_queue);
839 // Enqueued Commands APIs
840 CL_API_ENTRY cl_int CL_API_CALL
841 clEnqueueReadBuffer(cl_command_queue command_queue,
843 cl_bool blocking_read,
847 cl_uint num_events_in_wait_list,
848 const cl_event * event_wait_list,
849 cl_event * event) CL_API_SUFFIX__VERSION_1_0
851 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
852 return command_queue->dispatch->clEnqueueReadBuffer(
859 num_events_in_wait_list,
864 CL_API_ENTRY cl_int CL_API_CALL
865 clEnqueueReadBufferRect(
866 cl_command_queue command_queue,
868 cl_bool blocking_read,
869 const size_t * buffer_origin,
870 const size_t * host_origin,
871 const size_t * region,
872 size_t buffer_row_pitch,
873 size_t buffer_slice_pitch,
874 size_t host_row_pitch,
875 size_t host_slice_pitch,
877 cl_uint num_events_in_wait_list,
878 const cl_event * event_wait_list,
879 cl_event * event) CL_API_SUFFIX__VERSION_1_1
881 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
882 return command_queue->dispatch->clEnqueueReadBufferRect(
894 num_events_in_wait_list,
899 CL_API_ENTRY cl_int CL_API_CALL
900 clEnqueueWriteBuffer(cl_command_queue command_queue,
902 cl_bool blocking_write,
906 cl_uint num_events_in_wait_list,
907 const cl_event * event_wait_list,
908 cl_event * event) CL_API_SUFFIX__VERSION_1_0
910 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
911 return command_queue->dispatch->clEnqueueWriteBuffer(
918 num_events_in_wait_list,
923 CL_API_ENTRY cl_int CL_API_CALL
924 clEnqueueWriteBufferRect(
925 cl_command_queue command_queue,
927 cl_bool blocking_read,
928 const size_t * buffer_origin,
929 const size_t * host_origin,
930 const size_t * region,
931 size_t buffer_row_pitch,
932 size_t buffer_slice_pitch,
933 size_t host_row_pitch,
934 size_t host_slice_pitch,
936 cl_uint num_events_in_wait_list,
937 const cl_event * event_wait_list,
938 cl_event * event) CL_API_SUFFIX__VERSION_1_1
940 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
941 return command_queue->dispatch->clEnqueueWriteBufferRect(
953 num_events_in_wait_list,
958 CL_API_ENTRY cl_int CL_API_CALL
959 clEnqueueFillBuffer(cl_command_queue command_queue,
961 const void * pattern,
965 cl_uint num_events_in_wait_list,
966 const cl_event * event_wait_list,
967 cl_event * event) CL_API_SUFFIX__VERSION_1_2
969 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
970 return command_queue->dispatch->clEnqueueFillBuffer(
977 num_events_in_wait_list,
982 CL_API_ENTRY cl_int CL_API_CALL
983 clEnqueueCopyBuffer(cl_command_queue command_queue,
989 cl_uint num_events_in_wait_list,
990 const cl_event * event_wait_list,
991 cl_event * event) CL_API_SUFFIX__VERSION_1_0
993 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
994 return command_queue->dispatch->clEnqueueCopyBuffer(
1001 num_events_in_wait_list,
1006 CL_API_ENTRY cl_int CL_API_CALL
1007 clEnqueueCopyBufferRect(
1008 cl_command_queue command_queue,
1011 const size_t * src_origin,
1012 const size_t * dst_origin,
1013 const size_t * region,
1014 size_t src_row_pitch,
1015 size_t src_slice_pitch,
1016 size_t dst_row_pitch,
1017 size_t dst_slice_pitch,
1018 cl_uint num_events_in_wait_list,
1019 const cl_event * event_wait_list,
1020 cl_event * event) CL_API_SUFFIX__VERSION_1_1
1022 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1023 return command_queue->dispatch->clEnqueueCopyBufferRect(
1034 num_events_in_wait_list,
1039 CL_API_ENTRY cl_int CL_API_CALL
1040 clEnqueueReadImage(cl_command_queue command_queue,
1042 cl_bool blocking_read,
1043 const size_t * origin,
1044 const size_t * region,
1048 cl_uint num_events_in_wait_list,
1049 const cl_event * event_wait_list,
1050 cl_event * event) CL_API_SUFFIX__VERSION_1_0
1052 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1053 return command_queue->dispatch->clEnqueueReadImage(
1062 num_events_in_wait_list,
1067 CL_API_ENTRY cl_int CL_API_CALL
1068 clEnqueueWriteImage(cl_command_queue command_queue,
1070 cl_bool blocking_write,
1071 const size_t * origin,
1072 const size_t * region,
1073 size_t input_row_pitch,
1074 size_t input_slice_pitch,
1076 cl_uint num_events_in_wait_list,
1077 const cl_event * event_wait_list,
1078 cl_event * event) CL_API_SUFFIX__VERSION_1_0
1080 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1081 return command_queue->dispatch->clEnqueueWriteImage(
1090 num_events_in_wait_list,
1095 CL_API_ENTRY cl_int CL_API_CALL
1096 clEnqueueFillImage(cl_command_queue command_queue,
1098 const void * fill_color,
1099 const size_t origin[3],
1100 const size_t region[3],
1101 cl_uint num_events_in_wait_list,
1102 const cl_event * event_wait_list,
1103 cl_event * event) CL_API_SUFFIX__VERSION_1_2
1105 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1106 return command_queue->dispatch->clEnqueueFillImage(
1112 num_events_in_wait_list,
1117 CL_API_ENTRY cl_int CL_API_CALL
1118 clEnqueueCopyImage(cl_command_queue command_queue,
1121 const size_t * src_origin,
1122 const size_t * dst_origin,
1123 const size_t * region,
1124 cl_uint num_events_in_wait_list,
1125 const cl_event * event_wait_list,
1126 cl_event * event) CL_API_SUFFIX__VERSION_1_0
1128 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1129 return command_queue->dispatch->clEnqueueCopyImage(
1136 num_events_in_wait_list,
1141 CL_API_ENTRY cl_int CL_API_CALL
1142 clEnqueueCopyImageToBuffer(cl_command_queue command_queue,
1145 const size_t * src_origin,
1146 const size_t * region,
1148 cl_uint num_events_in_wait_list,
1149 const cl_event * event_wait_list,
1150 cl_event * event) CL_API_SUFFIX__VERSION_1_0
1152 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1153 return command_queue->dispatch->clEnqueueCopyImageToBuffer(
1160 num_events_in_wait_list,
1165 CL_API_ENTRY cl_int CL_API_CALL
1166 clEnqueueCopyBufferToImage(cl_command_queue command_queue,
1170 const size_t * dst_origin,
1171 const size_t * region,
1172 cl_uint num_events_in_wait_list,
1173 const cl_event * event_wait_list,
1174 cl_event * event) CL_API_SUFFIX__VERSION_1_0
1176 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1177 return command_queue->dispatch->clEnqueueCopyBufferToImage(
1184 num_events_in_wait_list,
1189 CL_API_ENTRY void * CL_API_CALL
1190 clEnqueueMapBuffer(cl_command_queue command_queue,
1192 cl_bool blocking_map,
1193 cl_map_flags map_flags,
1196 cl_uint num_events_in_wait_list,
1197 const cl_event * event_wait_list,
1199 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
1201 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(command_queue, CL_INVALID_COMMAND_QUEUE);
1202 return command_queue->dispatch->clEnqueueMapBuffer(
1209 num_events_in_wait_list,
1215 CL_API_ENTRY void * CL_API_CALL
1216 clEnqueueMapImage(cl_command_queue command_queue,
1218 cl_bool blocking_map,
1219 cl_map_flags map_flags,
1220 const size_t * origin,
1221 const size_t * region,
1222 size_t * image_row_pitch,
1223 size_t * image_slice_pitch,
1224 cl_uint num_events_in_wait_list,
1225 const cl_event * event_wait_list,
1227 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
1229 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(command_queue, CL_INVALID_COMMAND_QUEUE);
1230 return command_queue->dispatch->clEnqueueMapImage(
1239 num_events_in_wait_list,
1245 CL_API_ENTRY cl_int CL_API_CALL
1246 clEnqueueUnmapMemObject(cl_command_queue command_queue,
1249 cl_uint num_events_in_wait_list,
1250 const cl_event * event_wait_list,
1251 cl_event * event) CL_API_SUFFIX__VERSION_1_0
1253 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1254 return command_queue->dispatch->clEnqueueUnmapMemObject(
1258 num_events_in_wait_list,
1263 CL_API_ENTRY cl_int CL_API_CALL
1264 clEnqueueMigrateMemObjects(cl_command_queue command_queue,
1265 cl_uint num_mem_objects,
1266 const cl_mem * mem_objects,
1267 cl_mem_migration_flags flags,
1268 cl_uint num_events_in_wait_list,
1269 const cl_event * event_wait_list,
1270 cl_event * event) CL_API_SUFFIX__VERSION_1_2
1272 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1273 return command_queue->dispatch->clEnqueueMigrateMemObjects(
1278 num_events_in_wait_list,
1283 CL_API_ENTRY cl_int CL_API_CALL
1284 clEnqueueNDRangeKernel(cl_command_queue command_queue,
1287 const size_t * global_work_offset,
1288 const size_t * global_work_size,
1289 const size_t * local_work_size,
1290 cl_uint num_events_in_wait_list,
1291 const cl_event * event_wait_list,
1292 cl_event * event) CL_API_SUFFIX__VERSION_1_0
1294 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1295 return command_queue->dispatch->clEnqueueNDRangeKernel(
1302 num_events_in_wait_list,
1307 CL_API_ENTRY cl_int CL_API_CALL
1308 clEnqueueTask(cl_command_queue command_queue,
1310 cl_uint num_events_in_wait_list,
1311 const cl_event * event_wait_list,
1312 cl_event * event) CL_API_SUFFIX__VERSION_1_0
1314 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1315 return command_queue->dispatch->clEnqueueTask(
1318 num_events_in_wait_list,
1323 CL_API_ENTRY cl_int CL_API_CALL
1324 clEnqueueNativeKernel(cl_command_queue command_queue,
1325 void (CL_CALLBACK * user_func)(void *),
1328 cl_uint num_mem_objects,
1329 const cl_mem * mem_list,
1330 const void ** args_mem_loc,
1331 cl_uint num_events_in_wait_list,
1332 const cl_event * event_wait_list,
1333 cl_event * event) CL_API_SUFFIX__VERSION_1_0
1335 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1336 return command_queue->dispatch->clEnqueueNativeKernel(
1344 num_events_in_wait_list,
1349 CL_API_ENTRY cl_int CL_API_CALL
1350 clEnqueueMarkerWithWaitList(cl_command_queue command_queue,
1351 cl_uint num_events_in_wait_list,
1352 const cl_event * event_wait_list,
1353 cl_event * event) CL_API_SUFFIX__VERSION_1_2
1355 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1356 return command_queue->dispatch->clEnqueueMarkerWithWaitList(
1358 num_events_in_wait_list,
1363 CL_API_ENTRY cl_int CL_API_CALL
1364 clEnqueueBarrierWithWaitList(cl_command_queue command_queue,
1365 cl_uint num_events_in_wait_list,
1366 const cl_event * event_wait_list,
1367 cl_event * event) CL_API_SUFFIX__VERSION_1_2
1369 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1370 return command_queue->dispatch->clEnqueueBarrierWithWaitList(
1372 num_events_in_wait_list,
1377 CL_API_ENTRY void * CL_API_CALL
1378 clGetExtensionFunctionAddressForPlatform(cl_platform_id platform,
1379 const char * function_name) CL_API_SUFFIX__VERSION_1_2
1381 // make sure the ICD is initialized
1384 // return any ICD-aware extensions
1385 #define CL_COMMON_EXTENSION_ENTRYPOINT_ADD(name) if (!strcmp(function_name, #name) ) return (void *)(size_t)&name
1387 // Are these core or ext? This is unclear, but they appear to be
1388 // independent from cl_khr_gl_sharing.
1389 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLBuffer);
1390 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLTexture);
1391 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLTexture2D);
1392 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLTexture3D);
1393 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLRenderbuffer);
1394 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetGLObjectInfo);
1395 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetGLTextureInfo);
1396 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireGLObjects);
1397 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseGLObjects);
1399 // cl_khr_gl_sharing
1400 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetGLContextInfoKHR);
1403 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateEventFromGLsyncKHR);
1406 // cl_khr_d3d10_sharing
1407 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetDeviceIDsFromD3D10KHR);
1408 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D10BufferKHR);
1409 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D10Texture2DKHR);
1410 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D10Texture3DKHR);
1411 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireD3D10ObjectsKHR);
1412 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseD3D10ObjectsKHR);
1413 // cl_khr_d3d11_sharing
1414 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetDeviceIDsFromD3D11KHR);
1415 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D11BufferKHR);
1416 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D11Texture2DKHR);
1417 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D11Texture3DKHR);
1418 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireD3D11ObjectsKHR);
1419 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseD3D11ObjectsKHR);
1420 // cl_khr_dx9_media_sharing
1421 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetDeviceIDsFromDX9MediaAdapterKHR);
1422 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromDX9MediaSurfaceKHR);
1423 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireDX9MediaSurfacesKHR);
1424 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseDX9MediaSurfacesKHR);
1427 // cl_ext_device_fission
1428 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateSubDevicesEXT);
1429 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clRetainDeviceEXT);
1430 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clReleaseDeviceEXT);
1432 /* cl_khr_egl_image */
1433 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromEGLImageKHR);
1434 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireEGLObjectsKHR);
1435 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseEGLObjectsKHR);
1437 /* cl_khr_egl_event */
1438 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateEventFromEGLSyncKHR);
1440 /* cl_khr_sub_groups */
1441 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetKernelSubGroupInfoKHR);
1443 // fall back to vendor extension detection
1445 // FIXME Now that we have a platform id here, we need to validate that it isn't NULL, so shouldn't we have an errcode_ret
1446 // KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(platform, CL_INVALID_PLATFORM);
1447 return platform->dispatch->clGetExtensionFunctionAddressForPlatform(
1453 CL_API_ENTRY cl_int CL_API_CALL
1454 clSetCommandQueueProperty(cl_command_queue command_queue,
1455 cl_command_queue_properties properties,
1457 cl_command_queue_properties * old_properties) CL_EXT_SUFFIX__VERSION_1_0_DEPRECATED
1459 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1460 return command_queue->dispatch->clSetCommandQueueProperty(
1467 CL_API_ENTRY cl_int CL_API_CALL
1468 clCreateSubDevicesEXT(
1469 cl_device_id in_device,
1470 const cl_device_partition_property_ext * partition_properties,
1471 cl_uint num_entries,
1472 cl_device_id * out_devices,
1473 cl_uint * num_devices) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
1475 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(in_device, CL_INVALID_DEVICE);
1476 return in_device->dispatch->clCreateSubDevicesEXT(
1478 partition_properties,
1484 CL_API_ENTRY cl_int CL_API_CALL
1485 clRetainDeviceEXT(cl_device_id device) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
1487 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
1488 return device->dispatch->clRetainDeviceEXT(device);
1491 CL_API_ENTRY cl_int CL_API_CALL
1492 clReleaseDeviceEXT(cl_device_id device) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
1494 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
1495 return device->dispatch->clReleaseDeviceEXT(device);
1498 CL_API_ENTRY cl_mem CL_API_CALL
1499 clCreateImage2D(cl_context context,
1501 const cl_image_format * image_format,
1503 size_t image_height,
1504 size_t image_row_pitch,
1506 cl_int * errcode_ret) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
1508 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
1509 return context->dispatch->clCreateImage2D(
1520 CL_API_ENTRY cl_mem CL_API_CALL
1521 clCreateImage3D(cl_context context,
1523 const cl_image_format * image_format,
1525 size_t image_height,
1527 size_t image_row_pitch,
1528 size_t image_slice_pitch,
1530 cl_int * errcode_ret) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
1532 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
1533 return context->dispatch->clCreateImage3D(
1546 CL_API_ENTRY cl_int CL_API_CALL
1547 clUnloadCompiler(void) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
1552 CL_API_ENTRY cl_int CL_API_CALL
1553 clEnqueueMarker(cl_command_queue command_queue,
1554 cl_event * event) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
1556 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1557 return command_queue->dispatch->clEnqueueMarker(
1562 CL_API_ENTRY cl_int CL_API_CALL
1563 clEnqueueWaitForEvents(cl_command_queue command_queue,
1565 const cl_event * event_list) 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->clEnqueueWaitForEvents(
1574 CL_API_ENTRY cl_int CL_API_CALL
1575 clEnqueueBarrier(cl_command_queue command_queue) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
1577 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1578 return command_queue->dispatch->clEnqueueBarrier(command_queue);
1581 CL_API_ENTRY void * CL_API_CALL
1582 clGetExtensionFunctionAddress(const char *function_name) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
1584 size_t function_name_length = strlen(function_name);
1585 KHRicdVendor* vendor = NULL;
1587 // make sure the ICD is initialized
1590 // return any ICD-aware extensions
1591 #define CL_COMMON_EXTENSION_ENTRYPOINT_ADD(name) if (!strcmp(function_name, #name) ) return (void *)(size_t)&name
1593 // Are these core or ext? This is unclear, but they appear to be
1594 // independent from cl_khr_gl_sharing.
1595 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLBuffer);
1596 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLTexture);
1597 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLTexture2D);
1598 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLTexture3D);
1599 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLRenderbuffer);
1600 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetGLObjectInfo);
1601 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetGLTextureInfo);
1602 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireGLObjects);
1603 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseGLObjects);
1605 // cl_khr_gl_sharing
1606 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetGLContextInfoKHR);
1609 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateEventFromGLsyncKHR);
1612 // cl_khr_d3d10_sharing
1613 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetDeviceIDsFromD3D10KHR);
1614 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D10BufferKHR);
1615 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D10Texture2DKHR);
1616 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D10Texture3DKHR);
1617 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireD3D10ObjectsKHR);
1618 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseD3D10ObjectsKHR);
1619 // cl_khr_d3d11_sharing
1620 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetDeviceIDsFromD3D11KHR);
1621 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D11BufferKHR);
1622 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D11Texture2DKHR);
1623 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D11Texture3DKHR);
1624 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireD3D11ObjectsKHR);
1625 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseD3D11ObjectsKHR);
1626 // cl_khr_dx9_media_sharing
1627 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetDeviceIDsFromDX9MediaAdapterKHR);
1628 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromDX9MediaSurfaceKHR);
1629 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireDX9MediaSurfacesKHR);
1630 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseDX9MediaSurfacesKHR);
1633 // cl_ext_device_fission
1634 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateSubDevicesEXT);
1635 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clRetainDeviceEXT);
1636 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clReleaseDeviceEXT);
1638 /* cl_khr_egl_image */
1639 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromEGLImageKHR);
1640 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireEGLObjectsKHR);
1641 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseEGLObjectsKHR);
1643 /* cl_khr_egl_event */
1644 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateEventFromEGLSyncKHR);
1646 /* cl_khr_sub_groups */
1647 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetKernelSubGroupInfoKHR);
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 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 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(