1/* 2 * Copyright (c) 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 * OpenCL is a trademark of Apple Inc. used under license by Khronos. 17 */ 18 19#include "icd_print_layer.h" 20 21/////////////////////////////////////////////////////////////////////////////// 22// Core APIs: 23%for apis in coreapis.values(): 24%for api in apis: 25static ${api.RetType} CL_API_CALL ${api.Name + "_wrap"}( 26%for i, param in enumerate(api.Params): 27% if i < len(api.Params)-1: 28 ${param.Type} ${param.Name}${param.TypeEnd}, 29% else: 30 ${param.Type} ${param.Name}${param.TypeEnd}) ${api.Suffix} 31% endif 32%endfor 33{ 34printf("${api.Name}\n"); 35% if api.Name == "clSVMFree": 36tdispatch->${api.Name}( 37% else: 38return tdispatch->${api.Name}( 39% endif 40%for i, param in enumerate(api.Params): 41% if i < len(api.Params)-1: 42 ${param.Name}, 43% else: 44 ${param.Name}); 45% endif 46%endfor 47} 48 49/////////////////////////////////////////////////////////////////////////////// 50%endfor 51%endfor 52<% 53icdextensions = [ 54 'cl_ext_device_fission', 55 'cl_khr_d3d10_sharing', 56 'cl_khr_d3d11_sharing', 57 'cl_khr_dx9_media_sharing', 58 'cl_khr_egl_event', 59 'cl_khr_egl_image', 60 'cl_khr_gl_event', 61 'cl_khr_gl_sharing', 62 'cl_khr_subgroups' 63 ] 64win32extensions = { 65 'cl_khr_d3d10_sharing', 66 'cl_khr_d3d11_sharing', 67 'cl_khr_dx9_media_sharing', 68 } 69%> 70%for extension in icdextensions: 71<% 72 apis = extapis[extension] 73%>// ${extension} 74%if extension in win32extensions: 75 76#if defined(_WIN32) 77%endif 78%for api in apis: 79static ${api.RetType} CL_API_CALL ${api.Name + "_wrap"}( 80%for i, param in enumerate(api.Params): 81% if i < len(api.Params)-1: 82 ${param.Type} ${param.Name}${param.TypeEnd}, 83% else: 84 ${param.Type} ${param.Name}${param.TypeEnd}) ${api.Suffix} 85% endif 86%endfor 87{ 88printf("${api.Name}\n"); 89return tdispatch->${api.Name}( 90%for i, param in enumerate(api.Params): 91% if i < len(api.Params)-1: 92 ${param.Name}, 93% else: 94 ${param.Name}); 95% endif 96%endfor 97} 98%endfor 99 100%if extension in win32extensions: 101#endif // defined(_WIN32) 102 103%endif 104/////////////////////////////////////////////////////////////////////////////// 105 106%endfor 107void _init_dispatch(void) { 108 dispatch.clGetPlatformIDs = &clGetPlatformIDs_wrap; 109 dispatch.clGetPlatformInfo = &clGetPlatformInfo_wrap; 110 dispatch.clGetDeviceIDs = &clGetDeviceIDs_wrap; 111 dispatch.clGetDeviceInfo = &clGetDeviceInfo_wrap; 112 dispatch.clCreateContext = &clCreateContext_wrap; 113 dispatch.clCreateContextFromType = &clCreateContextFromType_wrap; 114 dispatch.clRetainContext = &clRetainContext_wrap; 115 dispatch.clReleaseContext = &clReleaseContext_wrap; 116 dispatch.clGetContextInfo = &clGetContextInfo_wrap; 117 dispatch.clCreateCommandQueue = &clCreateCommandQueue_wrap; 118 dispatch.clRetainCommandQueue = &clRetainCommandQueue_wrap; 119 dispatch.clReleaseCommandQueue = &clReleaseCommandQueue_wrap; 120 dispatch.clGetCommandQueueInfo = &clGetCommandQueueInfo_wrap; 121 dispatch.clSetCommandQueueProperty = &clSetCommandQueueProperty_wrap; 122 dispatch.clCreateBuffer = &clCreateBuffer_wrap; 123 dispatch.clCreateImage2D = &clCreateImage2D_wrap; 124 dispatch.clCreateImage3D = &clCreateImage3D_wrap; 125 dispatch.clRetainMemObject = &clRetainMemObject_wrap; 126 dispatch.clReleaseMemObject = &clReleaseMemObject_wrap; 127 dispatch.clGetSupportedImageFormats = &clGetSupportedImageFormats_wrap; 128 dispatch.clGetMemObjectInfo = &clGetMemObjectInfo_wrap; 129 dispatch.clGetImageInfo = &clGetImageInfo_wrap; 130 dispatch.clCreateSampler = &clCreateSampler_wrap; 131 dispatch.clRetainSampler = &clRetainSampler_wrap; 132 dispatch.clReleaseSampler = &clReleaseSampler_wrap; 133 dispatch.clGetSamplerInfo = &clGetSamplerInfo_wrap; 134 dispatch.clCreateProgramWithSource = &clCreateProgramWithSource_wrap; 135 dispatch.clCreateProgramWithBinary = &clCreateProgramWithBinary_wrap; 136 dispatch.clRetainProgram = &clRetainProgram_wrap; 137 dispatch.clReleaseProgram = &clReleaseProgram_wrap; 138 dispatch.clBuildProgram = &clBuildProgram_wrap; 139 dispatch.clUnloadCompiler = &clUnloadCompiler_wrap; 140 dispatch.clGetProgramInfo = &clGetProgramInfo_wrap; 141 dispatch.clGetProgramBuildInfo = &clGetProgramBuildInfo_wrap; 142 dispatch.clCreateKernel = &clCreateKernel_wrap; 143 dispatch.clCreateKernelsInProgram = &clCreateKernelsInProgram_wrap; 144 dispatch.clRetainKernel = &clRetainKernel_wrap; 145 dispatch.clReleaseKernel = &clReleaseKernel_wrap; 146 dispatch.clSetKernelArg = &clSetKernelArg_wrap; 147 dispatch.clGetKernelInfo = &clGetKernelInfo_wrap; 148 dispatch.clGetKernelWorkGroupInfo = &clGetKernelWorkGroupInfo_wrap; 149 dispatch.clWaitForEvents = &clWaitForEvents_wrap; 150 dispatch.clGetEventInfo = &clGetEventInfo_wrap; 151 dispatch.clRetainEvent = &clRetainEvent_wrap; 152 dispatch.clReleaseEvent = &clReleaseEvent_wrap; 153 dispatch.clGetEventProfilingInfo = &clGetEventProfilingInfo_wrap; 154 dispatch.clFlush = &clFlush_wrap; 155 dispatch.clFinish = &clFinish_wrap; 156 dispatch.clEnqueueReadBuffer = &clEnqueueReadBuffer_wrap; 157 dispatch.clEnqueueWriteBuffer = &clEnqueueWriteBuffer_wrap; 158 dispatch.clEnqueueCopyBuffer = &clEnqueueCopyBuffer_wrap; 159 dispatch.clEnqueueReadImage = &clEnqueueReadImage_wrap; 160 dispatch.clEnqueueWriteImage = &clEnqueueWriteImage_wrap; 161 dispatch.clEnqueueCopyImage = &clEnqueueCopyImage_wrap; 162 dispatch.clEnqueueCopyImageToBuffer = &clEnqueueCopyImageToBuffer_wrap; 163 dispatch.clEnqueueCopyBufferToImage = &clEnqueueCopyBufferToImage_wrap; 164 dispatch.clEnqueueMapBuffer = &clEnqueueMapBuffer_wrap; 165 dispatch.clEnqueueMapImage = &clEnqueueMapImage_wrap; 166 dispatch.clEnqueueUnmapMemObject = &clEnqueueUnmapMemObject_wrap; 167 dispatch.clEnqueueNDRangeKernel = &clEnqueueNDRangeKernel_wrap; 168 dispatch.clEnqueueTask = &clEnqueueTask_wrap; 169 dispatch.clEnqueueNativeKernel = &clEnqueueNativeKernel_wrap; 170 dispatch.clEnqueueMarker = &clEnqueueMarker_wrap; 171 dispatch.clEnqueueWaitForEvents = &clEnqueueWaitForEvents_wrap; 172 dispatch.clEnqueueBarrier = &clEnqueueBarrier_wrap; 173 dispatch.clGetExtensionFunctionAddress = &clGetExtensionFunctionAddress_wrap; 174 dispatch.clCreateFromGLBuffer = &clCreateFromGLBuffer_wrap; 175 dispatch.clCreateFromGLTexture2D = &clCreateFromGLTexture2D_wrap; 176 dispatch.clCreateFromGLTexture3D = &clCreateFromGLTexture3D_wrap; 177 dispatch.clCreateFromGLRenderbuffer = &clCreateFromGLRenderbuffer_wrap; 178 dispatch.clGetGLObjectInfo = &clGetGLObjectInfo_wrap; 179 dispatch.clGetGLTextureInfo = &clGetGLTextureInfo_wrap; 180 dispatch.clEnqueueAcquireGLObjects = &clEnqueueAcquireGLObjects_wrap; 181 dispatch.clEnqueueReleaseGLObjects = &clEnqueueReleaseGLObjects_wrap; 182 dispatch.clGetGLContextInfoKHR = &clGetGLContextInfoKHR_wrap; 183 184 /* cl_khr_d3d10_sharing */ 185#if defined(_WIN32) 186 dispatch.clGetDeviceIDsFromD3D10KHR = &clGetDeviceIDsFromD3D10KHR_wrap; 187 dispatch.clCreateFromD3D10BufferKHR = &clCreateFromD3D10BufferKHR_wrap; 188 dispatch.clCreateFromD3D10Texture2DKHR = &clCreateFromD3D10Texture2DKHR_wrap; 189 dispatch.clCreateFromD3D10Texture3DKHR = &clCreateFromD3D10Texture3DKHR_wrap; 190 dispatch.clEnqueueAcquireD3D10ObjectsKHR = &clEnqueueAcquireD3D10ObjectsKHR_wrap; 191 dispatch.clEnqueueReleaseD3D10ObjectsKHR = &clEnqueueReleaseD3D10ObjectsKHR_wrap; 192#else 193 dispatch.clGetDeviceIDsFromD3D10KHR = NULL; 194 dispatch.clCreateFromD3D10BufferKHR = NULL; 195 dispatch.clCreateFromD3D10Texture2DKHR = NULL; 196 dispatch.clCreateFromD3D10Texture3DKHR = NULL; 197 dispatch.clEnqueueAcquireD3D10ObjectsKHR = NULL; 198 dispatch.clEnqueueReleaseD3D10ObjectsKHR = NULL; 199#endif 200 201 /* OpenCL 1.1 */ 202 dispatch.clSetEventCallback = &clSetEventCallback_wrap; 203 dispatch.clCreateSubBuffer = &clCreateSubBuffer_wrap; 204 dispatch.clSetMemObjectDestructorCallback = &clSetMemObjectDestructorCallback_wrap; 205 dispatch.clCreateUserEvent = &clCreateUserEvent_wrap; 206 dispatch.clSetUserEventStatus = &clSetUserEventStatus_wrap; 207 dispatch.clEnqueueReadBufferRect = &clEnqueueReadBufferRect_wrap; 208 dispatch.clEnqueueWriteBufferRect = &clEnqueueWriteBufferRect_wrap; 209 dispatch.clEnqueueCopyBufferRect = &clEnqueueCopyBufferRect_wrap; 210 211 /* cl_ext_device_fission */ 212 dispatch.clCreateSubDevicesEXT = &clCreateSubDevicesEXT_wrap; 213 dispatch.clRetainDeviceEXT = &clRetainDeviceEXT_wrap; 214 dispatch.clReleaseDeviceEXT = &clReleaseDeviceEXT_wrap; 215 216 /* cl_khr_gl_event */ 217 dispatch.clCreateEventFromGLsyncKHR = &clCreateEventFromGLsyncKHR_wrap; 218 219 /* OpenCL 1.2 */ 220 dispatch.clCreateSubDevices = &clCreateSubDevices_wrap; 221 dispatch.clRetainDevice = &clRetainDevice_wrap; 222 dispatch.clReleaseDevice = &clReleaseDevice_wrap; 223 dispatch.clCreateImage = &clCreateImage_wrap; 224 dispatch.clCreateProgramWithBuiltInKernels = &clCreateProgramWithBuiltInKernels_wrap; 225 dispatch.clCompileProgram = &clCompileProgram_wrap; 226 dispatch.clLinkProgram = &clLinkProgram_wrap; 227 dispatch.clUnloadPlatformCompiler = &clUnloadPlatformCompiler_wrap; 228 dispatch.clGetKernelArgInfo = &clGetKernelArgInfo_wrap; 229 dispatch.clEnqueueFillBuffer = &clEnqueueFillBuffer_wrap; 230 dispatch.clEnqueueFillImage = &clEnqueueFillImage_wrap; 231 dispatch.clEnqueueMigrateMemObjects = &clEnqueueMigrateMemObjects_wrap; 232 dispatch.clEnqueueMarkerWithWaitList = &clEnqueueMarkerWithWaitList_wrap; 233 dispatch.clEnqueueBarrierWithWaitList = &clEnqueueBarrierWithWaitList_wrap; 234 dispatch.clGetExtensionFunctionAddressForPlatform = &clGetExtensionFunctionAddressForPlatform_wrap; 235 dispatch.clCreateFromGLTexture = &clCreateFromGLTexture_wrap; 236 237 /* cl_khr_d3d11_sharing */ 238#if defined(_WIN32) 239 dispatch.clGetDeviceIDsFromD3D11KHR = &clGetDeviceIDsFromD3D11KHR_wrap; 240 dispatch.clCreateFromD3D11BufferKHR = &clCreateFromD3D11BufferKHR_wrap; 241 dispatch.clCreateFromD3D11Texture2DKHR = &clCreateFromD3D11Texture2DKHR_wrap; 242 dispatch.clCreateFromD3D11Texture3DKHR = &clCreateFromD3D11Texture3DKHR_wrap; 243 dispatch.clCreateFromDX9MediaSurfaceKHR = &clCreateFromDX9MediaSurfaceKHR_wrap; 244 dispatch.clEnqueueAcquireD3D11ObjectsKHR = &clEnqueueAcquireD3D11ObjectsKHR_wrap; 245 dispatch.clEnqueueReleaseD3D11ObjectsKHR = &clEnqueueReleaseD3D11ObjectsKHR_wrap; 246#else 247 dispatch.clGetDeviceIDsFromD3D11KHR = NULL; 248 dispatch.clCreateFromD3D11BufferKHR = NULL; 249 dispatch.clCreateFromD3D11Texture2DKHR = NULL; 250 dispatch.clCreateFromD3D11Texture3DKHR = NULL; 251 dispatch.clCreateFromDX9MediaSurfaceKHR = NULL; 252 dispatch.clEnqueueAcquireD3D11ObjectsKHR = NULL; 253 dispatch.clEnqueueReleaseD3D11ObjectsKHR = NULL; 254#endif 255 256 /* cl_khr_dx9_media_sharing */ 257#if defined(_WIN32) 258 dispatch.clGetDeviceIDsFromDX9MediaAdapterKHR = &clGetDeviceIDsFromDX9MediaAdapterKHR_wrap; 259 dispatch.clEnqueueAcquireDX9MediaSurfacesKHR = &clEnqueueAcquireDX9MediaSurfacesKHR_wrap; 260 dispatch.clEnqueueReleaseDX9MediaSurfacesKHR = &clEnqueueReleaseDX9MediaSurfacesKHR_wrap; 261#else 262 dispatch.clGetDeviceIDsFromDX9MediaAdapterKHR = NULL; 263 dispatch.clEnqueueAcquireDX9MediaSurfacesKHR = NULL; 264 dispatch.clEnqueueReleaseDX9MediaSurfacesKHR = NULL; 265#endif 266 267 /* cl_khr_egl_image */ 268 dispatch.clCreateFromEGLImageKHR = &clCreateFromEGLImageKHR_wrap; 269 dispatch.clEnqueueAcquireEGLObjectsKHR = &clEnqueueAcquireEGLObjectsKHR_wrap; 270 dispatch.clEnqueueReleaseEGLObjectsKHR = &clEnqueueReleaseEGLObjectsKHR_wrap; 271 272 /* cl_khr_egl_event */ 273 dispatch.clCreateEventFromEGLSyncKHR = &clCreateEventFromEGLSyncKHR_wrap; 274 275 /* OpenCL 2.0 */ 276 dispatch.clCreateCommandQueueWithProperties = &clCreateCommandQueueWithProperties_wrap; 277 dispatch.clCreatePipe = &clCreatePipe_wrap; 278 dispatch.clGetPipeInfo = &clGetPipeInfo_wrap; 279 dispatch.clSVMAlloc = &clSVMAlloc_wrap; 280 dispatch.clSVMFree = &clSVMFree_wrap; 281 dispatch.clEnqueueSVMFree = &clEnqueueSVMFree_wrap; 282 dispatch.clEnqueueSVMMemcpy = &clEnqueueSVMMemcpy_wrap; 283 dispatch.clEnqueueSVMMemFill = &clEnqueueSVMMemFill_wrap; 284 dispatch.clEnqueueSVMMap = &clEnqueueSVMMap_wrap; 285 dispatch.clEnqueueSVMUnmap = &clEnqueueSVMUnmap_wrap; 286 dispatch.clCreateSamplerWithProperties = &clCreateSamplerWithProperties_wrap; 287 dispatch.clSetKernelArgSVMPointer = &clSetKernelArgSVMPointer_wrap; 288 dispatch.clSetKernelExecInfo = &clSetKernelExecInfo_wrap; 289 290 /* cl_khr_sub_groups */ 291 dispatch.clGetKernelSubGroupInfoKHR = &clGetKernelSubGroupInfoKHR_wrap; 292 293 /* OpenCL 2.1 */ 294 dispatch.clCloneKernel = &clCloneKernel_wrap; 295 dispatch.clCreateProgramWithIL = &clCreateProgramWithIL_wrap; 296 dispatch.clEnqueueSVMMigrateMem = &clEnqueueSVMMigrateMem_wrap; 297 dispatch.clGetDeviceAndHostTimer = &clGetDeviceAndHostTimer_wrap; 298 dispatch.clGetHostTimer = &clGetHostTimer_wrap; 299 dispatch.clGetKernelSubGroupInfo = &clGetKernelSubGroupInfo_wrap; 300 dispatch.clSetDefaultDeviceCommandQueue = &clSetDefaultDeviceCommandQueue_wrap; 301 302 /* OpenCL 2.2 */ 303 dispatch.clSetProgramReleaseCallback = &clSetProgramReleaseCallback_wrap; 304 dispatch.clSetProgramSpecializationConstant = &clSetProgramSpecializationConstant_wrap; 305 306 /* OpenCL 3.0 */ 307 dispatch.clCreateBufferWithProperties = &clCreateBufferWithProperties_wrap; 308 dispatch.clCreateImageWithProperties = &clCreateImageWithProperties_wrap; 309 dispatch.clSetContextDestructorCallback = &clSetContextDestructorCallback_wrap; 310} 311