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)
103 // determine the platform to use from the device_type specified
106 khrIcdDeviceTypeGetPlatform(device_type, &platform);
108 if (!platform && khrIcdVendors != NULL)
110 platform = khrIcdVendors[0].platform;
113 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(platform, CL_INVALID_PLATFORM);
114 return platform->dispatch->clGetDeviceIDs(
122 CL_API_ENTRY cl_int CL_API_CALL
125 cl_device_info param_name,
126 size_t param_value_size,
128 size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
130 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
131 return device->dispatch->clGetDeviceInfo(
136 param_value_size_ret);
139 CL_API_ENTRY cl_int CL_API_CALL
140 clCreateSubDevices(cl_device_id in_device,
141 const cl_device_partition_property * properties,
143 cl_device_id * out_devices,
144 cl_uint * num_devices) CL_API_SUFFIX__VERSION_1_2
146 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(in_device, CL_INVALID_DEVICE);
147 return in_device->dispatch->clCreateSubDevices(
155 CL_API_ENTRY cl_int CL_API_CALL
156 clRetainDevice(cl_device_id device) CL_API_SUFFIX__VERSION_1_2
158 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
159 return device->dispatch->clRetainDevice(device);
162 CL_API_ENTRY cl_int CL_API_CALL
163 clReleaseDevice(cl_device_id device) CL_API_SUFFIX__VERSION_1_2
165 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
166 return device->dispatch->clReleaseDevice(device);
170 CL_API_ENTRY cl_context CL_API_CALL
171 clCreateContext(const cl_context_properties * properties,
173 const cl_device_id * devices,
174 void (CL_CALLBACK *pfn_notify)(const char *, const void *, size_t, void *),
176 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
178 // initialize the platforms (in case they have not been already)
180 if (!num_devices || !devices)
184 *errcode_ret = CL_INVALID_VALUE;
188 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(devices[0], CL_INVALID_DEVICE);
189 return devices[0]->dispatch->clCreateContext(
198 CL_API_ENTRY cl_context CL_API_CALL
199 clCreateContextFromType(const cl_context_properties * properties,
200 cl_device_type device_type,
201 void (CL_CALLBACK *pfn_notify)(const char *, const void *, size_t, void *),
203 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
205 cl_platform_id platform = NULL;
207 // initialize the platforms (in case they have not been already)
210 // determine the platform to use from the properties and device_type specified
211 khrIcdContextPropertiesGetPlatform(properties, &platform);
214 khrIcdDeviceTypeGetPlatform(device_type, &platform);
216 if (!platform && khrIcdVendors != NULL)
218 platform = khrIcdVendors[0].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 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(function_name, NULL);
1383 // make sure the ICD is initialized
1386 // return any ICD-aware extensions
1388 // Most extensions, including multi-vendor KHR and EXT extensions,
1389 // do not need to be ICD-aware and do not require any ICD loader
1390 // modifications. The KHR and EXT extensions below were added for
1391 // backwards compatibility only.
1392 #define CL_COMMON_EXTENSION_ENTRYPOINT_ADD(name) if (!strcmp(function_name, #name) ) return (void *)(size_t)&name
1394 // Functions supporting the creation of OpenCL Memory Objects
1395 // from OpenGL Objects (cl_apple_gl_sharing, cl_khr_gl_sharing)
1396 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLBuffer);
1397 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLTexture);
1398 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLTexture2D);
1399 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLTexture3D);
1400 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLRenderbuffer);
1401 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetGLObjectInfo);
1402 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetGLTextureInfo);
1403 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireGLObjects);
1404 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseGLObjects);
1406 // cl_khr_gl_sharing
1407 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetGLContextInfoKHR);
1410 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateEventFromGLsyncKHR);
1413 // cl_khr_d3d10_sharing
1414 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetDeviceIDsFromD3D10KHR);
1415 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D10BufferKHR);
1416 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D10Texture2DKHR);
1417 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D10Texture3DKHR);
1418 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireD3D10ObjectsKHR);
1419 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseD3D10ObjectsKHR);
1420 // cl_khr_d3d11_sharing
1421 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetDeviceIDsFromD3D11KHR);
1422 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D11BufferKHR);
1423 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D11Texture2DKHR);
1424 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D11Texture3DKHR);
1425 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireD3D11ObjectsKHR);
1426 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseD3D11ObjectsKHR);
1427 // cl_khr_dx9_media_sharing
1428 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetDeviceIDsFromDX9MediaAdapterKHR);
1429 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromDX9MediaSurfaceKHR);
1430 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireDX9MediaSurfacesKHR);
1431 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseDX9MediaSurfacesKHR);
1434 // cl_ext_device_fission
1435 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateSubDevicesEXT);
1436 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clRetainDeviceEXT);
1437 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clReleaseDeviceEXT);
1439 /* cl_khr_egl_image */
1440 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromEGLImageKHR);
1441 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireEGLObjectsKHR);
1442 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseEGLObjectsKHR);
1444 /* cl_khr_egl_event */
1445 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateEventFromEGLSyncKHR);
1447 /* cl_khr_sub_groups */
1448 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetKernelSubGroupInfoKHR);
1450 #undef CL_COMMON_EXTENSION_ENTRYPOINT_ADD
1452 // This is not an ICD-aware extension, so call into the implementation
1453 // to get the extension function address.
1455 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(platform, NULL);
1456 return platform->dispatch->clGetExtensionFunctionAddressForPlatform(
1462 CL_API_ENTRY cl_int CL_API_CALL
1463 clSetCommandQueueProperty(cl_command_queue command_queue,
1464 cl_command_queue_properties properties,
1466 cl_command_queue_properties * old_properties) CL_EXT_SUFFIX__VERSION_1_0_DEPRECATED
1468 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1469 return command_queue->dispatch->clSetCommandQueueProperty(
1476 CL_API_ENTRY cl_int CL_API_CALL
1477 clCreateSubDevicesEXT(
1478 cl_device_id in_device,
1479 const cl_device_partition_property_ext * partition_properties,
1480 cl_uint num_entries,
1481 cl_device_id * out_devices,
1482 cl_uint * num_devices) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
1484 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(in_device, CL_INVALID_DEVICE);
1485 return in_device->dispatch->clCreateSubDevicesEXT(
1487 partition_properties,
1493 CL_API_ENTRY cl_int CL_API_CALL
1494 clRetainDeviceEXT(cl_device_id device) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
1496 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
1497 return device->dispatch->clRetainDeviceEXT(device);
1500 CL_API_ENTRY cl_int CL_API_CALL
1501 clReleaseDeviceEXT(cl_device_id device) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
1503 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
1504 return device->dispatch->clReleaseDeviceEXT(device);
1507 CL_API_ENTRY cl_mem CL_API_CALL
1508 clCreateImage2D(cl_context context,
1510 const cl_image_format * image_format,
1512 size_t image_height,
1513 size_t image_row_pitch,
1515 cl_int * errcode_ret) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
1517 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
1518 return context->dispatch->clCreateImage2D(
1529 CL_API_ENTRY cl_mem CL_API_CALL
1530 clCreateImage3D(cl_context context,
1532 const cl_image_format * image_format,
1534 size_t image_height,
1536 size_t image_row_pitch,
1537 size_t image_slice_pitch,
1539 cl_int * errcode_ret) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
1541 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
1542 return context->dispatch->clCreateImage3D(
1555 CL_API_ENTRY cl_int CL_API_CALL
1556 clUnloadCompiler(void) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
1561 CL_API_ENTRY cl_int CL_API_CALL
1562 clEnqueueMarker(cl_command_queue command_queue,
1563 cl_event * event) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
1565 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1566 return command_queue->dispatch->clEnqueueMarker(
1571 CL_API_ENTRY cl_int CL_API_CALL
1572 clEnqueueWaitForEvents(cl_command_queue command_queue,
1574 const cl_event * event_list) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
1576 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1577 return command_queue->dispatch->clEnqueueWaitForEvents(
1583 CL_API_ENTRY cl_int CL_API_CALL
1584 clEnqueueBarrier(cl_command_queue command_queue) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
1586 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1587 return command_queue->dispatch->clEnqueueBarrier(command_queue);
1590 CL_API_ENTRY void * CL_API_CALL
1591 clGetExtensionFunctionAddress(const char *function_name) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
1593 size_t function_name_length = 0;
1594 KHRicdVendor* vendor = NULL;
1596 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(function_name, NULL);
1598 // make sure the ICD is initialized
1600 function_name_length = strlen(function_name);
1602 // return any ICD-aware extensions
1604 // Most extensions, including multi-vendor KHR and EXT extensions,
1605 // do not need to be ICD-aware and do not require any ICD loader
1606 // modifications. The KHR and EXT extensions below were added for
1607 // backwards compatibility only.
1608 #define CL_COMMON_EXTENSION_ENTRYPOINT_ADD(name) if (!strcmp(function_name, #name) ) return (void *)(size_t)&name
1610 // Functions supporting the creation of OpenCL Memory Objects
1611 // from OpenGL Objects (cl_apple_gl_sharing, cl_khr_gl_sharing)
1612 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLBuffer);
1613 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLTexture);
1614 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLTexture2D);
1615 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLTexture3D);
1616 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLRenderbuffer);
1617 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetGLObjectInfo);
1618 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetGLTextureInfo);
1619 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireGLObjects);
1620 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseGLObjects);
1622 // cl_khr_gl_sharing
1623 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetGLContextInfoKHR);
1626 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateEventFromGLsyncKHR);
1629 // cl_khr_d3d10_sharing
1630 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetDeviceIDsFromD3D10KHR);
1631 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D10BufferKHR);
1632 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D10Texture2DKHR);
1633 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D10Texture3DKHR);
1634 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireD3D10ObjectsKHR);
1635 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseD3D10ObjectsKHR);
1636 // cl_khr_d3d11_sharing
1637 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetDeviceIDsFromD3D11KHR);
1638 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D11BufferKHR);
1639 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D11Texture2DKHR);
1640 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D11Texture3DKHR);
1641 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireD3D11ObjectsKHR);
1642 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseD3D11ObjectsKHR);
1643 // cl_khr_dx9_media_sharing
1644 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetDeviceIDsFromDX9MediaAdapterKHR);
1645 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromDX9MediaSurfaceKHR);
1646 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireDX9MediaSurfacesKHR);
1647 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseDX9MediaSurfacesKHR);
1650 // cl_ext_device_fission
1651 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateSubDevicesEXT);
1652 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clRetainDeviceEXT);
1653 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clReleaseDeviceEXT);
1655 /* cl_khr_egl_image */
1656 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromEGLImageKHR);
1657 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireEGLObjectsKHR);
1658 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseEGLObjectsKHR);
1660 /* cl_khr_egl_event */
1661 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateEventFromEGLSyncKHR);
1663 /* cl_khr_sub_groups */
1664 CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetKernelSubGroupInfoKHR);
1666 #undef CL_COMMON_EXTENSION_ENTRYPOINT_ADD
1668 // fall back to vendor extension detection
1669 for (vendor = khrIcdVendors; vendor; vendor = vendor->next)
1671 size_t vendor_suffix_length = strlen(vendor->suffix);
1672 if (vendor_suffix_length <= function_name_length && vendor_suffix_length > 0)
1674 const char *function_suffix = function_name+function_name_length-vendor_suffix_length;
1675 if (!strcmp(function_suffix, vendor->suffix) )
1677 return vendor->clGetExtensionFunctionAddress(function_name);
1684 // GL and other APIs
1685 CL_API_ENTRY cl_mem CL_API_CALL clCreateFromGLBuffer(
1689 int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
1691 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
1692 return context->dispatch->clCreateFromGLBuffer(
1699 CL_API_ENTRY cl_mem CL_API_CALL clCreateFromGLTexture(
1705 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2
1707 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
1708 return context->dispatch->clCreateFromGLTexture(
1717 CL_API_ENTRY cl_mem CL_API_CALL clCreateFromGLTexture2D(
1723 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
1725 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
1726 return context->dispatch->clCreateFromGLTexture2D(
1735 CL_API_ENTRY cl_mem CL_API_CALL clCreateFromGLTexture3D(
1741 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
1743 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
1744 return context->dispatch->clCreateFromGLTexture3D(
1753 CL_API_ENTRY cl_mem CL_API_CALL clCreateFromGLRenderbuffer(
1756 cl_GLuint renderbuffer,
1757 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
1759 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
1760 return context->dispatch->clCreateFromGLRenderbuffer(
1767 CL_API_ENTRY cl_int CL_API_CALL clGetGLObjectInfo(
1769 cl_gl_object_type * gl_object_type,
1770 cl_GLuint * gl_object_name) CL_API_SUFFIX__VERSION_1_0
1772 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(memobj, CL_INVALID_MEM_OBJECT);
1773 return memobj->dispatch->clGetGLObjectInfo(
1779 CL_API_ENTRY cl_int CL_API_CALL clGetGLTextureInfo(
1781 cl_gl_texture_info param_name,
1782 size_t param_value_size,
1784 size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
1786 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(memobj, CL_INVALID_MEM_OBJECT);
1787 return memobj->dispatch->clGetGLTextureInfo(
1792 param_value_size_ret);
1795 CL_API_ENTRY cl_int CL_API_CALL clEnqueueAcquireGLObjects(
1796 cl_command_queue command_queue,
1797 cl_uint num_objects,
1798 const cl_mem * mem_objects,
1799 cl_uint num_events_in_wait_list,
1800 const cl_event * event_wait_list,
1801 cl_event * event) CL_API_SUFFIX__VERSION_1_0
1803 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1804 return command_queue->dispatch->clEnqueueAcquireGLObjects(
1808 num_events_in_wait_list,
1813 CL_API_ENTRY cl_int CL_API_CALL clEnqueueReleaseGLObjects(
1814 cl_command_queue command_queue,
1815 cl_uint num_objects,
1816 const cl_mem * mem_objects,
1817 cl_uint num_events_in_wait_list,
1818 const cl_event * event_wait_list,
1819 cl_event * event) CL_API_SUFFIX__VERSION_1_0
1821 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1822 return command_queue->dispatch->clEnqueueReleaseGLObjects(
1826 num_events_in_wait_list,
1831 CL_API_ENTRY cl_int CL_API_CALL clGetGLContextInfoKHR(
1832 const cl_context_properties *properties,
1833 cl_gl_context_info param_name,
1834 size_t param_value_size,
1836 size_t *param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
1838 cl_platform_id platform = NULL;
1840 // initialize the platforms (in case they have not been already)
1843 // determine the platform to use from the properties specified
1844 khrIcdContextPropertiesGetPlatform(properties, &platform);
1845 // determine the platform to use from the device_type specified
1848 khrIcdDeviceTypeGetPlatform(device_type, &platform);
1850 if (!platform && khrIcdVendors != NULL)
1852 platform = khrIcdVendors[0].platform;
1855 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(platform, CL_INVALID_PLATFORM);
1856 return platform->dispatch->clGetGLContextInfoKHR(
1861 param_value_size_ret);
1864 CL_API_ENTRY cl_event CL_API_CALL clCreateEventFromGLsyncKHR(
1867 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_1
1869 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
1870 return context->dispatch->clCreateEventFromGLsyncKHR(
1879 * cl_d3d10_sharing_khr
1883 CL_API_ENTRY cl_int CL_API_CALL
1884 clGetDeviceIDsFromD3D10KHR(
1885 cl_platform_id platform,
1886 cl_d3d10_device_source_khr d3d_device_source,
1888 cl_d3d10_device_set_khr d3d_device_set,
1889 cl_uint num_entries,
1890 cl_device_id *devices,
1891 cl_uint *num_devices)
1893 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(platform, CL_INVALID_PLATFORM);
1894 return platform->dispatch->clGetDeviceIDsFromD3D10KHR(
1904 CL_API_ENTRY cl_mem CL_API_CALL
1905 clCreateFromD3D10BufferKHR(
1908 ID3D10Buffer *resource,
1909 cl_int *errcode_ret)
1911 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
1912 return context->dispatch->clCreateFromD3D10BufferKHR(
1919 CL_API_ENTRY cl_mem CL_API_CALL
1920 clCreateFromD3D10Texture2DKHR(
1923 ID3D10Texture2D * resource,
1925 cl_int * errcode_ret)
1927 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
1928 return context->dispatch->clCreateFromD3D10Texture2DKHR(
1936 CL_API_ENTRY cl_mem CL_API_CALL
1937 clCreateFromD3D10Texture3DKHR(
1940 ID3D10Texture3D *resource,
1942 cl_int *errcode_ret)
1944 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
1945 return context->dispatch->clCreateFromD3D10Texture3DKHR(
1953 CL_API_ENTRY cl_int CL_API_CALL
1954 clEnqueueAcquireD3D10ObjectsKHR(
1955 cl_command_queue command_queue,
1956 cl_uint num_objects,
1957 const cl_mem *mem_objects,
1958 cl_uint num_events_in_wait_list,
1959 const cl_event *event_wait_list,
1962 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1963 return command_queue->dispatch->clEnqueueAcquireD3D10ObjectsKHR(
1967 num_events_in_wait_list,
1972 CL_API_ENTRY cl_int CL_API_CALL
1973 clEnqueueReleaseD3D10ObjectsKHR(
1974 cl_command_queue command_queue,
1975 cl_uint num_objects,
1976 const cl_mem *mem_objects,
1977 cl_uint num_events_in_wait_list,
1978 const cl_event *event_wait_list,
1981 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
1982 return command_queue->dispatch->clEnqueueReleaseD3D10ObjectsKHR(
1986 num_events_in_wait_list,
1993 * cl_d3d11_sharing_khr
1997 CL_API_ENTRY cl_int CL_API_CALL
1998 clGetDeviceIDsFromD3D11KHR(
1999 cl_platform_id platform,
2000 cl_d3d11_device_source_khr d3d_device_source,
2002 cl_d3d11_device_set_khr d3d_device_set,
2003 cl_uint num_entries,
2004 cl_device_id * devices,
2005 cl_uint * num_devices)
2007 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(platform, CL_INVALID_PLATFORM);
2008 return platform->dispatch->clGetDeviceIDsFromD3D11KHR(
2018 CL_API_ENTRY cl_mem CL_API_CALL
2019 clCreateFromD3D11BufferKHR(
2022 ID3D11Buffer * resource,
2023 cl_int * errcode_ret)
2025 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
2026 return context->dispatch->clCreateFromD3D11BufferKHR(
2033 CL_API_ENTRY cl_mem CL_API_CALL
2034 clCreateFromD3D11Texture2DKHR(
2037 ID3D11Texture2D * resource,
2039 cl_int * errcode_ret)
2041 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
2042 return context->dispatch->clCreateFromD3D11Texture2DKHR(
2050 CL_API_ENTRY cl_mem CL_API_CALL
2051 clCreateFromD3D11Texture3DKHR(
2054 ID3D11Texture3D * resource,
2056 cl_int * errcode_ret)
2058 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
2059 return context->dispatch->clCreateFromD3D11Texture3DKHR(
2067 CL_API_ENTRY cl_int CL_API_CALL
2068 clEnqueueAcquireD3D11ObjectsKHR(
2069 cl_command_queue command_queue,
2070 cl_uint num_objects,
2071 const cl_mem * mem_objects,
2072 cl_uint num_events_in_wait_list,
2073 const cl_event * event_wait_list,
2076 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
2077 return command_queue->dispatch->clEnqueueAcquireD3D11ObjectsKHR(
2081 num_events_in_wait_list,
2086 CL_API_ENTRY cl_int CL_API_CALL
2087 clEnqueueReleaseD3D11ObjectsKHR(
2088 cl_command_queue command_queue,
2089 cl_uint num_objects,
2090 const cl_mem * mem_objects,
2091 cl_uint num_events_in_wait_list,
2092 const cl_event * event_wait_list,
2095 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
2096 return command_queue->dispatch->clEnqueueReleaseD3D11ObjectsKHR(
2100 num_events_in_wait_list,
2107 * cl_khr_dx9_media_sharing
2111 CL_API_ENTRY cl_int CL_API_CALL
2112 clGetDeviceIDsFromDX9MediaAdapterKHR(
2113 cl_platform_id platform,
2114 cl_uint num_media_adapters,
2115 cl_dx9_media_adapter_type_khr * media_adapters_type,
2116 void * media_adapters,
2117 cl_dx9_media_adapter_set_khr media_adapter_set,
2118 cl_uint num_entries,
2119 cl_device_id * devices,
2120 cl_uint * num_devices)
2122 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(platform, CL_INVALID_PLATFORM);
2123 return platform->dispatch->clGetDeviceIDsFromDX9MediaAdapterKHR(
2126 media_adapters_type,
2134 CL_API_ENTRY cl_mem CL_API_CALL
2135 clCreateFromDX9MediaSurfaceKHR(
2138 cl_dx9_media_adapter_type_khr adapter_type,
2139 void * surface_info,
2141 cl_int * errcode_ret)
2143 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
2144 return context->dispatch->clCreateFromDX9MediaSurfaceKHR(
2153 CL_API_ENTRY cl_int CL_API_CALL
2154 clEnqueueAcquireDX9MediaSurfacesKHR(
2155 cl_command_queue command_queue,
2156 cl_uint num_objects,
2157 const cl_mem * mem_objects,
2158 cl_uint num_events_in_wait_list,
2159 const cl_event * event_wait_list,
2162 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
2163 return command_queue->dispatch->clEnqueueAcquireDX9MediaSurfacesKHR(
2167 num_events_in_wait_list,
2172 CL_API_ENTRY cl_int CL_API_CALL
2173 clEnqueueReleaseDX9MediaSurfacesKHR(
2174 cl_command_queue command_queue,
2175 cl_uint num_objects,
2176 const cl_mem * mem_objects,
2177 cl_uint num_events_in_wait_list,
2178 const cl_event * event_wait_list,
2181 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
2182 return command_queue->dispatch->clEnqueueReleaseDX9MediaSurfacesKHR(
2186 num_events_in_wait_list,
2193 CL_API_ENTRY cl_int CL_API_CALL
2196 cl_int command_exec_callback_type,
2197 void (CL_CALLBACK *pfn_notify)(cl_event, cl_int, void *),
2198 void *user_data) CL_API_SUFFIX__VERSION_1_1
2200 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(event, CL_INVALID_EVENT);
2201 return event->dispatch->clSetEventCallback(
2203 command_exec_callback_type,
2208 CL_API_ENTRY cl_mem CL_API_CALL
2212 cl_buffer_create_type buffer_create_type,
2213 const void * buffer_create_info,
2214 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_1
2216 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(buffer, CL_INVALID_MEM_OBJECT);
2217 return buffer->dispatch->clCreateSubBuffer(
2225 CL_API_ENTRY cl_int CL_API_CALL
2226 clSetMemObjectDestructorCallback(
2228 void (CL_CALLBACK * pfn_notify)( cl_mem, void*),
2229 void * user_data ) CL_API_SUFFIX__VERSION_1_1
2231 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(memobj, CL_INVALID_MEM_OBJECT);
2232 return memobj->dispatch->clSetMemObjectDestructorCallback(
2238 CL_API_ENTRY cl_event CL_API_CALL
2241 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_1
2243 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
2244 return context->dispatch->clCreateUserEvent(
2249 CL_API_ENTRY cl_int CL_API_CALL
2250 clSetUserEventStatus(
2252 cl_int execution_status) CL_API_SUFFIX__VERSION_1_1
2254 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(event, CL_INVALID_EVENT);
2255 return event->dispatch->clSetUserEventStatus(
2260 CL_API_ENTRY cl_mem CL_API_CALL
2261 clCreateFromEGLImageKHR(
2263 CLeglDisplayKHR display,
2264 CLeglImageKHR image,
2266 const cl_egl_image_properties_khr *properties,
2267 cl_int *errcode_ret)
2269 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
2270 return context->dispatch->clCreateFromEGLImageKHR(
2279 CL_API_ENTRY cl_int CL_API_CALL
2280 clEnqueueAcquireEGLObjectsKHR(
2281 cl_command_queue command_queue,
2282 cl_uint num_objects,
2283 const cl_mem *mem_objects,
2284 cl_uint num_events_in_wait_list,
2285 const cl_event *event_wait_list,
2288 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
2289 return command_queue->dispatch->clEnqueueAcquireEGLObjectsKHR(
2293 num_events_in_wait_list,
2298 CL_API_ENTRY cl_int CL_API_CALL
2299 clEnqueueReleaseEGLObjectsKHR(
2300 cl_command_queue command_queue,
2301 cl_uint num_objects,
2302 const cl_mem *mem_objects,
2303 cl_uint num_events_in_wait_list,
2304 const cl_event *event_wait_list,
2307 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
2308 return command_queue->dispatch->clEnqueueReleaseEGLObjectsKHR(
2312 num_events_in_wait_list,
2317 /* cl_khr_egl_event */
2318 CL_API_ENTRY cl_event CL_API_CALL
2319 clCreateEventFromEGLSyncKHR(
2322 CLeglDisplayKHR display,
2323 cl_int *errcode_ret)
2325 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
2326 return context->dispatch->clCreateEventFromEGLSyncKHR(
2333 CL_API_ENTRY cl_command_queue CL_API_CALL
2334 clCreateCommandQueueWithProperties(
2336 cl_device_id device,
2337 const cl_queue_properties * properties,
2338 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_2_0
2340 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
2341 return context->dispatch->clCreateCommandQueueWithProperties(
2348 CL_API_ENTRY cl_mem CL_API_CALL
2352 cl_uint pipe_packet_size,
2353 cl_uint pipe_max_packets,
2354 const cl_pipe_properties * properties,
2355 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_2_0
2357 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
2358 return context->dispatch->clCreatePipe(
2367 CL_API_ENTRY cl_int CL_API_CALL
2370 cl_pipe_info param_name,
2371 size_t param_value_size,
2373 size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_2_0
2375 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(pipe, CL_INVALID_MEM_OBJECT);
2376 return pipe->dispatch->clGetPipeInfo(
2381 param_value_size_ret);
2384 CL_API_ENTRY void * CL_API_CALL
2387 cl_svm_mem_flags flags,
2389 cl_uint alignment) CL_API_SUFFIX__VERSION_2_0
2394 return context->dispatch->clSVMAlloc(
2401 CL_API_ENTRY void CL_API_CALL
2404 void * svm_pointer) CL_API_SUFFIX__VERSION_2_0
2406 if (!context || !svm_pointer) {
2409 context->dispatch->clSVMFree(
2414 CL_API_ENTRY cl_int CL_API_CALL
2416 cl_command_queue command_queue,
2417 cl_uint num_svm_pointers,
2418 void* svm_pointers[],
2419 void (CL_CALLBACK* pfn_free_func)(
2420 cl_command_queue queue,
2421 cl_uint num_svm_pointers,
2422 void* svm_pointers[],
2425 cl_uint num_events_in_wait_list,
2426 const cl_event* event_wait_list,
2427 cl_event* event) CL_API_SUFFIX__VERSION_2_0
2429 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
2430 return command_queue->dispatch->clEnqueueSVMFree(
2436 num_events_in_wait_list,
2441 CL_API_ENTRY cl_int CL_API_CALL
2443 cl_command_queue command_queue,
2444 cl_bool blocking_copy,
2446 const void * src_ptr,
2448 cl_uint num_events_in_wait_list,
2449 const cl_event * event_wait_list,
2450 cl_event * event) CL_API_SUFFIX__VERSION_2_0
2452 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
2453 return command_queue->dispatch->clEnqueueSVMMemcpy(
2459 num_events_in_wait_list,
2464 CL_API_ENTRY cl_int CL_API_CALL
2465 clEnqueueSVMMemFill(
2466 cl_command_queue command_queue,
2468 const void * pattern,
2469 size_t pattern_size,
2471 cl_uint num_events_in_wait_list,
2472 const cl_event * event_wait_list,
2473 cl_event * event) CL_API_SUFFIX__VERSION_2_0
2475 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
2476 return command_queue->dispatch->clEnqueueSVMMemFill(
2482 num_events_in_wait_list,
2487 CL_API_ENTRY cl_int CL_API_CALL
2489 cl_command_queue command_queue,
2490 cl_bool blocking_map,
2494 cl_uint num_events_in_wait_list,
2495 const cl_event * event_wait_list,
2496 cl_event * event) CL_API_SUFFIX__VERSION_2_0
2498 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
2499 return command_queue->dispatch->clEnqueueSVMMap(
2505 num_events_in_wait_list,
2510 CL_API_ENTRY cl_int CL_API_CALL
2512 cl_command_queue command_queue,
2514 cl_uint num_events_in_wait_list,
2515 const cl_event * event_wait_list,
2516 cl_event * event) CL_API_SUFFIX__VERSION_2_0
2518 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
2519 return command_queue->dispatch->clEnqueueSVMUnmap(
2522 num_events_in_wait_list,
2527 CL_API_ENTRY cl_sampler CL_API_CALL
2528 clCreateSamplerWithProperties(
2530 const cl_sampler_properties * sampler_properties,
2531 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_2_0
2533 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
2534 return context->dispatch->clCreateSamplerWithProperties(
2540 CL_API_ENTRY cl_int CL_API_CALL
2541 clSetKernelArgSVMPointer(
2544 const void * arg_value) CL_API_SUFFIX__VERSION_2_0
2546 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
2547 return kernel->dispatch->clSetKernelArgSVMPointer(
2553 CL_API_ENTRY cl_int CL_API_CALL
2554 clSetKernelExecInfo(
2556 cl_kernel_exec_info param_name,
2557 size_t param_value_size,
2558 const void * param_value) CL_API_SUFFIX__VERSION_2_0
2560 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
2561 return kernel->dispatch->clSetKernelExecInfo(
2568 CL_API_ENTRY cl_int CL_API_CALL
2569 clGetKernelSubGroupInfoKHR(
2570 cl_kernel in_kernel,
2571 cl_device_id in_device,
2572 cl_kernel_sub_group_info param_name,
2573 size_t input_value_size,
2574 const void * input_value,
2575 size_t param_value_size,
2577 size_t * param_value_size_ret) CL_EXT_SUFFIX__VERSION_2_0
2579 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(in_kernel, CL_INVALID_KERNEL);
2580 return in_kernel->dispatch->clGetKernelSubGroupInfoKHR(
2588 param_value_size_ret);
2591 CL_API_ENTRY cl_int CL_API_CALL
2592 clSetDefaultDeviceCommandQueue(
2594 cl_device_id device,
2595 cl_command_queue command_queue) CL_API_SUFFIX__VERSION_2_1
2597 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(context, CL_INVALID_CONTEXT);
2598 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
2599 return context->dispatch->clSetDefaultDeviceCommandQueue(
2605 CL_API_ENTRY cl_program CL_API_CALL
2606 clCreateProgramWithIL(
2610 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_2_1
2612 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
2613 return context->dispatch->clCreateProgramWithIL(
2620 CL_API_ENTRY cl_int CL_API_CALL
2621 clGetKernelSubGroupInfo(
2623 cl_device_id device,
2624 cl_kernel_sub_group_info param_name,
2625 size_t input_value_size,
2626 const void * input_value,
2627 size_t param_value_size,
2629 size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_2_1
2631 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
2632 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
2633 return kernel->dispatch->clGetKernelSubGroupInfo(
2641 param_value_size_ret);
2644 CL_API_ENTRY cl_kernel CL_API_CALL
2646 cl_kernel source_kernel,
2647 cl_int * errcode_ret) CL_API_SUFFIX__VERSION_2_1
2649 KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(source_kernel, CL_INVALID_KERNEL);
2650 return source_kernel->dispatch->clCloneKernel(
2655 CL_API_ENTRY cl_int CL_API_CALL
2656 clEnqueueSVMMigrateMem(
2657 cl_command_queue command_queue,
2658 cl_uint num_svm_pointers,
2659 const void ** svm_pointers,
2660 const size_t * sizes,
2661 cl_mem_migration_flags flags,
2662 cl_uint num_events_in_wait_list,
2663 const cl_event * event_wait_list,
2664 cl_event * event) CL_API_SUFFIX__VERSION_2_1
2666 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
2667 return command_queue->dispatch->clEnqueueSVMMigrateMem(
2673 num_events_in_wait_list,
2678 CL_API_ENTRY cl_int CL_API_CALL
2679 clGetDeviceAndHostTimer(
2680 cl_device_id device,
2681 cl_ulong * device_timestamp,
2682 cl_ulong * host_timestamp) CL_API_SUFFIX__VERSION_2_1
2684 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
2685 return device->dispatch->clGetDeviceAndHostTimer(
2691 CL_API_ENTRY cl_int CL_API_CALL
2693 cl_device_id device,
2694 cl_ulong * host_timestamp) CL_API_SUFFIX__VERSION_2_1
2696 KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
2697 return device->dispatch->clGetHostTimer(