| /******************************************************************************* |
| * Copyright (c) 2019-2020 The Khronos Group Inc. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| ******************************************************************************/ |
| |
| #ifndef OPENCL_CL_ICD_H |
| #define OPENCL_CL_ICD_H |
| |
| #include <CL/cl.h> |
| #include <CL/cl_function_types.h> |
| #include <CL/cl_egl.h> |
| #include <CL/cl_ext.h> |
| #include <CL/cl_gl.h> |
| |
| #if defined(_WIN32) |
| #include <CL/cl_d3d11.h> |
| #include <CL/cl_d3d10.h> |
| #include <CL/cl_dx9_media_sharing.h> |
| #endif |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /* Vendor dispatch table structure */ |
| |
| typedef struct _cl_icd_dispatch { |
| /* OpenCL 1.0 */ |
| clGetPlatformIDs_t *clGetPlatformIDs; |
| clGetPlatformInfo_t *clGetPlatformInfo; |
| clGetDeviceIDs_t *clGetDeviceIDs; |
| clGetDeviceInfo_t *clGetDeviceInfo; |
| clCreateContext_t *clCreateContext; |
| clCreateContextFromType_t *clCreateContextFromType; |
| clRetainContext_t *clRetainContext; |
| clReleaseContext_t *clReleaseContext; |
| clGetContextInfo_t *clGetContextInfo; |
| clCreateCommandQueue_t *clCreateCommandQueue; |
| clRetainCommandQueue_t *clRetainCommandQueue; |
| clReleaseCommandQueue_t *clReleaseCommandQueue; |
| clGetCommandQueueInfo_t *clGetCommandQueueInfo; |
| clSetCommandQueueProperty_t *clSetCommandQueueProperty; |
| clCreateBuffer_t *clCreateBuffer; |
| clCreateImage2D_t *clCreateImage2D; |
| clCreateImage3D_t *clCreateImage3D; |
| clRetainMemObject_t *clRetainMemObject; |
| clReleaseMemObject_t *clReleaseMemObject; |
| clGetSupportedImageFormats_t *clGetSupportedImageFormats; |
| clGetMemObjectInfo_t *clGetMemObjectInfo; |
| clGetImageInfo_t *clGetImageInfo; |
| clCreateSampler_t *clCreateSampler; |
| clRetainSampler_t *clRetainSampler; |
| clReleaseSampler_t *clReleaseSampler; |
| clGetSamplerInfo_t *clGetSamplerInfo; |
| clCreateProgramWithSource_t *clCreateProgramWithSource; |
| clCreateProgramWithBinary_t *clCreateProgramWithBinary; |
| clRetainProgram_t *clRetainProgram; |
| clReleaseProgram_t *clReleaseProgram; |
| clBuildProgram_t *clBuildProgram; |
| clUnloadCompiler_t *clUnloadCompiler; |
| clGetProgramInfo_t *clGetProgramInfo; |
| clGetProgramBuildInfo_t *clGetProgramBuildInfo; |
| clCreateKernel_t *clCreateKernel; |
| clCreateKernelsInProgram_t *clCreateKernelsInProgram; |
| clRetainKernel_t *clRetainKernel; |
| clReleaseKernel_t *clReleaseKernel; |
| clSetKernelArg_t *clSetKernelArg; |
| clGetKernelInfo_t *clGetKernelInfo; |
| clGetKernelWorkGroupInfo_t *clGetKernelWorkGroupInfo; |
| clWaitForEvents_t *clWaitForEvents; |
| clGetEventInfo_t *clGetEventInfo; |
| clRetainEvent_t *clRetainEvent; |
| clReleaseEvent_t *clReleaseEvent; |
| clGetEventProfilingInfo_t *clGetEventProfilingInfo; |
| clFlush_t *clFlush; |
| clFinish_t *clFinish; |
| clEnqueueReadBuffer_t *clEnqueueReadBuffer; |
| clEnqueueWriteBuffer_t *clEnqueueWriteBuffer; |
| clEnqueueCopyBuffer_t *clEnqueueCopyBuffer; |
| clEnqueueReadImage_t *clEnqueueReadImage; |
| clEnqueueWriteImage_t *clEnqueueWriteImage; |
| clEnqueueCopyImage_t *clEnqueueCopyImage; |
| clEnqueueCopyImageToBuffer_t *clEnqueueCopyImageToBuffer; |
| clEnqueueCopyBufferToImage_t *clEnqueueCopyBufferToImage; |
| clEnqueueMapBuffer_t *clEnqueueMapBuffer; |
| clEnqueueMapImage_t *clEnqueueMapImage; |
| clEnqueueUnmapMemObject_t *clEnqueueUnmapMemObject; |
| clEnqueueNDRangeKernel_t *clEnqueueNDRangeKernel; |
| clEnqueueTask_t *clEnqueueTask; |
| clEnqueueNativeKernel_t *clEnqueueNativeKernel; |
| clEnqueueMarker_t *clEnqueueMarker; |
| clEnqueueWaitForEvents_t *clEnqueueWaitForEvents; |
| clEnqueueBarrier_t *clEnqueueBarrier; |
| clGetExtensionFunctionAddress_t *clGetExtensionFunctionAddress; |
| clCreateFromGLBuffer_t *clCreateFromGLBuffer; |
| clCreateFromGLTexture2D_t *clCreateFromGLTexture2D; |
| clCreateFromGLTexture3D_t *clCreateFromGLTexture3D; |
| clCreateFromGLRenderbuffer_t *clCreateFromGLRenderbuffer; |
| clGetGLObjectInfo_t *clGetGLObjectInfo; |
| clGetGLTextureInfo_t *clGetGLTextureInfo; |
| clEnqueueAcquireGLObjects_t *clEnqueueAcquireGLObjects; |
| clEnqueueReleaseGLObjects_t *clEnqueueReleaseGLObjects; |
| clGetGLContextInfoKHR_t *clGetGLContextInfoKHR; |
| |
| /* cl_khr_d3d10_sharing */ |
| #ifdef _WIN32 |
| clGetDeviceIDsFromD3D10KHR_t *clGetDeviceIDsFromD3D10KHR; |
| clCreateFromD3D10BufferKHR_t *clCreateFromD3D10BufferKHR; |
| clCreateFromD3D10Texture2DKHR_t *clCreateFromD3D10Texture2DKHR; |
| clCreateFromD3D10Texture3DKHR_t *clCreateFromD3D10Texture3DKHR; |
| clEnqueueAcquireD3D10ObjectsKHR_t *clEnqueueAcquireD3D10ObjectsKHR; |
| clEnqueueReleaseD3D10ObjectsKHR_t *clEnqueueReleaseD3D10ObjectsKHR; |
| #else |
| void *clGetDeviceIDsFromD3D10KHR; |
| void *clCreateFromD3D10BufferKHR; |
| void *clCreateFromD3D10Texture2DKHR; |
| void *clCreateFromD3D10Texture3DKHR; |
| void *clEnqueueAcquireD3D10ObjectsKHR; |
| void *clEnqueueReleaseD3D10ObjectsKHR; |
| #endif |
| |
| /* OpenCL 1.1 */ |
| #ifdef CL_VERSION_1_1 |
| clSetEventCallback_t *clSetEventCallback; |
| clCreateSubBuffer_t *clCreateSubBuffer; |
| clSetMemObjectDestructorCallback_t *clSetMemObjectDestructorCallback; |
| clCreateUserEvent_t *clCreateUserEvent; |
| clSetUserEventStatus_t *clSetUserEventStatus; |
| clEnqueueReadBufferRect_t *clEnqueueReadBufferRect; |
| clEnqueueWriteBufferRect_t *clEnqueueWriteBufferRect; |
| clEnqueueCopyBufferRect_t *clEnqueueCopyBufferRect; |
| #else |
| void *clSetEventCallback; |
| void *clCreateSubBuffer; |
| void *clSetMemObjectDestructorCallback; |
| void *clCreateUserEvent; |
| void *clSetUserEventStatus; |
| void *clEnqueueReadBufferRect; |
| void *clEnqueueWriteBufferRect; |
| void *clEnqueueCopyBufferRect; |
| #endif |
| |
| /* cl_ext_device_fission */ |
| clCreateSubDevicesEXT_t *clCreateSubDevicesEXT; |
| clRetainDeviceEXT_t *clRetainDeviceEXT; |
| clReleaseDeviceEXT_t *clReleaseDeviceEXT; |
| |
| /* cl_khr_gl_event */ |
| clCreateEventFromGLsyncKHR_t *clCreateEventFromGLsyncKHR; |
| |
| /* OpenCL 1.2 */ |
| #ifdef CL_VERSION_1_2 |
| clCreateSubDevices_t *clCreateSubDevices; |
| clRetainDevice_t *clRetainDevice; |
| clReleaseDevice_t *clReleaseDevice; |
| clCreateImage_t *clCreateImage; |
| clCreateProgramWithBuiltInKernels_t *clCreateProgramWithBuiltInKernels; |
| clCompileProgram_t *clCompileProgram; |
| clLinkProgram_t *clLinkProgram; |
| clUnloadPlatformCompiler_t *clUnloadPlatformCompiler; |
| clGetKernelArgInfo_t *clGetKernelArgInfo; |
| clEnqueueFillBuffer_t *clEnqueueFillBuffer; |
| clEnqueueFillImage_t *clEnqueueFillImage; |
| clEnqueueMigrateMemObjects_t *clEnqueueMigrateMemObjects; |
| clEnqueueMarkerWithWaitList_t *clEnqueueMarkerWithWaitList; |
| clEnqueueBarrierWithWaitList_t *clEnqueueBarrierWithWaitList; |
| clGetExtensionFunctionAddressForPlatform_t * |
| clGetExtensionFunctionAddressForPlatform; |
| clCreateFromGLTexture_t *clCreateFromGLTexture; |
| #else |
| void *clCreateSubDevices; |
| void *clRetainDevice; |
| void *clReleaseDevice; |
| void *clCreateImage; |
| void *clCreateProgramWithBuiltInKernels; |
| void *clCompileProgram; |
| void *clLinkProgram; |
| void *clUnloadPlatformCompiler; |
| void *clGetKernelArgInfo; |
| void *clEnqueueFillBuffer; |
| void *clEnqueueFillImage; |
| void *clEnqueueMigrateMemObjects; |
| void *clEnqueueMarkerWithWaitList; |
| void *clEnqueueBarrierWithWaitList; |
| void *clGetExtensionFunctionAddressForPlatform; |
| void *clCreateFromGLTexture; |
| #endif |
| |
| /* cl_khr_d3d11_sharing and cl_khr_dx9_media_sharing */ |
| #ifdef _WIN32 |
| clGetDeviceIDsFromD3D11KHR_t *clGetDeviceIDsFromD3D11KHR; |
| clCreateFromD3D11BufferKHR_t *clCreateFromD3D11BufferKHR; |
| clCreateFromD3D11Texture2DKHR_t *clCreateFromD3D11Texture2DKHR; |
| clCreateFromD3D11Texture3DKHR_t *clCreateFromD3D11Texture3DKHR; |
| clCreateFromDX9MediaSurfaceKHR_t *clCreateFromDX9MediaSurfaceKHR; |
| clEnqueueAcquireD3D11ObjectsKHR_t *clEnqueueAcquireD3D11ObjectsKHR; |
| clEnqueueReleaseD3D11ObjectsKHR_t *clEnqueueReleaseD3D11ObjectsKHR; |
| clGetDeviceIDsFromDX9MediaAdapterKHR_t * |
| clGetDeviceIDsFromDX9MediaAdapterKHR; |
| clEnqueueAcquireDX9MediaSurfacesKHR_t * |
| clEnqueueAcquireDX9MediaSurfacesKHR; |
| clEnqueueReleaseDX9MediaSurfacesKHR_t * |
| clEnqueueReleaseDX9MediaSurfacesKHR; |
| #else |
| void *clGetDeviceIDsFromD3D11KHR; |
| void *clCreateFromD3D11BufferKHR; |
| void *clCreateFromD3D11Texture2DKHR; |
| void *clCreateFromD3D11Texture3DKHR; |
| void *clCreateFromDX9MediaSurfaceKHR; |
| void *clEnqueueAcquireD3D11ObjectsKHR; |
| void *clEnqueueReleaseD3D11ObjectsKHR; |
| void *clGetDeviceIDsFromDX9MediaAdapterKHR; |
| void *clEnqueueAcquireDX9MediaSurfacesKHR; |
| void *clEnqueueReleaseDX9MediaSurfacesKHR; |
| #endif |
| |
| /* cl_khr_egl_image */ |
| clCreateFromEGLImageKHR_t *clCreateFromEGLImageKHR; |
| clEnqueueAcquireEGLObjectsKHR_t *clEnqueueAcquireEGLObjectsKHR; |
| clEnqueueReleaseEGLObjectsKHR_t *clEnqueueReleaseEGLObjectsKHR; |
| |
| /* cl_khr_egl_event */ |
| clCreateEventFromEGLSyncKHR_t *clCreateEventFromEGLSyncKHR; |
| |
| /* OpenCL 2.0 */ |
| #ifdef CL_VERSION_2_0 |
| clCreateCommandQueueWithProperties_t *clCreateCommandQueueWithProperties; |
| clCreatePipe_t *clCreatePipe; |
| clGetPipeInfo_t *clGetPipeInfo; |
| clSVMAlloc_t *clSVMAlloc; |
| clSVMFree_t *clSVMFree; |
| clEnqueueSVMFree_t *clEnqueueSVMFree; |
| clEnqueueSVMMemcpy_t *clEnqueueSVMMemcpy; |
| clEnqueueSVMMemFill_t *clEnqueueSVMMemFill; |
| clEnqueueSVMMap_t *clEnqueueSVMMap; |
| clEnqueueSVMUnmap_t *clEnqueueSVMUnmap; |
| clCreateSamplerWithProperties_t *clCreateSamplerWithProperties; |
| clSetKernelArgSVMPointer_t *clSetKernelArgSVMPointer; |
| clSetKernelExecInfo_t *clSetKernelExecInfo; |
| #else |
| void *clCreateCommandQueueWithProperties; |
| void *clCreatePipe; |
| void *clGetPipeInfo; |
| void *clSVMAlloc; |
| void *clSVMFree; |
| void *clEnqueueSVMFree; |
| void *clEnqueueSVMMemcpy; |
| void *clEnqueueSVMMemFill; |
| void *clEnqueueSVMMap; |
| void *clEnqueueSVMUnmap; |
| void *clCreateSamplerWithProperties; |
| void *clSetKernelArgSVMPointer; |
| void *clSetKernelExecInfo; |
| #endif |
| |
| /* cl_khr_sub_groups */ |
| clGetKernelSubGroupInfoKHR_t *clGetKernelSubGroupInfoKHR; |
| |
| /* OpenCL 2.1 */ |
| #ifdef CL_VERSION_2_1 |
| clCloneKernel_t *clCloneKernel; |
| clCreateProgramWithIL_t *clCreateProgramWithIL; |
| clEnqueueSVMMigrateMem_t *clEnqueueSVMMigrateMem; |
| clGetDeviceAndHostTimer_t *clGetDeviceAndHostTimer; |
| clGetHostTimer_t *clGetHostTimer; |
| clGetKernelSubGroupInfo_t *clGetKernelSubGroupInfo; |
| clSetDefaultDeviceCommandQueue_t *clSetDefaultDeviceCommandQueue; |
| #else |
| void *clCloneKernel; |
| void *clCreateProgramWithIL; |
| void *clEnqueueSVMMigrateMem; |
| void *clGetDeviceAndHostTimer; |
| void *clGetHostTimer; |
| void *clGetKernelSubGroupInfo; |
| void *clSetDefaultDeviceCommandQueue; |
| #endif |
| |
| /* OpenCL 2.2 */ |
| #ifdef CL_VERSION_2_2 |
| clSetProgramReleaseCallback_t *clSetProgramReleaseCallback; |
| clSetProgramSpecializationConstant_t *clSetProgramSpecializationConstant; |
| #else |
| void *clSetProgramReleaseCallback; |
| void *clSetProgramSpecializationConstant; |
| #endif |
| |
| /* OpenCL 3.0 */ |
| #ifdef CL_VERSION_3_0 |
| clCreateBufferWithProperties_t *clCreateBufferWithProperties; |
| clCreateImageWithProperties_t *clCreateImageWithProperties; |
| clSetContextDestructorCallback_t *clSetContextDestructorCallback; |
| #else |
| void *clCreateBufferWithProperties; |
| void *clCreateImageWithProperties; |
| void *clSetContextDestructorCallback; |
| #endif |
| |
| } cl_icd_dispatch; |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* #ifndef OPENCL_CL_ICD_H */ |