xref: /aosp_15_r20/external/angle/include/CL/cl_icd.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1 /*******************************************************************************
2  * Copyright (c) 2019-2020 The Khronos Group Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *    http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  ******************************************************************************/
16 
17 #ifndef OPENCL_CL_ICD_H
18 #define OPENCL_CL_ICD_H
19 
20 #include <CL/cl.h>
21 #include <CL/cl_function_types.h>
22 #include <CL/cl_egl.h>
23 #include <CL/cl_ext.h>
24 #include <CL/cl_gl.h>
25 
26 #if defined(_WIN32)
27 #include <CL/cl_d3d11.h>
28 #include <CL/cl_d3d10.h>
29 #include <CL/cl_dx9_media_sharing.h>
30 #endif
31 
32 #ifdef __cplusplus
33 extern "C" {
34 #endif
35 
36 /* Vendor dispatch table structure */
37 
38 typedef struct _cl_icd_dispatch {
39   /* OpenCL 1.0 */
40   clGetPlatformIDs_t *clGetPlatformIDs;
41   clGetPlatformInfo_t *clGetPlatformInfo;
42   clGetDeviceIDs_t *clGetDeviceIDs;
43   clGetDeviceInfo_t *clGetDeviceInfo;
44   clCreateContext_t *clCreateContext;
45   clCreateContextFromType_t *clCreateContextFromType;
46   clRetainContext_t *clRetainContext;
47   clReleaseContext_t *clReleaseContext;
48   clGetContextInfo_t *clGetContextInfo;
49   clCreateCommandQueue_t *clCreateCommandQueue;
50   clRetainCommandQueue_t *clRetainCommandQueue;
51   clReleaseCommandQueue_t *clReleaseCommandQueue;
52   clGetCommandQueueInfo_t *clGetCommandQueueInfo;
53   clSetCommandQueueProperty_t *clSetCommandQueueProperty;
54   clCreateBuffer_t *clCreateBuffer;
55   clCreateImage2D_t *clCreateImage2D;
56   clCreateImage3D_t *clCreateImage3D;
57   clRetainMemObject_t *clRetainMemObject;
58   clReleaseMemObject_t *clReleaseMemObject;
59   clGetSupportedImageFormats_t *clGetSupportedImageFormats;
60   clGetMemObjectInfo_t *clGetMemObjectInfo;
61   clGetImageInfo_t *clGetImageInfo;
62   clCreateSampler_t *clCreateSampler;
63   clRetainSampler_t *clRetainSampler;
64   clReleaseSampler_t *clReleaseSampler;
65   clGetSamplerInfo_t *clGetSamplerInfo;
66   clCreateProgramWithSource_t *clCreateProgramWithSource;
67   clCreateProgramWithBinary_t *clCreateProgramWithBinary;
68   clRetainProgram_t *clRetainProgram;
69   clReleaseProgram_t *clReleaseProgram;
70   clBuildProgram_t *clBuildProgram;
71   clUnloadCompiler_t *clUnloadCompiler;
72   clGetProgramInfo_t *clGetProgramInfo;
73   clGetProgramBuildInfo_t *clGetProgramBuildInfo;
74   clCreateKernel_t *clCreateKernel;
75   clCreateKernelsInProgram_t *clCreateKernelsInProgram;
76   clRetainKernel_t *clRetainKernel;
77   clReleaseKernel_t *clReleaseKernel;
78   clSetKernelArg_t *clSetKernelArg;
79   clGetKernelInfo_t *clGetKernelInfo;
80   clGetKernelWorkGroupInfo_t *clGetKernelWorkGroupInfo;
81   clWaitForEvents_t *clWaitForEvents;
82   clGetEventInfo_t *clGetEventInfo;
83   clRetainEvent_t *clRetainEvent;
84   clReleaseEvent_t *clReleaseEvent;
85   clGetEventProfilingInfo_t *clGetEventProfilingInfo;
86   clFlush_t *clFlush;
87   clFinish_t *clFinish;
88   clEnqueueReadBuffer_t *clEnqueueReadBuffer;
89   clEnqueueWriteBuffer_t *clEnqueueWriteBuffer;
90   clEnqueueCopyBuffer_t *clEnqueueCopyBuffer;
91   clEnqueueReadImage_t *clEnqueueReadImage;
92   clEnqueueWriteImage_t *clEnqueueWriteImage;
93   clEnqueueCopyImage_t *clEnqueueCopyImage;
94   clEnqueueCopyImageToBuffer_t *clEnqueueCopyImageToBuffer;
95   clEnqueueCopyBufferToImage_t *clEnqueueCopyBufferToImage;
96   clEnqueueMapBuffer_t *clEnqueueMapBuffer;
97   clEnqueueMapImage_t *clEnqueueMapImage;
98   clEnqueueUnmapMemObject_t *clEnqueueUnmapMemObject;
99   clEnqueueNDRangeKernel_t *clEnqueueNDRangeKernel;
100   clEnqueueTask_t *clEnqueueTask;
101   clEnqueueNativeKernel_t *clEnqueueNativeKernel;
102   clEnqueueMarker_t *clEnqueueMarker;
103   clEnqueueWaitForEvents_t *clEnqueueWaitForEvents;
104   clEnqueueBarrier_t *clEnqueueBarrier;
105   clGetExtensionFunctionAddress_t *clGetExtensionFunctionAddress;
106   clCreateFromGLBuffer_t *clCreateFromGLBuffer;
107   clCreateFromGLTexture2D_t *clCreateFromGLTexture2D;
108   clCreateFromGLTexture3D_t *clCreateFromGLTexture3D;
109   clCreateFromGLRenderbuffer_t *clCreateFromGLRenderbuffer;
110   clGetGLObjectInfo_t *clGetGLObjectInfo;
111   clGetGLTextureInfo_t *clGetGLTextureInfo;
112   clEnqueueAcquireGLObjects_t *clEnqueueAcquireGLObjects;
113   clEnqueueReleaseGLObjects_t *clEnqueueReleaseGLObjects;
114   clGetGLContextInfoKHR_t *clGetGLContextInfoKHR;
115 
116   /* cl_khr_d3d10_sharing */
117 #ifdef _WIN32
118   clGetDeviceIDsFromD3D10KHR_t *clGetDeviceIDsFromD3D10KHR;
119   clCreateFromD3D10BufferKHR_t *clCreateFromD3D10BufferKHR;
120   clCreateFromD3D10Texture2DKHR_t *clCreateFromD3D10Texture2DKHR;
121   clCreateFromD3D10Texture3DKHR_t *clCreateFromD3D10Texture3DKHR;
122   clEnqueueAcquireD3D10ObjectsKHR_t *clEnqueueAcquireD3D10ObjectsKHR;
123   clEnqueueReleaseD3D10ObjectsKHR_t *clEnqueueReleaseD3D10ObjectsKHR;
124 #else
125   void *clGetDeviceIDsFromD3D10KHR;
126   void *clCreateFromD3D10BufferKHR;
127   void *clCreateFromD3D10Texture2DKHR;
128   void *clCreateFromD3D10Texture3DKHR;
129   void *clEnqueueAcquireD3D10ObjectsKHR;
130   void *clEnqueueReleaseD3D10ObjectsKHR;
131 #endif
132 
133   /* OpenCL 1.1 */
134 #ifdef CL_VERSION_1_1
135   clSetEventCallback_t *clSetEventCallback;
136   clCreateSubBuffer_t *clCreateSubBuffer;
137   clSetMemObjectDestructorCallback_t *clSetMemObjectDestructorCallback;
138   clCreateUserEvent_t *clCreateUserEvent;
139   clSetUserEventStatus_t *clSetUserEventStatus;
140   clEnqueueReadBufferRect_t *clEnqueueReadBufferRect;
141   clEnqueueWriteBufferRect_t *clEnqueueWriteBufferRect;
142   clEnqueueCopyBufferRect_t *clEnqueueCopyBufferRect;
143 #else
144   void *clSetEventCallback;
145   void *clCreateSubBuffer;
146   void *clSetMemObjectDestructorCallback;
147   void *clCreateUserEvent;
148   void *clSetUserEventStatus;
149   void *clEnqueueReadBufferRect;
150   void *clEnqueueWriteBufferRect;
151   void *clEnqueueCopyBufferRect;
152 #endif
153 
154   /* cl_ext_device_fission */
155   clCreateSubDevicesEXT_t *clCreateSubDevicesEXT;
156   clRetainDeviceEXT_t *clRetainDeviceEXT;
157   clReleaseDeviceEXT_t *clReleaseDeviceEXT;
158 
159   /* cl_khr_gl_event */
160   clCreateEventFromGLsyncKHR_t *clCreateEventFromGLsyncKHR;
161 
162   /* OpenCL 1.2 */
163 #ifdef CL_VERSION_1_2
164   clCreateSubDevices_t *clCreateSubDevices;
165   clRetainDevice_t *clRetainDevice;
166   clReleaseDevice_t *clReleaseDevice;
167   clCreateImage_t *clCreateImage;
168   clCreateProgramWithBuiltInKernels_t *clCreateProgramWithBuiltInKernels;
169   clCompileProgram_t *clCompileProgram;
170   clLinkProgram_t *clLinkProgram;
171   clUnloadPlatformCompiler_t *clUnloadPlatformCompiler;
172   clGetKernelArgInfo_t *clGetKernelArgInfo;
173   clEnqueueFillBuffer_t *clEnqueueFillBuffer;
174   clEnqueueFillImage_t *clEnqueueFillImage;
175   clEnqueueMigrateMemObjects_t *clEnqueueMigrateMemObjects;
176   clEnqueueMarkerWithWaitList_t *clEnqueueMarkerWithWaitList;
177   clEnqueueBarrierWithWaitList_t *clEnqueueBarrierWithWaitList;
178   clGetExtensionFunctionAddressForPlatform_t *
179       clGetExtensionFunctionAddressForPlatform;
180   clCreateFromGLTexture_t *clCreateFromGLTexture;
181 #else
182   void *clCreateSubDevices;
183   void *clRetainDevice;
184   void *clReleaseDevice;
185   void *clCreateImage;
186   void *clCreateProgramWithBuiltInKernels;
187   void *clCompileProgram;
188   void *clLinkProgram;
189   void *clUnloadPlatformCompiler;
190   void *clGetKernelArgInfo;
191   void *clEnqueueFillBuffer;
192   void *clEnqueueFillImage;
193   void *clEnqueueMigrateMemObjects;
194   void *clEnqueueMarkerWithWaitList;
195   void *clEnqueueBarrierWithWaitList;
196   void *clGetExtensionFunctionAddressForPlatform;
197   void *clCreateFromGLTexture;
198 #endif
199 
200   /* cl_khr_d3d11_sharing and cl_khr_dx9_media_sharing */
201 #ifdef _WIN32
202   clGetDeviceIDsFromD3D11KHR_t *clGetDeviceIDsFromD3D11KHR;
203   clCreateFromD3D11BufferKHR_t *clCreateFromD3D11BufferKHR;
204   clCreateFromD3D11Texture2DKHR_t *clCreateFromD3D11Texture2DKHR;
205   clCreateFromD3D11Texture3DKHR_t *clCreateFromD3D11Texture3DKHR;
206   clCreateFromDX9MediaSurfaceKHR_t *clCreateFromDX9MediaSurfaceKHR;
207   clEnqueueAcquireD3D11ObjectsKHR_t *clEnqueueAcquireD3D11ObjectsKHR;
208   clEnqueueReleaseD3D11ObjectsKHR_t *clEnqueueReleaseD3D11ObjectsKHR;
209   clGetDeviceIDsFromDX9MediaAdapterKHR_t *
210       clGetDeviceIDsFromDX9MediaAdapterKHR;
211   clEnqueueAcquireDX9MediaSurfacesKHR_t *
212       clEnqueueAcquireDX9MediaSurfacesKHR;
213   clEnqueueReleaseDX9MediaSurfacesKHR_t *
214       clEnqueueReleaseDX9MediaSurfacesKHR;
215 #else
216   void *clGetDeviceIDsFromD3D11KHR;
217   void *clCreateFromD3D11BufferKHR;
218   void *clCreateFromD3D11Texture2DKHR;
219   void *clCreateFromD3D11Texture3DKHR;
220   void *clCreateFromDX9MediaSurfaceKHR;
221   void *clEnqueueAcquireD3D11ObjectsKHR;
222   void *clEnqueueReleaseD3D11ObjectsKHR;
223   void *clGetDeviceIDsFromDX9MediaAdapterKHR;
224   void *clEnqueueAcquireDX9MediaSurfacesKHR;
225   void *clEnqueueReleaseDX9MediaSurfacesKHR;
226 #endif
227 
228   /* cl_khr_egl_image */
229   clCreateFromEGLImageKHR_t *clCreateFromEGLImageKHR;
230   clEnqueueAcquireEGLObjectsKHR_t *clEnqueueAcquireEGLObjectsKHR;
231   clEnqueueReleaseEGLObjectsKHR_t *clEnqueueReleaseEGLObjectsKHR;
232 
233   /* cl_khr_egl_event */
234   clCreateEventFromEGLSyncKHR_t *clCreateEventFromEGLSyncKHR;
235 
236   /* OpenCL 2.0 */
237 #ifdef CL_VERSION_2_0
238   clCreateCommandQueueWithProperties_t *clCreateCommandQueueWithProperties;
239   clCreatePipe_t *clCreatePipe;
240   clGetPipeInfo_t *clGetPipeInfo;
241   clSVMAlloc_t *clSVMAlloc;
242   clSVMFree_t *clSVMFree;
243   clEnqueueSVMFree_t *clEnqueueSVMFree;
244   clEnqueueSVMMemcpy_t *clEnqueueSVMMemcpy;
245   clEnqueueSVMMemFill_t *clEnqueueSVMMemFill;
246   clEnqueueSVMMap_t *clEnqueueSVMMap;
247   clEnqueueSVMUnmap_t *clEnqueueSVMUnmap;
248   clCreateSamplerWithProperties_t *clCreateSamplerWithProperties;
249   clSetKernelArgSVMPointer_t *clSetKernelArgSVMPointer;
250   clSetKernelExecInfo_t *clSetKernelExecInfo;
251 #else
252   void *clCreateCommandQueueWithProperties;
253   void *clCreatePipe;
254   void *clGetPipeInfo;
255   void *clSVMAlloc;
256   void *clSVMFree;
257   void *clEnqueueSVMFree;
258   void *clEnqueueSVMMemcpy;
259   void *clEnqueueSVMMemFill;
260   void *clEnqueueSVMMap;
261   void *clEnqueueSVMUnmap;
262   void *clCreateSamplerWithProperties;
263   void *clSetKernelArgSVMPointer;
264   void *clSetKernelExecInfo;
265 #endif
266 
267   /* cl_khr_sub_groups */
268   clGetKernelSubGroupInfoKHR_t *clGetKernelSubGroupInfoKHR;
269 
270   /* OpenCL 2.1 */
271 #ifdef CL_VERSION_2_1
272   clCloneKernel_t *clCloneKernel;
273   clCreateProgramWithIL_t *clCreateProgramWithIL;
274   clEnqueueSVMMigrateMem_t *clEnqueueSVMMigrateMem;
275   clGetDeviceAndHostTimer_t *clGetDeviceAndHostTimer;
276   clGetHostTimer_t *clGetHostTimer;
277   clGetKernelSubGroupInfo_t *clGetKernelSubGroupInfo;
278   clSetDefaultDeviceCommandQueue_t *clSetDefaultDeviceCommandQueue;
279 #else
280   void *clCloneKernel;
281   void *clCreateProgramWithIL;
282   void *clEnqueueSVMMigrateMem;
283   void *clGetDeviceAndHostTimer;
284   void *clGetHostTimer;
285   void *clGetKernelSubGroupInfo;
286   void *clSetDefaultDeviceCommandQueue;
287 #endif
288 
289   /* OpenCL 2.2 */
290 #ifdef CL_VERSION_2_2
291   clSetProgramReleaseCallback_t *clSetProgramReleaseCallback;
292   clSetProgramSpecializationConstant_t *clSetProgramSpecializationConstant;
293 #else
294   void *clSetProgramReleaseCallback;
295   void *clSetProgramSpecializationConstant;
296 #endif
297 
298   /* OpenCL 3.0 */
299 #ifdef CL_VERSION_3_0
300   clCreateBufferWithProperties_t *clCreateBufferWithProperties;
301   clCreateImageWithProperties_t *clCreateImageWithProperties;
302   clSetContextDestructorCallback_t *clSetContextDestructorCallback;
303 #else
304   void *clCreateBufferWithProperties;
305   void *clCreateImageWithProperties;
306   void *clSetContextDestructorCallback;
307 #endif
308 
309 } cl_icd_dispatch;
310 
311 #ifdef __cplusplus
312 }
313 #endif
314 
315 #endif /* #ifndef OPENCL_CL_ICD_H */
316