The OpenD Programming Language

1 // DerelictCL - a Derelict based dynamic binding for OpenCL
2 // written in the D programming language
3 //
4 // Copyright: MeinMein 2013-2014.
5 // License:   Boost License 1.0
6 //            (See accompanying file LICENSE_1_0.txt or copy at
7 //             http://www.boost.org/LICENSE_1_0.txt)
8 // Authors:   Gerbrand Kamphuis (meinmein.com),
9 //            Marvin Meeng (meinmein.com).
10 module derelict.opencl.functions;
11 
12 private
13 {
14     import derelict.opencl.types;
15 }
16 
17 extern(System)
18 {
19     // OpenCL 1.0
20     alias @nogc nothrow cl_int function(cl_uint, cl_platform_id*, cl_uint*) da_clGetPlatformIDs;
21     alias @nogc nothrow cl_int function(cl_platform_id, cl_platform_info, size_t, void*, size_t*) da_clGetPlatformInfo;
22     alias @nogc nothrow cl_int function(cl_platform_id, cl_device_type, cl_uint, cl_device_id*, cl_uint*) da_clGetDeviceIDs;
23     alias @nogc nothrow cl_int function(cl_device_id, cl_device_info, size_t, void*, size_t*) da_clGetDeviceInfo;
24     alias @nogc nothrow cl_context function(const(cl_context_properties*), cl_uint, const(cl_device_id*), void function(const(char*),  const(void*),  size_t,  void*), void*, cl_int*) da_clCreateContext;
25     alias @nogc nothrow cl_context function(const(cl_context_properties*), cl_device_type, void function(const(char*),  const(void*),  size_t,  void*), void*, cl_int*) da_clCreateContextFromType;
26     alias @nogc nothrow cl_int function(cl_context) da_clRetainContext;
27     alias @nogc nothrow cl_int function(cl_context) da_clReleaseContext;
28     alias @nogc nothrow cl_int function(cl_context, cl_context_info, size_t, void*, size_t*) da_clGetContextInfo;
29     alias @nogc nothrow cl_command_queue function(cl_context, cl_device_id, cl_command_queue_properties, cl_int*) da_clCreateCommandQueue;
30     alias @nogc nothrow cl_int function(cl_command_queue) da_clRetainCommandQueue;
31     alias @nogc nothrow cl_int function(cl_command_queue) da_clReleaseCommandQueue;
32     alias @nogc nothrow cl_int function(cl_command_queue, cl_command_queue_info, size_t, void*, size_t*) da_clGetCommandQueueInfo;
33     alias @nogc nothrow cl_mem function(cl_context, cl_mem_flags, size_t, void*, cl_int*) da_clCreateBuffer;
34     alias @nogc nothrow cl_int function(cl_mem) da_clRetainMemObject;
35     alias @nogc nothrow cl_int function(cl_mem) da_clReleaseMemObject;
36     alias @nogc nothrow cl_int function(cl_context, cl_mem_flags, cl_mem_object_type, cl_uint, cl_image_format*, cl_uint*) da_clGetSupportedImageFormats;
37     alias @nogc nothrow cl_int function(cl_mem, cl_mem_info, size_t, void*, size_t*) da_clGetMemObjectInfo;
38     alias @nogc nothrow cl_int function(cl_mem, cl_image_info, size_t, void*, size_t*) da_clGetImageInfo;
39     alias @nogc nothrow cl_sampler function(cl_context, cl_bool, cl_addressing_mode, cl_filter_mode, cl_int*) da_clCreateSampler;
40     alias @nogc nothrow cl_int function(cl_sampler) da_clRetainSampler;
41     alias @nogc nothrow cl_int function(cl_sampler) da_clReleaseSampler;
42     alias @nogc nothrow cl_int function(cl_sampler, cl_sampler_info, size_t, void*, size_t*) da_clGetSamplerInfo;
43     alias @nogc nothrow cl_program function(cl_context, cl_uint, const(char*)*, const(size_t*), cl_int*) da_clCreateProgramWithSource;
44     alias @nogc nothrow cl_program function(cl_context, cl_uint, const(cl_device_id*), const(size_t*), const(ubyte*)*, cl_int*, cl_int*) da_clCreateProgramWithBinary;
45     alias @nogc nothrow cl_program function(cl_context, cl_uint, const(cl_device_id*), const(char*), cl_int*) da_clCreateProgramWithBuiltInKernels;
46     alias @nogc nothrow cl_int function(cl_program) da_clRetainProgram;
47     alias @nogc nothrow cl_int function(cl_program) da_clReleaseProgram;
48     alias @nogc nothrow cl_int function(cl_program, cl_uint, const(cl_device_id*), const(char*), void function(cl_program, void*), void*) da_clBuildProgram;
49     alias @nogc nothrow cl_int function(cl_program, cl_program_info, size_t, void*, size_t*) da_clGetProgramInfo;
50     alias @nogc nothrow cl_int function(cl_program, cl_device_id, cl_program_build_info, size_t, void*, size_t*) da_clGetProgramBuildInfo;
51     alias @nogc nothrow cl_kernel function(cl_program, const(char*), cl_int*) da_clCreateKernel;
52     alias @nogc nothrow cl_int function(cl_program, cl_uint, cl_kernel*, cl_uint*) da_clCreateKernelsInProgram;
53     alias @nogc nothrow cl_int function(cl_kernel) da_clRetainKernel;
54     alias @nogc nothrow cl_int function(cl_kernel) da_clReleaseKernel;
55     alias @nogc nothrow cl_int function(cl_kernel, cl_uint, size_t, const(void*)) da_clSetKernelArg;
56     alias @nogc nothrow cl_int function(cl_kernel, cl_kernel_info, size_t, void*, size_t*) da_clGetKernelInfo;
57     alias @nogc nothrow cl_int function(cl_kernel, cl_uint, cl_kernel_arg_info, size_t, void*, size_t*) da_clGetKernelArgInfo;
58     alias @nogc nothrow cl_int function(cl_kernel, cl_device_id, cl_kernel_work_group_info, size_t, void*, size_t*) da_clGetKernelWorkGroupInfo;
59     alias @nogc nothrow cl_int function(cl_uint, const(cl_event*)) da_clWaitForEvents;
60     alias @nogc nothrow cl_int function(cl_event, cl_event_info, size_t, void*, size_t*) da_clGetEventInfo;
61     alias @nogc nothrow cl_int function(cl_event) da_clRetainEvent;
62     alias @nogc nothrow cl_int function(cl_event) da_clReleaseEvent;
63     alias @nogc nothrow cl_int function(cl_event, cl_profiling_info, size_t, void*, size_t*) da_clGetEventProfilingInfo;
64     alias @nogc nothrow cl_int function(cl_command_queue) da_clFlush;
65     alias @nogc nothrow cl_int function(cl_command_queue) da_clFinish;
66     alias @nogc nothrow cl_int function(cl_command_queue, cl_mem, cl_bool, size_t, size_t, void*, cl_uint, const(cl_event*), cl_event*) da_clEnqueueReadBuffer;
67     alias @nogc nothrow cl_int function(cl_command_queue, cl_mem, cl_bool, size_t, size_t, const(void*), cl_uint, const(cl_event*), cl_event*) da_clEnqueueWriteBuffer;
68     alias @nogc nothrow cl_int function(cl_command_queue, cl_mem, cl_mem, size_t, size_t, size_t, cl_uint, const(cl_event*), cl_event*) da_clEnqueueCopyBuffer;
69     alias @nogc nothrow cl_int function(cl_command_queue, cl_mem, cl_bool, const(size_t*), const(size_t*), size_t, size_t, void*, cl_uint, const(cl_event*), cl_event*) da_clEnqueueReadImage;
70     alias @nogc nothrow cl_int function(cl_command_queue, cl_mem, cl_bool, const(size_t*), const(size_t*), size_t, size_t, const(void*), cl_uint, const(cl_event*), cl_event*) da_clEnqueueWriteImage;
71     alias @nogc nothrow cl_int function(cl_command_queue, cl_mem, cl_mem, const(size_t*), const(size_t*), const(size_t*), cl_uint, const(cl_event*), cl_event*) da_clEnqueueCopyImage;
72     alias @nogc nothrow cl_int function(cl_command_queue, cl_mem, cl_mem, const(size_t*), const(size_t*), size_t, cl_uint, const(cl_event*), cl_event*) da_clEnqueueCopyImageToBuffer;
73     alias @nogc nothrow cl_int function(cl_command_queue, cl_mem, cl_mem, size_t, const(size_t*), const(size_t*), cl_uint, const(cl_event*), cl_event*) da_clEnqueueCopyBufferToImage;
74     alias @nogc nothrow void* function(cl_command_queue, cl_mem, cl_bool, cl_map_flags, size_t, size_t, cl_uint, const(cl_event*), cl_event*, cl_int*) da_clEnqueueMapBuffer;
75     alias @nogc nothrow void* function(cl_command_queue, cl_mem, cl_bool, cl_map_flags, const(size_t*), const(size_t*), size_t*, size_t*, cl_uint, const(cl_event*), cl_event*, cl_int*) da_clEnqueueMapImage;
76     alias @nogc nothrow cl_int function(cl_command_queue, cl_mem, void*, cl_uint, const(cl_event*), cl_event*) da_clEnqueueUnmapMemObject;
77     alias @nogc nothrow cl_int function(cl_command_queue, cl_kernel, cl_uint, const(size_t*), const(size_t*), const(size_t*), cl_uint, const(cl_event*), cl_event*) da_clEnqueueNDRangeKernel;
78     alias @nogc nothrow cl_int function(cl_command_queue, cl_kernel, cl_uint, const(cl_event*), cl_event*) da_clEnqueueTask;
79     alias @nogc nothrow cl_int function(cl_command_queue, void function(void*), void*, size_t, cl_uint, const(cl_mem*), const(void*)*, cl_uint, const(cl_event*), cl_event*) da_clEnqueueNativeKernel;
80     // OpenCL 1.0 Deprecated in 1.1
81     alias @nogc nothrow cl_int function(cl_command_queue, cl_command_queue_properties, cl_bool, cl_command_queue_properties*) da_clSetCommandQueueProperty;
82     // OpenCL 1.1
83     alias @nogc nothrow cl_mem function(cl_mem, cl_mem_flags, cl_buffer_create_type, const(void*), cl_int*) da_clCreateSubBuffer;
84     alias @nogc nothrow cl_int function(cl_mem, void function(cl_mem, void*), void*) da_clSetMemObjectDestructorCallback;
85     alias @nogc nothrow cl_event function(cl_context, cl_int*) da_clCreateUserEvent;
86     alias @nogc nothrow cl_int function(cl_event, cl_int) da_clSetUserEventStatus;
87     alias @nogc nothrow cl_int function( cl_event, cl_int, void function(cl_event,  cl_int,  void*), void*) da_clSetEventCallback;
88     alias @nogc nothrow cl_int function(cl_command_queue, cl_mem, cl_bool, const(size_t*), const(size_t*), const(size_t*), size_t, size_t, size_t, size_t, void*, cl_uint, const(cl_event*), cl_event*) da_clEnqueueReadBufferRect;
89     alias @nogc nothrow cl_int function(cl_command_queue, cl_mem, cl_bool, const(size_t*), const(size_t*), const(size_t*), size_t, size_t, size_t, size_t, const(void*), cl_uint, const(cl_event*), cl_event*) da_clEnqueueWriteBufferRect;
90     alias @nogc nothrow cl_int function(cl_command_queue, cl_mem, cl_mem, const(size_t*), const(size_t*), const(size_t*), size_t, size_t, size_t, size_t, cl_uint, const(cl_event*), cl_event*) da_clEnqueueCopyBufferRect;
91     // OpenCL 1.1 Deprecated in 1.2
92     alias @nogc nothrow cl_mem function(cl_context, cl_mem_flags, const(cl_image_format*), size_t, size_t, size_t, void*, cl_int*) da_clCreateImage2D;
93     alias @nogc nothrow cl_mem function(cl_context, cl_mem_flags, const(cl_image_format*), size_t, size_t, size_t, size_t, size_t, void*, cl_int*) da_clCreateImage3D;
94     alias @nogc nothrow cl_int function(cl_command_queue, cl_event*) da_clEnqueueMarker;
95     alias @nogc nothrow cl_int function(cl_command_queue, cl_uint, const(cl_event*)) da_clEnqueueWaitForEvents;
96     alias @nogc nothrow cl_int function(cl_command_queue) da_clEnqueueBarrier;
97     alias @nogc nothrow cl_int function() da_clUnloadCompiler;
98     alias @nogc nothrow void* function(const(char*)) da_clGetExtensionFunctionAddress;
99     // OpenCL 1.2
100     alias @nogc nothrow cl_int function(cl_device_id, const(cl_device_partition_property*), cl_uint, cl_device_id*, cl_uint*) da_clCreateSubDevices;
101     alias @nogc nothrow cl_int function(cl_device_id) da_clRetainDevice;
102     alias @nogc nothrow cl_int function(cl_device_id) da_clReleaseDevice;
103     alias @nogc nothrow cl_mem function(cl_context, cl_mem_flags, const(cl_image_format*), const(cl_image_desc*), void*, cl_int*) da_clCreateImage;
104     alias @nogc nothrow cl_int function(cl_program, cl_uint, const(cl_device_id*), const(char*), cl_uint, const(cl_program*), const(char*)*, void function(cl_program, void*), void*) da_clCompileProgram;
105     alias @nogc nothrow cl_program function(cl_context, cl_uint, const(cl_device_id*), const(char*), cl_uint, const(cl_program*), void function(cl_program, void*), void*, cl_int* ) da_clLinkProgram;
106     alias @nogc nothrow cl_int function(cl_platform_id) da_clUnloadPlatformCompiler;
107     alias @nogc nothrow cl_int function(cl_command_queue, cl_mem, const(void*), size_t, size_t, size_t, cl_uint, const(cl_event*), cl_event*) da_clEnqueueFillBuffer;
108     alias @nogc nothrow cl_int function(cl_command_queue, cl_mem, const(void*), const(size_t*), const(size_t*), cl_uint, const(cl_event*), cl_event*) da_clEnqueueFillImage;
109     alias @nogc nothrow cl_int function(cl_command_queue, cl_uint, const(cl_mem*), cl_mem_migration_flags, cl_uint, const(cl_event*), cl_event*) da_clEnqueueMigrateMemObjects;
110     alias @nogc nothrow cl_int function(cl_command_queue, cl_uint, const(cl_event*), cl_event*) da_clEnqueueMarkerWithWaitList;
111     alias @nogc nothrow cl_int function(cl_command_queue, cl_uint, const(cl_event*), cl_event*) da_clEnqueueBarrierWithWaitList;
112     alias @nogc nothrow void* function(cl_platform_id, const(char*)) da_clGetExtensionFunctionAddressForPlatform;
113     // OpenCL 2.0
114     alias @nogc nothrow cl_command_queue function(cl_context, cl_device_id, const cl_queue_properties *, cl_int*) da_clCreateCommandQueueWithProperties;
115     alias @nogc nothrow cl_mem function(cl_context, cl_mem_flags, cl_uint, cl_uint, const cl_pipe_properties*, cl_int*) da_clCreatePipe;
116     alias @nogc nothrow cl_int function(cl_mem, cl_pipe_info, size_t, void*, size_t*) da_clGetPipeInfo;
117     alias @nogc nothrow void* function(cl_context, cl_svm_mem_flags, size_t, cl_uint) da_clSVMAlloc;
118     alias @nogc nothrow void function(cl_context, void*) da_clSVMFree;
119     alias @nogc nothrow cl_sampler function(cl_context, const cl_sampler_properties*, cl_int*) da_clCreateSamplerWithProperties;
120     alias @nogc nothrow cl_int function(cl_kernel, cl_uint, void*) da_clSetKernelArgSVMPointer;
121     alias @nogc nothrow cl_int function(cl_kernel, cl_kernel_exec_info, size_t, const void *) da_clSetKernelExecInfo;
122     alias @nogc nothrow cl_int function(cl_command_queue, cl_uint, void**, void function(cl_command_queue, cl_uint, void**, void*), void*, cl_uint, const cl_event*, cl_event*) da_clEnqueueSVMFree;
123     alias @nogc nothrow cl_int function(cl_command_queue, cl_bool, void*, const void*, size_t, cl_uint, const cl_event*, cl_event*) da_clEnqueueSVMMemcpy;
124 	alias @nogc nothrow cl_int function(cl_command_queue,void*, const void*, size_t,size_t, cl_uint, const cl_event*, cl_event*) da_clEnqueueSVMMemFill;
125     alias @nogc nothrow cl_int function(cl_command_queue, cl_bool, cl_map_flags, void*, size_t, cl_uint, const cl_event*, cl_event*) da_clEnqueueSVMMap;
126     alias @nogc nothrow cl_int function(cl_command_queue, void *, cl_uint,const cl_event*, cl_event*) da_clEnqueueSVMUnmap;
127     // OpenCL 2.1
128     alias @nogc nothrow cl_int function(cl_context, cl_device_id, cl_command_queue) da_clSetDefaultDeviceCommandQueue;
129     alias @nogc nothrow cl_int function(cl_device_id, cl_ulong*, cl_ulong*) da_clGetDeviceAndHostTimer;
130     alias @nogc nothrow cl_int function(cl_device_id, cl_ulong*) da_clGetHostTimer;
131     alias @nogc nothrow cl_program function(cl_context, const void*, size_t, cl_int*) da_clCreateProgramWithIL;
132     alias @nogc nothrow cl_kernel function(cl_kernel, cl_int*) da_clCloneKernel;
133     alias @nogc nothrow cl_int function(cl_kernel, cl_device_id, cl_kernel_sub_group_info, size_t, const void*, size_t, void*, size_t*) da_clGetKernelSubGroupInfo;
134     alias @nogc nothrow cl_int function(cl_command_queue, cl_uint, const void**, const size_t*, cl_mem_migration_flags, cl_uint, const cl_event*, cl_event*) da_clEnqueueSVMMigrateMem;
135     alias @nogc nothrow cl_int function(cl_program, void function(cl_program, void*), void*) da_clSetProgramReleaseCallback;
136     alias @nogc nothrow cl_int function(cl_program, cl_uint, size_t, const void*) da_clSetProgramSpecializationConstant;
137 }
138 struct OpenCLFunc
139 {
140     int added, dep, removed;
141     this(int _added, int _dep = 0, int _rem = 0)
142     {
143         added   = _added;
144         dep     = _dep;
145         removed = _rem;
146     }
147 }
148 __gshared
149 {
150     @OpenCLFunc(10)
151     {
152     // OpenCL 1.0
153         da_clGetPlatformIDs clGetPlatformIDs;
154         da_clGetPlatformInfo clGetPlatformInfo;
155         da_clGetDeviceIDs clGetDeviceIDs;
156         da_clGetDeviceInfo clGetDeviceInfo;
157         da_clCreateContext clCreateContext;
158         da_clCreateContextFromType clCreateContextFromType;
159         da_clRetainContext clRetainContext;
160         da_clReleaseContext clReleaseContext;
161         da_clGetContextInfo clGetContextInfo;
162         //da_clCreateCommandQueue clCreateCommandQueue; // removed in 2.0
163         da_clRetainCommandQueue clRetainCommandQueue;
164         da_clReleaseCommandQueue clReleaseCommandQueue;
165         da_clGetCommandQueueInfo clGetCommandQueueInfo;
166         da_clCreateBuffer clCreateBuffer;
167         da_clRetainMemObject clRetainMemObject;
168         da_clReleaseMemObject clReleaseMemObject;
169         da_clGetSupportedImageFormats clGetSupportedImageFormats;
170         da_clGetMemObjectInfo clGetMemObjectInfo;
171         da_clGetImageInfo clGetImageInfo;
172         //da_clCreateSampler clCreateSampler;
173         da_clRetainSampler clRetainSampler;
174         da_clReleaseSampler clReleaseSampler;
175         da_clGetSamplerInfo clGetSamplerInfo;
176         da_clCreateProgramWithSource clCreateProgramWithSource;
177         da_clCreateProgramWithBinary clCreateProgramWithBinary;
178         da_clRetainProgram clRetainProgram;
179         da_clReleaseProgram clReleaseProgram;
180         da_clBuildProgram clBuildProgram;
181         da_clGetProgramInfo clGetProgramInfo;
182         da_clGetProgramBuildInfo clGetProgramBuildInfo;
183         da_clCreateKernel clCreateKernel;
184         da_clCreateKernelsInProgram clCreateKernelsInProgram;
185         da_clRetainKernel clRetainKernel;
186         da_clReleaseKernel clReleaseKernel;
187         da_clSetKernelArg clSetKernelArg;
188         da_clGetKernelInfo clGetKernelInfo;
189         da_clGetKernelWorkGroupInfo clGetKernelWorkGroupInfo;
190         da_clWaitForEvents clWaitForEvents;
191         da_clGetEventInfo clGetEventInfo;
192         da_clRetainEvent clRetainEvent;
193         da_clReleaseEvent clReleaseEvent;
194         da_clGetEventProfilingInfo clGetEventProfilingInfo;
195         da_clFlush clFlush;
196         da_clFinish clFinish;
197         da_clEnqueueReadBuffer clEnqueueReadBuffer;
198         da_clEnqueueWriteBuffer clEnqueueWriteBuffer;
199         da_clEnqueueCopyBuffer clEnqueueCopyBuffer;
200         da_clEnqueueReadImage clEnqueueReadImage;
201         da_clEnqueueWriteImage clEnqueueWriteImage;
202         da_clEnqueueCopyImage clEnqueueCopyImage;
203         da_clEnqueueCopyImageToBuffer clEnqueueCopyImageToBuffer;
204         da_clEnqueueCopyBufferToImage clEnqueueCopyBufferToImage;
205         da_clEnqueueMapBuffer clEnqueueMapBuffer;
206         da_clEnqueueMapImage clEnqueueMapImage;
207         da_clEnqueueUnmapMemObject clEnqueueUnmapMemObject;
208         da_clEnqueueNDRangeKernel clEnqueueNDRangeKernel;
209         //da_clEnqueueTask clEnqueueTask;
210         da_clEnqueueNativeKernel clEnqueueNativeKernel;
211     }
212     // OpenCL 1.0 Deprecated in 1.1
213     @OpenCLFunc(10,11) da_clSetCommandQueueProperty clSetCommandQueueProperty;
214     
215     // OpenCL 1.0 Removed in 2.0
216     @OpenCLFunc(10,20)
217     {
218         // Replaced by their .*WithProperties counterparts
219         da_clCreateCommandQueue clCreateCommandQueue;
220         da_clCreateSampler clCreateSampler;
221         
222         da_clEnqueueTask clEnqueueTask;
223     }
224     
225     @OpenCLFunc(11)
226     {
227     // OpenCL 1.1
228         da_clCreateSubBuffer clCreateSubBuffer;
229         da_clSetMemObjectDestructorCallback clSetMemObjectDestructorCallback;
230         da_clCreateUserEvent clCreateUserEvent;
231         da_clSetUserEventStatus clSetUserEventStatus;
232         da_clSetEventCallback clSetEventCallback;
233         da_clEnqueueReadBufferRect clEnqueueReadBufferRect;
234         da_clEnqueueWriteBufferRect clEnqueueWriteBufferRect;
235         da_clEnqueueCopyBufferRect clEnqueueCopyBufferRect;
236     }
237     
238     @OpenCLFunc(11,12)
239     {
240         // OpenCL 1.1 Deprecated in 1.2
241         da_clCreateImage2D clCreateImage2D;
242         da_clCreateImage3D clCreateImage3D;
243         da_clEnqueueMarker clEnqueueMarker;
244         da_clEnqueueWaitForEvents clEnqueueWaitForEvents;
245         da_clEnqueueBarrier clEnqueueBarrier;
246         da_clUnloadCompiler clUnloadCompiler;
247         da_clGetExtensionFunctionAddress clGetExtensionFunctionAddress;
248     }
249     
250     @OpenCLFunc(12)
251     {
252     // OpenCL 1.2
253         da_clCreateSubDevices clCreateSubDevices;
254         da_clRetainDevice clRetainDevice;
255         da_clReleaseDevice clReleaseDevice;
256         da_clCreateImage clCreateImage;
257         da_clCreateProgramWithBuiltInKernels clCreateProgramWithBuiltInKernels;
258         da_clCompileProgram clCompileProgram;
259         da_clLinkProgram clLinkProgram;
260         da_clUnloadPlatformCompiler clUnloadPlatformCompiler;
261         da_clGetKernelArgInfo clGetKernelArgInfo;
262         da_clEnqueueFillBuffer clEnqueueFillBuffer;
263         da_clEnqueueFillImage clEnqueueFillImage;
264         da_clEnqueueMigrateMemObjects clEnqueueMigrateMemObjects;
265         da_clEnqueueMarkerWithWaitList clEnqueueMarkerWithWaitList;
266         da_clEnqueueBarrierWithWaitList clEnqueueBarrierWithWaitList;
267         da_clGetExtensionFunctionAddressForPlatform clGetExtensionFunctionAddressForPlatform;
268     }
269     
270     @OpenCLFunc(20)
271     {
272         da_clCreateCommandQueueWithProperties clCreateCommandQueueWithProperties;
273         da_clCreatePipe clCreatePipe;
274         da_clGetPipeInfo clGetPipeInfo;
275         da_clSVMAlloc clSVMAlloc;
276         da_clSVMFree clSVMFree;
277         da_clCreateSamplerWithProperties clCreateSamplerWithProperties;
278         da_clSetKernelArgSVMPointer clSetKernelArgSVMPointer;
279         da_clSetKernelExecInfo clSetKernelExecInfo;
280         da_clEnqueueSVMFree clEnqueueSVMFree;
281         da_clEnqueueSVMMemcpy clEnqueueSVMMemcpy;
282         da_clEnqueueSVMMemFill clEnqueueSVMMemFill;
283         da_clEnqueueSVMMap clEnqueueSVMMap;
284         da_clEnqueueSVMUnmap clEnqueueSVMUnmap;
285     }
286     
287     @OpenCLFunc(21)
288     {
289         da_clSetDefaultDeviceCommandQueue clSetDefaultDeviceCommandQueue;
290         da_clGetDeviceAndHostTimer clGetDeviceAndHostTimer; // actually get timestamps
291         da_clGetHostTimer clGetHostTimer; // ditto
292         da_clCreateProgramWithIL clCreateProgramWithIL;
293         da_clCloneKernel clCloneKernel;
294         da_clGetKernelSubGroupInfo clGetKernelSubGroupInfo;
295         da_clEnqueueSVMMigrateMem clEnqueueSVMMigrateMem;
296     }
297     @OpenCLFunc(22)
298     {
299         da_clSetProgramReleaseCallback clSetProgramReleaseCallback;
300         da_clSetProgramSpecializationConstant clSetProgramSpecializationConstant;
301     }
302     
303 }