8ba6c62394
Change-Id: I82f5ef84eac72821214d832a41e40e0f42cf66b9
191 строка
8.7 KiB
C
191 строка
8.7 KiB
C
/* Modifications Copyright(C) 2022 Advanced Micro Devices, Inc.
|
|
* All rights reserved.
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
#include <assert.h>
|
|
#include "icd_structs.h"
|
|
|
|
#define CL_USE_DEPRECATED_OPENCL_1_0_APIS
|
|
#define CL_USE_DEPRECATED_OPENCL_1_1_APIS
|
|
#define CL_USE_DEPRECATED_OPENCL_1_2_APIS
|
|
|
|
// Need to rename all CL API functions to prevent ICD loader functions calling
|
|
// themselves via the dispatch table. Include this before cl headers.
|
|
#include "rename_api.h"
|
|
|
|
#include "CL/cl.h"
|
|
#include "CL/cl_gl.h"
|
|
#include "CL/cl_gl_ext.h"
|
|
|
|
/*
|
|
* Prototypes for deprecated functions no longer present in cl.h
|
|
*/
|
|
extern CL_API_ENTRY cl_int CL_API_CALL
|
|
clSetCommandQueueProperty(cl_command_queue /* command_queue */,
|
|
cl_command_queue_properties /* properties */,
|
|
cl_bool /* enable */,
|
|
cl_command_queue_properties * /* old_properties */);
|
|
|
|
#define ICD_DISPATCH_TABLE_ENTRY(fn) \
|
|
assert(dispatchTable->entryCount < 256); \
|
|
dispatchTable->entries[dispatchTable->entryCount++] = (void*)(fn)
|
|
|
|
cl_int cliIcdDispatchTableCreate(CLIicdDispatchTable **outDispatchTable)
|
|
{
|
|
CLIicdDispatchTable *dispatchTable = NULL;
|
|
cl_int result = CL_SUCCESS;
|
|
|
|
// allocate the public handle
|
|
dispatchTable = (CLIicdDispatchTable *) malloc(sizeof(*dispatchTable));
|
|
if (!dispatchTable) {
|
|
result = CL_OUT_OF_HOST_MEMORY;
|
|
goto Error;
|
|
}
|
|
memset(dispatchTable, 0, sizeof(*dispatchTable));
|
|
|
|
// OpenCL 1.0
|
|
ICD_DISPATCH_TABLE_ENTRY ( clGetPlatformIDs );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clGetPlatformInfo );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clGetDeviceIDs );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clGetDeviceInfo );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clCreateContext );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clCreateContextFromType );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clRetainContext );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clReleaseContext );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clGetContextInfo );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clCreateCommandQueue );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clRetainCommandQueue );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clReleaseCommandQueue );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clGetCommandQueueInfo );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clSetCommandQueueProperty );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clCreateBuffer );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clCreateImage2D );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clCreateImage3D );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clRetainMemObject );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clReleaseMemObject );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clGetSupportedImageFormats );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clGetMemObjectInfo );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clGetImageInfo );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clCreateSampler );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clRetainSampler );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clReleaseSampler );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clGetSamplerInfo );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clCreateProgramWithSource );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clCreateProgramWithBinary );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clRetainProgram );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clReleaseProgram );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clBuildProgram );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clUnloadCompiler );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clGetProgramInfo );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clGetProgramBuildInfo );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clCreateKernel );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clCreateKernelsInProgram );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clRetainKernel );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clReleaseKernel );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clSetKernelArg );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clGetKernelInfo );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clGetKernelWorkGroupInfo );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clWaitForEvents );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clGetEventInfo );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clRetainEvent );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clReleaseEvent );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clGetEventProfilingInfo );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clFlush );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clFinish );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clEnqueueReadBuffer );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clEnqueueWriteBuffer );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clEnqueueCopyBuffer );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clEnqueueReadImage );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clEnqueueWriteImage );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clEnqueueCopyImage );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clEnqueueCopyImageToBuffer );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clEnqueueCopyBufferToImage );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clEnqueueMapBuffer );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clEnqueueMapImage );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clEnqueueUnmapMemObject );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clEnqueueNDRangeKernel );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clEnqueueTask );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clEnqueueNativeKernel );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clEnqueueMarker );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clEnqueueWaitForEvents );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clEnqueueBarrier );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clGetExtensionFunctionAddress );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clCreateFromGLBuffer );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clCreateFromGLTexture2D );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clCreateFromGLTexture3D );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clCreateFromGLRenderbuffer );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clGetGLObjectInfo );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clGetGLTextureInfo );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clEnqueueAcquireGLObjects );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clEnqueueReleaseGLObjects );
|
|
|
|
// cl_khr_gl_sharing
|
|
ICD_DISPATCH_TABLE_ENTRY ( clGetGLContextInfoKHR );
|
|
|
|
// cl_khr_d3d10_sharing (windows-only)
|
|
#if 0 && defined(_WIN32)
|
|
ICD_DISPATCH_TABLE_ENTRY ( clGetDeviceIDsFromD3D10KHR );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clCreateFromD3D10BufferKHR );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clCreateFromD3D10Texture2DKHR );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clCreateFromD3D10Texture3DKHR );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clEnqueueAcquireD3D10ObjectsKHR );
|
|
ICD_DISPATCH_TABLE_ENTRY ( clEnqueueReleaseD3D10ObjectsKHR );
|
|
#else
|
|
ICD_DISPATCH_TABLE_ENTRY( NULL );
|
|
ICD_DISPATCH_TABLE_ENTRY( NULL );
|
|
ICD_DISPATCH_TABLE_ENTRY( NULL );
|
|
ICD_DISPATCH_TABLE_ENTRY( NULL );
|
|
ICD_DISPATCH_TABLE_ENTRY( NULL );
|
|
ICD_DISPATCH_TABLE_ENTRY( NULL );
|
|
#endif
|
|
|
|
// OpenCL 1.1
|
|
ICD_DISPATCH_TABLE_ENTRY ( clSetEventCallback);
|
|
ICD_DISPATCH_TABLE_ENTRY ( clCreateSubBuffer);
|
|
ICD_DISPATCH_TABLE_ENTRY ( clSetMemObjectDestructorCallback);
|
|
ICD_DISPATCH_TABLE_ENTRY ( clCreateUserEvent);
|
|
ICD_DISPATCH_TABLE_ENTRY ( clSetUserEventStatus);
|
|
ICD_DISPATCH_TABLE_ENTRY ( clEnqueueReadBufferRect);
|
|
ICD_DISPATCH_TABLE_ENTRY ( clEnqueueWriteBufferRect);
|
|
ICD_DISPATCH_TABLE_ENTRY ( clEnqueueCopyBufferRect);
|
|
|
|
ICD_DISPATCH_TABLE_ENTRY ( /*clCreateSubDevicesEXT*/NULL);
|
|
ICD_DISPATCH_TABLE_ENTRY ( /*clRetainDeviceEXT*/ NULL);
|
|
ICD_DISPATCH_TABLE_ENTRY ( /*clReleaseDevice*/NULL);
|
|
|
|
ICD_DISPATCH_TABLE_ENTRY ( clCreateEventFromGLsyncKHR);
|
|
|
|
ICD_DISPATCH_TABLE_ENTRY ( clCreateSubDevices);
|
|
ICD_DISPATCH_TABLE_ENTRY ( clRetainDevice);
|
|
ICD_DISPATCH_TABLE_ENTRY ( clReleaseDevice);
|
|
ICD_DISPATCH_TABLE_ENTRY ( clCreateImage);
|
|
ICD_DISPATCH_TABLE_ENTRY ( clCreateProgramWithBuiltInKernels);
|
|
ICD_DISPATCH_TABLE_ENTRY ( clCompileProgram);
|
|
ICD_DISPATCH_TABLE_ENTRY ( clLinkProgram);
|
|
ICD_DISPATCH_TABLE_ENTRY ( clUnloadPlatformCompiler);
|
|
ICD_DISPATCH_TABLE_ENTRY ( clGetKernelArgInfo);
|
|
ICD_DISPATCH_TABLE_ENTRY ( clEnqueueFillBuffer);
|
|
ICD_DISPATCH_TABLE_ENTRY ( clEnqueueFillImage);
|
|
ICD_DISPATCH_TABLE_ENTRY ( clEnqueueMigrateMemObjects);
|
|
ICD_DISPATCH_TABLE_ENTRY ( clEnqueueMarkerWithWaitList);
|
|
ICD_DISPATCH_TABLE_ENTRY ( clEnqueueBarrierWithWaitList);
|
|
ICD_DISPATCH_TABLE_ENTRY ( clGetExtensionFunctionAddressForPlatform);
|
|
ICD_DISPATCH_TABLE_ENTRY ( clCreateFromGLTexture);
|
|
|
|
// return success
|
|
*outDispatchTable = dispatchTable;
|
|
return CL_SUCCESS;
|
|
|
|
Error:
|
|
return result;
|
|
}
|
|
|
|
void
|
|
cliIcdDispatchTableDestroy(CLIicdDispatchTable *dispatchTable)
|
|
{
|
|
free(dispatchTable);
|
|
}
|