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