diff options
author | Simon Richter <Simon.Richter@hogyros.de> | 2013-04-03 20:32:45 +0200 |
---|---|---|
committer | Zhigang Gong <zhigang.gong@linux.intel.com> | 2013-04-18 11:21:01 +0800 |
commit | 0118a372252180fb6b8c597dd0874fb31b477435 (patch) | |
tree | fac60e7178e2948bf4d8c2aff8e906ff18b9cc8e /src/cl_khr_icd.c | |
parent | cb618258d42fbde26bcb5f4437e2ccec1db4003f (diff) | |
download | beignet-0118a372252180fb6b8c597dd0874fb31b477435.tar.gz |
Implement KHR ICD extension
This adds a pointer to the dispatch table at the beginning of every object
of type
- cl_command_queue
- cl_context
- cl_device_id
- cl_event
- cl_kernel
- cl_mem
- cl_platform_id
- cl_program
- cl_sampler
as required by the ICD specification. The layout of the dispatch table
comes from the OpenCL ICD loader by Brice Videau <brice.videau@imag.fr> and
Vincent Danjean <Vincent.Danjean@ens-lyon.org>.
To avoid dispatch table entries being overwritten with the ICD loader's
implementations of the CL functions (as would be the proper behaviour for
the ELF loader), the -Bsymbolic option is given to the linker.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
Diffstat (limited to 'src/cl_khr_icd.c')
-rw-r--r-- | src/cl_khr_icd.c | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/src/cl_khr_icd.c b/src/cl_khr_icd.c new file mode 100644 index 00000000..5f0180a3 --- /dev/null +++ b/src/cl_khr_icd.c @@ -0,0 +1,175 @@ +/* + * Copyright © 2013 Simon Richter + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <ocl_icd.h> + +#include "cl_platform_id.h" + +/* The interop functions are not implemented in Beignet */ +#define CL_GL_INTEROP(x) NULL +/* OpenCL 1.2 is not implemented in Beignet */ +#define CL_1_2_NOTYET(x) NULL + +/** Return platform list through ICD interface + * This code is used only if a client is linked directly against the library + * instead of using the ICD loader. In this case, no other implementations + * should exist in the process address space, so the call is equivalent to + * clGetPlatformIDs(). + * + * @param[in] num_entries Number of entries allocated in return buffer + * @param[out] platforms Platform identifiers supported by this implementation + * @param[out] num_platforms Number of platform identifiers returned + * @return OpenCL error code + * @retval CL_SUCCESS Successful execution + * @retval CL_PLATFORM_NOT_FOUND_KHR No platforms provided + * @retval CL_INVALID_VALUE Invalid parameters + */ +cl_int +clIcdGetPlatformIDsKHR(cl_uint num_entries, + cl_platform_id * platforms, + cl_uint * num_platforms) +{ + return cl_get_platform_ids(num_entries, platforms, num_platforms); +} + +struct _cl_icd_dispatch const cl_khr_icd_dispatch = { + clGetPlatformIDs, + clGetPlatformInfo, + clGetDeviceIDs, + clGetDeviceInfo, + clCreateContext, + clCreateContextFromType, + clRetainContext, + clReleaseContext, + clGetContextInfo, + clCreateCommandQueue, + clRetainCommandQueue, + clReleaseCommandQueue, + clGetCommandQueueInfo, + (void *) NULL, /* clSetCommandQueueProperty */ + clCreateBuffer, + clCreateImage2D, + clCreateImage3D, + clRetainMemObject, + clReleaseMemObject, + clGetSupportedImageFormats, + clGetMemObjectInfo, + clGetImageInfo, + clCreateSampler, + clRetainSampler, + clReleaseSampler, + clGetSamplerInfo, + clCreateProgramWithSource, + clCreateProgramWithBinary, + clRetainProgram, + clReleaseProgram, + clBuildProgram, + clUnloadCompiler, + clGetProgramInfo, + clGetProgramBuildInfo, + clCreateKernel, + clCreateKernelsInProgram, + clRetainKernel, + clReleaseKernel, + clSetKernelArg, + clGetKernelInfo, + clGetKernelWorkGroupInfo, + clWaitForEvents, + clGetEventInfo, + clRetainEvent, + clReleaseEvent, + clGetEventProfilingInfo, + clFlush, + clFinish, + clEnqueueReadBuffer, + clEnqueueWriteBuffer, + clEnqueueCopyBuffer, + clEnqueueReadImage, + clEnqueueWriteImage, + clEnqueueCopyImage, + clEnqueueCopyImageToBuffer, + clEnqueueCopyBufferToImage, + clEnqueueMapBuffer, + clEnqueueMapImage, + clEnqueueUnmapMemObject, + clEnqueueNDRangeKernel, + clEnqueueTask, + clEnqueueNativeKernel, + clEnqueueMarker, + clEnqueueWaitForEvents, + clEnqueueBarrier, + clGetExtensionFunctionAddress, + CL_GL_INTEROP(clCreateFromGLBuffer), + CL_GL_INTEROP(clCreateFromGLTexture2D), + CL_GL_INTEROP(clCreateFromGLTexture3D), + CL_GL_INTEROP(clCreateFromGLRenderbuffer), + CL_GL_INTEROP(clGetGLObjectInfo), + CL_GL_INTEROP(clGetGLTextureInfo), + CL_GL_INTEROP(clEnqueueAcquireGLObjects), + CL_GL_INTEROP(clEnqueueReleaseGLObjects), + CL_GL_INTEROP(clGetGLContextInfoKHR), + (void *) NULL, + (void *) NULL, + (void *) NULL, + (void *) NULL, + (void *) NULL, + (void *) NULL, + clSetEventCallback, + clCreateSubBuffer, + clSetMemObjectDestructorCallback, + clCreateUserEvent, + clSetUserEventStatus, + clEnqueueReadBufferRect, + clEnqueueWriteBufferRect, + clEnqueueCopyBufferRect, + CL_1_2_NOTYET(clCreateSubDevicesEXT), + CL_1_2_NOTYET(clRetainDeviceEXT), + CL_1_2_NOTYET(clReleaseDeviceEXT), +#ifdef CL_VERSION_1_2 + (void *) NULL, + CL_1_2_NOTYET(clCreateSubDevices), + CL_1_2_NOTYET(clRetainDevice), + CL_1_2_NOTYET(clReleaseDevice), + CL_1_2_NOTYET(clCreateImage), + CL_1_2_NOTYET(clCreateProgramWithBuiltInKernels), + CL_1_2_NOTYET(clCompileProgram), + CL_1_2_NOTYET(clLinkProgram), + CL_1_2_NOTYET(clUnloadPlatformCompiler), + CL_1_2_NOTYET(clGetKernelArgInfo), + CL_1_2_NOTYET(clEnqueueFillBuffer), + CL_1_2_NOTYET(clEnqueueFillImage), + CL_1_2_NOTYET(clEnqueueMigrateMemObjects), + CL_1_2_NOTYET(clEnqueueMarkerWithWaitList), + CL_1_2_NOTYET(clEnqueueBarrierWithWaitList), + CL_1_2_NOTYET(clGetExtensionFunctionAddressForPlatform), + CL_GL_INTEROP(clCreateFromGLTexture), + (void *) NULL, + (void *) NULL, + (void *) NULL, + (void *) NULL, + (void *) NULL, + (void *) NULL, + (void *) NULL, + (void *) NULL, + (void *) NULL, + (void *) NULL, + (void *) NULL, + (void *) NULL, + (void *) NULL +#endif +}; + |