Files
rocm-systems/projects/clr/opencl/khronos/icd/test/driver_stub/icd.c
T
2025-08-20 19:58:06 +05:30

184 строки
7.4 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); }