/*
 * Copyright (c) 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.
 *
 * OpenCL is a trademark of Apple Inc. used under license by Khronos.
 */

#include "icd_print_layer.h"

///////////////////////////////////////////////////////////////////////////////
// Core APIs:
%for apis in coreapis.values():
%for api in apis:
static CL_API_ENTRY ${api.RetType} CL_API_CALL ${api.Name + "_wrap"}(
%for i, param in enumerate(api.Params):
%  if i < len(api.Params)-1:
    ${param.Type} ${param.Name}${param.TypeEnd},
%  else:
    ${param.Type} ${param.Name}${param.TypeEnd}) ${api.Suffix}
%  endif
%endfor
{
printf("${api.Name}\n");
return tdispatch->${api.Name}(
%for i, param in enumerate(api.Params):
%  if i < len(api.Params)-1:
            ${param.Name},
%  else:
            ${param.Name});
%  endif
%endfor
}

///////////////////////////////////////////////////////////////////////////////
%endfor
%endfor
<%
icdextensions = [
    'cl_ext_device_fission',
    'cl_khr_d3d10_sharing',
    'cl_khr_d3d11_sharing',
    'cl_khr_dx9_media_sharing',
    'cl_khr_egl_event',
    'cl_khr_egl_image',
    'cl_khr_gl_event',
    'cl_khr_gl_sharing',
    'cl_khr_subgroups'
    ]
win32extensions = {
    'cl_khr_d3d10_sharing',
    'cl_khr_d3d11_sharing',
    'cl_khr_dx9_media_sharing',
    }
%>
%for extension in icdextensions:
<%
    apis = extapis[extension]
%>// ${extension}
%if extension in win32extensions:

#if defined(_WIN32)
%endif
%for api in apis:
static CL_API_ENTRY ${api.RetType} CL_API_CALL ${api.Name + "_wrap"}(
%for i, param in enumerate(api.Params):
%  if i < len(api.Params)-1:
    ${param.Type} ${param.Name}${param.TypeEnd},
%  else:
    ${param.Type} ${param.Name}${param.TypeEnd}) ${api.Suffix}
%  endif
%endfor
{
printf("${api.Name}\n");
return tdispatch->${api.Name}(
%for i, param in enumerate(api.Params):
%  if i < len(api.Params)-1:
            ${param.Name},
%  else:
            ${param.Name});
%  endif
%endfor
}
%endfor

%if extension in win32extensions:
#endif // defined(_WIN32)

%endif
///////////////////////////////////////////////////////////////////////////////

%endfor
void _init_dispatch(void) {
    dispatch.clGetPlatformIDs = &clGetPlatformIDs_wrap;
    dispatch.clGetPlatformInfo = &clGetPlatformInfo_wrap;
    dispatch.clGetDeviceIDs = &clGetDeviceIDs_wrap;
    dispatch.clGetDeviceInfo = &clGetDeviceInfo_wrap;
    dispatch.clCreateContext = &clCreateContext_wrap;
    dispatch.clCreateContextFromType = &clCreateContextFromType_wrap;
    dispatch.clRetainContext = &clRetainContext_wrap;
    dispatch.clReleaseContext = &clReleaseContext_wrap;
    dispatch.clGetContextInfo = &clGetContextInfo_wrap;
    dispatch.clCreateCommandQueue = &clCreateCommandQueue_wrap;
    dispatch.clRetainCommandQueue = &clRetainCommandQueue_wrap;
    dispatch.clReleaseCommandQueue = &clReleaseCommandQueue_wrap;
    dispatch.clGetCommandQueueInfo = &clGetCommandQueueInfo_wrap;
    dispatch.clSetCommandQueueProperty = &clSetCommandQueueProperty_wrap;
    dispatch.clCreateBuffer = &clCreateBuffer_wrap;
    dispatch.clCreateImage2D = &clCreateImage2D_wrap;
    dispatch.clCreateImage3D = &clCreateImage3D_wrap;
    dispatch.clRetainMemObject = &clRetainMemObject_wrap;
    dispatch.clReleaseMemObject = &clReleaseMemObject_wrap;
    dispatch.clGetSupportedImageFormats = &clGetSupportedImageFormats_wrap;
    dispatch.clGetMemObjectInfo = &clGetMemObjectInfo_wrap;
    dispatch.clGetImageInfo = &clGetImageInfo_wrap;
    dispatch.clCreateSampler = &clCreateSampler_wrap;
    dispatch.clRetainSampler = &clRetainSampler_wrap;
    dispatch.clReleaseSampler = &clReleaseSampler_wrap;
    dispatch.clGetSamplerInfo = &clGetSamplerInfo_wrap;
    dispatch.clCreateProgramWithSource = &clCreateProgramWithSource_wrap;
    dispatch.clCreateProgramWithBinary = &clCreateProgramWithBinary_wrap;
    dispatch.clRetainProgram = &clRetainProgram_wrap;
    dispatch.clReleaseProgram = &clReleaseProgram_wrap;
    dispatch.clBuildProgram = &clBuildProgram_wrap;
    dispatch.clUnloadCompiler = &clUnloadCompiler_wrap;
    dispatch.clGetProgramInfo = &clGetProgramInfo_wrap;
    dispatch.clGetProgramBuildInfo = &clGetProgramBuildInfo_wrap;
    dispatch.clCreateKernel = &clCreateKernel_wrap;
    dispatch.clCreateKernelsInProgram = &clCreateKernelsInProgram_wrap;
    dispatch.clRetainKernel = &clRetainKernel_wrap;
    dispatch.clReleaseKernel = &clReleaseKernel_wrap;
    dispatch.clSetKernelArg = &clSetKernelArg_wrap;
    dispatch.clGetKernelInfo = &clGetKernelInfo_wrap;
    dispatch.clGetKernelWorkGroupInfo = &clGetKernelWorkGroupInfo_wrap;
    dispatch.clWaitForEvents = &clWaitForEvents_wrap;
    dispatch.clGetEventInfo = &clGetEventInfo_wrap;
    dispatch.clRetainEvent = &clRetainEvent_wrap;
    dispatch.clReleaseEvent = &clReleaseEvent_wrap;
    dispatch.clGetEventProfilingInfo = &clGetEventProfilingInfo_wrap;
    dispatch.clFlush = &clFlush_wrap;
    dispatch.clFinish = &clFinish_wrap;
    dispatch.clEnqueueReadBuffer = &clEnqueueReadBuffer_wrap;
    dispatch.clEnqueueWriteBuffer = &clEnqueueWriteBuffer_wrap;
    dispatch.clEnqueueCopyBuffer = &clEnqueueCopyBuffer_wrap;
    dispatch.clEnqueueReadImage = &clEnqueueReadImage_wrap;
    dispatch.clEnqueueWriteImage = &clEnqueueWriteImage_wrap;
    dispatch.clEnqueueCopyImage = &clEnqueueCopyImage_wrap;
    dispatch.clEnqueueCopyImageToBuffer = &clEnqueueCopyImageToBuffer_wrap;
    dispatch.clEnqueueCopyBufferToImage = &clEnqueueCopyBufferToImage_wrap;
    dispatch.clEnqueueMapBuffer = &clEnqueueMapBuffer_wrap;
    dispatch.clEnqueueMapImage = &clEnqueueMapImage_wrap;
    dispatch.clEnqueueUnmapMemObject = &clEnqueueUnmapMemObject_wrap;
    dispatch.clEnqueueNDRangeKernel = &clEnqueueNDRangeKernel_wrap;
    dispatch.clEnqueueTask = &clEnqueueTask_wrap;
    dispatch.clEnqueueNativeKernel = &clEnqueueNativeKernel_wrap;
    dispatch.clEnqueueMarker = &clEnqueueMarker_wrap;
    dispatch.clEnqueueWaitForEvents = &clEnqueueWaitForEvents_wrap;
    dispatch.clEnqueueBarrier = &clEnqueueBarrier_wrap;
    dispatch.clGetExtensionFunctionAddress = &clGetExtensionFunctionAddress_wrap;
    dispatch.clCreateFromGLBuffer = &clCreateFromGLBuffer_wrap;
    dispatch.clCreateFromGLTexture2D = &clCreateFromGLTexture2D_wrap;
    dispatch.clCreateFromGLTexture3D = &clCreateFromGLTexture3D_wrap;
    dispatch.clCreateFromGLRenderbuffer = &clCreateFromGLRenderbuffer_wrap;
    dispatch.clGetGLObjectInfo = &clGetGLObjectInfo_wrap;
    dispatch.clGetGLTextureInfo = &clGetGLTextureInfo_wrap;
    dispatch.clEnqueueAcquireGLObjects = &clEnqueueAcquireGLObjects_wrap;
    dispatch.clEnqueueReleaseGLObjects = &clEnqueueReleaseGLObjects_wrap;
    dispatch.clGetGLContextInfoKHR = &clGetGLContextInfoKHR_wrap;

  /* cl_khr_d3d10_sharing */
#if defined(_WIN32)
    dispatch.clGetDeviceIDsFromD3D10KHR = &clGetDeviceIDsFromD3D10KHR_wrap;
    dispatch.clCreateFromD3D10BufferKHR = &clCreateFromD3D10BufferKHR_wrap;
    dispatch.clCreateFromD3D10Texture2DKHR = &clCreateFromD3D10Texture2DKHR_wrap;
    dispatch.clCreateFromD3D10Texture3DKHR = &clCreateFromD3D10Texture3DKHR_wrap;
    dispatch.clEnqueueAcquireD3D10ObjectsKHR = &clEnqueueAcquireD3D10ObjectsKHR_wrap;
    dispatch.clEnqueueReleaseD3D10ObjectsKHR = &clEnqueueReleaseD3D10ObjectsKHR_wrap;
#else
    dispatch.clGetDeviceIDsFromD3D10KHR = NULL;
    dispatch.clCreateFromD3D10BufferKHR = NULL;
    dispatch.clCreateFromD3D10Texture2DKHR = NULL;
    dispatch.clCreateFromD3D10Texture3DKHR = NULL;
    dispatch.clEnqueueAcquireD3D10ObjectsKHR = NULL;
    dispatch.clEnqueueReleaseD3D10ObjectsKHR = NULL;
#endif

  /* OpenCL 1.1 */
    dispatch.clSetEventCallback = &clSetEventCallback_wrap;
    dispatch.clCreateSubBuffer = &clCreateSubBuffer_wrap;
    dispatch.clSetMemObjectDestructorCallback = &clSetMemObjectDestructorCallback_wrap;
    dispatch.clCreateUserEvent = &clCreateUserEvent_wrap;
    dispatch.clSetUserEventStatus = &clSetUserEventStatus_wrap;
    dispatch.clEnqueueReadBufferRect = &clEnqueueReadBufferRect_wrap;
    dispatch.clEnqueueWriteBufferRect = &clEnqueueWriteBufferRect_wrap;
    dispatch.clEnqueueCopyBufferRect = &clEnqueueCopyBufferRect_wrap;

  /* cl_ext_device_fission */
    dispatch.clCreateSubDevicesEXT = &clCreateSubDevicesEXT_wrap;
    dispatch.clRetainDeviceEXT = &clRetainDeviceEXT_wrap;
    dispatch.clReleaseDeviceEXT = &clReleaseDeviceEXT_wrap;

  /* cl_khr_gl_event */
    dispatch.clCreateEventFromGLsyncKHR = &clCreateEventFromGLsyncKHR_wrap;

  /* OpenCL 1.2 */
    dispatch.clCreateSubDevices = &clCreateSubDevices_wrap;
    dispatch.clRetainDevice = &clRetainDevice_wrap;
    dispatch.clReleaseDevice = &clReleaseDevice_wrap;
    dispatch.clCreateImage = &clCreateImage_wrap;
    dispatch.clCreateProgramWithBuiltInKernels = &clCreateProgramWithBuiltInKernels_wrap;
    dispatch.clCompileProgram = &clCompileProgram_wrap;
    dispatch.clLinkProgram = &clLinkProgram_wrap;
    dispatch.clUnloadPlatformCompiler = &clUnloadPlatformCompiler_wrap;
    dispatch.clGetKernelArgInfo = &clGetKernelArgInfo_wrap;
    dispatch.clEnqueueFillBuffer = &clEnqueueFillBuffer_wrap;
    dispatch.clEnqueueFillImage = &clEnqueueFillImage_wrap;
    dispatch.clEnqueueMigrateMemObjects = &clEnqueueMigrateMemObjects_wrap;
    dispatch.clEnqueueMarkerWithWaitList = &clEnqueueMarkerWithWaitList_wrap;
    dispatch.clEnqueueBarrierWithWaitList = &clEnqueueBarrierWithWaitList_wrap;
    dispatch.clGetExtensionFunctionAddressForPlatform = &clGetExtensionFunctionAddressForPlatform_wrap;
    dispatch.clCreateFromGLTexture = &clCreateFromGLTexture_wrap;

  /* cl_khr_d3d11_sharing */
#if defined(_WIN32)
    dispatch.clGetDeviceIDsFromD3D11KHR = &clGetDeviceIDsFromD3D11KHR_wrap;
    dispatch.clCreateFromD3D11BufferKHR = &clCreateFromD3D11BufferKHR_wrap;
    dispatch.clCreateFromD3D11Texture2DKHR = &clCreateFromD3D11Texture2DKHR_wrap;
    dispatch.clCreateFromD3D11Texture3DKHR = &clCreateFromD3D11Texture3DKHR_wrap;
    dispatch.clCreateFromDX9MediaSurfaceKHR = &clCreateFromDX9MediaSurfaceKHR_wrap;
    dispatch.clEnqueueAcquireD3D11ObjectsKHR = &clEnqueueAcquireD3D11ObjectsKHR_wrap;
    dispatch.clEnqueueReleaseD3D11ObjectsKHR = &clEnqueueReleaseD3D11ObjectsKHR_wrap;
#else
    dispatch.clGetDeviceIDsFromD3D11KHR = NULL;
    dispatch.clCreateFromD3D11BufferKHR = NULL;
    dispatch.clCreateFromD3D11Texture2DKHR = NULL;
    dispatch.clCreateFromD3D11Texture3DKHR = NULL;
    dispatch.clCreateFromDX9MediaSurfaceKHR = NULL;
    dispatch.clEnqueueAcquireD3D11ObjectsKHR = NULL;
    dispatch.clEnqueueReleaseD3D11ObjectsKHR = NULL;
#endif

  /* cl_khr_dx9_media_sharing */
#if defined(_WIN32)
    dispatch.clGetDeviceIDsFromDX9MediaAdapterKHR = &clGetDeviceIDsFromDX9MediaAdapterKHR_wrap;
    dispatch.clEnqueueAcquireDX9MediaSurfacesKHR = &clEnqueueAcquireDX9MediaSurfacesKHR_wrap;
    dispatch.clEnqueueReleaseDX9MediaSurfacesKHR = &clEnqueueReleaseDX9MediaSurfacesKHR_wrap;
#else
    dispatch.clGetDeviceIDsFromDX9MediaAdapterKHR = NULL;
    dispatch.clEnqueueAcquireDX9MediaSurfacesKHR = NULL;
    dispatch.clEnqueueReleaseDX9MediaSurfacesKHR = NULL;
#endif

  /* cl_khr_egl_image */
    dispatch.clCreateFromEGLImageKHR = &clCreateFromEGLImageKHR_wrap;
    dispatch.clEnqueueAcquireEGLObjectsKHR = &clEnqueueAcquireEGLObjectsKHR_wrap;
    dispatch.clEnqueueReleaseEGLObjectsKHR = &clEnqueueReleaseEGLObjectsKHR_wrap;

  /* cl_khr_egl_event */
    dispatch.clCreateEventFromEGLSyncKHR = &clCreateEventFromEGLSyncKHR_wrap;

  /* OpenCL 2.0 */
    dispatch.clCreateCommandQueueWithProperties = &clCreateCommandQueueWithProperties_wrap;
    dispatch.clCreatePipe = &clCreatePipe_wrap;
    dispatch.clGetPipeInfo = &clGetPipeInfo_wrap;
    dispatch.clSVMAlloc = &clSVMAlloc_wrap;
    dispatch.clSVMFree = &clSVMFree_wrap;
    dispatch.clEnqueueSVMFree = &clEnqueueSVMFree_wrap;
    dispatch.clEnqueueSVMMemcpy = &clEnqueueSVMMemcpy_wrap;
    dispatch.clEnqueueSVMMemFill = &clEnqueueSVMMemFill_wrap;
    dispatch.clEnqueueSVMMap = &clEnqueueSVMMap_wrap;
    dispatch.clEnqueueSVMUnmap = &clEnqueueSVMUnmap_wrap;
    dispatch.clCreateSamplerWithProperties = &clCreateSamplerWithProperties_wrap;
    dispatch.clSetKernelArgSVMPointer = &clSetKernelArgSVMPointer_wrap;
    dispatch.clSetKernelExecInfo = &clSetKernelExecInfo_wrap;

  /* cl_khr_sub_groups */
    dispatch.clGetKernelSubGroupInfoKHR = &clGetKernelSubGroupInfoKHR_wrap;

  /* OpenCL 2.1 */
    dispatch.clCloneKernel = &clCloneKernel_wrap;
    dispatch.clCreateProgramWithIL = &clCreateProgramWithIL_wrap;
    dispatch.clEnqueueSVMMigrateMem = &clEnqueueSVMMigrateMem_wrap;
    dispatch.clGetDeviceAndHostTimer = &clGetDeviceAndHostTimer_wrap;
    dispatch.clGetHostTimer = &clGetHostTimer_wrap;
    dispatch.clGetKernelSubGroupInfo = &clGetKernelSubGroupInfo_wrap;
    dispatch.clSetDefaultDeviceCommandQueue = &clSetDefaultDeviceCommandQueue_wrap;

  /* OpenCL 2.2 */
    dispatch.clSetProgramReleaseCallback = &clSetProgramReleaseCallback_wrap;
    dispatch.clSetProgramSpecializationConstant = &clSetProgramSpecializationConstant_wrap;

  /* OpenCL 3.0 */
    dispatch.clCreateBufferWithProperties = &clCreateBufferWithProperties_wrap;
    dispatch.clCreateImageWithProperties = &clCreateImageWithProperties_wrap;
    dispatch.clSetContextDestructorCallback = &clSetContextDestructorCallback_wrap;
}
