opencl_dynamic_sys/container/
mod.rs

1#![allow(non_snake_case)]
2
3use dlopen2::wrapper::WrapperApi;
4
5use crate::types::{
6    cl_dx9_media_sharing::*, cl_egl::*, cl_ext::*, cl_gl::*, cl_icd::*, cl_layer::*,
7    cl_platform::*, *,
8};
9
10mod utils;
11pub use utils::{is_opencl_runtime_available, load_library, OpenClRuntime};
12
13/// Wrapper for the OpenCL API functions. These functions are marked as optional to avoid library load failure
14/// if a function is not present in the library.
15#[derive(WrapperApi)]
16pub struct OpenCl {
17    // Platform API
18    clGetPlatformIDs: Option<
19        fn(
20            num_entries: cl_uint,
21            platforms: *mut cl_platform_id,
22            num_platforms: *mut cl_uint,
23        ) -> cl_int,
24    >,
25
26    clGetPlatformInfo: Option<
27        fn(
28            platform: cl_platform_id,
29            param_name: cl_platform_info,
30            param_value_size: size_t,
31            param_value: *mut c_void,
32            param_value_size_ret: *mut size_t,
33        ) -> cl_int,
34    >,
35
36    // Device APIs
37    clGetDeviceIDs: Option<
38        fn(
39            platform: cl_platform_id,
40            device_type: cl_device_type,
41            num_entries: cl_uint,
42            devices: *mut cl_device_id,
43            num_devices: *mut cl_uint,
44        ) -> cl_int,
45    >,
46
47    clGetDeviceInfo: Option<
48        fn(
49            device: cl_device_id,
50            param_name: cl_device_info,
51            param_value_size: size_t,
52            param_value: *mut c_void,
53            param_value_size_ret: *mut size_t,
54        ) -> cl_int,
55    >,
56
57    clCreateSubDevices: Option<
58        fn(
59            in_device: cl_device_id,
60            properties: *const cl_device_partition_property,
61            num_devices: cl_uint,
62            out_devices: *mut cl_device_id,
63            num_devices_ret: *mut cl_uint,
64        ) -> cl_int,
65    >,
66
67    clRetainDevice: Option<fn(device: cl_device_id) -> cl_int>,
68
69    clReleaseDevice: Option<fn(device: cl_device_id) -> cl_int>,
70
71    clSetDefaultDeviceCommandQueue: Option<
72        fn(context: cl_context, device: cl_device_id, command_queue: cl_command_queue) -> cl_int,
73    >,
74
75    clGetDeviceAndHostTimer: Option<
76        fn(
77            device: cl_device_id,
78            device_timestamp: *mut cl_ulong,
79            host_timestamp: *mut cl_ulong,
80        ) -> cl_int,
81    >,
82
83    clGetHostTimer: Option<fn(device: cl_device_id, host_timestamp: *mut cl_ulong) -> cl_int>,
84
85    // Context APIs
86    clCreateContext: Option<
87        fn(
88            properties: *const cl_context_properties,
89            num_devices: cl_uint,
90            devices: *const cl_device_id,
91            pfn_notify: Option<
92                unsafe extern "C" fn(
93                    errinfo: *const c_char,
94                    private_info: *const c_void,
95                    cb: size_t,
96                    user_data: *mut c_void,
97                ),
98            >,
99            user_data: *mut c_void,
100            errcode_ret: *mut cl_int,
101        ) -> cl_context,
102    >,
103
104    clCreateContextFromType: Option<
105        fn(
106            properties: *const cl_context_properties,
107            device_type: cl_device_type,
108            pfn_notify: Option<
109                unsafe extern "C" fn(
110                    errinfo: *const c_char,
111                    private_info: *const c_void,
112                    cb: size_t,
113                    user_data: *mut c_void,
114                ),
115            >,
116            user_data: *mut c_void,
117            errcode_ret: *mut cl_int,
118        ) -> cl_context,
119    >,
120
121    clRetainContext: Option<fn(context: cl_context) -> cl_int>,
122
123    clReleaseContext: Option<fn(context: cl_context) -> cl_int>,
124
125    clGetContextInfo: Option<
126        fn(
127            context: cl_context,
128            param_name: cl_context_info,
129            param_value_size: size_t,
130            param_value: *mut c_void,
131            param_value_size_ret: *mut size_t,
132        ) -> cl_int,
133    >,
134
135    clSetContextDestructorCallback: Option<
136        fn(
137            context: cl_context,
138            pfn_notify: Option<unsafe extern "C" fn(context: cl_context, user_data: *mut c_void)>,
139            user_data: *mut c_void,
140        ) -> cl_int,
141    >,
142
143    // Command Queue APIs
144    clCreateCommandQueueWithProperties: Option<
145        fn(
146            context: cl_context,
147            device: cl_device_id,
148            properties: *const cl_queue_properties,
149            errcode_ret: *mut cl_int,
150        ) -> cl_command_queue,
151    >,
152
153    clRetainCommandQueue: Option<fn(command_queue: cl_command_queue) -> cl_int>,
154
155    clReleaseCommandQueue: Option<fn(command_queue: cl_command_queue) -> cl_int>,
156
157    clGetCommandQueueInfo: Option<
158        fn(
159            command_queue: cl_command_queue,
160            param_name: cl_command_queue_info,
161            param_value_size: size_t,
162            param_value: *mut c_void,
163            param_value_size_ret: *mut size_t,
164        ) -> cl_int,
165    >,
166
167    // Memory Object APIs
168    clCreateBuffer: Option<
169        fn(
170            context: cl_context,
171            flags: cl_mem_flags,
172            size: size_t,
173            host_ptr: *mut c_void,
174            errcode_ret: *mut cl_int,
175        ) -> cl_mem,
176    >,
177
178    clCreateSubBuffer: Option<
179        fn(
180            buffer: cl_mem,
181            flags: cl_mem_flags,
182            buffer_create_type: cl_buffer_create_type,
183            buffer_create_info: *const c_void,
184            errcode_ret: *mut cl_int,
185        ) -> cl_mem,
186    >,
187
188    clCreateImage: Option<
189        fn(
190            context: cl_context,
191            flags: cl_mem_flags,
192            image_format: *const cl_image_format,
193            image_desc: *const cl_image_desc,
194            host_ptr: *mut c_void,
195            errcode_ret: *mut cl_int,
196        ) -> cl_mem,
197    >,
198
199    clCreatePipe: Option<
200        fn(
201            context: cl_context,
202            flags: cl_mem_flags,
203            pipe_packet_size: cl_uint,
204            pipe_max_packets: cl_uint,
205            properties: *const cl_pipe_properties,
206            errcode_ret: *mut cl_int,
207        ) -> cl_mem,
208    >,
209
210    clCreateBufferWithProperties: Option<
211        fn(
212            context: cl_context,
213            properties: *const cl_mem_properties,
214            flags: cl_mem_flags,
215            size: size_t,
216            host_ptr: *mut c_void,
217            errcode_ret: *mut cl_int,
218        ) -> cl_mem,
219    >,
220
221    clCreateImageWithProperties: Option<
222        fn(
223            context: cl_context,
224            properties: *const cl_mem_properties,
225            flags: cl_mem_flags,
226            image_format: *const cl_image_format,
227            image_desc: *const cl_image_desc,
228            host_ptr: *mut c_void,
229            errcode_ret: *mut cl_int,
230        ) -> cl_mem,
231    >,
232
233    clRetainMemObject: Option<fn(memobj: cl_mem) -> cl_int>,
234
235    clReleaseMemObject: Option<fn(memobj: cl_mem) -> cl_int>,
236
237    clGetSupportedImageFormats: Option<
238        fn(
239            context: cl_context,
240            flags: cl_mem_flags,
241            image_type: cl_mem_object_type,
242            num_entries: cl_uint,
243            image_formats: *mut cl_image_format,
244            num_image_formats: *mut cl_uint,
245        ) -> cl_int,
246    >,
247
248    clGetMemObjectInfo: Option<
249        fn(
250            memobj: cl_mem,
251            param_name: cl_mem_info,
252            param_value_size: size_t,
253            param_value: *mut c_void,
254            param_value_size_ret: *mut size_t,
255        ) -> cl_int,
256    >,
257
258    clGetImageInfo: Option<
259        fn(
260            image: cl_mem,
261            param_name: cl_image_info,
262            param_value_size: size_t,
263            param_value: *mut c_void,
264            param_value_size_ret: *mut size_t,
265        ) -> cl_int,
266    >,
267
268    clGetPipeInfo: Option<
269        fn(
270            pipe: cl_mem,
271            param_name: cl_pipe_info,
272            param_value_size: size_t,
273            param_value: *mut c_void,
274            param_value_size_ret: *mut size_t,
275        ) -> cl_int,
276    >,
277
278    clSetMemObjectDestructorCallback: Option<
279        fn(
280            memobj: cl_mem,
281            pfn_notify: Option<unsafe extern "C" fn(memobj: cl_mem, user_data: *mut c_void)>,
282            user_data: *mut c_void,
283        ) -> cl_int,
284    >,
285
286    // SVM Allocation APIs
287    clSVMAlloc: Option<
288        fn(
289            context: cl_context,
290            flags: cl_svm_mem_flags,
291            size: size_t,
292            alignment: cl_uint,
293        ) -> *mut c_void,
294    >,
295
296    clSVMFree: Option<fn(context: cl_context, svm_pointer: *mut c_void)>,
297
298    // Sampler APIs
299    clCreateSamplerWithProperties: Option<
300        fn(
301            context: cl_context,
302            normalized_coords: *const cl_sampler_properties,
303            errcode_ret: *mut cl_int,
304        ) -> cl_sampler,
305    >,
306
307    clRetainSampler: Option<fn(sampler: cl_sampler) -> cl_int>,
308
309    clReleaseSampler: Option<fn(sampler: cl_sampler) -> cl_int>,
310
311    clGetSamplerInfo: Option<
312        fn(
313            sampler: cl_sampler,
314            param_name: cl_sampler_info,
315            param_value_size: size_t,
316            param_value: *mut c_void,
317            param_value_size_ret: *mut size_t,
318        ) -> cl_int,
319    >,
320
321    // Program Object APIs
322    clCreateProgramWithSource: Option<
323        fn(
324            context: cl_context,
325            count: cl_uint,
326            strings: *const *const c_char,
327            lengths: *const size_t,
328            errcode_ret: *mut cl_int,
329        ) -> cl_program,
330    >,
331
332    clCreateProgramWithBinary: Option<
333        fn(
334            context: cl_context,
335            num_devices: cl_uint,
336            device_list: *const cl_device_id,
337            lengths: *const size_t,
338            binaries: *const *const c_uchar,
339            binary_status: *mut cl_int,
340            errcode_ret: *mut cl_int,
341        ) -> cl_program,
342    >,
343
344    clCreateProgramWithBuiltInKernels: Option<
345        fn(
346            context: cl_context,
347            num_devices: cl_uint,
348            device_list: *const cl_device_id,
349            kernel_names: *const c_char,
350            errcode_ret: *mut cl_int,
351        ) -> cl_program,
352    >,
353
354    clCreateProgramWithIL: Option<
355        fn(
356            context: cl_context,
357            il: *const c_void,
358            length: size_t,
359            errcode_ret: *mut cl_int,
360        ) -> cl_program,
361    >,
362
363    clRetainProgram: Option<fn(program: cl_program) -> cl_int>,
364
365    clReleaseProgram: Option<fn(program: cl_program) -> cl_int>,
366
367    clBuildProgram: Option<
368        fn(
369            program: cl_program,
370            num_devices: cl_uint,
371            device_list: *const cl_device_id,
372            options: *const c_char,
373            pfn_notify: Option<unsafe extern "C" fn(program: cl_program, user_data: *mut c_void)>,
374            user_data: *mut c_void,
375        ) -> cl_int,
376    >,
377
378    clCompileProgram: Option<
379        fn(
380            program: cl_program,
381            num_devices: cl_uint,
382            device_list: *const cl_device_id,
383            options: *const c_char,
384            num_input_headers: cl_uint,
385            input_headers: *const cl_program,
386            header_include_names: *const *const c_char,
387            pfn_notify: Option<unsafe extern "C" fn(program: cl_program, user_data: *mut c_void)>,
388            user_data: *mut c_void,
389        ) -> cl_int,
390    >,
391
392    clLinkProgram: Option<
393        fn(
394            context: cl_context,
395            num_devices: cl_uint,
396            device_list: *const cl_device_id,
397            options: *const c_char,
398            num_input_programs: cl_uint,
399            input_programs: *const cl_program,
400            pfn_notify: Option<unsafe extern "C" fn(program: cl_program, user_data: *mut c_void)>,
401            user_data: *mut c_void,
402            errcode_ret: *mut cl_int,
403        ) -> cl_program,
404    >,
405
406    clSetProgramReleaseCallback: Option<
407        fn(
408            program: cl_program,
409            pfn_notify: Option<unsafe extern "C" fn(program: cl_program, user_data: *mut c_void)>,
410            user_data: *mut c_void,
411        ) -> cl_int,
412    >,
413
414    clSetProgramSpecializationConstant: Option<
415        fn(
416            program: cl_program,
417            spec_id: cl_uint,
418            spec_size: size_t,
419            spec_value: *const c_void,
420        ) -> cl_int,
421    >,
422
423    clUnloadPlatformCompiler: Option<fn(platform: cl_platform_id) -> cl_int>,
424
425    clGetProgramInfo: Option<
426        fn(
427            program: cl_program,
428            param_name: cl_program_info,
429            param_value_size: size_t,
430            param_value: *mut c_void,
431            param_value_size_ret: *mut size_t,
432        ) -> cl_int,
433    >,
434
435    clGetProgramBuildInfo: Option<
436        fn(
437            program: cl_program,
438            device: cl_device_id,
439            param_name: cl_program_build_info,
440            param_value_size: size_t,
441            param_value: *mut c_void,
442            param_value_size_ret: *mut size_t,
443        ) -> cl_int,
444    >,
445
446    // Kernel Object APIs
447    clCreateKernel: Option<
448        fn(program: cl_program, kernel_name: *const c_char, errcode_ret: *mut cl_int) -> cl_kernel,
449    >,
450
451    clCreateKernelsInProgram: Option<
452        fn(
453            program: cl_program,
454            num_kernels: cl_uint,
455            kernels: *mut cl_kernel,
456            num_kernels_ret: *mut cl_uint,
457        ) -> cl_int,
458    >,
459
460    clCloneKernel: Option<fn(source_kernel: cl_kernel, errcode_ret: *mut cl_int) -> cl_kernel>,
461
462    clRetainKernel: Option<fn(kernel: cl_kernel) -> cl_int>,
463
464    clReleaseKernel: Option<fn(kernel: cl_kernel) -> cl_int>,
465
466    clSetKernelArg: Option<
467        fn(
468            kernel: cl_kernel,
469            arg_index: cl_uint,
470            arg_size: size_t,
471            arg_value: *const c_void,
472        ) -> cl_int,
473    >,
474
475    clSetKernelArgSVMPointer:
476        Option<fn(kernel: cl_kernel, arg_index: cl_uint, arg_value: *const c_void) -> cl_int>,
477
478    clSetKernelExecInfo: Option<
479        fn(
480            kernel: cl_kernel,
481            param_name: cl_kernel_exec_info,
482            param_value_size: size_t,
483            param_value: *const c_void,
484        ) -> cl_int,
485    >,
486
487    clGetKernelInfo: Option<
488        fn(
489            kernel: cl_kernel,
490            param_name: cl_kernel_info,
491            param_value_size: size_t,
492            param_value: *mut c_void,
493            param_value_size_ret: *mut size_t,
494        ) -> cl_int,
495    >,
496
497    clGetKernelArgInfo: Option<
498        fn(
499            kernel: cl_kernel,
500            arg_indx: cl_uint,
501            param_name: cl_kernel_arg_info,
502            param_value_size: size_t,
503            param_value: *mut c_void,
504            param_value_size_ret: *mut size_t,
505        ) -> cl_int,
506    >,
507
508    clGetKernelWorkGroupInfo: Option<
509        fn(
510            kernel: cl_kernel,
511            device: cl_device_id,
512            param_name: cl_kernel_work_group_info,
513            param_value_size: size_t,
514            param_value: *mut c_void,
515            param_value_size_ret: *mut size_t,
516        ) -> cl_int,
517    >,
518
519    clGetKernelSubGroupInfo: Option<
520        fn(
521            kernel: cl_kernel,
522            device: cl_device_id,
523            param_name: cl_kernel_sub_group_info,
524            input_value_size: size_t,
525            input_value: *const c_void,
526            param_value_size: size_t,
527            param_value: *mut c_void,
528            param_value_size_ret: *mut size_t,
529        ) -> cl_int,
530    >,
531
532    // Event Object APIs
533    clWaitForEvents: Option<fn(num_events: cl_uint, event_list: *const cl_event) -> cl_int>,
534
535    clGetEventInfo: Option<
536        fn(
537            event: cl_event,
538            param_name: cl_event_info,
539            param_value_size: size_t,
540            param_value: *mut c_void,
541            param_value_size_ret: *mut size_t,
542        ) -> cl_int,
543    >,
544
545    clCreateUserEvent: Option<fn(context: cl_context, errcode_ret: *mut cl_int) -> cl_event>,
546
547    clRetainEvent: Option<fn(event: cl_event) -> cl_int>,
548
549    clReleaseEvent: Option<fn(event: cl_event) -> cl_int>,
550
551    clSetUserEventStatus: Option<fn(event: cl_event, execution_status: cl_int) -> cl_int>,
552
553    clSetEventCallback: Option<
554        fn(
555            event: cl_event,
556            command_exec_callback_type: cl_int,
557            pfn_notify: Option<
558                unsafe extern "C" fn(
559                    event: cl_event,
560                    event_command_status: cl_int,
561                    user_data: *mut c_void,
562                ),
563            >,
564            user_data: *mut c_void,
565        ) -> cl_int,
566    >,
567
568    // Profiling APIs
569    clGetEventProfilingInfo: Option<
570        fn(
571            event: cl_event,
572            param_name: cl_profiling_info,
573            param_value_size: size_t,
574            param_value: *mut c_void,
575            param_value_size_ret: *mut size_t,
576        ) -> cl_int,
577    >,
578
579    // Flush and Finish APIs
580    clFlush: Option<fn(command_queue: cl_command_queue) -> cl_int>,
581
582    clFinish: Option<fn(command_queue: cl_command_queue) -> cl_int>,
583
584    // Enqueued Commands APIs
585    clEnqueueReadBuffer: Option<
586        fn(
587            command_queue: cl_command_queue,
588            buffer: cl_mem,
589            blocking_read: cl_bool,
590            offset: size_t,
591            cb: size_t,
592            ptr: *mut c_void,
593            num_events_in_wait_list: cl_uint,
594            event_wait_list: *const cl_event,
595            event: *mut cl_event,
596        ) -> cl_int,
597    >,
598
599    clEnqueueReadBufferRect: Option<
600        fn(
601            command_queue: cl_command_queue,
602            buffer: cl_mem,
603            blocking_read: cl_bool,
604            buffer_origin: *const size_t,
605            host_origin: *const size_t,
606            region: *const size_t,
607            buffer_row_pitch: size_t,
608            buffer_slc_pitch: size_t,
609            host_row_pitch: size_t,
610            host_slc_pitch: size_t,
611            ptr: *mut c_void,
612            num_events_in_wait_list: cl_uint,
613            event_wait_list: *const cl_event,
614            event: *mut cl_event,
615        ) -> cl_int,
616    >,
617
618    clEnqueueWriteBuffer: Option<
619        fn(
620            command_queue: cl_command_queue,
621            buffer: cl_mem,
622            blocking_write: cl_bool,
623            offset: size_t,
624            cb: size_t,
625            ptr: *const c_void,
626            num_events_in_wait_list: cl_uint,
627            event_wait_list: *const cl_event,
628            event: *mut cl_event,
629        ) -> cl_int,
630    >,
631
632    clEnqueueWriteBufferRect: Option<
633        fn(
634            command_queue: cl_command_queue,
635            buffer: cl_mem,
636            blocking_write: cl_bool,
637            buffer_origin: *const size_t,
638            host_origin: *const size_t,
639            region: *const size_t,
640            buffer_row_pitch: size_t,
641            buffer_slc_pitch: size_t,
642            host_row_pitch: size_t,
643            host_slc_pitch: size_t,
644            ptr: *const c_void,
645            num_events_in_wait_list: cl_uint,
646            event_wait_list: *const cl_event,
647            event: *mut cl_event,
648        ) -> cl_int,
649    >,
650
651    clEnqueueFillBuffer: Option<
652        fn(
653            command_queue: cl_command_queue,
654            buffer: cl_mem,
655            pattern: *const c_void,
656            pattern_size: size_t,
657            offset: size_t,
658            size: size_t,
659            num_events_in_wait_list: cl_uint,
660            event_wait_list: *const cl_event,
661            event: *mut cl_event,
662        ) -> cl_int,
663    >,
664
665    clEnqueueCopyBuffer: Option<
666        fn(
667            command_queue: cl_command_queue,
668            src_buffer: cl_mem,
669            dst_buffer: cl_mem,
670            src_offset: size_t,
671            dst_offset: size_t,
672            cb: size_t,
673            num_events_in_wait_list: cl_uint,
674            event_wait_list: *const cl_event,
675            event: *mut cl_event,
676        ) -> cl_int,
677    >,
678
679    clEnqueueCopyBufferRect: Option<
680        fn(
681            command_queue: cl_command_queue,
682            src_buffer: cl_mem,
683            dst_buffer: cl_mem,
684            src_origin: *const size_t,
685            dst_origin: *const size_t,
686            region: *const size_t,
687            src_row_pitch: size_t,
688            src_slice_pitch: size_t,
689            dst_row_pitch: size_t,
690            dst_slice_pitch: size_t,
691            num_events_in_wait_list: cl_uint,
692            event_wait_list: *const cl_event,
693            event: *mut cl_event,
694        ) -> cl_int,
695    >,
696
697    clEnqueueReadImage: Option<
698        fn(
699            command_queue: cl_command_queue,
700            image: cl_mem,
701            blocking_read: cl_bool,
702            origin: *const size_t,
703            region: *const size_t,
704            row_pitch: size_t,
705            slice_pitch: size_t,
706            ptr: *mut c_void,
707            num_events_in_wait_list: cl_uint,
708            event_wait_list: *const cl_event,
709            event: *mut cl_event,
710        ) -> cl_int,
711    >,
712
713    clEnqueueWriteImage: Option<
714        fn(
715            command_queue: cl_command_queue,
716            image: cl_mem,
717            blocking_write: cl_bool,
718            origin: *const size_t,
719            region: *const size_t,
720            input_row_pitch: size_t,
721            input_slice_pitch: size_t,
722            ptr: *const c_void,
723            num_events_in_wait_list: cl_uint,
724            event_wait_list: *const cl_event,
725            event: *mut cl_event,
726        ) -> cl_int,
727    >,
728
729    clEnqueueFillImage: Option<
730        fn(
731            command_queue: cl_command_queue,
732            image: cl_mem,
733            fill_color: *const c_void,
734            origin: *const size_t,
735            region: *const size_t,
736            num_events_in_wait_list: cl_uint,
737            event_wait_list: *const cl_event,
738            event: *mut cl_event,
739        ) -> cl_int,
740    >,
741
742    clEnqueueCopyImage: Option<
743        fn(
744            command_queue: cl_command_queue,
745            src_image: cl_mem,
746            dst_image: cl_mem,
747            src_origin: *const size_t,
748            dst_origin: *const size_t,
749            region: *const size_t,
750            num_events_in_wait_list: cl_uint,
751            event_wait_list: *const cl_event,
752            event: *mut cl_event,
753        ) -> cl_int,
754    >,
755
756    clEnqueueCopyImageToBuffer: Option<
757        fn(
758            command_queue: cl_command_queue,
759            src_image: cl_mem,
760            dst_buffer: cl_mem,
761            src_origin: *const size_t,
762            region: *const size_t,
763            dst_offset: size_t,
764            num_events_in_wait_list: cl_uint,
765            event_wait_list: *const cl_event,
766            event: *mut cl_event,
767        ) -> cl_int,
768    >,
769
770    clEnqueueCopyBufferToImage: Option<
771        fn(
772            command_queue: cl_command_queue,
773            src_buffer: cl_mem,
774            dst_image: cl_mem,
775            src_offset: size_t,
776            dst_origin: *const size_t,
777            region: *const size_t,
778            num_events_in_wait_list: cl_uint,
779            event_wait_list: *const cl_event,
780            event: *mut cl_event,
781        ) -> cl_int,
782    >,
783
784    clEnqueueMapBuffer: Option<
785        fn(
786            command_queue: cl_command_queue,
787            buffer: cl_mem,
788            blocking_map: cl_bool,
789            map_flags: cl_map_flags,
790            offset: size_t,
791            size: size_t,
792            num_events_in_wait_list: cl_uint,
793            event_wait_list: *const cl_event,
794            event: *mut cl_event,
795            errcode_ret: *mut cl_int,
796        ) -> *mut c_void,
797    >,
798
799    clEnqueueMapImage: Option<
800        fn(
801            command_queue: cl_command_queue,
802            image: cl_mem,
803            blocking_map: cl_bool,
804            map_flags: cl_map_flags,
805            origin: *const size_t,
806            region: *const size_t,
807            image_row_pitch: *mut size_t,
808            image_slice_pitch: *mut size_t,
809            num_events_in_wait_list: cl_uint,
810            event_wait_list: *const cl_event,
811            event: *mut cl_event,
812            errcode_ret: *mut cl_int,
813        ) -> *mut c_void,
814    >,
815
816    clEnqueueUnmapMemObject: Option<
817        fn(
818            command_queue: cl_command_queue,
819            memobj: cl_mem,
820            mapped_ptr: *mut c_void,
821            num_events_in_wait_list: cl_uint,
822            event_wait_list: *const cl_event,
823            event: *mut cl_event,
824        ) -> cl_int,
825    >,
826
827    clEnqueueMigrateMemObjects: Option<
828        fn(
829            command_queue: cl_command_queue,
830            num_mem_objects: cl_uint,
831            mem_objects: *const cl_mem,
832            flags: cl_mem_migration_flags,
833            num_events_in_wait_list: cl_uint,
834            event_wait_list: *const cl_event,
835            event: *mut cl_event,
836        ) -> cl_int,
837    >,
838
839    clEnqueueNDRangeKernel: Option<
840        fn(
841            command_queue: cl_command_queue,
842            kernel: cl_kernel,
843            work_dim: cl_uint,
844            global_work_offset: *const size_t,
845            global_work_dims: *const size_t,
846            local_work_dims: *const size_t,
847            num_events_in_wait_list: cl_uint,
848            event_wait_list: *const cl_event,
849            event: *mut cl_event,
850        ) -> cl_int,
851    >,
852
853    clEnqueueNativeKernel: Option<
854        fn(
855            command_queue: cl_command_queue,
856            user_func: Option<unsafe extern "C" fn(arg1: *mut c_void)>,
857            args: *mut c_void,
858            cb_args: size_t,
859            num_mem_objects: cl_uint,
860            mem_list: *const cl_mem,
861            args_mem_loc: *const *const c_void,
862            num_events_in_wait_list: cl_uint,
863            event_wait_list: *const cl_event,
864            event: *mut cl_event,
865        ) -> cl_int,
866    >,
867
868    clEnqueueMarkerWithWaitList: Option<
869        fn(
870            command_queue: cl_command_queue,
871            num_events_in_wait_list: cl_uint,
872            event_wait_list: *const cl_event,
873            event: *mut cl_event,
874        ) -> cl_int,
875    >,
876
877    clEnqueueBarrierWithWaitList: Option<
878        fn(
879            command_queue: cl_command_queue,
880            num_events_in_wait_list: cl_uint,
881            event_wait_list: *const cl_event,
882            event: *mut cl_event,
883        ) -> cl_int,
884    >,
885
886    clEnqueueSVMFree: Option<
887        fn(
888            command_queue: cl_command_queue,
889            num_svm_pointers: cl_uint,
890            svm_pointers: *const *const c_void,
891            pfn_free_func: Option<
892                unsafe extern "C" fn(
893                    queue: cl_command_queue,
894                    num_svm_pointers: cl_uint,
895                    svm_pointers: *mut *mut c_void,
896                    user_data: *mut c_void,
897                ),
898            >,
899            user_data: *mut c_void,
900            num_events_in_wait_list: cl_uint,
901            event_wait_list: *const cl_event,
902            event: *mut cl_event,
903        ) -> cl_int,
904    >,
905
906    clEnqueueSVMMemcpy: Option<
907        fn(
908            command_queue: cl_command_queue,
909            blocking_copy: cl_bool,
910            dst_ptr: *mut c_void,
911            src_ptr: *const c_void,
912            size: size_t,
913            num_events_in_wait_list: cl_uint,
914            event_wait_list: *const cl_event,
915            event: *mut cl_event,
916        ) -> cl_int,
917    >,
918
919    clEnqueueSVMMemFill: Option<
920        fn(
921            command_queue: cl_command_queue,
922            svm_ptr: *mut c_void,
923            pattern: *const c_void,
924            pattern_size: size_t,
925            size: size_t,
926            num_events_in_wait_list: cl_uint,
927            event_wait_list: *const cl_event,
928            event: *mut cl_event,
929        ) -> cl_int,
930    >,
931
932    clEnqueueSVMMap: Option<
933        fn(
934            command_queue: cl_command_queue,
935            blocking_map: cl_bool,
936            flags: cl_map_flags,
937            svm_ptr: *mut c_void,
938            size: size_t,
939            num_events_in_wait_list: cl_uint,
940            event_wait_list: *const cl_event,
941            event: *mut cl_event,
942        ) -> cl_int,
943    >,
944
945    clEnqueueSVMUnmap: Option<
946        fn(
947            command_queue: cl_command_queue,
948            svm_ptr: *mut c_void,
949            num_events_in_wait_list: cl_uint,
950            event_wait_list: *const cl_event,
951            event: *mut cl_event,
952        ) -> cl_int,
953    >,
954
955    clEnqueueSVMMigrateMem: Option<
956        fn(
957            command_queue: cl_command_queue,
958            num_svm_pointers: cl_uint,
959            svm_pointers: *const *const c_void,
960            sizes: *const size_t,
961            flags: cl_mem_migration_flags,
962            num_events_in_wait_list: cl_uint,
963            event_wait_list: *const cl_event,
964            event: *mut cl_event,
965        ) -> cl_int,
966    >,
967
968    clGetExtensionFunctionAddressForPlatform:
969        Option<fn(platform: cl_platform_id, func_name: *const c_char) -> *mut c_void>,
970
971    // Deprecated OpenCL 1.1 APIs
972    clCreateImage2D: Option<
973        fn(
974            context: cl_context,
975            flags: cl_mem_flags,
976            image_format: *mut cl_image_format,
977            image_width: size_t,
978            image_depth: size_t,
979            image_row_pitch: size_t,
980            host_ptr: *mut c_void,
981            errcode_ret: *mut cl_int,
982        ) -> cl_mem,
983    >,
984
985    clCreateImage3D: Option<
986        fn(
987            context: cl_context,
988            flags: cl_mem_flags,
989            image_format: *mut cl_image_format,
990            image_width: size_t,
991            image_height: size_t,
992            image_depth: size_t,
993            image_row_pitch: size_t,
994            image_slice_pitch: size_t,
995            host_ptr: *mut c_void,
996            errcode_ret: *mut cl_int,
997        ) -> cl_mem,
998    >,
999
1000    clEnqueueMarker: Option<fn(command_queue: cl_command_queue, event: *mut cl_event) -> cl_int>,
1001
1002    clEnqueueWaitForEvents: Option<
1003        fn(
1004            command_queue: cl_command_queue,
1005            num_events: cl_uint,
1006            event_list: *mut cl_event,
1007        ) -> cl_int,
1008    >,
1009
1010    clEnqueueBarrier: Option<fn(command_queue: cl_command_queue) -> cl_int>,
1011
1012    clUnloadCompiler: Option<fn() -> cl_int>,
1013
1014    clGetExtensionFunctionAddress: Option<fn(func_name: *const c_char)>,
1015
1016    // Deprecated OpenCL 2.0 APIs
1017    clCreateCommandQueue: Option<
1018        fn(
1019            context: cl_context,
1020            device: cl_device_id,
1021            properties: cl_command_queue_properties,
1022            errcode_ret: *mut cl_int,
1023        ) -> cl_command_queue,
1024    >,
1025
1026    clCreateSampler: Option<
1027        fn(
1028            context: cl_context,
1029            normalize_coords: cl_bool,
1030            addressing_mode: cl_addressing_mode,
1031            filter_mode: cl_filter_mode,
1032            errcode_ret: *mut cl_int,
1033        ) -> cl_sampler,
1034    >,
1035
1036    // Deprecated 1.2
1037    clEnqueueTask: Option<
1038        fn(
1039            command_queue: cl_command_queue,
1040            kernel: cl_kernel,
1041            num_events_in_wait_list: cl_uint,
1042            event_wait_list: *const cl_event,
1043            event: *mut cl_event,
1044        ) -> cl_int,
1045    >,
1046
1047    // Direct3D 10 APIs
1048    clGetSupportedD3D10TextureFormatsINTEL: Option<
1049        fn(
1050            context: cl_context,
1051            flags: cl_mem_flags,
1052            image_type: cl_mem_object_type,
1053            num_entries: cl_uint,
1054            d3d10_formats: *mut DXGI_FORMAT,
1055            num_surface_formats: *mut cl_uint,
1056        ) -> cl_int,
1057    >,
1058
1059    // Direct3D 11 APIs
1060    clGetSupportedD3D11TextureFormatsINTEL: Option<
1061        fn(
1062            context: cl_context,
1063            flags: cl_mem_flags,
1064            image_type: cl_mem_object_type,
1065            plane: cl_uint,
1066            num_entries: cl_uint,
1067            d3d11_formats: *mut DXGI_FORMAT,
1068            num_surface_formats: *mut cl_uint,
1069        ) -> cl_int,
1070    >,
1071
1072    // DirectX9 Media Sharing APIs
1073    clGetDeviceIDsFromDX9INTEL: Option<
1074        fn(
1075            platform: cl_platform_id,
1076            dx9_device_source: cl_dx9_device_source_intel,
1077            dx9_object: *mut c_void,
1078            dx9_device_set: cl_dx9_device_set_intel,
1079            num_entries: cl_uint,
1080            devices: *mut cl_device_id,
1081            num_devices: *mut cl_uint,
1082        ) -> cl_int,
1083    >,
1084
1085    clCreateFromDX9MediaSurfaceINTEL: Option<
1086        fn(
1087            context: cl_context,
1088            flags: cl_mem_flags,
1089            resource: IDirect3DSurface9_ptr,
1090            sharedHandle: HANDLE,
1091            plane: cl_uint,
1092            errcode_ret: *mut cl_int,
1093        ) -> cl_mem,
1094    >,
1095
1096    clEnqueueAcquireDX9ObjectsINTEL: Option<
1097        fn(
1098            command_queue: cl_command_queue,
1099            num_objects: cl_uint,
1100            mem_objects: *const cl_mem,
1101            num_events_in_wait_list: cl_uint,
1102            event_wait_list: *const cl_event,
1103            event: *mut cl_event,
1104        ) -> cl_int,
1105    >,
1106
1107    clEnqueueReleaseDX9ObjectsINTEL: Option<
1108        fn(
1109            command_queue: cl_command_queue,
1110            num_objects: cl_uint,
1111            mem_objects: *const cl_mem,
1112            num_events_in_wait_list: cl_uint,
1113            event_wait_list: *const cl_event,
1114            event: *mut cl_event,
1115        ) -> cl_int,
1116    >,
1117
1118    clGetSupportedDX9MediaSurfaceFormatsINTEL: Option<
1119        fn(
1120            context: cl_context,
1121            flags: cl_mem_flags,
1122            image_type: cl_mem_object_type,
1123            plane: cl_uint,
1124            num_entries: cl_uint,
1125            dx9_formats: *mut D3DFORMAT,
1126            num_surface_formats: *mut cl_uint,
1127        ) -> cl_int,
1128    >,
1129
1130    // EGL APIs
1131    clCreateFromEGLImageKHR: Option<
1132        fn(
1133            context: cl_context,
1134            display: CLeglDisplayKHR,
1135            image: CLeglImageKHR,
1136            flags: cl_mem_flags,
1137            properties: *const cl_egl_image_properties_khr,
1138            errcode_ret: *mut cl_int,
1139        ) -> cl_mem,
1140    >,
1141
1142    clEnqueueAcquireEGLObjectsKHR: Option<
1143        fn(
1144            command_queue: cl_command_queue,
1145            num_objects: cl_uint,
1146            mem_objects: *const cl_mem,
1147            num_events_in_wait_list: cl_uint,
1148            event_wait_list: *const cl_event,
1149            event: *mut cl_event,
1150        ) -> cl_int,
1151    >,
1152
1153    clEnqueueReleaseEGLObjectsKHR: Option<
1154        fn(
1155            command_queue: cl_command_queue,
1156            num_objects: cl_uint,
1157            mem_objects: *const cl_mem,
1158            num_events_in_wait_list: cl_uint,
1159            event_wait_list: *const cl_event,
1160            event: *mut cl_event,
1161        ) -> cl_int,
1162    >,
1163
1164    clCreateEventFromEGLSyncKHR: Option<
1165        fn(
1166            context: cl_context,
1167            sync: CLeglSyncKHR,
1168            display: CLeglDisplayKHR,
1169            errcode_ret: *mut cl_int,
1170        ) -> cl_event,
1171    >,
1172
1173    // Extensions APIs
1174    clCreateCommandBufferKHR: Option<
1175        fn(
1176            num_queues: cl_uint,
1177            queues: *const cl_command_queue,
1178            properties: *const cl_command_buffer_properties_khr,
1179            errcode_ret: *mut cl_int,
1180        ) -> cl_command_buffer_khr,
1181    >,
1182
1183    clFinalizeCommandBufferKHR: Option<fn(command_buffer: cl_command_buffer_khr) -> cl_int>,
1184
1185    clRetainCommandBufferKHR: Option<fn(command_buffer: cl_command_buffer_khr) -> cl_int>,
1186
1187    clReleaseCommandBufferKHR: Option<fn(command_buffer: cl_command_buffer_khr) -> cl_int>,
1188
1189    clEnqueueCommandBufferKHR: Option<
1190        fn(
1191            num_queues: cl_uint,
1192            queues: *mut cl_command_queue,
1193            command_buffer: cl_command_buffer_khr,
1194            num_events_in_wait_list: cl_uint,
1195            event_wait_list: *const cl_event,
1196            event: *mut cl_event,
1197        ) -> cl_int,
1198    >,
1199
1200    clCommandBarrierWithWaitListKHR: Option<
1201        fn(
1202            command_buffer: cl_command_buffer_khr,
1203            command_queue: cl_command_queue,
1204            num_sync_points_in_wait_list: cl_uint,
1205            sync_point_wait_list: *const cl_sync_point_khr,
1206            sync_point: *mut cl_sync_point_khr,
1207            mutable_handle: *mut cl_mutable_command_khr,
1208        ) -> cl_int,
1209    >,
1210
1211    clCommandCopyBufferKHR: Option<
1212        fn(
1213            command_buffer: cl_command_buffer_khr,
1214            command_queue: cl_command_queue,
1215            src_buffer: cl_mem,
1216            dst_buffer: cl_mem,
1217            src_offset: size_t,
1218            dst_offset: size_t,
1219            size: size_t,
1220            num_sync_points_in_wait_list: cl_uint,
1221            sync_point_wait_list: *const cl_sync_point_khr,
1222            sync_point: *mut cl_sync_point_khr,
1223            mutable_handle: *mut cl_mutable_command_khr,
1224        ) -> cl_int,
1225    >,
1226
1227    clCommandCopyBufferRectKHR: Option<
1228        fn(
1229            command_buffer: cl_command_buffer_khr,
1230            command_queue: cl_command_queue,
1231            src_buffer: cl_mem,
1232            dst_buffer: cl_mem,
1233            src_origin: *const size_t,
1234            dst_origin: *const size_t,
1235            region: *const size_t,
1236            src_row_pitch: size_t,
1237            src_slice_pitch: size_t,
1238            dst_row_pitch: size_t,
1239            dst_slice_pitch: size_t,
1240            num_sync_points_in_wait_list: cl_uint,
1241            sync_point_wait_list: *const cl_sync_point_khr,
1242            sync_point: *mut cl_sync_point_khr,
1243            mutable_handle: *mut cl_mutable_command_khr,
1244        ) -> cl_int,
1245    >,
1246
1247    clCommandCopyBufferToImageKHR: Option<
1248        fn(
1249            command_buffer: cl_command_buffer_khr,
1250            command_queue: cl_command_queue,
1251            src_buffer: cl_mem,
1252            dst_image: cl_mem,
1253            src_offset: size_t,
1254            dst_origin: *const size_t,
1255            region: *const size_t,
1256            num_sync_points_in_wait_list: cl_uint,
1257            sync_point_wait_list: *const cl_sync_point_khr,
1258            sync_point: *mut cl_sync_point_khr,
1259            mutable_handle: *mut cl_mutable_command_khr,
1260        ) -> cl_int,
1261    >,
1262
1263    clCommandCopyImageKHR: Option<
1264        fn(
1265            command_buffer: cl_command_buffer_khr,
1266            command_queue: cl_command_queue,
1267            src_image: cl_mem,
1268            dst_image: cl_mem,
1269            src_origin: *const size_t,
1270            dst_origin: *const size_t,
1271            region: *const size_t,
1272            num_sync_points_in_wait_list: cl_uint,
1273            sync_point_wait_list: *const cl_sync_point_khr,
1274            sync_point: *mut cl_sync_point_khr,
1275            mutable_handle: *mut cl_mutable_command_khr,
1276        ) -> cl_int,
1277    >,
1278
1279    clCommandCopyImageToBufferKHR: Option<
1280        fn(
1281            command_buffer: cl_command_buffer_khr,
1282            command_queue: cl_command_queue,
1283            src_image: cl_mem,
1284            dst_buffer: cl_mem,
1285            src_origin: *const size_t,
1286            region: *const size_t,
1287            dst_offset: size_t,
1288            num_sync_points_in_wait_list: cl_uint,
1289            sync_point_wait_list: *const cl_sync_point_khr,
1290            sync_point: *mut cl_sync_point_khr,
1291            mutable_handle: *mut cl_mutable_command_khr,
1292        ) -> cl_int,
1293    >,
1294
1295    clCommandFillBufferKHR: Option<
1296        fn(
1297            command_buffer: cl_command_buffer_khr,
1298            command_queue: cl_command_queue,
1299            buffer: cl_mem,
1300            pattern: *const c_void,
1301            pattern_size: size_t,
1302            offset: size_t,
1303            size: size_t,
1304            num_sync_points_in_wait_list: cl_uint,
1305            sync_point_wait_list: *const cl_sync_point_khr,
1306            sync_point: *mut cl_sync_point_khr,
1307            mutable_handle: *mut cl_mutable_command_khr,
1308        ) -> cl_int,
1309    >,
1310
1311    clCommandFillImageKHR: Option<
1312        fn(
1313            command_buffer: cl_command_buffer_khr,
1314            command_queue: cl_command_queue,
1315            image: cl_mem,
1316            fill_color: *const c_void,
1317            origin: *const size_t,
1318            region: *const size_t,
1319            num_sync_points_in_wait_list: cl_uint,
1320            sync_point_wait_list: *const cl_sync_point_khr,
1321            sync_point: *mut cl_sync_point_khr,
1322            mutable_handle: *mut cl_mutable_command_khr,
1323        ) -> cl_int,
1324    >,
1325
1326    clCommandNDRangeKernelKHR: Option<
1327        fn(
1328            command_buffer: cl_command_buffer_khr,
1329            command_queue: cl_command_queue,
1330            properties: *const cl_ndrange_kernel_command_properties_khr,
1331            kernel: cl_kernel,
1332            work_dim: cl_uint,
1333            global_work_offset: *const size_t,
1334            global_work_size: *const size_t,
1335            local_work_size: *const size_t,
1336            num_sync_points_in_wait_list: cl_uint,
1337            sync_point_wait_list: *const cl_sync_point_khr,
1338            sync_point: *mut cl_sync_point_khr,
1339            mutable_handle: *mut cl_mutable_command_khr,
1340        ) -> cl_int,
1341    >,
1342
1343    clCommandSVMMemcpyKHR: Option<
1344        fn(
1345            command_buffer: cl_command_buffer_khr,
1346            command_queue: cl_command_queue,
1347            dst_ptr: *mut c_void,
1348            src_ptr: *const c_void,
1349            size: size_t,
1350            num_sync_points_in_wait_list: cl_uint,
1351            sync_point_wait_list: *const cl_sync_point_khr,
1352            sync_point: *mut cl_sync_point_khr,
1353            mutable_handle: *mut cl_mutable_command_khr,
1354        ) -> cl_int,
1355    >,
1356
1357    clCommandSVMMemFillKHR: Option<
1358        fn(
1359            command_buffer: cl_command_buffer_khr,
1360            command_queue: cl_command_queue,
1361            svm_ptr: *mut c_void,
1362            pattern: *const c_void,
1363            pattern_size: size_t,
1364            size: size_t,
1365            num_sync_points_in_wait_list: cl_uint,
1366            sync_point_wait_list: *const cl_sync_point_khr,
1367            sync_point: *mut cl_sync_point_khr,
1368            mutable_handle: *mut cl_mutable_command_khr,
1369        ) -> cl_int,
1370    >,
1371
1372    clGetCommandBufferInfoKHR: Option<
1373        fn(
1374            command_buffer: cl_command_buffer_khr,
1375            param_name: cl_command_buffer_info_khr,
1376            param_value_size: size_t,
1377            param_value: *mut c_void,
1378            param_value_size_ret: *mut size_t,
1379        ) -> cl_int,
1380    >,
1381
1382    clRemapCommandBufferKHR: Option<
1383        fn(
1384            command_buffer: cl_command_buffer_khr,
1385            automatic: cl_bool,
1386            num_queues: cl_uint,
1387            queues: *const cl_command_queue,
1388            num_handles: cl_uint,
1389            handles: *const cl_mutable_command_khr,
1390            handles_ret: *mut cl_mutable_command_khr,
1391            errcode_ret: *mut cl_int,
1392        ) -> cl_command_buffer_khr,
1393    >,
1394
1395    clUpdateMutableCommandsKHR: Option<
1396        fn(
1397            command_buffer: cl_command_buffer_khr,
1398            mutable_config: *const cl_mutable_base_config_khr,
1399        ) -> cl_int,
1400    >,
1401
1402    clGetMutableCommandInfoKHR: Option<
1403        fn(
1404            command: cl_mutable_command_khr,
1405            param_name: cl_mutable_command_info_khr,
1406            param_value_size: size_t,
1407            param_value: *mut c_void,
1408            param_value_size_ret: *mut size_t,
1409        ) -> cl_int,
1410    >,
1411
1412    clSetMemObjectDestructorAPPLE: Option<
1413        fn(
1414            memobj: cl_mem,
1415            pfn_notify: Option<unsafe extern "C" fn(memobj: cl_mem, user_data: *mut c_void)>,
1416            user_data: *mut c_void,
1417        ) -> cl_int,
1418    >,
1419
1420    clLogMessagesToSystemLogAPPLE: Option<
1421        fn(errstr: *const c_char, private_info: *const c_void, cb: size_t, user_data: *mut c_void),
1422    >,
1423
1424    clLogMessagesToStdoutAPPLE: Option<
1425        fn(errstr: *const c_char, private_info: *const c_void, cb: size_t, user_data: *mut c_void),
1426    >,
1427
1428    clLogMessagesToStderrAPPLE: Option<
1429        fn(errstr: *const c_char, private_info: *const c_void, cb: size_t, user_data: *mut c_void),
1430    >,
1431
1432    clIcdGetPlatformIDsKHR: Option<
1433        fn(
1434            num_entries: cl_uint,
1435            platforms: *mut cl_platform_id,
1436            num_platforms: *mut cl_uint,
1437        ) -> cl_int,
1438    >,
1439
1440    clCreateProgramWithILKHR: Option<
1441        fn(
1442            context: cl_context,
1443            il: *const c_void,
1444            length: size_t,
1445            errcode_ret: *mut cl_int,
1446        ) -> cl_program,
1447    >,
1448
1449    clTerminateContextKHR: Option<fn(context: cl_context) -> cl_int>,
1450
1451    clCreateCommandQueueWithPropertiesKHR: Option<
1452        fn(
1453            context: cl_context,
1454            device: cl_device_id,
1455            properties: *const cl_queue_properties_khr,
1456            errcode_ret: *mut cl_int,
1457        ) -> cl_command_queue,
1458    >,
1459
1460    clReleaseDeviceEXT: Option<fn(device: cl_device_id) -> cl_int>,
1461
1462    clRetainDeviceEXT: Option<fn(device: cl_device_id) -> cl_int>,
1463
1464    clCreateSubDevicesEXT: Option<
1465        fn(
1466            in_device: cl_device_id,
1467            properties: *const cl_device_partition_property_ext,
1468            num_entries: cl_uint,
1469            out_devices: *mut cl_device_id,
1470            num_devices: *mut cl_uint,
1471        ) -> cl_int,
1472    >,
1473
1474    clEnqueueMigrateMemObjectEXT: Option<
1475        fn(
1476            command_queue: cl_command_queue,
1477            num_mem_objects: cl_uint,
1478            mem_objects: *const cl_mem,
1479            flags: cl_mem_migration_flags_ext,
1480            num_events_in_wait_list: cl_uint,
1481            event_wait_list: *const cl_event,
1482            event: *mut cl_event,
1483        ) -> cl_int,
1484    >,
1485
1486    clGetDeviceImageInfoQCOM: Option<
1487        fn(
1488            device: cl_device_id,
1489            image_width: size_t,
1490            image_height: size_t,
1491            image_format: *const cl_image_format,
1492            param_name: cl_image_pitch_info_qcom,
1493            param_value_size: size_t,
1494            param_value: *mut c_void,
1495            param_value_size_ret: *mut size_t,
1496        ) -> cl_int,
1497    >,
1498
1499    clEnqueueAcquireGrallocObjectsIMG: Option<
1500        fn(
1501            command_queue: cl_command_queue,
1502            num_objects: cl_uint,
1503            mem_objects: *const cl_mem,
1504            num_events_in_wait_list: cl_uint,
1505            event_wait_list: *const cl_event,
1506            event: *mut cl_event,
1507        ) -> cl_int,
1508    >,
1509
1510    clEnqueueReleaseGrallocObjectsIMG: Option<
1511        fn(
1512            command_queue: cl_command_queue,
1513            num_objects: cl_uint,
1514            mem_objects: *const cl_mem,
1515            num_events_in_wait_list: cl_uint,
1516            event_wait_list: *const cl_event,
1517            event: *mut cl_event,
1518        ) -> cl_int,
1519    >,
1520
1521    clEnqueueGenerateMipmapIMG: Option<
1522        fn(
1523            command_queue: cl_command_queue,
1524            src_image: cl_mem,
1525            dst_image: cl_mem,
1526            mipmap_filter_mode: cl_mipmap_filter_mode_img,
1527            array_region: *const size_t,
1528            mip_region: *const size_t,
1529            num_events_in_wait_list: cl_uint,
1530            event_wait_list: *const cl_event,
1531            event: *mut cl_event,
1532        ) -> cl_int,
1533    >,
1534
1535    clGetKernelSubGroupInfoKHR: Option<
1536        fn(
1537            in_kernel: cl_kernel,
1538            in_device: cl_device_id,
1539            param_name: cl_kernel_sub_group_info,
1540            input_value_size: size_t,
1541            input_value: *const c_void,
1542            param_value_size: size_t,
1543            param_value: *mut c_void,
1544            param_value_size_ret: *mut size_t,
1545        ) -> cl_int,
1546    >,
1547
1548    clGetKernelSuggestedLocalWorkSizeKHR: Option<
1549        fn(
1550            command_queue: cl_command_queue,
1551            kernel: cl_kernel,
1552            work_dim: cl_uint,
1553            global_work_offset: *const size_t,
1554            global_work_size: *const size_t,
1555            suggested_local_work_size: *mut size_t,
1556        ) -> cl_int,
1557    >,
1558
1559    clEnqueueAcquireExternalMemObjectsKHR: Option<
1560        fn(
1561            command_queue: cl_command_queue,
1562            num_mem_objects: cl_uint,
1563            mem_objects: *const cl_mem,
1564            num_events_in_wait_list: cl_uint,
1565            event_wait_list: *const cl_event,
1566            event: *mut cl_event,
1567        ) -> cl_int,
1568    >,
1569
1570    clEnqueueReleaseExternalMemObjectsKHR: Option<
1571        fn(
1572            command_queue: cl_command_queue,
1573            num_mem_objects: cl_uint,
1574            mem_objects: *const cl_mem,
1575            num_events_in_wait_list: cl_uint,
1576            event_wait_list: *const cl_event,
1577            event: *mut cl_event,
1578        ) -> cl_int,
1579    >,
1580
1581    clGetSemaphoreHandleForTypeKHR: Option<
1582        fn(
1583            sema_object: cl_semaphore_khr,
1584            device: cl_device_id,
1585            handle_type: cl_external_semaphore_handle_type_khr,
1586            handle_size: size_t,
1587            handle_ptr: *mut c_void,
1588            handle_size_ret: *mut size_t,
1589        ) -> cl_int,
1590    >,
1591
1592    clReImportSemaphoreSyncFdKHR: Option<
1593        fn(
1594            sema_object: cl_semaphore_khr,
1595            reimport_props: *mut cl_semaphore_reimport_properties_khr,
1596            fd: c_int,
1597        ) -> cl_int,
1598    >,
1599
1600    clCreateSemaphoreWithPropertiesKHR: Option<
1601        fn(
1602            context: cl_context,
1603            sema_props: *const cl_semaphore_properties_khr,
1604            errcode_ret: *mut cl_int,
1605        ) -> cl_semaphore_khr,
1606    >,
1607
1608    clEnqueueWaitSemaphoresKHR: Option<
1609        fn(
1610            command_queue: cl_command_queue,
1611            num_sema_objects: cl_uint,
1612            sema_objects: *const cl_semaphore_khr,
1613            sema_payload_list: *const cl_semaphore_payload_khr,
1614            num_events_in_wait_list: cl_uint,
1615            event_wait_list: *const cl_event,
1616            event: *mut cl_event,
1617        ) -> cl_int,
1618    >,
1619
1620    clEnqueueSignalSemaphoresKHR: Option<
1621        fn(
1622            command_queue: cl_command_queue,
1623            num_sema_objects: cl_uint,
1624            sema_objects: *const cl_semaphore_khr,
1625            sema_payload_list: *const cl_semaphore_payload_khr,
1626            num_events_in_wait_list: cl_uint,
1627            event_wait_list: *const cl_event,
1628            event: *mut cl_event,
1629        ) -> cl_int,
1630    >,
1631
1632    clGetSemaphoreInfoKHR: Option<
1633        fn(
1634            sema_object: cl_semaphore_khr,
1635            param_name: cl_semaphore_info_khr,
1636            param_value_size: size_t,
1637            param_value: *mut c_void,
1638            param_value_size_ret: *mut size_t,
1639        ) -> cl_int,
1640    >,
1641
1642    clReleaseSemaphoreKHR: Option<fn(sema_object: cl_semaphore_khr) -> cl_int>,
1643
1644    clRetainSemaphoreKHR: Option<fn(sema_object: cl_semaphore_khr) -> cl_int>,
1645
1646    clImportMemoryARM: Option<
1647        fn(
1648            context: cl_context,
1649            flags: cl_mem_flags,
1650            properties: *const cl_import_properties_arm,
1651            memory: *mut c_void,
1652            size: size_t,
1653            errcode_ret: *mut cl_int,
1654        ) -> cl_mem,
1655    >,
1656
1657    clSVMAllocARM: Option<
1658        fn(
1659            context: cl_context,
1660            flags: cl_svm_mem_flags_arm,
1661            size: size_t,
1662            alignment: cl_uint,
1663        ) -> *mut c_void,
1664    >,
1665
1666    clSVMFreeARM: Option<fn(context: cl_context, svm_pointer: *mut c_void)>,
1667
1668    clEnqueueSVMFreeARM: Option<
1669        fn(
1670            command_queue: cl_command_queue,
1671            num_svm_pointers: cl_uint,
1672            svm_pointers: *mut *mut c_void,
1673            pfn_free_func: Option<
1674                unsafe extern "C" fn(
1675                    queue: cl_command_queue,
1676                    num_svm_pointers: cl_uint,
1677                    svm_pointers: *mut *mut c_void,
1678                    user_data: *mut c_void,
1679                ),
1680            >,
1681            user_data: *mut c_void,
1682            num_events_in_wait_list: cl_uint,
1683            event_wait_list: *const cl_event,
1684            event: *mut cl_event,
1685        ) -> cl_int,
1686    >,
1687
1688    clEnqueueSVMMemcpyARM: Option<
1689        fn(
1690            command_queue: cl_command_queue,
1691            blocking_copy: cl_bool,
1692            dst_ptr: *mut c_void,
1693            src_ptr: *const c_void,
1694            size: size_t,
1695            num_events_in_wait_list: cl_uint,
1696            event_wait_list: *const cl_event,
1697            event: *mut cl_event,
1698        ) -> cl_int,
1699    >,
1700
1701    clEnqueueSVMMemFillARM: Option<
1702        fn(
1703            command_queue: cl_command_queue,
1704            svm_ptr: *mut c_void,
1705            pattern: *const c_void,
1706            pattern_size: size_t,
1707            size: size_t,
1708            num_events_in_wait_list: cl_uint,
1709            event_wait_list: *const cl_event,
1710            event: *mut cl_event,
1711        ) -> cl_int,
1712    >,
1713
1714    clEnqueueSVMMapARM: Option<
1715        fn(
1716            command_queue: cl_command_queue,
1717            blocking_map: cl_bool,
1718            flags: cl_map_flags,
1719            svm_ptr: *mut c_void,
1720            size: size_t,
1721            num_events_in_wait_list: cl_uint,
1722            event_wait_list: *const cl_event,
1723            event: *mut cl_event,
1724        ) -> cl_int,
1725    >,
1726
1727    clEnqueueSVMUnmapARM: Option<
1728        fn(
1729            command_queue: cl_command_queue,
1730            svm_ptr: *mut c_void,
1731            num_events_in_wait_list: cl_uint,
1732            event_wait_list: *const cl_event,
1733            event: *mut cl_event,
1734        ) -> cl_int,
1735    >,
1736
1737    clSetKernelArgSVMPointerARM:
1738        Option<fn(kernel: cl_kernel, arg_index: cl_uint, arg_value: *const c_void) -> cl_int>,
1739
1740    clSetKernelExecInfoARM: Option<
1741        fn(
1742            kernel: cl_kernel,
1743            param_name: cl_kernel_exec_info_arm,
1744            param_value_size: size_t,
1745            param_value: *const c_void,
1746        ) -> cl_int,
1747    >,
1748
1749    clCreateAcceleratorINTEL: Option<
1750        fn(
1751            context: cl_context,
1752            accelerator_type: cl_accelerator_type_intel,
1753            descriptor_size: size_t,
1754            descriptor: *const c_void,
1755            errcode_ret: *mut cl_int,
1756        ) -> cl_accelerator_intel,
1757    >,
1758
1759    clGetAcceleratorInfoINTEL: Option<
1760        fn(
1761            accelerator: cl_accelerator_intel,
1762            param_name: cl_accelerator_info_intel,
1763            param_value_size: size_t,
1764            param_value: *mut c_void,
1765            param_value_size_ret: *mut size_t,
1766        ) -> cl_int,
1767    >,
1768
1769    clRetainAcceleratorINTEL: Option<fn(accelerator: cl_accelerator_intel) -> cl_int>,
1770
1771    clReleaseAcceleratorINTEL: Option<fn(accelerator: cl_accelerator_intel) -> cl_int>,
1772
1773    clHostMemAllocINTEL: Option<
1774        fn(
1775            context: cl_context,
1776            properties: *const cl_mem_properties_intel,
1777            size: size_t,
1778            alignment: cl_uint,
1779            errcode_ret: *mut cl_int,
1780        ) -> *mut c_void,
1781    >,
1782
1783    clDeviceMemAllocINTEL: Option<
1784        fn(
1785            context: cl_context,
1786            device: cl_device_id,
1787            properties: *const cl_mem_properties_intel,
1788            size: size_t,
1789            alignment: cl_uint,
1790            errcode_ret: *mut cl_int,
1791        ) -> *mut c_void,
1792    >,
1793
1794    clSharedMemAllocINTEL: Option<
1795        fn(
1796            context: cl_context,
1797            device: cl_device_id,
1798            properties: *const cl_mem_properties_intel,
1799            size: size_t,
1800            alignment: cl_uint,
1801            errcode_ret: *mut cl_int,
1802        ) -> *mut c_void,
1803    >,
1804
1805    clMemFreeINTEL: Option<fn(context: cl_context, ptr: *mut c_void) -> cl_int>,
1806
1807    clMemBlockingFreeINTEL: Option<fn(context: cl_context, ptr: *mut c_void) -> cl_int>,
1808
1809    clGetMemAllocInfoINTEL: Option<
1810        fn(
1811            context: cl_context,
1812            ptr: *const c_void,
1813            param_name: cl_mem_info_intel,
1814            param_value_size: size_t,
1815            param_value: *mut c_void,
1816            param_value_size_ret: *mut size_t,
1817        ) -> cl_int,
1818    >,
1819
1820    clSetKernelArgMemPointerINTEL:
1821        Option<fn(kernel: cl_kernel, arg_index: cl_uint, arg_value: *const c_void) -> cl_int>,
1822
1823    clEnqueueMemFillINTEL: Option<
1824        fn(
1825            command_queue: cl_command_queue,
1826            dst_ptr: *mut c_void,
1827            pattern: *const c_void,
1828            pattern_size: size_t,
1829            size: size_t,
1830            num_events_in_wait_list: cl_uint,
1831            event_wait_list: *const cl_event,
1832            event: *mut cl_event,
1833        ) -> cl_int,
1834    >,
1835
1836    clEnqueueMemcpyINTEL: Option<
1837        fn(
1838            command_queue: cl_command_queue,
1839            blocking: cl_bool,
1840            dst_ptr: *mut c_void,
1841            src_ptr: *const c_void,
1842            size: size_t,
1843            num_events_in_wait_list: cl_uint,
1844            event_wait_list: *const cl_event,
1845            event: *mut cl_event,
1846        ) -> cl_int,
1847    >,
1848
1849    clEnqueueMemAdviseINTEL: Option<
1850        fn(
1851            command_queue: cl_command_queue,
1852            ptr: *const c_void,
1853            size: size_t,
1854            advice: cl_mem_advice_intel,
1855            num_events_in_wait_list: cl_uint,
1856            event_wait_list: *const cl_event,
1857            event: *mut cl_event,
1858        ) -> cl_int,
1859    >,
1860
1861    clEnqueueMigrateMemINTEL: Option<
1862        fn(
1863            command_queue: cl_command_queue,
1864            ptr: *const c_void,
1865            size: size_t,
1866            flags: cl_mem_migration_flags,
1867            num_events_in_wait_list: cl_uint,
1868            event_wait_list: *const cl_event,
1869            event: *mut cl_event,
1870        ) -> cl_int,
1871    >,
1872
1873    clEnqueueMemsetINTEL: Option<
1874        fn(
1875            command_queue: cl_command_queue,
1876            dst_ptr: *mut c_void,
1877            value: cl_int,
1878            size: size_t,
1879            num_events_in_wait_list: cl_uint,
1880            event_wait_list: *const cl_event,
1881            event: *mut cl_event,
1882        ) -> cl_int,
1883    >,
1884
1885    clCreateBufferWithPropertiesINTEL: Option<
1886        fn(
1887            context: cl_context,
1888            properties: *const cl_mem_properties_intel,
1889            flags: cl_mem_flags,
1890            size: size_t,
1891            host_ptr: *mut c_void,
1892            errcode_ret: *mut cl_int,
1893        ) -> cl_mem,
1894    >,
1895
1896    clEnqueueReadHostPipeINTEL: Option<
1897        fn(
1898            queue: cl_command_queue,
1899            program: cl_program,
1900            pipe_symbol: *const c_char,
1901            blocking_read: cl_bool,
1902            ptr: *mut c_void,
1903            size: size_t,
1904            num_events_in_wait_list: cl_uint,
1905            event_wait_list: *const cl_event,
1906            event: *mut cl_event,
1907        ) -> cl_int,
1908    >,
1909
1910    clEnqueueWriteHostPipeINTEL: Option<
1911        fn(
1912            queue: cl_command_queue,
1913            program: cl_program,
1914            pipe_symbol: *const c_char,
1915            blocking_write: cl_bool,
1916            ptr: *const c_void,
1917            size: size_t,
1918            num_events_in_wait_list: cl_uint,
1919            event_wait_list: *const cl_event,
1920            event: *mut cl_event,
1921        ) -> cl_int,
1922    >,
1923
1924    clGetImageRequirementsInfoEXT: Option<
1925        fn(
1926            context: cl_context,
1927            properties: *const cl_mem_properties,
1928            flags: cl_mem_flags,
1929            image_format: *const cl_image_format,
1930            image_desc: *const cl_image_desc,
1931            param_name: cl_image_requirements_info_ext,
1932            param_value_size: size_t,
1933            param_value: *mut c_void,
1934            param_value_size_ret: *mut size_t,
1935        ) -> cl_int,
1936    >,
1937
1938    clGetICDLoaderInfoOCLICD: Option<
1939        fn(
1940            param_name: cl_icdl_info,
1941            param_value_size: size_t,
1942            param_value: *mut c_void,
1943            param_value_size_ret: *mut size_t,
1944        ) -> cl_int,
1945    >,
1946
1947    clSetContentSizeBufferPoCL: Option<fn(buffer: cl_mem, content_size_buffer: cl_mem) -> cl_int>,
1948
1949    // OpenGL APIs
1950    clCreateFromGLBuffer: Option<
1951        fn(
1952            context: cl_context,
1953            flags: cl_mem_flags,
1954            bufobj: cl_GLuint,
1955            errcode_ret: *mut cl_int,
1956        ) -> cl_mem,
1957    >,
1958
1959    clCreateFromGLTexture: Option<
1960        fn(
1961            context: cl_context,
1962            flags: cl_mem_flags,
1963            target: cl_GLenum,
1964            miplevel: cl_GLint,
1965            texture: cl_GLuint,
1966            errcode_ret: *mut cl_int,
1967        ) -> cl_mem,
1968    >,
1969
1970    clCreateFromGLRenderbuffer: Option<
1971        fn(
1972            context: cl_context,
1973            flags: cl_mem_flags,
1974            renderbuffer: cl_GLuint,
1975            errcode_ret: *mut cl_int,
1976        ) -> cl_mem,
1977    >,
1978
1979    clGetGLObjectInfo: Option<
1980        fn(
1981            memobj: cl_mem,
1982            gl_object_type: *mut cl_gl_object_type,
1983            gl_object_name: *mut cl_GLuint,
1984        ) -> cl_int,
1985    >,
1986
1987    clGetGLTextureInfo: Option<
1988        fn(
1989            memobj: cl_mem,
1990            param_name: cl_gl_texture_info,
1991            param_value_size: size_t,
1992            param_value: *mut c_void,
1993            param_value_size_ret: *mut size_t,
1994        ) -> cl_int,
1995    >,
1996
1997    clEnqueueAcquireGLObjects: Option<
1998        fn(
1999            command_queue: cl_command_queue,
2000            num_objects: cl_uint,
2001            mem_objects: *const cl_mem,
2002            num_events_in_wait_list: cl_uint,
2003            event_wait_list: *const cl_event,
2004            event: *mut cl_event,
2005        ) -> cl_int,
2006    >,
2007
2008    clEnqueueReleaseGLObjects: Option<
2009        fn(
2010            command_queue: cl_command_queue,
2011            num_objects: cl_uint,
2012            mem_objects: *const cl_mem,
2013            num_events_in_wait_list: cl_uint,
2014            event_wait_list: *const cl_event,
2015            event: *mut cl_event,
2016        ) -> cl_int,
2017    >,
2018
2019    // Deprecated OpenCL 1.1 APIs
2020    clCreateFromGLTexture2D: Option<
2021        fn(
2022            context: cl_context,
2023            flags: cl_mem_flags,
2024            texture_target: cl_GLenum,
2025            miplevel: cl_GLint,
2026            texture: cl_GLuint,
2027            errcode_ret: *mut cl_int,
2028        ) -> cl_mem,
2029    >,
2030
2031    clCreateFromGLTexture3D: Option<
2032        fn(
2033            context: cl_context,
2034            flags: cl_mem_flags,
2035            texture_target: cl_GLenum,
2036            miplevel: cl_GLint,
2037            texture: cl_GLuint,
2038            errcode_ret: *mut cl_int,
2039        ) -> cl_mem,
2040    >,
2041
2042    clGetGLContextInfoKHR: Option<
2043        fn(
2044            properties: *const cl_context_properties,
2045            param_name: cl_gl_context_info,
2046            param_value_size: size_t,
2047            param_value: *mut c_void,
2048            param_value_size_ret: *mut size_t,
2049        ) -> cl_int,
2050    >,
2051
2052    clCreateEventFromGLsyncKHR:
2053        Option<fn(context: cl_context, sync: cl_GLsync, errcode_ret: *mut cl_int) -> cl_event>,
2054
2055    clGetSupportedGLTextureFormatsINTEL: Option<
2056        fn(
2057            context: cl_context,
2058            flags: cl_mem_flags,
2059            image_type: cl_mem_object_type,
2060            num_entries: cl_uint,
2061            gl_formats: *mut cl_GLenum,
2062            num_texture_formats: *mut cl_uint,
2063        ) -> cl_int,
2064    >,
2065
2066    // Layer APIs
2067    clGetLayerInfo: Option<
2068        fn(
2069            param_name: cl_layer_info,
2070            param_value_size: size_t,
2071            param_value: *mut c_void,
2072            param_value_size_ret: *mut size_t,
2073        ) -> cl_int,
2074    >,
2075
2076    clInitLayer: Option<
2077        fn(
2078            num_entries: cl_uint,
2079            target_dispatch: *const cl_icd_dispatch,
2080            num_entries_ret: *mut cl_uint,
2081            layer_dispatch_ret: *mut *const cl_icd_dispatch,
2082        ) -> cl_int,
2083    >,
2084}