• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright 2013 Francisco Jerez
3 //
4 // Permission is hereby granted, free of charge, to any person obtaining a
5 // copy of this software and associated documentation files (the "Software"),
6 // to deal in the Software without restriction, including without limitation
7 // the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 // and/or sell copies of the Software, and to permit persons to whom the
9 // Software is furnished to do so, subject to the following conditions:
10 //
11 // The above copyright notice and this permission notice shall be included in
12 // all copies or substantial portions of the Software.
13 //
14 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18 // OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19 // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20 // OTHER DEALINGS IN THE SOFTWARE.
21 //
22 
23 #ifndef API_DISPATCH_HPP
24 #define API_DISPATCH_HPP
25 
26 #define CL_USE_DEPRECATED_OPENCL_1_1_APIS
27 
28 #include "CL/cl.h"
29 #include "CL/cl_ext.h"
30 #include "CL/cl_gl.h"
31 
32 ///
33 /// OpenCL ICD vendor dispatch table.
34 ///
35 /// The entry point ordering should always be in agreement with
36 /// Khronos' ICD loader.
37 ///
38 struct _cl_icd_dispatch {
39    CL_API_ENTRY cl_int (CL_API_CALL *clGetPlatformIDs)(
40       cl_uint num_entries,
41       cl_platform_id *platforms,
42       cl_uint *num_platforms);
43 
44    CL_API_ENTRY cl_int (CL_API_CALL *clGetPlatformInfo)(
45       cl_platform_id platform,
46       cl_platform_info param_name,
47       size_t param_value_size,
48       void *param_value,
49       size_t *param_value_size_ret);
50 
51    CL_API_ENTRY cl_int (CL_API_CALL *clGetDeviceIDs)(
52       cl_platform_id platform,
53       cl_device_type device_type,
54       cl_uint num_entries,
55       cl_device_id *devices,
56       cl_uint *num_devices);
57 
58    CL_API_ENTRY cl_int (CL_API_CALL *clGetDeviceInfo)(
59       cl_device_id device,
60       cl_device_info param_name,
61       size_t param_value_size,
62       void *param_value,
63       size_t *param_value_size_ret);
64 
65    CL_API_ENTRY cl_context (CL_API_CALL *clCreateContext)(
66       const cl_context_properties *properties,
67       cl_uint num_devices,
68       const cl_device_id *devices,
69       void (CL_CALLBACK *pfn_notify)(const char *, const void *, size_t, void *),
70       void *user_data,
71       cl_int *errcode_ret);
72 
73    CL_API_ENTRY cl_context (CL_API_CALL *clCreateContextFromType)(
74       const cl_context_properties *properties,
75       cl_device_type device_type,
76       void (CL_CALLBACK *pfn_notify)(const char *, const void *, size_t, void *),
77       void *user_data,
78       cl_int *errcode_ret);
79 
80    CL_API_ENTRY cl_int (CL_API_CALL *clRetainContext)(
81       cl_context context);
82 
83    CL_API_ENTRY cl_int (CL_API_CALL *clReleaseContext)(
84       cl_context context);
85 
86    CL_API_ENTRY cl_int (CL_API_CALL *clGetContextInfo)(
87       cl_context context,
88       cl_context_info param_name,
89       size_t param_value_size,
90       void *param_value,
91       size_t *param_value_size_ret);
92 
93    CL_API_ENTRY cl_command_queue (CL_API_CALL *clCreateCommandQueue)(
94       cl_context context,
95       cl_device_id device,
96       cl_command_queue_properties properties,
97       cl_int *errcode_ret);
98 
99    CL_API_ENTRY cl_int (CL_API_CALL *clRetainCommandQueue)(
100       cl_command_queue command_queue);
101 
102    CL_API_ENTRY cl_int (CL_API_CALL *clReleaseCommandQueue)(
103       cl_command_queue command_queue);
104 
105    CL_API_ENTRY cl_int (CL_API_CALL *clGetCommandQueueInfo)(
106       cl_command_queue command_queue,
107       cl_command_queue_info param_name,
108       size_t param_value_size,
109       void *param_value,
110       size_t *param_value_size_ret);
111 
112    CL_API_ENTRY cl_int (CL_API_CALL *clSetCommandQueueProperty)(
113       cl_command_queue command_queue,
114       cl_command_queue_properties properties,
115       cl_bool enable,
116       cl_command_queue_properties *old_properties);
117 
118    CL_API_ENTRY cl_mem (CL_API_CALL *clCreateBuffer)(
119       cl_context context,
120       cl_mem_flags flags,
121       size_t size,
122       void *host_ptr,
123       cl_int *errcode_ret);
124 
125    CL_API_ENTRY cl_mem (CL_API_CALL *clCreateImage2D)(
126       cl_context context,
127       cl_mem_flags flags,
128       const cl_image_format *image_format,
129       size_t image_width,
130       size_t image_height,
131       size_t image_row_pitch,
132       void *host_ptr,
133       cl_int *errcode_ret);
134 
135    CL_API_ENTRY cl_mem (CL_API_CALL *clCreateImage3D)(
136       cl_context context,
137       cl_mem_flags flags,
138       const cl_image_format *image_format,
139       size_t image_width,
140       size_t image_height,
141       size_t image_depth,
142       size_t image_row_pitch,
143       size_t image_slice_pitch,
144       void *host_ptr,
145       cl_int *errcode_ret);
146 
147    CL_API_ENTRY cl_int (CL_API_CALL *clRetainMemObject)(
148       cl_mem memobj);
149 
150    CL_API_ENTRY cl_int (CL_API_CALL *clReleaseMemObject)(
151       cl_mem memobj);
152 
153    CL_API_ENTRY cl_int (CL_API_CALL *clGetSupportedImageFormats)(
154       cl_context context,
155       cl_mem_flags flags,
156       cl_mem_object_type image_type,
157       cl_uint num_entries,
158       cl_image_format *image_formats,
159       cl_uint *num_image_formats);
160 
161    CL_API_ENTRY cl_int (CL_API_CALL *clGetMemObjectInfo)(
162       cl_mem memobj,
163       cl_mem_info param_name,
164       size_t param_value_size,
165       void *param_value,
166       size_t *param_value_size_ret);
167 
168    CL_API_ENTRY cl_int (CL_API_CALL *clGetImageInfo)(
169       cl_mem image,
170       cl_image_info param_name,
171       size_t param_value_size,
172       void *param_value,
173       size_t *param_value_size_ret);
174 
175    CL_API_ENTRY cl_sampler (CL_API_CALL *clCreateSampler)(
176       cl_context context,
177       cl_bool normalized_coords,
178       cl_addressing_mode addressing_mode,
179       cl_filter_mode filter_mode,
180       cl_int *errcode_ret);
181 
182    CL_API_ENTRY cl_int (CL_API_CALL *clRetainSampler)(
183       cl_sampler sampler);
184 
185    CL_API_ENTRY cl_int (CL_API_CALL *clReleaseSampler)(
186       cl_sampler sampler);
187 
188    CL_API_ENTRY cl_int (CL_API_CALL *clGetSamplerInfo)(
189       cl_sampler sampler,
190       cl_sampler_info param_name,
191       size_t param_value_size,
192       void *param_value,
193       size_t *param_value_size_ret);
194 
195    CL_API_ENTRY cl_program (CL_API_CALL *clCreateProgramWithSource)(
196       cl_context context,
197       cl_uint count,
198       const char **strings,
199       const size_t *lengths,
200       cl_int *errcode_ret);
201 
202    CL_API_ENTRY cl_program (CL_API_CALL *clCreateProgramWithBinary)(
203       cl_context context,
204       cl_uint num_devices,
205       const cl_device_id *device_list,
206       const size_t *lengths,
207       const unsigned char **binaries,
208       cl_int *binary_status,
209       cl_int *errcode_ret);
210 
211    CL_API_ENTRY cl_int (CL_API_CALL *clRetainProgram)(
212       cl_program program);
213 
214    CL_API_ENTRY cl_int (CL_API_CALL *clReleaseProgram)(
215       cl_program program);
216 
217    CL_API_ENTRY cl_int (CL_API_CALL *clBuildProgram)(
218       cl_program program,
219       cl_uint num_devices,
220       const cl_device_id *device_list,
221       const char *options,
222       void (CL_CALLBACK *pfn_notify)(cl_program, void *),
223       void *user_data);
224 
225    CL_API_ENTRY cl_int (CL_API_CALL *clUnloadCompiler)(
226       void);
227 
228    CL_API_ENTRY cl_int (CL_API_CALL *clGetProgramInfo)(
229       cl_program program,
230       cl_program_info param_name,
231       size_t param_value_size,
232       void *param_value,
233       size_t *param_value_size_ret);
234 
235    CL_API_ENTRY cl_int (CL_API_CALL *clGetProgramBuildInfo)(
236       cl_program program,
237       cl_device_id device,
238       cl_program_build_info param_name,
239       size_t param_value_size,
240       void *param_value,
241       size_t *param_value_size_ret);
242 
243    CL_API_ENTRY cl_kernel (CL_API_CALL *clCreateKernel)(
244       cl_program program,
245       const char *kernel_name,
246       cl_int *errcode_ret);
247 
248    CL_API_ENTRY cl_int (CL_API_CALL *clCreateKernelsInProgram)(
249       cl_program program,
250       cl_uint num_kernels,
251       cl_kernel *kernels,
252       cl_uint *num_kernels_ret);
253 
254    CL_API_ENTRY cl_int (CL_API_CALL *clRetainKernel)(
255       cl_kernel kernel);
256 
257    CL_API_ENTRY cl_int (CL_API_CALL *clReleaseKernel)(
258       cl_kernel kernel);
259 
260    CL_API_ENTRY cl_int (CL_API_CALL *clSetKernelArg)(
261       cl_kernel kernel,
262       cl_uint arg_index,
263       size_t arg_size,
264       const void *arg_value);
265 
266    CL_API_ENTRY cl_int (CL_API_CALL *clGetKernelInfo)(
267       cl_kernel kernel,
268       cl_kernel_info param_name,
269       size_t param_value_size,
270       void *param_value,
271       size_t *param_value_size_ret);
272 
273    CL_API_ENTRY cl_int (CL_API_CALL *clGetKernelWorkGroupInfo)(
274       cl_kernel kernel,
275       cl_device_id device,
276       cl_kernel_work_group_info param_name,
277       size_t param_value_size,
278       void *param_value,
279       size_t *param_value_size_ret);
280 
281    CL_API_ENTRY cl_int (CL_API_CALL *clWaitForEvents)(
282       cl_uint num_events,
283       const cl_event *event_list);
284 
285    CL_API_ENTRY cl_int (CL_API_CALL *clGetEventInfo)(
286       cl_event event,
287       cl_event_info param_name,
288       size_t param_value_size,
289       void *param_value,
290       size_t *param_value_size_ret);
291 
292    CL_API_ENTRY cl_int (CL_API_CALL *clRetainEvent)(
293       cl_event event);
294 
295    CL_API_ENTRY cl_int (CL_API_CALL *clReleaseEvent)(
296       cl_event event);
297 
298    CL_API_ENTRY cl_int (CL_API_CALL *clGetEventProfilingInfo)(
299       cl_event event,
300       cl_profiling_info param_name,
301       size_t param_value_size,
302       void *param_value,
303       size_t *param_value_size_ret);
304 
305    CL_API_ENTRY cl_int (CL_API_CALL *clFlush)(
306       cl_command_queue command_queue);
307 
308    CL_API_ENTRY cl_int (CL_API_CALL *clFinish)(
309       cl_command_queue command_queue);
310 
311    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueReadBuffer)(
312       cl_command_queue command_queue,
313       cl_mem buffer,
314       cl_bool blocking_read,
315       size_t offset,
316       size_t cb,
317       void *ptr,
318       cl_uint num_events_in_wait_list,
319       const cl_event *event_wait_list,
320       cl_event *event);
321 
322    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueWriteBuffer)(
323       cl_command_queue command_queue,
324       cl_mem buffer,
325       cl_bool blocking_write,
326       size_t offset,
327       size_t cb,
328       const void *ptr,
329       cl_uint num_events_in_wait_list,
330       const cl_event *event_wait_list,
331       cl_event *event);
332 
333    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueCopyBuffer)(
334       cl_command_queue command_queue,
335       cl_mem src_buffer,
336       cl_mem dst_buffer,
337       size_t src_offset,
338       size_t dst_offset,
339       size_t cb,
340       cl_uint num_events_in_wait_list,
341       const cl_event *event_wait_list,
342       cl_event *event);
343 
344    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueReadImage)(
345       cl_command_queue command_queue,
346       cl_mem image,
347       cl_bool blocking_read,
348       const size_t *origin,
349       const size_t *region,
350       size_t row_pitch,
351       size_t slice_pitch,
352       void *ptr,
353       cl_uint num_events_in_wait_list,
354       const cl_event *event_wait_list,
355       cl_event *event);
356 
357    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueWriteImage)(
358       cl_command_queue command_queue,
359       cl_mem image,
360       cl_bool blocking_write,
361       const size_t *origin,
362       const size_t *region,
363       size_t input_row_pitch,
364       size_t input_slice_pitch,
365       const void *ptr,
366       cl_uint num_events_in_wait_list,
367       const cl_event *event_wait_list,
368       cl_event *event);
369 
370    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueCopyImage)(
371       cl_command_queue command_queue,
372       cl_mem src_image,
373       cl_mem dst_image,
374       const size_t *src_origin,
375       const size_t *dst_origin,
376       const size_t *region,
377       cl_uint num_events_in_wait_list,
378       const cl_event *event_wait_list,
379       cl_event *event);
380 
381    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueCopyImageToBuffer)(
382       cl_command_queue command_queue,
383       cl_mem src_image,
384       cl_mem dst_buffer,
385       const size_t *src_origin,
386       const size_t *region,
387       size_t dst_offset,
388       cl_uint num_events_in_wait_list,
389       const cl_event *event_wait_list,
390       cl_event *event);
391 
392    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueCopyBufferToImage)(
393       cl_command_queue command_queue,
394       cl_mem src_buffer,
395       cl_mem dst_image,
396       size_t src_offset,
397       const size_t *dst_origin,
398       const size_t *region,
399       cl_uint num_events_in_wait_list,
400       const cl_event *event_wait_list,
401       cl_event *event);
402 
403    CL_API_ENTRY void *(CL_API_CALL *clEnqueueMapBuffer)(
404       cl_command_queue command_queue,
405       cl_mem buffer,
406       cl_bool blocking_map,
407       cl_map_flags map_flags,
408       size_t offset,
409       size_t cb,
410       cl_uint num_events_in_wait_list,
411       const cl_event *event_wait_list,
412       cl_event *event,
413       cl_int *errcode_ret);
414 
415    CL_API_ENTRY void *(CL_API_CALL *clEnqueueMapImage)(
416       cl_command_queue command_queue,
417       cl_mem image,
418       cl_bool blocking_map,
419       cl_map_flags map_flags,
420       const size_t *origin,
421       const size_t *region,
422       size_t *image_row_pitch,
423       size_t *image_slice_pitch,
424       cl_uint num_events_in_wait_list,
425       const cl_event *event_wait_list,
426       cl_event *event,
427       cl_int *errcode_ret);
428 
429    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueUnmapMemObject)(
430       cl_command_queue command_queue,
431       cl_mem memobj,
432       void *mapped_ptr,
433       cl_uint num_events_in_wait_list,
434       const cl_event *event_wait_list,
435       cl_event *event);
436 
437    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueNDRangeKernel)(
438       cl_command_queue command_queue,
439       cl_kernel kernel,
440       cl_uint work_dim,
441       const size_t *global_work_offset,
442       const size_t *global_work_size,
443       const size_t *local_work_size,
444       cl_uint num_events_in_wait_list,
445       const cl_event *event_wait_list,
446       cl_event *event);
447 
448    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueTask)(
449       cl_command_queue command_queue,
450       cl_kernel kernel,
451       cl_uint num_events_in_wait_list,
452       const cl_event *event_wait_list,
453       cl_event *event);
454 
455    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueNativeKernel)(
456       cl_command_queue command_queue,
457       void (CL_CALLBACK *user_func)(void *),
458       void *args,
459       size_t cb_args,
460       cl_uint num_mem_objects,
461       const cl_mem *mem_list,
462       const void **args_mem_loc,
463       cl_uint num_events_in_wait_list,
464       const cl_event *event_wait_list,
465       cl_event *event);
466 
467    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueMarker)(
468       cl_command_queue command_queue,
469       cl_event *event);
470 
471    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueWaitForEvents)(
472       cl_command_queue command_queue,
473       cl_uint num_events,
474       const cl_event *event_list);
475 
476    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueBarrier)(
477       cl_command_queue command_queue);
478 
479    CL_API_ENTRY void *(CL_API_CALL *clGetExtensionFunctionAddress)(
480       const char *function_name);
481 
482    CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromGLBuffer)(
483       cl_context context,
484       cl_mem_flags flags,
485       cl_GLuint bufobj,
486       int *errcode_ret);
487 
488    CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromGLTexture2D)(
489       cl_context context,
490       cl_mem_flags flags,
491       cl_GLenum target,
492       cl_GLint miplevel,
493       cl_GLuint texture,
494       cl_int *errcode_ret);
495 
496    CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromGLTexture3D)(
497       cl_context context,
498       cl_mem_flags flags,
499       cl_GLenum target,
500       cl_GLint miplevel,
501       cl_GLuint texture,
502       cl_int *errcode_ret);
503 
504    CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromGLRenderbuffer)(
505       cl_context context,
506       cl_mem_flags flags,
507       cl_GLuint renderbuffer,
508       cl_int *errcode_ret);
509 
510    CL_API_ENTRY cl_int (CL_API_CALL *clGetGLObjectInfo)(
511       cl_mem memobj,
512       cl_gl_object_type *gl_object_type,
513       cl_GLuint *gl_object_name);
514 
515    CL_API_ENTRY cl_int (CL_API_CALL *clGetGLTextureInfo)(
516       cl_mem memobj,
517       cl_gl_texture_info param_name,
518       size_t param_value_size,
519       void *param_value,
520       size_t *param_value_size_ret);
521 
522    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueAcquireGLObjects)(
523       cl_command_queue command_queue,
524       cl_uint num_objects,
525       const cl_mem *mem_objects,
526       cl_uint num_events_in_wait_list,
527       const cl_event *event_wait_list,
528       cl_event *event);
529 
530    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueReleaseGLObjects)(
531       cl_command_queue command_queue,
532       cl_uint num_objects,
533       const cl_mem *mem_objects,
534       cl_uint num_events_in_wait_list,
535       const cl_event *event_wait_list,
536       cl_event *event);
537 
538    CL_API_ENTRY cl_int (CL_API_CALL *clGetGLContextInfoKHR)(
539       const cl_context_properties *properties,
540       cl_gl_context_info param_name,
541       size_t param_value_size,
542       void *param_value,
543       size_t *param_value_size_ret);
544 
545    void *clGetDeviceIDsFromD3D10KHR;
546    void *clCreateFromD3D10BufferKHR;
547    void *clCreateFromD3D10Texture2DKHR;
548    void *clCreateFromD3D10Texture3DKHR;
549    void *clEnqueueAcquireD3D10ObjectsKHR;
550    void *clEnqueueReleaseD3D10ObjectsKHR;
551 
552    CL_API_ENTRY cl_int (CL_API_CALL *clSetEventCallback)(
553       cl_event event,
554       cl_int type,
555       void (CL_CALLBACK *pfn_notify)(cl_event, cl_int, void *),
556       void *user_data);
557 
558    CL_API_ENTRY cl_mem (CL_API_CALL *clCreateSubBuffer)(
559       cl_mem                   buffer,
560       cl_mem_flags             flags,
561       cl_buffer_create_type    buffer_create_type,
562       const void *buffer_create_info,
563       cl_int *errcode_ret);
564 
565    CL_API_ENTRY cl_int (CL_API_CALL *clSetMemObjectDestructorCallback)(
566       cl_mem memobj,
567       void (CL_CALLBACK *pfn_notify)(cl_mem, void *),
568       void *user_data);
569 
570    CL_API_ENTRY cl_event (CL_API_CALL *clCreateUserEvent)(
571       cl_context context,
572       cl_int *errcode_ret);
573 
574    CL_API_ENTRY cl_int (CL_API_CALL *clSetUserEventStatus)(
575       cl_event event,
576       cl_int status);
577 
578    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueReadBufferRect)(
579       cl_command_queue command_queue,
580       cl_mem buffer,
581       cl_bool blocking_read,
582       const size_t *buffer_origin,
583       const size_t *host_origin,
584       const size_t *region,
585       size_t buffer_row_pitch,
586       size_t buffer_slice_pitch,
587       size_t host_row_pitch,
588       size_t host_slice_pitch,
589       void *ptr,
590       cl_uint num_events_in_wait_list,
591       const cl_event *event_wait_list,
592       cl_event *event);
593 
594    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueWriteBufferRect)(
595       cl_command_queue command_queue,
596       cl_mem buffer,
597       cl_bool blocking_read,
598       const size_t *buffer_origin,
599       const size_t *host_origin,
600       const size_t *region,
601       size_t buffer_row_pitch,
602       size_t buffer_slice_pitch,
603       size_t host_row_pitch,
604       size_t host_slice_pitch,
605       const void *ptr,
606       cl_uint num_events_in_wait_list,
607       const cl_event *event_wait_list,
608       cl_event *event);
609 
610    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueCopyBufferRect)(
611       cl_command_queue command_queue,
612       cl_mem src_buffer,
613       cl_mem dst_buffer,
614       const size_t *src_origin,
615       const size_t *dst_origin,
616       const size_t *region,
617       size_t src_row_pitch,
618       size_t src_slice_pitch,
619       size_t dst_row_pitch,
620       size_t dst_slice_pitch,
621       cl_uint num_events_in_wait_list,
622       const cl_event *event_wait_list,
623       cl_event *event);
624 
625    CL_API_ENTRY cl_int (CL_API_CALL *clCreateSubDevicesEXT)(
626       cl_device_id in_device,
627       const cl_device_partition_property_ext *partition_properties,
628       cl_uint num_entries,
629       cl_device_id *out_devices,
630       cl_uint *num_devices);
631 
632    CL_API_ENTRY cl_int (CL_API_CALL *clRetainDeviceEXT)(
633       cl_device_id device);
634 
635    CL_API_ENTRY cl_int (CL_API_CALL *clReleaseDeviceEXT)(
636       cl_device_id device);
637 
638    CL_API_ENTRY cl_event (CL_API_CALL *clCreateEventFromGLsyncKHR)(
639       cl_context context,
640       cl_GLsync sync,
641       cl_int *errcode_ret);
642 
643     CL_API_ENTRY cl_int (CL_API_CALL *clCreateSubDevices)(
644        cl_device_id in_device,
645        const cl_device_partition_property *partition_properties,
646        cl_uint num_entries,
647        cl_device_id *out_devices,
648        cl_uint *num_devices);
649 
650    CL_API_ENTRY cl_int (CL_API_CALL *clRetainDevice)(
651       cl_device_id device);
652 
653    CL_API_ENTRY cl_int (CL_API_CALL *clReleaseDevice)(
654       cl_device_id device);
655 
656    CL_API_ENTRY cl_mem (CL_API_CALL *clCreateImage)(
657       cl_context context,
658       cl_mem_flags flags,
659       const cl_image_format *image_format,
660       const cl_image_desc *image_desc,
661       void *host_ptr,
662       cl_int *errcode_ret);
663 
664    CL_API_ENTRY cl_program (CL_API_CALL *clCreateProgramWithBuiltInKernels)(
665       cl_context context,
666       cl_uint num_devices,
667       const cl_device_id *device_list,
668       const char *kernel_names,
669       cl_int *errcode_ret);
670 
671    CL_API_ENTRY cl_int (CL_API_CALL *clCompileProgram)(
672       cl_program program,
673       cl_uint num_devices,
674       const cl_device_id *device_list,
675       const char *options,
676       cl_uint num_input_headers,
677       const cl_program *input_headers,
678       const char **header_include_names,
679       void (CL_CALLBACK *pfn_notify)(cl_program, void *),
680       void *user_data);
681 
682    CL_API_ENTRY cl_program (CL_API_CALL *clLinkProgram)(
683       cl_context context,
684       cl_uint num_devices,
685       const cl_device_id *device_list,
686       const char *options,
687       cl_uint num_input_programs,
688       const cl_program *input_programs,
689       void (CL_CALLBACK *pfn_notify)(cl_program, void *),
690       void *user_data,
691       cl_int *errcode_ret);
692 
693    CL_API_ENTRY cl_int (CL_API_CALL *clUnloadPlatformCompiler)(
694       cl_platform_id platform);
695 
696    CL_API_ENTRY cl_int (CL_API_CALL *clGetKernelArgInfo)(
697       cl_kernel kernel,
698       cl_uint arg_indx,
699       cl_kernel_arg_info  param_name,
700       size_t param_value_size,
701       void *param_value,
702       size_t *param_value_size_ret);
703 
704    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueFillBuffer)(
705       cl_command_queue command_queue,
706       cl_mem buffer,
707       const void *pattern,
708       size_t pattern_size,
709       size_t offset,
710       size_t size,
711       cl_uint num_events_in_wait_list,
712       const cl_event *event_wait_list,
713       cl_event *event);
714 
715    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueFillImage)(
716       cl_command_queue command_queue,
717       cl_mem image,
718       const void *fill_color,
719       const size_t *origin,
720       const size_t *region,
721       cl_uint num_events_in_wait_list,
722       const cl_event *event_wait_list,
723       cl_event *event);
724 
725    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueMigrateMemObjects)(
726       cl_command_queue command_queue,
727       cl_uint num_mem_objects,
728       const cl_mem *mem_objects,
729       cl_mem_migration_flags flags,
730       cl_uint num_events_in_wait_list,
731       const cl_event *event_wait_list,
732       cl_event *event);
733 
734    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueMarkerWithWaitList)(
735       cl_command_queue command_queue,
736       cl_uint num_events_in_wait_list,
737       const cl_event *event_wait_list,
738       cl_event *event);
739 
740    CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueBarrierWithWaitList)(
741       cl_command_queue command_queue,
742       cl_uint num_events_in_wait_list,
743       const cl_event *event_wait_list,
744       cl_event *event);
745 
746    CL_API_ENTRY void *(CL_API_CALL *clGetExtensionFunctionAddressForPlatform)(
747       cl_platform_id platform,
748       const char *function_name);
749 
750    CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromGLTexture)(
751       cl_context context,
752       cl_mem_flags flags,
753       cl_GLenum target,
754       cl_GLint miplevel,
755       cl_GLuint texture,
756       cl_int *errcode_ret);
757 
758    void *clGetDeviceIDsFromD3D11KHR;
759    void *clCreateFromD3D11BufferKHR;
760    void *clCreateFromD3D11Texture2DKHR;
761    void *clCreateFromD3D11Texture3DKHR;
762    void *clCreateFromDX9MediaSurfaceKHR;
763    void *clEnqueueAcquireD3D11ObjectsKHR;
764    void *clEnqueueReleaseD3D11ObjectsKHR;
765    void *clGetDeviceIDsFromDX9MediaAdapterKHR;
766    void *clEnqueueAcquireDX9MediaSurfacesKHR;
767    void *clEnqueueReleaseDX9MediaSurfacesKHR;
768 };
769 
770 namespace clover {
771    extern const _cl_icd_dispatch _dispatch;
772 
773    cl_int
774    GetPlatformInfo(cl_platform_id d_platform, cl_platform_info param,
775                    size_t size, void *r_buf, size_t *r_size);
776 
777    void *
778    GetExtensionFunctionAddress(const char *p_name);
779 
780    void *
781    GetExtensionFunctionAddressForPlatform(cl_platform_id d_platform,
782                                           const char *p_name);
783 
784    cl_int
785    IcdGetPlatformIDsKHR(cl_uint num_entries, cl_platform_id *rd_platforms,
786                         cl_uint *rnum_platforms);
787 }
788 
789 #endif
790