-cmake_minimum_required (VERSION 2.6)
+cmake_minimum_required (VERSION 2.8.11)
project (OPENCL_ICD_LOADER)
+find_package (Threads REQUIRED)
# The option below allows building the ICD Loader library as a shared library
# (ON, default) or a static library (OFF).
# advance. Use it with discretion.
option (BUILD_SHARED_LIBS "Build shared libs" ON)
-set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
-set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
-
-set (OPENCL_ICD_LOADER_SOURCES icd.c icd_dispatch.c)
+set (OPENCL_ICD_LOADER_SOURCES
+ loader/icd.c
+ loader/icd_dispatch.c)
if (WIN32)
- list (APPEND OPENCL_ICD_LOADER_SOURCES icd_windows.c icd_windows_hkr.c OpenCL.def OpenCL.rc)
- include_directories ($ENV{DXSDK_DIR}/Include)
+ list (APPEND OPENCL_ICD_LOADER_SOURCES
+ loader/windows/icd_windows.c
+ loader/windows/icd_windows_hkr.c
+ loader/windows/OpenCL.def
+ loader/windows/OpenCL.rc)
+ # Only add the DXSDK include directory if the environment variable is
+ # defined. Since the DXSDK has merged into the Windows SDK, this is
+ # only required in rare cases.
+ if (DEFINED ENV{DXSDK_DIR})
+ include_directories ($ENV{DXSDK_DIR}/Include)
+ endif ()
else ()
- list (APPEND OPENCL_ICD_LOADER_SOURCES icd_linux.c icd_exports.map)
-endif ()
-
-# Change this to point to a directory containing OpenCL header directory "CL"
-# OR copy OpenCL headers to ./inc/CL/
-if (NOT DEFINED OPENCL_INCLUDE_DIRS)
- set (OPENCL_INCLUDE_DIRS ./inc)
+ list (APPEND OPENCL_ICD_LOADER_SOURCES
+ loader/linux/icd_linux.c
+ loader/linux/icd_exports.map)
endif ()
-include_directories (${OPENCL_INCLUDE_DIRS})
+set (OPENCL_ICD_LOADER_HEADERS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/inc CACHE PATH "Path to OpenCL Headers")
-add_library (OpenCL SHARED ${OPENCL_ICD_LOADER_SOURCES})
+add_library (OpenCL ${OPENCL_ICD_LOADER_SOURCES})
set_target_properties (OpenCL PROPERTIES VERSION "1.2" SOVERSION "1")
if (WIN32)
endif()
else()
if (APPLE)
- set_target_properties (OpenCL PROPERTIES LINK_FLAGS "-pthread")
+ target_link_libraries (OpenCL ${CMAKE_THREAD_LIBS_INIT})
else ()
- set_target_properties (OpenCL PROPERTIES LINK_FLAGS "-pthread -Wl,--version-script -Wl,${PROJECT_SOURCE_DIR}/icd_exports.map")
+ set_target_properties (OpenCL PROPERTIES LINK_FLAGS "-Wl,--version-script -Wl,${CMAKE_CURRENT_SOURCE_DIR}/loader/linux/icd_exports.map")
+ target_link_libraries (OpenCL ${CMAKE_THREAD_LIBS_INIT})
endif ()
endif ()
+include_directories (${OPENCL_ICD_LOADER_HEADERS_DIR})
+add_definitions (-DCL_TARGET_OPENCL_VERSION=220)
+
+target_include_directories (OpenCL PRIVATE loader)
target_link_libraries (OpenCL ${CMAKE_DL_LIBS})
-enable_testing()
-add_subdirectory (test)
+include (CTest)
+if (BUILD_TESTING)
+ add_subdirectory (test)
+endif()
+
+install (TARGETS OpenCL
+ RUNTIME DESTINATION bin
+ ARCHIVE DESTINATION lib
+ LIBRARY DESTINATION lib)
+++ /dev/null
-;
-; Copyright (c) 2016-2019 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.
-
-EXPORTS
-
-;
-; Note:
-;
-; 1. Functions are grouped into blocks according to the OpenCL API version they
-; were introduced in.
-;
-; 2. Function blocks are sorted in ascending order of the API version.
-;
-; 3. Functions within a block are sorted alphabetically.
-;
-
-; OpenCL 1.0 API
-clBuildProgram
-clCreateBuffer
-clCreateCommandQueue
-clCreateContext
-clCreateContextFromType
-clCreateFromGLBuffer
-clCreateFromGLRenderbuffer
-clCreateFromGLTexture2D
-clCreateFromGLTexture3D
-clCreateImage2D
-clCreateImage3D
-clCreateKernel
-clCreateKernelsInProgram
-clCreateProgramWithBinary
-clCreateProgramWithSource
-clCreateSampler
-clEnqueueAcquireGLObjects
-clEnqueueBarrier
-clEnqueueCopyBuffer
-clEnqueueCopyBufferToImage
-clEnqueueCopyImage
-clEnqueueCopyImageToBuffer
-clEnqueueMapBuffer
-clEnqueueMapImage
-clEnqueueMarker
-clEnqueueNDRangeKernel
-clEnqueueNativeKernel
-clEnqueueReadBuffer
-clEnqueueReadImage
-clEnqueueReleaseGLObjects
-clEnqueueTask
-clEnqueueUnmapMemObject
-clEnqueueWaitForEvents
-clEnqueueWriteBuffer
-clEnqueueWriteImage
-clFinish
-clFlush
-clGetCommandQueueInfo
-clGetContextInfo
-clGetDeviceIDs
-clGetDeviceInfo
-clGetEventInfo
-clGetEventProfilingInfo
-clGetExtensionFunctionAddress
-clGetGLObjectInfo
-clGetGLTextureInfo
-clGetImageInfo
-clGetKernelInfo
-clGetKernelWorkGroupInfo
-clGetMemObjectInfo
-clGetPlatformIDs
-clGetPlatformInfo
-clGetProgramBuildInfo
-clGetProgramInfo
-clGetSamplerInfo
-clGetSupportedImageFormats
-clReleaseCommandQueue
-clReleaseContext
-clReleaseEvent
-clReleaseKernel
-clReleaseMemObject
-clReleaseProgram
-clReleaseSampler
-clRetainCommandQueue
-clRetainContext
-clRetainEvent
-clRetainKernel
-clRetainMemObject
-clRetainProgram
-clRetainSampler
-clSetCommandQueueProperty
-clSetKernelArg
-clUnloadCompiler
-clWaitForEvents
-
-; OpenCL 1.1 API
-clCreateSubBuffer
-clCreateUserEvent
-clEnqueueCopyBufferRect
-clEnqueueReadBufferRect
-clEnqueueWriteBufferRect
-clSetEventCallback
-clSetMemObjectDestructorCallback
-clSetUserEventStatus
-
-; OpenCL 1.2 API
-clCompileProgram
-clCreateFromGLTexture
-clCreateImage
-clCreateProgramWithBuiltInKernels
-clCreateSubDevices
-clEnqueueBarrierWithWaitList
-clEnqueueFillBuffer
-clEnqueueFillImage
-clEnqueueMarkerWithWaitList
-clEnqueueMigrateMemObjects
-clGetExtensionFunctionAddressForPlatform
-clGetKernelArgInfo
-clLinkProgram
-clReleaseDevice
-clRetainDevice
-clUnloadPlatformCompiler
-
-; OpenCL 2.0 API
-clCreateCommandQueueWithProperties
-clCreatePipe
-clCreateSamplerWithProperties
-clEnqueueSVMFree
-clEnqueueSVMMap
-clEnqueueSVMMemcpy
-clEnqueueSVMMemFill
-clEnqueueSVMUnmap
-clGetPipeInfo
-clSetKernelArgSVMPointer
-clSetKernelExecInfo
-clSVMAlloc
-clSVMFree
-
-; OpenCL 2.1 API
-clCloneKernel
-clCreateProgramWithIL
-clEnqueueSVMMigrateMem
-clGetDeviceAndHostTimer
-clGetHostTimer
-clGetKernelSubGroupInfo
-clSetDefaultDeviceCommandQueue
-
-; OpenCL 2.2 API
-clSetProgramReleaseCallback
-clSetProgramSpecializationConstant
-
+++ /dev/null
-/*
- * Copyright (c) 2016-2019 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 <windows.h>
-
-#ifdef RC_INVOKED
-
-VS_VERSION_INFO VERSIONINFO
-FILEVERSION 2,2,1,0
-PRODUCTVERSION 2,2,1,0
-FILETYPE VFT_DLL
-
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040904E4"
- BEGIN
- VALUE "FileDescription" ,"OpenCL Client DLL"
- VALUE "ProductName" ,"Khronos OpenCL ICD"
- VALUE "LegalCopyright" ,"Copyright \251 The Khronos Group Inc 2016-2019"
- VALUE "FileVersion" ,"2.2.1.0"
- VALUE "CompanyName" ,"Khronos Group"
- VALUE "InternalName" ,"OpenCL"
- VALUE "OriginalFilename","OpenCL.dll"
- END
- END
-
- BLOCK "VarFileInfo"
- BEGIN
- // extend this line for localized versions
- VALUE "Translation", 0x0409, 0x04E4
- END
-END
-
-#endif
-
+++ /dev/null
-/*
- * Copyright (c) 2016-2019 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.h"
-#include "icd_dispatch.h"
-#include <stdlib.h>
-#include <string.h>
-
-KHRicdVendor *khrIcdVendors = NULL;
-
-// entrypoint to initialize the ICD and add all vendors
-void khrIcdInitialize(void)
-{
- // enumerate vendors present on the system
- khrIcdOsVendorsEnumerateOnce();
-}
-
-void khrIcdVendorAdd(const char *libraryName)
-{
- void *library = NULL;
- cl_int result = CL_SUCCESS;
- pfn_clGetExtensionFunctionAddress p_clGetExtensionFunctionAddress = NULL;
- pfn_clIcdGetPlatformIDs p_clIcdGetPlatformIDs = NULL;
- cl_uint i = 0;
- cl_uint platformCount = 0;
- cl_platform_id *platforms = NULL;
- KHRicdVendor *vendorIterator = NULL;
-
- // require that the library name be valid
- if (!libraryName)
- {
- goto Done;
- }
- KHR_ICD_TRACE("attempting to add vendor %s...\n", libraryName);
-
- // load its library and query its function pointers
- library = khrIcdOsLibraryLoad(libraryName);
- if (!library)
- {
- KHR_ICD_TRACE("failed to load library %s\n", libraryName);
- goto Done;
- }
-
- // ensure that we haven't already loaded this vendor
- for (vendorIterator = khrIcdVendors; vendorIterator; vendorIterator = vendorIterator->next)
- {
- if (vendorIterator->library == library)
- {
- KHR_ICD_TRACE("already loaded vendor %s, nothing to do here\n", libraryName);
- goto Done;
- }
- }
-
- // get the library's clGetExtensionFunctionAddress pointer
- p_clGetExtensionFunctionAddress = (pfn_clGetExtensionFunctionAddress)(size_t)khrIcdOsLibraryGetFunctionAddress(library, "clGetExtensionFunctionAddress");
- if (!p_clGetExtensionFunctionAddress)
- {
- KHR_ICD_TRACE("failed to get function address clGetExtensionFunctionAddress\n");
- goto Done;
- }
-
- // use that function to get the clIcdGetPlatformIDsKHR function pointer
- p_clIcdGetPlatformIDs = (pfn_clIcdGetPlatformIDs)(size_t)p_clGetExtensionFunctionAddress("clIcdGetPlatformIDsKHR");
- if (!p_clIcdGetPlatformIDs)
- {
- KHR_ICD_TRACE("failed to get extension function address clIcdGetPlatformIDsKHR\n");
- goto Done;
- }
-
- // query the number of platforms available and allocate space to store them
- result = p_clIcdGetPlatformIDs(0, NULL, &platformCount);
- if (CL_SUCCESS != result)
- {
- KHR_ICD_TRACE("failed clIcdGetPlatformIDs\n");
- goto Done;
- }
- platforms = (cl_platform_id *)malloc(platformCount * sizeof(cl_platform_id) );
- if (!platforms)
- {
- KHR_ICD_TRACE("failed to allocate memory\n");
- goto Done;
- }
- memset(platforms, 0, platformCount * sizeof(cl_platform_id) );
- result = p_clIcdGetPlatformIDs(platformCount, platforms, NULL);
- if (CL_SUCCESS != result)
- {
- KHR_ICD_TRACE("failed clIcdGetPlatformIDs\n");
- goto Done;
- }
-
- // for each platform, add it
- for (i = 0; i < platformCount; ++i)
- {
- KHRicdVendor* vendor = NULL;
- char *suffix;
- size_t suffixSize;
-
- // call clGetPlatformInfo on the returned platform to get the suffix
- if (!platforms[i])
- {
- continue;
- }
- result = platforms[i]->dispatch->clGetPlatformInfo(
- platforms[i],
- CL_PLATFORM_ICD_SUFFIX_KHR,
- 0,
- NULL,
- &suffixSize);
- if (CL_SUCCESS != result)
- {
- continue;
- }
- suffix = (char *)malloc(suffixSize);
- if (!suffix)
- {
- continue;
- }
- result = platforms[i]->dispatch->clGetPlatformInfo(
- platforms[i],
- CL_PLATFORM_ICD_SUFFIX_KHR,
- suffixSize,
- suffix,
- NULL);
- if (CL_SUCCESS != result)
- {
- free(suffix);
- continue;
- }
-
- // allocate a structure for the vendor
- vendor = (KHRicdVendor*)malloc(sizeof(*vendor) );
- if (!vendor)
- {
- free(suffix);
- KHR_ICD_TRACE("failed to allocate memory\n");
- continue;
- }
- memset(vendor, 0, sizeof(*vendor) );
-
- // populate vendor data
- vendor->library = khrIcdOsLibraryLoad(libraryName);
- if (!vendor->library)
- {
- free(suffix);
- free(vendor);
- KHR_ICD_TRACE("failed get platform handle to library\n");
- continue;
- }
- vendor->clGetExtensionFunctionAddress = p_clGetExtensionFunctionAddress;
- vendor->platform = platforms[i];
- vendor->suffix = suffix;
-
- // add this vendor to the list of vendors at the tail
- {
- KHRicdVendor **prevNextPointer = NULL;
- for (prevNextPointer = &khrIcdVendors; *prevNextPointer; prevNextPointer = &( (*prevNextPointer)->next) );
- *prevNextPointer = vendor;
- }
-
- KHR_ICD_TRACE("successfully added vendor %s with suffix %s\n", libraryName, suffix);
-
- }
-
-Done:
-
- if (library)
- {
- khrIcdOsLibraryUnload(library);
- }
- if (platforms)
- {
- free(platforms);
- }
-}
-
-void khrIcdContextPropertiesGetPlatform(const cl_context_properties *properties, cl_platform_id *outPlatform)
-{
- if (properties == NULL && khrIcdVendors != NULL)
- {
- *outPlatform = khrIcdVendors[0].platform;
- }
- else
- {
- const cl_context_properties *property = (cl_context_properties *)NULL;
- *outPlatform = NULL;
- for (property = properties; property && property[0]; property += 2)
- {
- if ((cl_context_properties)CL_CONTEXT_PLATFORM == property[0])
- {
- *outPlatform = (cl_platform_id)property[1];
- }
- }
- }
-}
-
+++ /dev/null
-/*
- * Copyright (c) 2016-2019 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.
- */
-
-#ifndef _ICD_H_
-#define _ICD_H_
-
-#ifndef CL_USE_DEPRECATED_OPENCL_1_0_APIS
-#define CL_USE_DEPRECATED_OPENCL_1_0_APIS
-#endif
-
-#ifndef CL_USE_DEPRECATED_OPENCL_1_1_APIS
-#define CL_USE_DEPRECATED_OPENCL_1_1_APIS
-#endif
-
-#ifndef CL_USE_DEPRECATED_OPENCL_1_2_APIS
-#define CL_USE_DEPRECATED_OPENCL_1_2_APIS
-#endif
-
-#include <CL/cl.h>
-#include <CL/cl_ext.h>
-
-#ifdef _WIN32
-#include <tchar.h>
-#endif
-
-/*
- * type definitions
- */
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *pfn_clIcdGetPlatformIDs)(
- cl_uint num_entries,
- cl_platform_id *platforms,
- cl_uint *num_platforms) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *pfn_clGetPlatformInfo)(
- cl_platform_id platform,
- cl_platform_info param_name,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY void *(CL_API_CALL *pfn_clGetExtensionFunctionAddress)(
- const char *function_name) CL_API_SUFFIX__VERSION_1_0;
-
-typedef struct KHRicdVendorRec KHRicdVendor;
-
-/*
- * KHRicdVendor
- *
- * Data for a single ICD vendor platform.
- */
-struct KHRicdVendorRec
-{
- // the loaded library object (true type varies on Linux versus Windows)
- void *library;
-
- // the extension suffix for this platform
- char *suffix;
-
- // function pointer to the ICD platform IDs extracted from the library
- pfn_clGetExtensionFunctionAddress clGetExtensionFunctionAddress;
-
- // the platform retrieved from clGetIcdPlatformIDsKHR
- cl_platform_id platform;
-
- // next vendor in the list vendors
- KHRicdVendor *next;
-};
-
-// the global state
-extern KHRicdVendor * khrIcdVendors;
-
-/*
- * khrIcd interface
- */
-
-// read vendors from system configuration and store the data
-// loaded into khrIcdState. this will call the OS-specific
-// function khrIcdEnumerateVendors. this is called at every
-// dispatch function which may be a valid first call into the
-// API (e.g, getPlatformIDs, etc).
-void khrIcdInitialize(void);
-
-// go through the list of vendors (in /etc/OpenCL.conf or through
-// the registry) and call khrIcdVendorAdd for each vendor encountered
-// n.b, this call is OS-specific
-void khrIcdOsVendorsEnumerateOnce(void);
-
-// add a vendor's implementation to the list of libraries
-void khrIcdVendorAdd(const char *libraryName);
-
-// dynamically load a library. returns NULL on failure
-// n.b, this call is OS-specific
-void *khrIcdOsLibraryLoad(const char *libraryName);
-
-// get a function pointer from a loaded library. returns NULL on failure.
-// n.b, this call is OS-specific
-void *khrIcdOsLibraryGetFunctionAddress(void *library, const char *functionName);
-
-// unload a library.
-// n.b, this call is OS-specific
-void khrIcdOsLibraryUnload(void *library);
-
-// parse properties and determine the platform to use from them
-void khrIcdContextPropertiesGetPlatform(
- const cl_context_properties *properties,
- cl_platform_id *outPlatform);
-
-// internal tracing macros
-#if 0
- #include <stdio.h>
- #define KHR_ICD_TRACE(...) \
- do \
- { \
- fprintf(stderr, "KHR ICD trace at %s:%d: ", __FILE__, __LINE__); \
- fprintf(stderr, __VA_ARGS__); \
- } while (0)
-#ifdef _WIN32
-#define KHR_ICD_WIDE_TRACE(...) \
- do \
- { \
- fwprintf(stderr, L"KHR ICD trace at %hs:%d: ", __FILE__, __LINE__); \
- fwprintf(stderr, __VA_ARGS__); \
- } while (0)
-#else
-#define KHR_ICD_WIDE_TRACE(...)
-#endif
- #define KHR_ICD_ASSERT(x) \
- do \
- { \
- if (!(x)) \
- { \
- fprintf(stderr, "KHR ICD assert at %s:%d: %s failed", __FILE__, __LINE__, #x); \
- } \
- } while (0)
-#else
- #define KHR_ICD_TRACE(...)
- #define KHR_ICD_WIDE_TRACE(...)
- #define KHR_ICD_ASSERT(x)
-#endif
-
-// if handle is NULL then return invalid_handle_error_code
-#define KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(handle,invalid_handle_error_code) \
- do \
- { \
- if (!handle) \
- { \
- return invalid_handle_error_code; \
- } \
- } while (0)
-
-// if handle is NULL then set errcode_ret to invalid_handle_error and return NULL
-// (NULL being an invalid handle)
-#define KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(handle,invalid_handle_error) \
- do \
- { \
- if (!handle) \
- { \
- if (errcode_ret) \
- { \
- *errcode_ret = invalid_handle_error; \
- } \
- return NULL; \
- } \
- } while (0)
-
-
-#endif
-
+++ /dev/null
-/*
- * Copyright (c) 2012-2019 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_dispatch.h"
-#include "icd.h"
-#include <stdlib.h>
-#include <string.h>
-
-// Platform APIs
-CL_API_ENTRY cl_int CL_API_CALL
-clGetPlatformIDs(cl_uint num_entries,
- cl_platform_id * platforms,
- cl_uint * num_platforms) CL_API_SUFFIX__VERSION_1_0
-{
- KHRicdVendor* vendor = NULL;
- cl_uint i;
-
- // initialize the platforms (in case they have not been already)
- khrIcdInitialize();
-
- if (!num_entries && platforms)
- {
- return CL_INVALID_VALUE;
- }
- if (!platforms && !num_platforms)
- {
- return CL_INVALID_VALUE;
- }
- // set num_platforms to 0 and set all platform pointers to NULL
- if (num_platforms)
- {
- *num_platforms = 0;
- }
- for (i = 0; i < num_entries && platforms; ++i)
- {
- platforms[i] = NULL;
- }
- // return error if we have no platforms
- if (!khrIcdVendors)
- {
- return CL_PLATFORM_NOT_FOUND_KHR;
- }
- // otherwise enumerate all platforms
- for (vendor = khrIcdVendors; vendor; vendor = vendor->next)
- {
- if (num_entries && platforms)
- {
- *(platforms++) = vendor->platform;
- --num_entries;
- }
- if (num_platforms)
- {
- ++(*num_platforms);
- }
- }
- return CL_SUCCESS;
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clGetPlatformInfo(cl_platform_id platform,
- cl_platform_info param_name,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
-{
- // initialize the platforms (in case they have not been already)
- khrIcdInitialize();
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(platform, CL_INVALID_PLATFORM);
- return platform->dispatch->clGetPlatformInfo(
- platform,
- param_name,
- param_value_size,
- param_value,
- param_value_size_ret);
-}
-
-// Device APIs
-CL_API_ENTRY cl_int CL_API_CALL
-clGetDeviceIDs(cl_platform_id platform,
- cl_device_type device_type,
- cl_uint num_entries,
- cl_device_id * devices,
- cl_uint * num_devices) CL_API_SUFFIX__VERSION_1_0
-{
- // initialize the platforms (in case they have not been already)
- khrIcdInitialize();
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(platform, CL_INVALID_PLATFORM);
- return platform->dispatch->clGetDeviceIDs(
- platform,
- device_type,
- num_entries,
- devices,
- num_devices);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clGetDeviceInfo(
- cl_device_id device,
- cl_device_info param_name,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
- return device->dispatch->clGetDeviceInfo(
- device,
- param_name,
- param_value_size,
- param_value,
- param_value_size_ret);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clCreateSubDevices(cl_device_id in_device,
- const cl_device_partition_property * properties,
- cl_uint num_entries,
- cl_device_id * out_devices,
- cl_uint * num_devices) CL_API_SUFFIX__VERSION_1_2
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(in_device, CL_INVALID_DEVICE);
- return in_device->dispatch->clCreateSubDevices(
- in_device,
- properties,
- num_entries,
- out_devices,
- num_devices);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clRetainDevice(cl_device_id device) CL_API_SUFFIX__VERSION_1_2
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
- return device->dispatch->clRetainDevice(device);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clReleaseDevice(cl_device_id device) CL_API_SUFFIX__VERSION_1_2
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
- return device->dispatch->clReleaseDevice(device);
-}
-
-// Context APIs
-CL_API_ENTRY cl_context CL_API_CALL
-clCreateContext(const cl_context_properties * properties,
- cl_uint num_devices,
- const cl_device_id * devices,
- void (CL_CALLBACK *pfn_notify)(const char *, const void *, size_t, void *),
- void * user_data,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
-{
- // initialize the platforms (in case they have not been already)
- khrIcdInitialize();
- if (!num_devices || !devices)
- {
- if (errcode_ret)
- {
- *errcode_ret = CL_INVALID_VALUE;
- }
- return NULL;
- }
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(devices[0], CL_INVALID_DEVICE);
- return devices[0]->dispatch->clCreateContext(
- properties,
- num_devices,
- devices,
- pfn_notify,
- user_data,
- errcode_ret);
-}
-
-CL_API_ENTRY cl_context CL_API_CALL
-clCreateContextFromType(const cl_context_properties * properties,
- cl_device_type device_type,
- void (CL_CALLBACK *pfn_notify)(const char *, const void *, size_t, void *),
- void * user_data,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
-{
- cl_platform_id platform = NULL;
-
- // initialize the platforms (in case they have not been already)
- khrIcdInitialize();
-
- // determine the platform to use from the properties specified
- khrIcdContextPropertiesGetPlatform(properties, &platform);
-
- // validate the platform handle and dispatch
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(platform, CL_INVALID_PLATFORM);
- return platform->dispatch->clCreateContextFromType(
- properties,
- device_type,
- pfn_notify,
- user_data,
- errcode_ret);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clRetainContext(cl_context context) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(context, CL_INVALID_CONTEXT);
- return context->dispatch->clRetainContext(context);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clReleaseContext(cl_context context) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(context, CL_INVALID_CONTEXT);
- return context->dispatch->clReleaseContext(context);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clGetContextInfo(cl_context context,
- cl_context_info param_name,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(context, CL_INVALID_CONTEXT);
- return context->dispatch->clGetContextInfo(
- context,
- param_name,
- param_value_size,
- param_value,
- param_value_size_ret);
-}
-
-// Command Queue APIs
-CL_API_ENTRY cl_command_queue CL_API_CALL
-clCreateCommandQueue(cl_context context,
- cl_device_id device,
- cl_command_queue_properties properties,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
- return context->dispatch->clCreateCommandQueue(
- context,
- device,
- properties,
- errcode_ret);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clRetainCommandQueue(cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clRetainCommandQueue(command_queue);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clReleaseCommandQueue(cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clReleaseCommandQueue(command_queue);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clGetCommandQueueInfo(cl_command_queue command_queue,
- cl_command_queue_info param_name,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clGetCommandQueueInfo(
- command_queue,
- param_name,
- param_value_size,
- param_value,
- param_value_size_ret);
-}
-
-// Memory Object APIs
-CL_API_ENTRY cl_mem CL_API_CALL
-clCreateBuffer(cl_context context,
- cl_mem_flags flags,
- size_t size,
- void * host_ptr,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
- return context->dispatch->clCreateBuffer(
- context,
- flags,
- size,
- host_ptr,
- errcode_ret);
-}
-
-CL_API_ENTRY cl_mem CL_API_CALL
-clCreateImage(cl_context context,
- cl_mem_flags flags,
- const cl_image_format * image_format,
- const cl_image_desc * image_desc,
- void * host_ptr,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
- return context->dispatch->clCreateImage(
- context,
- flags,
- image_format,
- image_desc,
- host_ptr,
- errcode_ret);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clRetainMemObject(cl_mem memobj) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(memobj, CL_INVALID_MEM_OBJECT);
- return memobj->dispatch->clRetainMemObject(memobj);
-}
-
-
-CL_API_ENTRY cl_int CL_API_CALL
-clReleaseMemObject(cl_mem memobj) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(memobj, CL_INVALID_MEM_OBJECT);
- return memobj->dispatch->clReleaseMemObject(memobj);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clGetSupportedImageFormats(cl_context context,
- cl_mem_flags flags,
- cl_mem_object_type image_type,
- cl_uint num_entries,
- cl_image_format * image_formats,
- cl_uint * num_image_formats) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(context, CL_INVALID_CONTEXT);
- return context->dispatch->clGetSupportedImageFormats(
- context,
- flags,
- image_type,
- num_entries,
- image_formats,
- num_image_formats);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clGetMemObjectInfo(cl_mem memobj,
- cl_mem_info param_name,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(memobj, CL_INVALID_MEM_OBJECT);
- return memobj->dispatch->clGetMemObjectInfo(
- memobj,
- param_name,
- param_value_size,
- param_value,
- param_value_size_ret);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clGetImageInfo(cl_mem image,
- cl_image_info param_name,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(image, CL_INVALID_MEM_OBJECT);
- return image->dispatch->clGetImageInfo(
- image,
- param_name,
- param_value_size,
- param_value,
- param_value_size_ret);
-}
-
-// Sampler APIs
-CL_API_ENTRY cl_sampler CL_API_CALL
-clCreateSampler(cl_context context,
- cl_bool normalized_coords,
- cl_addressing_mode addressing_mode,
- cl_filter_mode filter_mode,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
- return context->dispatch->clCreateSampler(
- context,
- normalized_coords,
- addressing_mode,
- filter_mode,
- errcode_ret);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clRetainSampler(cl_sampler sampler) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(sampler, CL_INVALID_SAMPLER);
- return sampler->dispatch->clRetainSampler(sampler);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clReleaseSampler(cl_sampler sampler) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(sampler, CL_INVALID_SAMPLER);
- return sampler->dispatch->clReleaseSampler(sampler);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clGetSamplerInfo(cl_sampler sampler,
- cl_sampler_info param_name,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(sampler, CL_INVALID_SAMPLER);
- return sampler->dispatch->clGetSamplerInfo(
- sampler,
- param_name,
- param_value_size,
- param_value,
- param_value_size_ret);
-}
-
-// Program Object APIs
-CL_API_ENTRY cl_program CL_API_CALL
-clCreateProgramWithSource(cl_context context,
- cl_uint count,
- const char ** strings,
- const size_t * lengths,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
- return context->dispatch->clCreateProgramWithSource(
- context,
- count,
- strings,
- lengths,
- errcode_ret);
-}
-
-CL_API_ENTRY cl_program CL_API_CALL
-clCreateProgramWithBinary(cl_context context,
- cl_uint num_devices,
- const cl_device_id * device_list,
- const size_t * lengths,
- const unsigned char ** binaries,
- cl_int * binary_status,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
- return context->dispatch->clCreateProgramWithBinary(
- context,
- num_devices,
- device_list,
- lengths,
- binaries,
- binary_status,
- errcode_ret);
-}
-
-CL_API_ENTRY cl_program CL_API_CALL
-clCreateProgramWithBuiltInKernels(cl_context context,
- cl_uint num_devices,
- const cl_device_id * device_list,
- const char * kernel_names,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
- return context->dispatch->clCreateProgramWithBuiltInKernels(
- context,
- num_devices,
- device_list,
- kernel_names,
- errcode_ret);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clRetainProgram(cl_program program) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
- return program->dispatch->clRetainProgram(program);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clReleaseProgram(cl_program program) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
- return program->dispatch->clReleaseProgram(program);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clBuildProgram(cl_program program,
- cl_uint num_devices,
- const cl_device_id * device_list,
- const char * options,
- void (CL_CALLBACK *pfn_notify)(cl_program program, void * user_data),
- void * user_data) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
- return program->dispatch->clBuildProgram(
- program,
- num_devices,
- device_list,
- options,
- pfn_notify,
- user_data);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clCompileProgram(cl_program program,
- cl_uint num_devices,
- const cl_device_id * device_list,
- const char * options,
- cl_uint num_input_headers,
- const cl_program * input_headers,
- const char ** header_include_names,
- void (CL_CALLBACK * pfn_notify)(cl_program program, void * user_data),
- void * user_data) CL_API_SUFFIX__VERSION_1_2
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
- return program->dispatch->clCompileProgram(
- program,
- num_devices,
- device_list,
- options,
- num_input_headers,
- input_headers,
- header_include_names,
- pfn_notify,
- user_data);
-}
-
-CL_API_ENTRY cl_program CL_API_CALL
-clLinkProgram(cl_context context,
- cl_uint num_devices,
- const cl_device_id * device_list,
- const char * options,
- cl_uint num_input_programs,
- const cl_program * input_programs,
- void (CL_CALLBACK * pfn_notify)(cl_program program, void * user_data),
- void * user_data,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
- return context->dispatch->clLinkProgram(
- context,
- num_devices,
- device_list,
- options,
- num_input_programs,
- input_programs,
- pfn_notify,
- user_data,
- errcode_ret);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clSetProgramSpecializationConstant(cl_program program,
- cl_uint spec_id,
- size_t spec_size,
- const void* spec_value) CL_API_SUFFIX__VERSION_2_2
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
- return program->dispatch->clSetProgramSpecializationConstant(
- program,
- spec_id,
- spec_size,
- spec_value);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clSetProgramReleaseCallback(cl_program program,
- void (CL_CALLBACK * pfn_notify)(cl_program program, void * user_data),
- void * user_data) CL_API_SUFFIX__VERSION_2_2
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
- return program->dispatch->clSetProgramReleaseCallback(
- program,
- pfn_notify,
- user_data);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clUnloadPlatformCompiler(cl_platform_id platform) CL_API_SUFFIX__VERSION_1_2
-{
- // initialize the platforms (in case they have not been already)
- khrIcdInitialize();
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(platform, CL_INVALID_PLATFORM);
- return platform->dispatch->clUnloadPlatformCompiler(platform);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clGetProgramInfo(cl_program program,
- cl_program_info param_name,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
- return program->dispatch->clGetProgramInfo(
- program,
- param_name,
- param_value_size,
- param_value,
- param_value_size_ret);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clGetProgramBuildInfo(cl_program program,
- cl_device_id device,
- cl_program_build_info param_name,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
- return program->dispatch->clGetProgramBuildInfo(
- program,
- device,
- param_name,
- param_value_size,
- param_value,
- param_value_size_ret);
-}
-
-// Kernel Object APIs
-CL_API_ENTRY cl_kernel CL_API_CALL
-clCreateKernel(cl_program program,
- const char * kernel_name,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(program, CL_INVALID_PROGRAM);
- return program->dispatch->clCreateKernel(
- program,
- kernel_name,
- errcode_ret);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clCreateKernelsInProgram(cl_program program,
- cl_uint num_kernels,
- cl_kernel * kernels,
- cl_uint * num_kernels_ret) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
- return program->dispatch->clCreateKernelsInProgram(
- program,
- num_kernels,
- kernels,
- num_kernels_ret);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clRetainKernel(cl_kernel kernel) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
- return kernel->dispatch->clRetainKernel(kernel);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clReleaseKernel(cl_kernel kernel) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
- return kernel->dispatch->clReleaseKernel(kernel);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clSetKernelArg(cl_kernel kernel,
- cl_uint arg_index,
- size_t arg_size,
- const void * arg_value) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
- return kernel->dispatch->clSetKernelArg(
- kernel,
- arg_index,
- arg_size,
- arg_value);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clGetKernelInfo(cl_kernel kernel,
- cl_kernel_info param_name,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
- return kernel->dispatch->clGetKernelInfo(
- kernel,
- param_name,
- param_value_size,
- param_value,
- param_value_size_ret);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clGetKernelArgInfo(cl_kernel kernel,
- cl_uint arg_indx,
- cl_kernel_arg_info param_name,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_2
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
- return kernel->dispatch->clGetKernelArgInfo(
- kernel,
- arg_indx,
- param_name,
- param_value_size,
- param_value,
- param_value_size_ret);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clGetKernelWorkGroupInfo(cl_kernel kernel,
- cl_device_id device,
- cl_kernel_work_group_info param_name,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
- return kernel->dispatch->clGetKernelWorkGroupInfo(
- kernel,
- device,
- param_name,
- param_value_size,
- param_value,
- param_value_size_ret);
-}
-
-// Event Object APIs
-CL_API_ENTRY cl_int CL_API_CALL
-clWaitForEvents(cl_uint num_events,
- const cl_event * event_list) CL_API_SUFFIX__VERSION_1_0
-{
- if (!num_events || !event_list)
- {
- return CL_INVALID_VALUE;
- }
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(event_list[0], CL_INVALID_EVENT);
- return event_list[0]->dispatch->clWaitForEvents(
- num_events,
- event_list);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clGetEventInfo(cl_event event,
- cl_event_info param_name,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(event, CL_INVALID_EVENT);
- return event->dispatch->clGetEventInfo(
- event,
- param_name,
- param_value_size,
- param_value,
- param_value_size_ret);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clRetainEvent(cl_event event) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(event, CL_INVALID_EVENT);
- return event->dispatch->clRetainEvent(event);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clReleaseEvent(cl_event event) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(event, CL_INVALID_EVENT);
- return event->dispatch->clReleaseEvent(event);
-}
-
-// Profiling APIs
-CL_API_ENTRY cl_int CL_API_CALL
-clGetEventProfilingInfo(cl_event event,
- cl_profiling_info param_name,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(event, CL_INVALID_EVENT);
- return event->dispatch->clGetEventProfilingInfo(
- event,
- param_name,
- param_value_size,
- param_value,
- param_value_size_ret);
-}
-
-// Flush and Finish APIs
-CL_API_ENTRY cl_int CL_API_CALL
-clFlush(cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clFlush(command_queue);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clFinish(cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clFinish(command_queue);
-}
-
-// Enqueued Commands APIs
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueReadBuffer(cl_command_queue command_queue,
- cl_mem buffer,
- cl_bool blocking_read,
- size_t offset,
- size_t cb,
- void * ptr,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueReadBuffer(
- command_queue,
- buffer,
- blocking_read,
- offset,
- cb,
- ptr,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueReadBufferRect(
- cl_command_queue command_queue,
- cl_mem buffer,
- cl_bool blocking_read,
- const size_t * buffer_origin,
- const size_t * host_origin,
- const size_t * region,
- size_t buffer_row_pitch,
- size_t buffer_slice_pitch,
- size_t host_row_pitch,
- size_t host_slice_pitch,
- void * ptr,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_1
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueReadBufferRect(
- command_queue,
- buffer,
- blocking_read,
- buffer_origin,
- host_origin,
- region,
- buffer_row_pitch,
- buffer_slice_pitch,
- host_row_pitch,
- host_slice_pitch,
- ptr,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueWriteBuffer(cl_command_queue command_queue,
- cl_mem buffer,
- cl_bool blocking_write,
- size_t offset,
- size_t cb,
- const void * ptr,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueWriteBuffer(
- command_queue,
- buffer,
- blocking_write,
- offset,
- cb,
- ptr,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueWriteBufferRect(
- cl_command_queue command_queue,
- cl_mem buffer,
- cl_bool blocking_read,
- const size_t * buffer_origin,
- const size_t * host_origin,
- const size_t * region,
- size_t buffer_row_pitch,
- size_t buffer_slice_pitch,
- size_t host_row_pitch,
- size_t host_slice_pitch,
- const void * ptr,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_1
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueWriteBufferRect(
- command_queue,
- buffer,
- blocking_read,
- buffer_origin,
- host_origin,
- region,
- buffer_row_pitch,
- buffer_slice_pitch,
- host_row_pitch,
- host_slice_pitch,
- ptr,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueFillBuffer(cl_command_queue command_queue,
- cl_mem buffer,
- const void * pattern,
- size_t pattern_size,
- size_t offset,
- size_t cb,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_2
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueFillBuffer(
- command_queue,
- buffer,
- pattern,
- pattern_size,
- offset,
- cb,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueCopyBuffer(cl_command_queue command_queue,
- cl_mem src_buffer,
- cl_mem dst_buffer,
- size_t src_offset,
- size_t dst_offset,
- size_t cb,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueCopyBuffer(
- command_queue,
- src_buffer,
- dst_buffer,
- src_offset,
- dst_offset,
- cb,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueCopyBufferRect(
- cl_command_queue command_queue,
- cl_mem src_buffer,
- cl_mem dst_buffer,
- const size_t * src_origin,
- const size_t * dst_origin,
- const size_t * region,
- size_t src_row_pitch,
- size_t src_slice_pitch,
- size_t dst_row_pitch,
- size_t dst_slice_pitch,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_1
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueCopyBufferRect(
- command_queue,
- src_buffer,
- dst_buffer,
- src_origin,
- dst_origin,
- region,
- src_row_pitch,
- src_slice_pitch,
- dst_row_pitch,
- dst_slice_pitch,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueReadImage(cl_command_queue command_queue,
- cl_mem image,
- cl_bool blocking_read,
- const size_t * origin,
- const size_t * region,
- size_t row_pitch,
- size_t slice_pitch,
- void * ptr,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueReadImage(
- command_queue,
- image,
- blocking_read,
- origin,
- region,
- row_pitch,
- slice_pitch,
- ptr,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueWriteImage(cl_command_queue command_queue,
- cl_mem image,
- cl_bool blocking_write,
- const size_t * origin,
- const size_t * region,
- size_t input_row_pitch,
- size_t input_slice_pitch,
- const void * ptr,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueWriteImage(
- command_queue,
- image,
- blocking_write,
- origin,
- region,
- input_row_pitch,
- input_slice_pitch,
- ptr,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueFillImage(cl_command_queue command_queue,
- cl_mem image,
- const void * fill_color,
- const size_t origin[3],
- const size_t region[3],
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_2
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueFillImage(
- command_queue,
- image,
- fill_color,
- origin,
- region,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueCopyImage(cl_command_queue command_queue,
- cl_mem src_image,
- cl_mem dst_image,
- const size_t * src_origin,
- const size_t * dst_origin,
- const size_t * region,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueCopyImage(
- command_queue,
- src_image,
- dst_image,
- src_origin,
- dst_origin,
- region,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueCopyImageToBuffer(cl_command_queue command_queue,
- cl_mem src_image,
- cl_mem dst_buffer,
- const size_t * src_origin,
- const size_t * region,
- size_t dst_offset,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueCopyImageToBuffer(
- command_queue,
- src_image,
- dst_buffer,
- src_origin,
- region,
- dst_offset,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueCopyBufferToImage(cl_command_queue command_queue,
- cl_mem src_buffer,
- cl_mem dst_image,
- size_t src_offset,
- const size_t * dst_origin,
- const size_t * region,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueCopyBufferToImage(
- command_queue,
- src_buffer,
- dst_image,
- src_offset,
- dst_origin,
- region,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-CL_API_ENTRY void * CL_API_CALL
-clEnqueueMapBuffer(cl_command_queue command_queue,
- cl_mem buffer,
- cl_bool blocking_map,
- cl_map_flags map_flags,
- size_t offset,
- size_t cb,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueMapBuffer(
- command_queue,
- buffer,
- blocking_map,
- map_flags,
- offset,
- cb,
- num_events_in_wait_list,
- event_wait_list,
- event,
- errcode_ret);
-}
-
-CL_API_ENTRY void * CL_API_CALL
-clEnqueueMapImage(cl_command_queue command_queue,
- cl_mem image,
- cl_bool blocking_map,
- cl_map_flags map_flags,
- const size_t * origin,
- const size_t * region,
- size_t * image_row_pitch,
- size_t * image_slice_pitch,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueMapImage(
- command_queue,
- image,
- blocking_map,
- map_flags,
- origin,
- region,
- image_row_pitch,
- image_slice_pitch,
- num_events_in_wait_list,
- event_wait_list,
- event,
- errcode_ret);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueUnmapMemObject(cl_command_queue command_queue,
- cl_mem memobj,
- void * mapped_ptr,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueUnmapMemObject(
- command_queue,
- memobj,
- mapped_ptr,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueMigrateMemObjects(cl_command_queue command_queue,
- cl_uint num_mem_objects,
- const cl_mem * mem_objects,
- cl_mem_migration_flags flags,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_2
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueMigrateMemObjects(
- command_queue,
- num_mem_objects,
- mem_objects,
- flags,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueNDRangeKernel(cl_command_queue command_queue,
- cl_kernel kernel,
- cl_uint work_dim,
- const size_t * global_work_offset,
- const size_t * global_work_size,
- const size_t * local_work_size,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueNDRangeKernel(
- command_queue,
- kernel,
- work_dim,
- global_work_offset,
- global_work_size,
- local_work_size,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueTask(cl_command_queue command_queue,
- cl_kernel kernel,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueTask(
- command_queue,
- kernel,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueNativeKernel(cl_command_queue command_queue,
- void (CL_CALLBACK * user_func)(void *),
- void * args,
- size_t cb_args,
- cl_uint num_mem_objects,
- const cl_mem * mem_list,
- const void ** args_mem_loc,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueNativeKernel(
- command_queue,
- user_func,
- args,
- cb_args,
- num_mem_objects,
- mem_list,
- args_mem_loc,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueMarkerWithWaitList(cl_command_queue command_queue,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_2
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueMarkerWithWaitList(
- command_queue,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueBarrierWithWaitList(cl_command_queue command_queue,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_2
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueBarrierWithWaitList(
- command_queue,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-CL_API_ENTRY void * CL_API_CALL
-clGetExtensionFunctionAddressForPlatform(cl_platform_id platform,
- const char * function_name) CL_API_SUFFIX__VERSION_1_2
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(function_name, NULL);
-
- // make sure the ICD is initialized
- khrIcdInitialize();
-
- // return any ICD-aware extensions
-
- // Most extensions, including multi-vendor KHR and EXT extensions,
- // do not need to be ICD-aware and do not require any ICD loader
- // modifications. The KHR and EXT extensions below were added for
- // backwards compatibility only.
- #define CL_COMMON_EXTENSION_ENTRYPOINT_ADD(name) if (!strcmp(function_name, #name) ) return (void *)(size_t)&name
-
- // Functions supporting the creation of OpenCL Memory Objects
- // from OpenGL Objects (cl_apple_gl_sharing, cl_khr_gl_sharing)
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLBuffer);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLTexture);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLTexture2D);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLTexture3D);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLRenderbuffer);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetGLObjectInfo);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetGLTextureInfo);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireGLObjects);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseGLObjects);
-
- // cl_khr_gl_sharing
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetGLContextInfoKHR);
-
- // cl_khr_gl_event
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateEventFromGLsyncKHR);
-
-#if defined(_WIN32)
- // cl_khr_d3d10_sharing
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetDeviceIDsFromD3D10KHR);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D10BufferKHR);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D10Texture2DKHR);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D10Texture3DKHR);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireD3D10ObjectsKHR);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseD3D10ObjectsKHR);
- // cl_khr_d3d11_sharing
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetDeviceIDsFromD3D11KHR);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D11BufferKHR);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D11Texture2DKHR);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D11Texture3DKHR);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireD3D11ObjectsKHR);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseD3D11ObjectsKHR);
- // cl_khr_dx9_media_sharing
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetDeviceIDsFromDX9MediaAdapterKHR);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromDX9MediaSurfaceKHR);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireDX9MediaSurfacesKHR);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseDX9MediaSurfacesKHR);
-#endif
-
- // cl_ext_device_fission
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateSubDevicesEXT);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clRetainDeviceEXT);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clReleaseDeviceEXT);
-
- /* cl_khr_egl_image */
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromEGLImageKHR);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireEGLObjectsKHR);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseEGLObjectsKHR);
-
- /* cl_khr_egl_event */
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateEventFromEGLSyncKHR);
-
- /* cl_khr_sub_groups */
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetKernelSubGroupInfoKHR);
-
- #undef CL_COMMON_EXTENSION_ENTRYPOINT_ADD
-
- // This is not an ICD-aware extension, so call into the implementation
- // to get the extension function address.
-
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(platform, NULL);
- return platform->dispatch->clGetExtensionFunctionAddressForPlatform(
- platform,
- function_name);
-}
-
-// Deprecated APIs
-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) CL_EXT_SUFFIX__VERSION_1_0_DEPRECATED
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clSetCommandQueueProperty(
- command_queue,
- properties,
- enable,
- old_properties);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clCreateSubDevicesEXT(
- cl_device_id in_device,
- const cl_device_partition_property_ext * partition_properties,
- cl_uint num_entries,
- cl_device_id * out_devices,
- cl_uint * num_devices) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(in_device, CL_INVALID_DEVICE);
- return in_device->dispatch->clCreateSubDevicesEXT(
- in_device,
- partition_properties,
- num_entries,
- out_devices,
- num_devices);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clRetainDeviceEXT(cl_device_id device) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
- return device->dispatch->clRetainDeviceEXT(device);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clReleaseDeviceEXT(cl_device_id device) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
- return device->dispatch->clReleaseDeviceEXT(device);
-}
-
-CL_API_ENTRY cl_mem CL_API_CALL
-clCreateImage2D(cl_context context,
- cl_mem_flags flags,
- const cl_image_format * image_format,
- size_t image_width,
- size_t image_height,
- size_t image_row_pitch,
- void * host_ptr,
- cl_int * errcode_ret) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
- return context->dispatch->clCreateImage2D(
- context,
- flags,
- image_format,
- image_width,
- image_height,
- image_row_pitch,
- host_ptr,
- errcode_ret);
-}
-
-CL_API_ENTRY cl_mem CL_API_CALL
-clCreateImage3D(cl_context context,
- cl_mem_flags flags,
- const cl_image_format * image_format,
- size_t image_width,
- size_t image_height,
- size_t image_depth,
- size_t image_row_pitch,
- size_t image_slice_pitch,
- void * host_ptr,
- cl_int * errcode_ret) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
- return context->dispatch->clCreateImage3D(
- context,
- flags,
- image_format,
- image_width,
- image_height,
- image_depth,
- image_row_pitch,
- image_slice_pitch,
- host_ptr,
- errcode_ret);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clUnloadCompiler(void) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
-{
- return CL_SUCCESS;
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueMarker(cl_command_queue command_queue,
- cl_event * event) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueMarker(
- command_queue,
- event);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueWaitForEvents(cl_command_queue command_queue,
- cl_uint num_events,
- const cl_event * event_list) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueWaitForEvents(
- command_queue,
- num_events,
- event_list);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueBarrier(cl_command_queue command_queue) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueBarrier(command_queue);
-}
-
-CL_API_ENTRY void * CL_API_CALL
-clGetExtensionFunctionAddress(const char *function_name) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
-{
- size_t function_name_length = 0;
- KHRicdVendor* vendor = NULL;
-
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(function_name, NULL);
-
- // make sure the ICD is initialized
- khrIcdInitialize();
- function_name_length = strlen(function_name);
-
- // return any ICD-aware extensions
-
- // Most extensions, including multi-vendor KHR and EXT extensions,
- // do not need to be ICD-aware and do not require any ICD loader
- // modifications. The KHR and EXT extensions below were added for
- // backwards compatibility only.
- #define CL_COMMON_EXTENSION_ENTRYPOINT_ADD(name) if (!strcmp(function_name, #name) ) return (void *)(size_t)&name
-
- // Functions supporting the creation of OpenCL Memory Objects
- // from OpenGL Objects (cl_apple_gl_sharing, cl_khr_gl_sharing)
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLBuffer);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLTexture);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLTexture2D);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLTexture3D);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLRenderbuffer);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetGLObjectInfo);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetGLTextureInfo);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireGLObjects);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseGLObjects);
-
- // cl_khr_gl_sharing
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetGLContextInfoKHR);
-
- // cl_khr_gl_event
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateEventFromGLsyncKHR);
-
-#if defined(_WIN32)
- // cl_khr_d3d10_sharing
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetDeviceIDsFromD3D10KHR);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D10BufferKHR);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D10Texture2DKHR);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D10Texture3DKHR);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireD3D10ObjectsKHR);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseD3D10ObjectsKHR);
- // cl_khr_d3d11_sharing
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetDeviceIDsFromD3D11KHR);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D11BufferKHR);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D11Texture2DKHR);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D11Texture3DKHR);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireD3D11ObjectsKHR);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseD3D11ObjectsKHR);
- // cl_khr_dx9_media_sharing
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetDeviceIDsFromDX9MediaAdapterKHR);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromDX9MediaSurfaceKHR);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireDX9MediaSurfacesKHR);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseDX9MediaSurfacesKHR);
-#endif
-
- // cl_ext_device_fission
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateSubDevicesEXT);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clRetainDeviceEXT);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clReleaseDeviceEXT);
-
- /* cl_khr_egl_image */
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromEGLImageKHR);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireEGLObjectsKHR);
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseEGLObjectsKHR);
-
- /* cl_khr_egl_event */
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateEventFromEGLSyncKHR);
-
- /* cl_khr_sub_groups */
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetKernelSubGroupInfoKHR);
-
- #undef CL_COMMON_EXTENSION_ENTRYPOINT_ADD
-
- // fall back to vendor extension detection
- for (vendor = khrIcdVendors; vendor; vendor = vendor->next)
- {
- size_t vendor_suffix_length = strlen(vendor->suffix);
- if (vendor_suffix_length <= function_name_length && vendor_suffix_length > 0)
- {
- const char *function_suffix = function_name+function_name_length-vendor_suffix_length;
- if (!strcmp(function_suffix, vendor->suffix) )
- {
- return vendor->clGetExtensionFunctionAddress(function_name);
- }
- }
- }
- return NULL;
-}
-
-// GL and other APIs
-CL_API_ENTRY cl_mem CL_API_CALL clCreateFromGLBuffer(
- cl_context context,
- cl_mem_flags flags,
- cl_GLuint bufobj,
- int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
- return context->dispatch->clCreateFromGLBuffer(
- context,
- flags,
- bufobj,
- errcode_ret);
-}
-
-CL_API_ENTRY cl_mem CL_API_CALL clCreateFromGLTexture(
- cl_context context,
- cl_mem_flags flags,
- cl_GLenum target,
- cl_GLint miplevel,
- cl_GLuint texture,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
- return context->dispatch->clCreateFromGLTexture(
- context,
- flags,
- target,
- miplevel,
- texture,
- errcode_ret);
-}
-
-CL_API_ENTRY cl_mem CL_API_CALL clCreateFromGLTexture2D(
- cl_context context,
- cl_mem_flags flags,
- cl_GLenum target,
- cl_GLint miplevel,
- cl_GLuint texture,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
- return context->dispatch->clCreateFromGLTexture2D(
- context,
- flags,
- target,
- miplevel,
- texture,
- errcode_ret);
-}
-
-CL_API_ENTRY cl_mem CL_API_CALL clCreateFromGLTexture3D(
- cl_context context,
- cl_mem_flags flags,
- cl_GLenum target,
- cl_GLint miplevel,
- cl_GLuint texture,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
- return context->dispatch->clCreateFromGLTexture3D(
- context,
- flags,
- target,
- miplevel,
- texture,
- errcode_ret);
-}
-
-CL_API_ENTRY cl_mem CL_API_CALL clCreateFromGLRenderbuffer(
- cl_context context,
- cl_mem_flags flags,
- cl_GLuint renderbuffer,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
- return context->dispatch->clCreateFromGLRenderbuffer(
- context,
- flags,
- renderbuffer,
- errcode_ret);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL clGetGLObjectInfo(
- cl_mem memobj,
- cl_gl_object_type * gl_object_type,
- cl_GLuint * gl_object_name) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(memobj, CL_INVALID_MEM_OBJECT);
- return memobj->dispatch->clGetGLObjectInfo(
- memobj,
- gl_object_type,
- gl_object_name);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL clGetGLTextureInfo(
- cl_mem memobj,
- cl_gl_texture_info param_name,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(memobj, CL_INVALID_MEM_OBJECT);
- return memobj->dispatch->clGetGLTextureInfo(
- memobj,
- param_name,
- param_value_size,
- param_value,
- param_value_size_ret);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL clEnqueueAcquireGLObjects(
- cl_command_queue command_queue,
- cl_uint num_objects,
- const cl_mem * mem_objects,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueAcquireGLObjects(
- command_queue,
- num_objects,
- mem_objects,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL clEnqueueReleaseGLObjects(
- cl_command_queue command_queue,
- cl_uint num_objects,
- const cl_mem * mem_objects,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueReleaseGLObjects(
- command_queue,
- num_objects,
- mem_objects,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL clGetGLContextInfoKHR(
- const cl_context_properties *properties,
- cl_gl_context_info param_name,
- size_t param_value_size,
- void *param_value,
- size_t *param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
-{
- cl_platform_id platform = NULL;
-
- // initialize the platforms (in case they have not been already)
- khrIcdInitialize();
-
- // determine the platform to use from the properties specified
- khrIcdContextPropertiesGetPlatform(properties, &platform);
-
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(platform, CL_INVALID_PLATFORM);
- return platform->dispatch->clGetGLContextInfoKHR(
- properties,
- param_name,
- param_value_size,
- param_value,
- param_value_size_ret);
-}
-
-CL_API_ENTRY cl_event CL_API_CALL clCreateEventFromGLsyncKHR(
- cl_context context,
- cl_GLsync sync,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_1
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
- return context->dispatch->clCreateEventFromGLsyncKHR(
- context,
- sync,
- errcode_ret);
-}
-
-#if defined(_WIN32)
-/*
- *
- * cl_d3d10_sharing_khr
- *
- */
-
-CL_API_ENTRY cl_int CL_API_CALL
-clGetDeviceIDsFromD3D10KHR(
- cl_platform_id platform,
- cl_d3d10_device_source_khr d3d_device_source,
- void *d3d_object,
- cl_d3d10_device_set_khr d3d_device_set,
- cl_uint num_entries,
- cl_device_id *devices,
- cl_uint *num_devices)
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(platform, CL_INVALID_PLATFORM);
- return platform->dispatch->clGetDeviceIDsFromD3D10KHR(
- platform,
- d3d_device_source,
- d3d_object,
- d3d_device_set,
- num_entries,
- devices,
- num_devices);
-}
-
-CL_API_ENTRY cl_mem CL_API_CALL
-clCreateFromD3D10BufferKHR(
- cl_context context,
- cl_mem_flags flags,
- ID3D10Buffer *resource,
- cl_int *errcode_ret)
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
- return context->dispatch->clCreateFromD3D10BufferKHR(
- context,
- flags,
- resource,
- errcode_ret);
-}
-
-CL_API_ENTRY cl_mem CL_API_CALL
-clCreateFromD3D10Texture2DKHR(
- cl_context context,
- cl_mem_flags flags,
- ID3D10Texture2D * resource,
- UINT subresource,
- cl_int * errcode_ret)
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
- return context->dispatch->clCreateFromD3D10Texture2DKHR(
- context,
- flags,
- resource,
- subresource,
- errcode_ret);
-}
-
-CL_API_ENTRY cl_mem CL_API_CALL
-clCreateFromD3D10Texture3DKHR(
- cl_context context,
- cl_mem_flags flags,
- ID3D10Texture3D *resource,
- UINT subresource,
- cl_int *errcode_ret)
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
- return context->dispatch->clCreateFromD3D10Texture3DKHR(
- context,
- flags,
- resource,
- subresource,
- errcode_ret);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueAcquireD3D10ObjectsKHR(
- cl_command_queue command_queue,
- cl_uint num_objects,
- const cl_mem *mem_objects,
- cl_uint num_events_in_wait_list,
- const cl_event *event_wait_list,
- cl_event *event)
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueAcquireD3D10ObjectsKHR(
- command_queue,
- num_objects,
- mem_objects,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueReleaseD3D10ObjectsKHR(
- cl_command_queue command_queue,
- cl_uint num_objects,
- const cl_mem *mem_objects,
- cl_uint num_events_in_wait_list,
- const cl_event *event_wait_list,
- cl_event *event)
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueReleaseD3D10ObjectsKHR(
- command_queue,
- num_objects,
- mem_objects,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-/*
- *
- * cl_d3d11_sharing_khr
- *
- */
-
-CL_API_ENTRY cl_int CL_API_CALL
-clGetDeviceIDsFromD3D11KHR(
- cl_platform_id platform,
- cl_d3d11_device_source_khr d3d_device_source,
- void * d3d_object,
- cl_d3d11_device_set_khr d3d_device_set,
- cl_uint num_entries,
- cl_device_id * devices,
- cl_uint * num_devices)
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(platform, CL_INVALID_PLATFORM);
- return platform->dispatch->clGetDeviceIDsFromD3D11KHR(
- platform,
- d3d_device_source,
- d3d_object,
- d3d_device_set,
- num_entries,
- devices,
- num_devices);
-}
-
-CL_API_ENTRY cl_mem CL_API_CALL
-clCreateFromD3D11BufferKHR(
- cl_context context,
- cl_mem_flags flags,
- ID3D11Buffer * resource,
- cl_int * errcode_ret)
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
- return context->dispatch->clCreateFromD3D11BufferKHR(
- context,
- flags,
- resource,
- errcode_ret);
-}
-
-CL_API_ENTRY cl_mem CL_API_CALL
-clCreateFromD3D11Texture2DKHR(
- cl_context context,
- cl_mem_flags flags,
- ID3D11Texture2D * resource,
- UINT subresource,
- cl_int * errcode_ret)
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
- return context->dispatch->clCreateFromD3D11Texture2DKHR(
- context,
- flags,
- resource,
- subresource,
- errcode_ret);
-}
-
-CL_API_ENTRY cl_mem CL_API_CALL
-clCreateFromD3D11Texture3DKHR(
- cl_context context,
- cl_mem_flags flags,
- ID3D11Texture3D * resource,
- UINT subresource,
- cl_int * errcode_ret)
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
- return context->dispatch->clCreateFromD3D11Texture3DKHR(
- context,
- flags,
- resource,
- subresource,
- errcode_ret);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueAcquireD3D11ObjectsKHR(
- cl_command_queue command_queue,
- cl_uint num_objects,
- const cl_mem * mem_objects,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event)
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueAcquireD3D11ObjectsKHR(
- command_queue,
- num_objects,
- mem_objects,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueReleaseD3D11ObjectsKHR(
- cl_command_queue command_queue,
- cl_uint num_objects,
- const cl_mem * mem_objects,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event)
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueReleaseD3D11ObjectsKHR(
- command_queue,
- num_objects,
- mem_objects,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-/*
- *
- * cl_khr_dx9_media_sharing
- *
- */
-
-CL_API_ENTRY cl_int CL_API_CALL
-clGetDeviceIDsFromDX9MediaAdapterKHR(
- cl_platform_id platform,
- cl_uint num_media_adapters,
- cl_dx9_media_adapter_type_khr * media_adapters_type,
- void * media_adapters,
- cl_dx9_media_adapter_set_khr media_adapter_set,
- cl_uint num_entries,
- cl_device_id * devices,
- cl_uint * num_devices)
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(platform, CL_INVALID_PLATFORM);
- return platform->dispatch->clGetDeviceIDsFromDX9MediaAdapterKHR(
- platform,
- num_media_adapters,
- media_adapters_type,
- media_adapters,
- media_adapter_set,
- num_entries,
- devices,
- num_devices);
-}
-
-CL_API_ENTRY cl_mem CL_API_CALL
-clCreateFromDX9MediaSurfaceKHR(
- cl_context context,
- cl_mem_flags flags,
- cl_dx9_media_adapter_type_khr adapter_type,
- void * surface_info,
- cl_uint plane,
- cl_int * errcode_ret)
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
- return context->dispatch->clCreateFromDX9MediaSurfaceKHR(
- context,
- flags,
- adapter_type,
- surface_info,
- plane,
- errcode_ret);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueAcquireDX9MediaSurfacesKHR(
- cl_command_queue command_queue,
- cl_uint num_objects,
- const cl_mem * mem_objects,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event)
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueAcquireDX9MediaSurfacesKHR(
- command_queue,
- num_objects,
- mem_objects,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueReleaseDX9MediaSurfacesKHR(
- cl_command_queue command_queue,
- cl_uint num_objects,
- const cl_mem * mem_objects,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event)
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueReleaseDX9MediaSurfacesKHR(
- command_queue,
- num_objects,
- mem_objects,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-#endif
-
-CL_API_ENTRY cl_int CL_API_CALL
-clSetEventCallback(
- cl_event event,
- cl_int command_exec_callback_type,
- void (CL_CALLBACK *pfn_notify)(cl_event, cl_int, void *),
- void *user_data) CL_API_SUFFIX__VERSION_1_1
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(event, CL_INVALID_EVENT);
- return event->dispatch->clSetEventCallback(
- event,
- command_exec_callback_type,
- pfn_notify,
- user_data);
-}
-
-CL_API_ENTRY cl_mem CL_API_CALL
-clCreateSubBuffer(
- cl_mem buffer,
- cl_mem_flags flags,
- cl_buffer_create_type buffer_create_type,
- const void * buffer_create_info,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_1
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(buffer, CL_INVALID_MEM_OBJECT);
- return buffer->dispatch->clCreateSubBuffer(
- buffer,
- flags,
- buffer_create_type,
- buffer_create_info,
- errcode_ret);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clSetMemObjectDestructorCallback(
- cl_mem memobj,
- void (CL_CALLBACK * pfn_notify)( cl_mem, void*),
- void * user_data ) CL_API_SUFFIX__VERSION_1_1
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(memobj, CL_INVALID_MEM_OBJECT);
- return memobj->dispatch->clSetMemObjectDestructorCallback(
- memobj,
- pfn_notify,
- user_data);
-}
-
-CL_API_ENTRY cl_event CL_API_CALL
-clCreateUserEvent(
- cl_context context,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_1
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
- return context->dispatch->clCreateUserEvent(
- context,
- errcode_ret);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clSetUserEventStatus(
- cl_event event,
- cl_int execution_status) CL_API_SUFFIX__VERSION_1_1
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(event, CL_INVALID_EVENT);
- return event->dispatch->clSetUserEventStatus(
- event,
- execution_status);
-}
-
-CL_API_ENTRY cl_mem CL_API_CALL
-clCreateFromEGLImageKHR(
- cl_context context,
- CLeglDisplayKHR display,
- CLeglImageKHR image,
- cl_mem_flags flags,
- const cl_egl_image_properties_khr *properties,
- cl_int *errcode_ret)
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
- return context->dispatch->clCreateFromEGLImageKHR(
- context,
- display,
- image,
- flags,
- properties,
- errcode_ret);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueAcquireEGLObjectsKHR(
- cl_command_queue command_queue,
- cl_uint num_objects,
- const cl_mem *mem_objects,
- cl_uint num_events_in_wait_list,
- const cl_event *event_wait_list,
- cl_event *event)
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueAcquireEGLObjectsKHR(
- command_queue,
- num_objects,
- mem_objects,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueReleaseEGLObjectsKHR(
- cl_command_queue command_queue,
- cl_uint num_objects,
- const cl_mem *mem_objects,
- cl_uint num_events_in_wait_list,
- const cl_event *event_wait_list,
- cl_event *event)
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueReleaseEGLObjectsKHR(
- command_queue,
- num_objects,
- mem_objects,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-/* cl_khr_egl_event */
-CL_API_ENTRY cl_event CL_API_CALL
-clCreateEventFromEGLSyncKHR(
- cl_context context,
- CLeglSyncKHR sync,
- CLeglDisplayKHR display,
- cl_int *errcode_ret)
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
- return context->dispatch->clCreateEventFromEGLSyncKHR(
- context,
- sync,
- display,
- errcode_ret);
-}
-
-CL_API_ENTRY cl_command_queue CL_API_CALL
-clCreateCommandQueueWithProperties(
- cl_context context,
- cl_device_id device,
- const cl_queue_properties * properties,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_2_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
- return context->dispatch->clCreateCommandQueueWithProperties(
- context,
- device,
- properties,
- errcode_ret);
-}
-
-CL_API_ENTRY cl_mem CL_API_CALL
-clCreatePipe(
- cl_context context,
- cl_mem_flags flags,
- cl_uint pipe_packet_size,
- cl_uint pipe_max_packets,
- const cl_pipe_properties * properties,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_2_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
- return context->dispatch->clCreatePipe(
- context,
- flags,
- pipe_packet_size,
- pipe_max_packets,
- properties,
- errcode_ret);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clGetPipeInfo(
- cl_mem pipe,
- cl_pipe_info param_name,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_2_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(pipe, CL_INVALID_MEM_OBJECT);
- return pipe->dispatch->clGetPipeInfo(
- pipe,
- param_name,
- param_value_size,
- param_value,
- param_value_size_ret);
-}
-
-CL_API_ENTRY void * CL_API_CALL
-clSVMAlloc(
- cl_context context,
- cl_svm_mem_flags flags,
- size_t size,
- cl_uint alignment) CL_API_SUFFIX__VERSION_2_0
-{
- if (!context) {
- return NULL;
- }
- return context->dispatch->clSVMAlloc(
- context,
- flags,
- size,
- alignment);
-}
-
-CL_API_ENTRY void CL_API_CALL
-clSVMFree(
- cl_context context,
- void * svm_pointer) CL_API_SUFFIX__VERSION_2_0
-{
- if (!context || !svm_pointer) {
- return;
- }
- context->dispatch->clSVMFree(
- context,
- svm_pointer);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueSVMFree(
- cl_command_queue command_queue,
- cl_uint num_svm_pointers,
- void* svm_pointers[],
- void (CL_CALLBACK* pfn_free_func)(
- cl_command_queue queue,
- cl_uint num_svm_pointers,
- void* svm_pointers[],
- void* user_data),
- void* user_data,
- cl_uint num_events_in_wait_list,
- const cl_event* event_wait_list,
- cl_event* event) CL_API_SUFFIX__VERSION_2_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueSVMFree(
- command_queue,
- num_svm_pointers,
- svm_pointers,
- pfn_free_func,
- user_data,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueSVMMemcpy(
- cl_command_queue command_queue,
- cl_bool blocking_copy,
- void * dst_ptr,
- const void * src_ptr,
- size_t size,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_2_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueSVMMemcpy(
- command_queue,
- blocking_copy,
- dst_ptr,
- src_ptr,
- size,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueSVMMemFill(
- cl_command_queue command_queue,
- void * svm_ptr,
- const void * pattern,
- size_t pattern_size,
- size_t size,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_2_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueSVMMemFill(
- command_queue,
- svm_ptr,
- pattern,
- pattern_size,
- size,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueSVMMap(
- cl_command_queue command_queue,
- cl_bool blocking_map,
- cl_map_flags flags,
- void * svm_ptr,
- size_t size,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_2_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueSVMMap(
- command_queue,
- blocking_map,
- flags,
- svm_ptr,
- size,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueSVMUnmap(
- cl_command_queue command_queue,
- void * svm_ptr,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_2_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueSVMUnmap(
- command_queue,
- svm_ptr,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-CL_API_ENTRY cl_sampler CL_API_CALL
-clCreateSamplerWithProperties(
- cl_context context,
- const cl_sampler_properties * sampler_properties,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_2_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
- return context->dispatch->clCreateSamplerWithProperties(
- context,
- sampler_properties,
- errcode_ret);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clSetKernelArgSVMPointer(
- cl_kernel kernel,
- cl_uint arg_index,
- const void * arg_value) CL_API_SUFFIX__VERSION_2_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
- return kernel->dispatch->clSetKernelArgSVMPointer(
- kernel,
- arg_index,
- arg_value);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clSetKernelExecInfo(
- cl_kernel kernel,
- cl_kernel_exec_info param_name,
- size_t param_value_size,
- const void * param_value) CL_API_SUFFIX__VERSION_2_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
- return kernel->dispatch->clSetKernelExecInfo(
- kernel,
- param_name,
- param_value_size,
- param_value);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clGetKernelSubGroupInfoKHR(
- cl_kernel in_kernel,
- cl_device_id in_device,
- cl_kernel_sub_group_info param_name,
- size_t input_value_size,
- const void * input_value,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_EXT_SUFFIX__VERSION_2_0
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(in_kernel, CL_INVALID_KERNEL);
- return in_kernel->dispatch->clGetKernelSubGroupInfoKHR(
- in_kernel,
- in_device,
- param_name,
- input_value_size,
- input_value,
- param_value_size,
- param_value,
- param_value_size_ret);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clSetDefaultDeviceCommandQueue(
- cl_context context,
- cl_device_id device,
- cl_command_queue command_queue) CL_API_SUFFIX__VERSION_2_1
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(context, CL_INVALID_CONTEXT);
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
- return context->dispatch->clSetDefaultDeviceCommandQueue(
- context,
- device,
- command_queue);
-}
-
-CL_API_ENTRY cl_program CL_API_CALL
-clCreateProgramWithIL(
- cl_context context,
- const void * il,
- size_t length,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_2_1
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
- return context->dispatch->clCreateProgramWithIL(
- context,
- il,
- length,
- errcode_ret);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clGetKernelSubGroupInfo(
- cl_kernel kernel,
- cl_device_id device,
- cl_kernel_sub_group_info param_name,
- size_t input_value_size,
- const void * input_value,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_2_1
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
- return kernel->dispatch->clGetKernelSubGroupInfo(
- kernel,
- device,
- param_name,
- input_value_size,
- input_value,
- param_value_size,
- param_value,
- param_value_size_ret);
-}
-
-CL_API_ENTRY cl_kernel CL_API_CALL
-clCloneKernel(
- cl_kernel source_kernel,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_2_1
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(source_kernel, CL_INVALID_KERNEL);
- return source_kernel->dispatch->clCloneKernel(
- source_kernel,
- errcode_ret);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueSVMMigrateMem(
- cl_command_queue command_queue,
- cl_uint num_svm_pointers,
- const void ** svm_pointers,
- const size_t * sizes,
- cl_mem_migration_flags flags,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_2_1
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
- return command_queue->dispatch->clEnqueueSVMMigrateMem(
- command_queue,
- num_svm_pointers,
- svm_pointers,
- sizes,
- flags,
- num_events_in_wait_list,
- event_wait_list,
- event);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clGetDeviceAndHostTimer(
- cl_device_id device,
- cl_ulong * device_timestamp,
- cl_ulong * host_timestamp) CL_API_SUFFIX__VERSION_2_1
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
- return device->dispatch->clGetDeviceAndHostTimer(
- device,
- device_timestamp,
- host_timestamp);
-}
-
-CL_API_ENTRY cl_int CL_API_CALL
-clGetHostTimer(
- cl_device_id device,
- cl_ulong * host_timestamp) CL_API_SUFFIX__VERSION_2_1
-{
- KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
- return device->dispatch->clGetHostTimer(
- device,
- host_timestamp);
-}
-
-
+++ /dev/null
-/*
- * Copyright (c) 2016-2019 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.
- */
-
-#ifndef _ICD_DISPATCH_H_
-#define _ICD_DISPATCH_H_
-
-#ifndef CL_USE_DEPRECATED_OPENCL_1_0_APIS
-#define CL_USE_DEPRECATED_OPENCL_1_0_APIS
-#endif
-
-#ifndef CL_USE_DEPRECATED_OPENCL_1_1_APIS
-#define CL_USE_DEPRECATED_OPENCL_1_1_APIS
-#endif
-
-#ifndef CL_USE_DEPRECATED_OPENCL_1_2_APIS
-#define CL_USE_DEPRECATED_OPENCL_1_2_APIS
-#endif
-
-#ifndef CL_USE_DEPRECATED_OPENCL_2_0_APIS
-#define CL_USE_DEPRECATED_OPENCL_2_0_APIS
-#endif
-
-// cl.h
-#include <CL/cl.h>
-
-// cl_gl.h and required files
-#ifdef _WIN32
-#include <windows.h>
-#include <d3d9.h>
-#include <d3d10_1.h>
-#include <CL/cl_d3d10.h>
-#include <CL/cl_d3d11.h>
-#include <CL/cl_dx9_media_sharing.h>
-#endif
-#include <CL/cl_gl.h>
-#include <CL/cl_gl_ext.h>
-#include <CL/cl_ext.h>
-#include <CL/cl_egl.h>
-
-/*
- *
- * function pointer typedefs
- *
- */
-
-// Platform APIs
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetPlatformIDs)(
- cl_uint num_entries,
- cl_platform_id * platforms,
- cl_uint * num_platforms) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetPlatformInfo)(
- cl_platform_id platform,
- cl_platform_info param_name,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
-
-// Device APIs
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetDeviceIDs)(
- cl_platform_id platform,
- cl_device_type device_type,
- cl_uint num_entries,
- cl_device_id * devices,
- cl_uint * num_devices) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetDeviceInfo)(
- cl_device_id device,
- cl_device_info param_name,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clCreateSubDevices)(
- cl_device_id in_device,
- const cl_device_partition_property * partition_properties,
- cl_uint num_entries,
- cl_device_id * out_devices,
- cl_uint * num_devices);
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL * KHRpfn_clRetainDevice)(
- cl_device_id device) CL_API_SUFFIX__VERSION_1_2;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL * KHRpfn_clReleaseDevice)(
- cl_device_id device) CL_API_SUFFIX__VERSION_1_2;
-
-// Context APIs
-typedef CL_API_ENTRY cl_context (CL_API_CALL *KHRpfn_clCreateContext)(
- const cl_context_properties * properties,
- cl_uint num_devices,
- const cl_device_id * devices,
- void (CL_CALLBACK *pfn_notify)(const char *, const void *, size_t, void *),
- void * user_data,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_context (CL_API_CALL *KHRpfn_clCreateContextFromType)(
- const cl_context_properties * properties,
- cl_device_type device_type,
- void (CL_CALLBACK *pfn_notify)(const char *, const void *, size_t, void *),
- void * user_data,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clRetainContext)(
- cl_context context) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clReleaseContext)(
- cl_context context) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetContextInfo)(
- cl_context context,
- cl_context_info param_name,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
-
-// Command Queue APIs
-typedef CL_API_ENTRY cl_command_queue (CL_API_CALL *KHRpfn_clCreateCommandQueue)(
- cl_context context,
- cl_device_id device,
- cl_command_queue_properties properties,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_command_queue (CL_API_CALL *KHRpfn_clCreateCommandQueueWithProperties)(
- cl_context /* context */,
- cl_device_id /* device */,
- const cl_queue_properties * /* properties */,
- cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_2_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clRetainCommandQueue)(
- cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clReleaseCommandQueue)(
- cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetCommandQueueInfo)(
- cl_command_queue command_queue,
- cl_command_queue_info param_name,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
-
-// Memory Object APIs
-typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateBuffer)(
- cl_context context,
- cl_mem_flags flags,
- size_t size,
- void * host_ptr,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateImage)(
- cl_context context,
- cl_mem_flags flags,
- const cl_image_format * image_format,
- const cl_image_desc * image_desc,
- void * host_ptr,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clRetainMemObject)(cl_mem memobj) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clReleaseMemObject)(cl_mem memobj) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetSupportedImageFormats)(
- cl_context context,
- cl_mem_flags flags,
- cl_mem_object_type image_type,
- cl_uint num_entries,
- cl_image_format * image_formats,
- cl_uint * num_image_formats) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetMemObjectInfo)(
- cl_mem memobj,
- cl_mem_info param_name,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetImageInfo)(
- cl_mem image,
- cl_image_info param_name,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreatePipe)(
- cl_context /* context */,
- cl_mem_flags /* flags */,
- cl_uint /* pipe_packet_size */,
- cl_uint /* pipe_max_packets */,
- const cl_pipe_properties * /* properties */,
- cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_2_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetPipeInfo)(
- cl_mem /* pipe */,
- cl_pipe_info /* param_name */,
- size_t /* param_value_size */,
- void * /* param_value */,
- size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_2_0;
-
-typedef CL_API_ENTRY void * (CL_API_CALL *KHRpfn_clSVMAlloc)(
- cl_context /* context */,
- cl_svm_mem_flags /* flags */,
- size_t /* size */,
- unsigned int /* alignment */) CL_API_SUFFIX__VERSION_2_0;
-
-typedef CL_API_ENTRY void (CL_API_CALL *KHRpfn_clSVMFree)(
- cl_context /* context */,
- void * /* svm_pointer */) CL_API_SUFFIX__VERSION_2_0;
-
-// Sampler APIs
-typedef CL_API_ENTRY cl_sampler (CL_API_CALL *KHRpfn_clCreateSampler)(
- cl_context context,
- cl_bool normalized_coords,
- cl_addressing_mode addressing_mode,
- cl_filter_mode filter_mode,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clRetainSampler)(cl_sampler sampler) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clReleaseSampler)(cl_sampler sampler) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetSamplerInfo)(
- cl_sampler sampler,
- cl_sampler_info param_name,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_sampler (CL_API_CALL *KHRpfn_clCreateSamplerWithProperties)(
- cl_context /* context */,
- const cl_sampler_properties * /* sampler_properties */,
- cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_2_0;
-
-// Program Object APIs
-typedef CL_API_ENTRY cl_program (CL_API_CALL *KHRpfn_clCreateProgramWithSource)(
- cl_context context,
- cl_uint count,
- const char ** strings,
- const size_t * lengths,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_program (CL_API_CALL *KHRpfn_clCreateProgramWithBinary)(
- cl_context context,
- cl_uint num_devices,
- const cl_device_id * device_list,
- const size_t * lengths,
- const unsigned char ** binaries,
- cl_int * binary_status,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_program (CL_API_CALL *KHRpfn_clCreateProgramWithBuiltInKernels)(
- cl_context context,
- cl_uint num_devices,
- const cl_device_id * device_list,
- const char * kernel_names,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clRetainProgram)(cl_program program) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clReleaseProgram)(cl_program program) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clBuildProgram)(
- cl_program program,
- cl_uint num_devices,
- const cl_device_id * device_list,
- const char * options,
- void (CL_CALLBACK *pfn_notify)(cl_program program, void * user_data),
- void * user_data) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clCompileProgram)(
- cl_program program,
- cl_uint num_devices,
- const cl_device_id * device_list,
- const char * options,
- cl_uint num_input_headers,
- const cl_program * input_headers,
- const char ** header_include_names,
- void (CL_CALLBACK * pfn_notify)(cl_program program, void * user_data),
- void * user_data) CL_API_SUFFIX__VERSION_1_2;
-
-typedef CL_API_ENTRY cl_program (CL_API_CALL *KHRpfn_clLinkProgram)(
- cl_context context,
- cl_uint num_devices,
- const cl_device_id * device_list,
- const char * options,
- cl_uint num_input_programs,
- const cl_program * input_programs,
- void (CL_CALLBACK * pfn_notify)(cl_program program, void * user_data),
- void * user_data,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clSetProgramSpecializationConstant)(
- cl_program program,
- cl_uint spec_id,
- size_t spec_size,
- const void* spec_value) CL_API_SUFFIX__VERSION_2_2;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clSetProgramReleaseCallback)(
- cl_program program,
- void (CL_CALLBACK * pfn_notify)(cl_program program, void * user_data),
- void * user_data) CL_API_SUFFIX__VERSION_2_2;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clUnloadPlatformCompiler)(
- cl_platform_id platform) CL_API_SUFFIX__VERSION_1_2;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetProgramInfo)(
- cl_program program,
- cl_program_info param_name,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetProgramBuildInfo)(
- cl_program program,
- cl_device_id device,
- cl_program_build_info param_name,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
-
-// Kernel Object APIs
-typedef CL_API_ENTRY cl_kernel (CL_API_CALL *KHRpfn_clCreateKernel)(
- cl_program program,
- const char * kernel_name,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clCreateKernelsInProgram)(
- cl_program program,
- cl_uint num_kernels,
- cl_kernel * kernels,
- cl_uint * num_kernels_ret) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clRetainKernel)(cl_kernel kernel) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clReleaseKernel)(cl_kernel kernel) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clSetKernelArg)(
- cl_kernel kernel,
- cl_uint arg_index,
- size_t arg_size,
- const void * arg_value) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetKernelInfo)(
- cl_kernel kernel,
- cl_kernel_info param_name,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetKernelArgInfo)(
- cl_kernel kernel,
- cl_uint arg_indx,
- cl_kernel_arg_info param_name,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_2;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetKernelWorkGroupInfo)(
- cl_kernel kernel,
- cl_device_id device,
- cl_kernel_work_group_info param_name,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clSetKernelArgSVMPointer)(
- cl_kernel /* kernel */,
- cl_uint /* arg_index */,
- const void * /* arg_value */) CL_API_SUFFIX__VERSION_2_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clSetKernelExecInfo)(
- cl_kernel /* kernel */,
- cl_kernel_exec_info /* param_name */,
- size_t /* param_value_size */,
- const void * /* param_value */) CL_API_SUFFIX__VERSION_2_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetKernelSubGroupInfoKHR)(
- cl_kernel /* in_kernel */,
- cl_device_id /*in_device*/,
- cl_kernel_sub_group_info /* param_name */,
- size_t /*input_value_size*/,
- const void * /*input_value*/,
- size_t /*param_value_size*/,
- void* /*param_value*/,
- size_t* /*param_value_size_ret*/) CL_EXT_SUFFIX__VERSION_2_0;
-
-// Event Object APIs
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clWaitForEvents)(
- cl_uint num_events,
- const cl_event * event_list) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetEventInfo)(
- cl_event event,
- cl_event_info param_name,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clRetainEvent)(cl_event event) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clReleaseEvent)(cl_event event) CL_API_SUFFIX__VERSION_1_0;
-
-// Profiling APIs
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetEventProfilingInfo)(
- cl_event event,
- cl_profiling_info param_name,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
-
-// Flush and Finish APIs
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clFlush)(cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clFinish)(cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0;
-
-// Enqueued Commands APIs
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueReadBuffer)(
- cl_command_queue command_queue,
- cl_mem buffer,
- cl_bool blocking_read,
- size_t offset,
- size_t cb,
- void * ptr,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueReadBufferRect)(
- cl_command_queue command_queue,
- cl_mem buffer,
- cl_bool blocking_read,
- const size_t * buffer_origin,
- const size_t * host_origin,
- const size_t * region,
- size_t buffer_row_pitch,
- size_t buffer_slice_pitch,
- size_t host_row_pitch,
- size_t host_slice_pitch,
- void * ptr,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_1;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueWriteBuffer)(
- cl_command_queue command_queue,
- cl_mem buffer,
- cl_bool blocking_write,
- size_t offset,
- size_t cb,
- const void * ptr,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueWriteBufferRect)(
- cl_command_queue command_queue,
- cl_mem buffer,
- cl_bool blocking_read,
- const size_t * buffer_origin,
- const size_t * host_origin,
- const size_t * region,
- size_t buffer_row_pitch,
- size_t buffer_slice_pitch,
- size_t host_row_pitch,
- size_t host_slice_pitch,
- const void * ptr,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_1;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueFillBuffer)(
- cl_command_queue command_queue,
- cl_mem buffer,
- const void * pattern,
- size_t pattern_size,
- size_t offset,
- size_t cb,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_2;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueCopyBuffer)(
- cl_command_queue command_queue,
- cl_mem src_buffer,
- cl_mem dst_buffer,
- size_t src_offset,
- size_t dst_offset,
- size_t cb,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueCopyBufferRect)(
- cl_command_queue command_queue,
- cl_mem src_buffer,
- cl_mem dst_buffer,
- const size_t * src_origin,
- const size_t * dst_origin,
- const size_t * region,
- size_t src_row_pitch,
- size_t src_slice_pitch,
- size_t dst_row_pitch,
- size_t dst_slice_pitch,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_1;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueReadImage)(
- cl_command_queue command_queue,
- cl_mem image,
- cl_bool blocking_read,
- const size_t * origin,
- const size_t * region,
- size_t row_pitch,
- size_t slice_pitch,
- void * ptr,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueWriteImage)(
- cl_command_queue command_queue,
- cl_mem image,
- cl_bool blocking_write,
- const size_t * origin,
- const size_t * region,
- size_t input_row_pitch,
- size_t input_slice_pitch,
- const void * ptr,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueFillImage)(
- cl_command_queue command_queue,
- cl_mem image,
- const void * fill_color,
- const size_t origin[3],
- const size_t region[3],
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_2;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueCopyImage)(
- cl_command_queue command_queue,
- cl_mem src_image,
- cl_mem dst_image,
- const size_t * src_origin,
- const size_t * dst_origin,
- const size_t * region,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueCopyImageToBuffer)(
- cl_command_queue command_queue,
- cl_mem src_image,
- cl_mem dst_buffer,
- const size_t * src_origin,
- const size_t * region,
- size_t dst_offset,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueCopyBufferToImage)(
- cl_command_queue command_queue,
- cl_mem src_buffer,
- cl_mem dst_image,
- size_t src_offset,
- const size_t * dst_origin,
- const size_t * region,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY void * (CL_API_CALL *KHRpfn_clEnqueueMapBuffer)(
- cl_command_queue command_queue,
- cl_mem buffer,
- cl_bool blocking_map,
- cl_map_flags map_flags,
- size_t offset,
- size_t cb,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY void * (CL_API_CALL *KHRpfn_clEnqueueMapImage)(
- cl_command_queue command_queue,
- cl_mem image,
- cl_bool blocking_map,
- cl_map_flags map_flags,
- const size_t * origin,
- const size_t * region,
- size_t * image_row_pitch,
- size_t * image_slice_pitch,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueUnmapMemObject)(
- cl_command_queue command_queue,
- cl_mem memobj,
- void * mapped_ptr,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueMigrateMemObjects)(
- cl_command_queue command_queue,
- cl_uint num_mem_objects,
- const cl_mem * mem_objects,
- cl_mem_migration_flags flags,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_2;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueNDRangeKernel)(
- cl_command_queue command_queue,
- cl_kernel kernel,
- cl_uint work_dim,
- const size_t * global_work_offset,
- const size_t * global_work_size,
- const size_t * local_work_size,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueTask)(
- cl_command_queue command_queue,
- cl_kernel kernel,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueNativeKernel)(
- cl_command_queue command_queue,
- void (CL_CALLBACK * user_func)(void *),
- void * args,
- size_t cb_args,
- cl_uint num_mem_objects,
- const cl_mem * mem_list,
- const void ** args_mem_loc,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueMarkerWithWaitList)(
- cl_command_queue command_queue,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_2;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueBarrierWithWaitList)(
- cl_command_queue command_queue,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_2;
-
-typedef CL_API_ENTRY void * (CL_API_CALL *KHRpfn_clGetExtensionFunctionAddressForPlatform)(
- cl_platform_id platform,
- const char * function_name) CL_API_SUFFIX__VERSION_1_2;
-
-// Shared Virtual Memory APIs
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueSVMFree)(
- cl_command_queue /* command_queue */,
- cl_uint /* num_svm_pointers */,
- void ** /* svm_pointers */,
- void (CL_CALLBACK *pfn_free_func)(
- cl_command_queue /* queue */,
- cl_uint /* num_svm_pointers */,
- void ** /* svm_pointers[] */,
- void * /* user_data */),
- void * /* user_data */,
- cl_uint /* num_events_in_wait_list */,
- const cl_event * /* event_wait_list */,
- cl_event * /* event */) CL_API_SUFFIX__VERSION_2_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueSVMMemcpy)(
- cl_command_queue /* command_queue */,
- cl_bool /* blocking_copy */,
- void * /* dst_ptr */,
- const void * /* src_ptr */,
- size_t /* size */,
- cl_uint /* num_events_in_wait_list */,
- const cl_event * /* event_wait_list */,
- cl_event * /* event */) CL_API_SUFFIX__VERSION_2_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueSVMMemFill)(
- cl_command_queue /* command_queue */,
- void * /* svm_ptr */,
- const void * /* pattern */,
- size_t /* pattern_size */,
- size_t /* size */,
- cl_uint /* num_events_in_wait_list */,
- const cl_event * /* event_wait_list */,
- cl_event * /* event */) CL_API_SUFFIX__VERSION_2_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueSVMMap)(
- cl_command_queue /* command_queue */,
- cl_bool /* blocking_map */,
- cl_map_flags /* map_flags */,
- void * /* svm_ptr */,
- size_t /* size */,
- cl_uint /* num_events_in_wait_list */,
- const cl_event * /* event_wait_list */,
- cl_event * /* event */) CL_API_SUFFIX__VERSION_2_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueSVMUnmap)(
- cl_command_queue /* command_queue */,
- void * /* svm_ptr */,
- cl_uint /* num_events_in_wait_list */,
- const cl_event * /* event_wait_list */,
- cl_event * /* event */) CL_API_SUFFIX__VERSION_2_0;
-
-// Deprecated APIs
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clSetCommandQueueProperty)(
- cl_command_queue command_queue,
- cl_command_queue_properties properties,
- cl_bool enable,
- cl_command_queue_properties * old_properties) CL_EXT_SUFFIX__VERSION_1_0_DEPRECATED;
-
-typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateImage2D)(
- cl_context context,
- cl_mem_flags flags,
- const cl_image_format * image_format,
- size_t image_width,
- size_t image_height,
- size_t image_row_pitch,
- void * host_ptr,
- cl_int * errcode_ret) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
-
-typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateImage3D)(
- cl_context context,
- cl_mem_flags flags,
- const cl_image_format * image_format,
- size_t image_width,
- size_t image_height,
- size_t image_depth,
- size_t image_row_pitch,
- size_t image_slice_pitch,
- void * host_ptr,
- cl_int * errcode_ret) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clUnloadCompiler)(void) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueMarker)(
- cl_command_queue command_queue,
- cl_event * event) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueWaitForEvents)(
- cl_command_queue command_queue,
- cl_uint num_events,
- const cl_event * event_list) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueBarrier)(cl_command_queue command_queue) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
-
-typedef CL_API_ENTRY void * (CL_API_CALL *KHRpfn_clGetExtensionFunctionAddress)(const char *function_name) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
-
-// GL and other APIs
-typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateFromGLBuffer)(
- cl_context context,
- cl_mem_flags flags,
- cl_GLuint bufobj,
- int * errcode_ret) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateFromGLTexture)(
- cl_context context,
- cl_mem_flags flags,
- cl_GLenum target,
- cl_GLint miplevel,
- cl_GLuint texture,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2;
-
-typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateFromGLTexture2D)(
- cl_context context,
- cl_mem_flags flags,
- cl_GLenum target,
- cl_GLint miplevel,
- cl_GLuint texture,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateFromGLTexture3D)(
- cl_context context,
- cl_mem_flags flags,
- cl_GLenum target,
- cl_GLint miplevel,
- cl_GLuint texture,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateFromGLRenderbuffer)(
- cl_context context,
- cl_mem_flags flags,
- cl_GLuint renderbuffer,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetGLObjectInfo)(
- cl_mem memobj,
- cl_gl_object_type * gl_object_type,
- cl_GLuint * gl_object_name) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetGLTextureInfo)(
- cl_mem memobj,
- cl_gl_texture_info param_name,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueAcquireGLObjects)(
- cl_command_queue command_queue,
- cl_uint num_objects,
- const cl_mem * mem_objects,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueReleaseGLObjects)(
- cl_command_queue command_queue,
- cl_uint num_objects,
- const cl_mem * mem_objects,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_0;
-
-/* cl_khr_gl_sharing */
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetGLContextInfoKHR)(
- const cl_context_properties *properties,
- cl_gl_context_info param_name,
- size_t param_value_size,
- void *param_value,
- size_t *param_value_size_ret);
-
-/* cl_khr_gl_event */
-typedef CL_API_ENTRY cl_event (CL_API_CALL *KHRpfn_clCreateEventFromGLsyncKHR)(
- cl_context context,
- cl_GLsync sync,
- cl_int *errcode_ret);
-
-
-#if defined(_WIN32)
-
-/* cl_khr_d3d10_sharing */
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetDeviceIDsFromD3D10KHR)(
- cl_platform_id platform,
- cl_d3d10_device_source_khr d3d_device_source,
- void * d3d_object,
- cl_d3d10_device_set_khr d3d_device_set,
- cl_uint num_entries,
- cl_device_id * devices,
- cl_uint * num_devices) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateFromD3D10BufferKHR)(
- cl_context context,
- cl_mem_flags flags,
- ID3D10Buffer * resource,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateFromD3D10Texture2DKHR)(
- cl_context context,
- cl_mem_flags flags,
- ID3D10Texture2D * resource,
- UINT subresource,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateFromD3D10Texture3DKHR)(
- cl_context context,
- cl_mem_flags flags,
- ID3D10Texture3D * resource,
- UINT subresource,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueAcquireD3D10ObjectsKHR)(
- cl_command_queue command_queue,
- cl_uint num_objects,
- const cl_mem * mem_objects,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueReleaseD3D10ObjectsKHR)(
- cl_command_queue command_queue,
- cl_uint num_objects,
- const cl_mem * mem_objects,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_0;
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clGetDeviceIDsFromD3D10KHR(
- cl_platform_id platform,
- cl_d3d10_device_source_khr d3d_device_source,
- void *d3d_object,
- cl_d3d10_device_set_khr d3d_device_set,
- cl_uint num_entries,
- cl_device_id *devices,
- cl_uint *num_devices);
-
-extern CL_API_ENTRY cl_mem CL_API_CALL
-clCreateFromD3D10BufferKHR(
- cl_context context,
- cl_mem_flags flags,
- ID3D10Buffer *resource,
- cl_int *errcode_ret);
-
-extern CL_API_ENTRY cl_mem CL_API_CALL
-clCreateFromD3D10Texture2DKHR(
- cl_context context,
- cl_mem_flags flags,
- ID3D10Texture2D * resource,
- UINT subresource,
- cl_int * errcode_ret);
-
-extern CL_API_ENTRY cl_mem CL_API_CALL
-clCreateFromD3D10Texture3DKHR(
- cl_context context,
- cl_mem_flags flags,
- ID3D10Texture3D *resource,
- UINT subresource,
- cl_int *errcode_ret);
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueAcquireD3D10ObjectsKHR(
- cl_command_queue command_queue,
- cl_uint num_objects,
- const cl_mem *mem_objects,
- cl_uint num_events_in_wait_list,
- const cl_event *event_wait_list,
- cl_event *event);
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueReleaseD3D10ObjectsKHR(
- cl_command_queue command_queue,
- cl_uint num_objects,
- const cl_mem *mem_objects,
- cl_uint num_events_in_wait_list,
- const cl_event *event_wait_list,
- cl_event *event);
-
-/* cl_khr_d3d11_sharing */
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetDeviceIDsFromD3D11KHR)(
- cl_platform_id platform,
- cl_d3d11_device_source_khr d3d_device_source,
- void * d3d_object,
- cl_d3d11_device_set_khr d3d_device_set,
- cl_uint num_entries,
- cl_device_id * devices,
- cl_uint * num_devices) CL_API_SUFFIX__VERSION_1_2;
-
-typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateFromD3D11BufferKHR)(
- cl_context context,
- cl_mem_flags flags,
- ID3D11Buffer * resource,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2;
-
-typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateFromD3D11Texture2DKHR)(
- cl_context context,
- cl_mem_flags flags,
- ID3D11Texture2D * resource,
- UINT subresource,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2;
-
-typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateFromD3D11Texture3DKHR)(
- cl_context context,
- cl_mem_flags flags,
- ID3D11Texture3D * resource,
- UINT subresource,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueAcquireD3D11ObjectsKHR)(
- cl_command_queue command_queue,
- cl_uint num_objects,
- const cl_mem * mem_objects,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_2;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueReleaseD3D11ObjectsKHR)(
- cl_command_queue command_queue,
- cl_uint num_objects,
- const cl_mem * mem_objects,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_2;
-
-/* cl_khr_dx9_media_sharing */
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetDeviceIDsFromDX9MediaAdapterKHR)(
- cl_platform_id platform,
- cl_uint num_media_adapters,
- cl_dx9_media_adapter_type_khr * media_adapters_type,
- void * media_adapters,
- cl_dx9_media_adapter_set_khr media_adapter_set,
- cl_uint num_entries,
- cl_device_id * devices,
- cl_uint * num_devices) CL_API_SUFFIX__VERSION_1_2;
-
-typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateFromDX9MediaSurfaceKHR)(
- cl_context context,
- cl_mem_flags flags,
- cl_dx9_media_adapter_type_khr adapter_type,
- void * surface_info,
- cl_uint plane,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueAcquireDX9MediaSurfacesKHR)(
- cl_command_queue command_queue,
- cl_uint num_objects,
- const cl_mem * mem_objects,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_2;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueReleaseDX9MediaSurfacesKHR)(
- cl_command_queue command_queue,
- cl_uint num_objects,
- const cl_mem * mem_objects,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_1_2;
-
-/* cl_khr_d3d11_sharing */
-extern CL_API_ENTRY cl_int CL_API_CALL
-clGetDeviceIDsFromD3D11KHR(
- cl_platform_id platform,
- cl_d3d11_device_source_khr d3d_device_source,
- void * d3d_object,
- cl_d3d11_device_set_khr d3d_device_set,
- cl_uint num_entries,
- cl_device_id * devices,
- cl_uint * num_devices);
-
-extern CL_API_ENTRY cl_mem CL_API_CALL
-clCreateFromD3D11BufferKHR(
- cl_context context,
- cl_mem_flags flags,
- ID3D11Buffer * resource,
- cl_int * errcode_ret);
-
-extern CL_API_ENTRY cl_mem CL_API_CALL
-clCreateFromD3D11Texture2DKHR(
- cl_context context,
- cl_mem_flags flags,
- ID3D11Texture2D * resource,
- UINT subresource,
- cl_int * errcode_ret);
-
-extern CL_API_ENTRY cl_mem CL_API_CALL
-clCreateFromD3D11Texture3DKHR(
- cl_context context,
- cl_mem_flags flags,
- ID3D11Texture3D * resource,
- UINT subresource,
- cl_int * errcode_ret);
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueAcquireD3D11ObjectsKHR(
- cl_command_queue command_queue,
- cl_uint num_objects,
- const cl_mem * mem_objects,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event);
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueReleaseD3D11ObjectsKHR(
- cl_command_queue command_queue,
- cl_uint num_objects,
- const cl_mem * mem_objects,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event);
-
-/* cl_khr_dx9_media_sharing */
-extern CL_API_ENTRY cl_int CL_API_CALL
-clGetDeviceIDsFromDX9MediaAdapterKHR(
- cl_platform_id platform,
- cl_uint num_media_adapters,
- cl_dx9_media_adapter_type_khr * media_adapter_type,
- void * media_adapters,
- cl_dx9_media_adapter_set_khr media_adapter_set,
- cl_uint num_entries,
- cl_device_id * devices,
- cl_uint * num_devices);
-
-extern CL_API_ENTRY cl_mem CL_API_CALL
-clCreateFromDX9MediaSurfaceKHR(
- cl_context context,
- cl_mem_flags flags,
- cl_dx9_media_adapter_type_khr adapter_type,
- void * surface_info,
- cl_uint plane,
- cl_int * errcode_ret);
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueAcquireDX9MediaSurfacesKHR(
- cl_command_queue command_queue,
- cl_uint num_objects,
- const cl_mem * mem_objects,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event);
-
-extern CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueReleaseDX9MediaSurfacesKHR(
- cl_command_queue command_queue,
- cl_uint num_objects,
- const cl_mem * mem_objects,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event);
-
-#else
-
-/* cl_khr_d3d10_sharing */
-typedef void *KHRpfn_clGetDeviceIDsFromD3D10KHR;
-typedef void *KHRpfn_clCreateFromD3D10BufferKHR;
-typedef void *KHRpfn_clCreateFromD3D10Texture2DKHR;
-typedef void *KHRpfn_clCreateFromD3D10Texture3DKHR;
-typedef void *KHRpfn_clEnqueueAcquireD3D10ObjectsKHR;
-typedef void *KHRpfn_clEnqueueReleaseD3D10ObjectsKHR;
-
-/* cl_khr_d3d11_sharing */
-typedef void *KHRpfn_clGetDeviceIDsFromD3D11KHR;
-typedef void *KHRpfn_clCreateFromD3D11BufferKHR;
-typedef void *KHRpfn_clCreateFromD3D11Texture2DKHR;
-typedef void *KHRpfn_clCreateFromD3D11Texture3DKHR;
-typedef void *KHRpfn_clEnqueueAcquireD3D11ObjectsKHR;
-typedef void *KHRpfn_clEnqueueReleaseD3D11ObjectsKHR;
-
-/* cl_khr_dx9_media_sharing */
-typedef void *KHRpfn_clCreateFromDX9MediaSurfaceKHR;
-typedef void *KHRpfn_clEnqueueAcquireDX9MediaSurfacesKHR;
-typedef void *KHRpfn_clEnqueueReleaseDX9MediaSurfacesKHR;
-typedef void *KHRpfn_clGetDeviceIDsFromDX9MediaAdapterKHR;
-
-#endif
-
-/* OpenCL 1.1 */
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clSetEventCallback)(
- cl_event /* event */,
- cl_int /* command_exec_callback_type */,
- void (CL_CALLBACK * /* pfn_notify */)(cl_event, cl_int, void *),
- void * /* user_data */) CL_API_SUFFIX__VERSION_1_1;
-
-typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateSubBuffer)(
- cl_mem /* buffer */,
- cl_mem_flags /* flags */,
- cl_buffer_create_type /* buffer_create_type */,
- const void * /* buffer_create_info */,
- cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_1;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clSetMemObjectDestructorCallback)(
- cl_mem /* memobj */,
- void (CL_CALLBACK * /*pfn_notify*/)( cl_mem /* memobj */, void* /*user_data*/),
- void * /*user_data */ ) CL_API_SUFFIX__VERSION_1_1;
-
-typedef CL_API_ENTRY cl_event (CL_API_CALL *KHRpfn_clCreateUserEvent)(
- cl_context /* context */,
- cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_1;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clSetUserEventStatus)(
- cl_event /* event */,
- cl_int /* execution_status */) CL_API_SUFFIX__VERSION_1_1;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clCreateSubDevicesEXT)(
- cl_device_id in_device,
- const cl_device_partition_property_ext * partition_properties,
- cl_uint num_entries,
- cl_device_id * out_devices,
- cl_uint * num_devices);
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL * KHRpfn_clRetainDeviceEXT)(
- cl_device_id device) CL_API_SUFFIX__VERSION_1_0;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL * KHRpfn_clReleaseDeviceEXT)(
- cl_device_id device) CL_API_SUFFIX__VERSION_1_0;
-
-/* cl_khr_egl_image */
-typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateFromEGLImageKHR)(
- cl_context context,
- CLeglDisplayKHR display,
- CLeglImageKHR image,
- cl_mem_flags flags,
- const cl_egl_image_properties_khr *properties,
- cl_int *errcode_ret);
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueAcquireEGLObjectsKHR)(
- cl_command_queue command_queue,
- cl_uint num_objects,
- const cl_mem *mem_objects,
- cl_uint num_events_in_wait_list,
- const cl_event *event_wait_list,
- cl_event *event);
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueReleaseEGLObjectsKHR)(
- cl_command_queue command_queue,
- cl_uint num_objects,
- const cl_mem *mem_objects,
- cl_uint num_events_in_wait_list,
- const cl_event *event_wait_list,
- cl_event *event);
-
-/* cl_khr_egl_event */
-typedef CL_API_ENTRY cl_event (CL_API_CALL *KHRpfn_clCreateEventFromEGLSyncKHR)(
- cl_context context,
- CLeglSyncKHR sync,
- CLeglDisplayKHR display,
- cl_int *errcode_ret);
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clSetDefaultDeviceCommandQueue)(
- cl_context context,
- cl_device_id device,
- cl_command_queue command_queue) CL_API_SUFFIX__VERSION_2_1;
-
-typedef CL_API_ENTRY cl_program (CL_API_CALL *KHRpfn_clCreateProgramWithIL)(
- cl_context context,
- const void * il,
- size_t length,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_2_1;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetKernelSubGroupInfo )(
- cl_kernel kernel,
- cl_device_id device,
- cl_kernel_sub_group_info param_name,
- size_t input_value_size,
- const void * input_value,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_2_1;
-
-typedef CL_API_ENTRY cl_kernel (CL_API_CALL *KHRpfn_clCloneKernel)(
- cl_kernel source_kernel,
- cl_int * errcode_ret) CL_API_SUFFIX__VERSION_2_1;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueSVMMigrateMem)(
- cl_command_queue command_queue,
- cl_uint num_svm_pointers,
- const void ** svm_pointers,
- const size_t * sizes,
- cl_mem_migration_flags flags,
- cl_uint num_events_in_wait_list,
- const cl_event * event_wait_list,
- cl_event * event) CL_API_SUFFIX__VERSION_2_1;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetDeviceAndHostTimer)(
- cl_device_id device,
- cl_ulong * device_timestamp,
- cl_ulong * host_timestamp) CL_API_SUFFIX__VERSION_2_1;
-
-typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetHostTimer)(
- cl_device_id device,
- cl_ulong * host_timestamp) CL_API_SUFFIX__VERSION_2_1;
-
-/*
- *
- * vendor dispatch table structure
- *
- * note that the types in the structure KHRicdVendorDispatch mirror the function
- * names listed in the string table khrIcdVendorDispatchFunctionNames
- *
- */
-
-typedef struct KHRicdVendorDispatchRec KHRicdVendorDispatch;
-
-struct KHRicdVendorDispatchRec
-{
- /* OpenCL 1.0 */
- KHRpfn_clGetPlatformIDs clGetPlatformIDs;
- KHRpfn_clGetPlatformInfo clGetPlatformInfo;
- KHRpfn_clGetDeviceIDs clGetDeviceIDs;
- KHRpfn_clGetDeviceInfo clGetDeviceInfo;
- KHRpfn_clCreateContext clCreateContext;
- KHRpfn_clCreateContextFromType clCreateContextFromType;
- KHRpfn_clRetainContext clRetainContext;
- KHRpfn_clReleaseContext clReleaseContext;
- KHRpfn_clGetContextInfo clGetContextInfo;
- KHRpfn_clCreateCommandQueue clCreateCommandQueue;
- KHRpfn_clRetainCommandQueue clRetainCommandQueue;
- KHRpfn_clReleaseCommandQueue clReleaseCommandQueue;
- KHRpfn_clGetCommandQueueInfo clGetCommandQueueInfo;
- KHRpfn_clSetCommandQueueProperty clSetCommandQueueProperty;
- KHRpfn_clCreateBuffer clCreateBuffer;
- KHRpfn_clCreateImage2D clCreateImage2D;
- KHRpfn_clCreateImage3D clCreateImage3D;
- KHRpfn_clRetainMemObject clRetainMemObject;
- KHRpfn_clReleaseMemObject clReleaseMemObject;
- KHRpfn_clGetSupportedImageFormats clGetSupportedImageFormats;
- KHRpfn_clGetMemObjectInfo clGetMemObjectInfo;
- KHRpfn_clGetImageInfo clGetImageInfo;
- KHRpfn_clCreateSampler clCreateSampler;
- KHRpfn_clRetainSampler clRetainSampler;
- KHRpfn_clReleaseSampler clReleaseSampler;
- KHRpfn_clGetSamplerInfo clGetSamplerInfo;
- KHRpfn_clCreateProgramWithSource clCreateProgramWithSource;
- KHRpfn_clCreateProgramWithBinary clCreateProgramWithBinary;
- KHRpfn_clRetainProgram clRetainProgram;
- KHRpfn_clReleaseProgram clReleaseProgram;
- KHRpfn_clBuildProgram clBuildProgram;
- KHRpfn_clUnloadCompiler clUnloadCompiler;
- KHRpfn_clGetProgramInfo clGetProgramInfo;
- KHRpfn_clGetProgramBuildInfo clGetProgramBuildInfo;
- KHRpfn_clCreateKernel clCreateKernel;
- KHRpfn_clCreateKernelsInProgram clCreateKernelsInProgram;
- KHRpfn_clRetainKernel clRetainKernel;
- KHRpfn_clReleaseKernel clReleaseKernel;
- KHRpfn_clSetKernelArg clSetKernelArg;
- KHRpfn_clGetKernelInfo clGetKernelInfo;
- KHRpfn_clGetKernelWorkGroupInfo clGetKernelWorkGroupInfo;
- KHRpfn_clWaitForEvents clWaitForEvents;
- KHRpfn_clGetEventInfo clGetEventInfo;
- KHRpfn_clRetainEvent clRetainEvent;
- KHRpfn_clReleaseEvent clReleaseEvent;
- KHRpfn_clGetEventProfilingInfo clGetEventProfilingInfo;
- KHRpfn_clFlush clFlush;
- KHRpfn_clFinish clFinish;
- KHRpfn_clEnqueueReadBuffer clEnqueueReadBuffer;
- KHRpfn_clEnqueueWriteBuffer clEnqueueWriteBuffer;
- KHRpfn_clEnqueueCopyBuffer clEnqueueCopyBuffer;
- KHRpfn_clEnqueueReadImage clEnqueueReadImage;
- KHRpfn_clEnqueueWriteImage clEnqueueWriteImage;
- KHRpfn_clEnqueueCopyImage clEnqueueCopyImage;
- KHRpfn_clEnqueueCopyImageToBuffer clEnqueueCopyImageToBuffer;
- KHRpfn_clEnqueueCopyBufferToImage clEnqueueCopyBufferToImage;
- KHRpfn_clEnqueueMapBuffer clEnqueueMapBuffer;
- KHRpfn_clEnqueueMapImage clEnqueueMapImage;
- KHRpfn_clEnqueueUnmapMemObject clEnqueueUnmapMemObject;
- KHRpfn_clEnqueueNDRangeKernel clEnqueueNDRangeKernel;
- KHRpfn_clEnqueueTask clEnqueueTask;
- KHRpfn_clEnqueueNativeKernel clEnqueueNativeKernel;
- KHRpfn_clEnqueueMarker clEnqueueMarker;
- KHRpfn_clEnqueueWaitForEvents clEnqueueWaitForEvents;
- KHRpfn_clEnqueueBarrier clEnqueueBarrier;
- KHRpfn_clGetExtensionFunctionAddress clGetExtensionFunctionAddress;
- KHRpfn_clCreateFromGLBuffer clCreateFromGLBuffer;
- KHRpfn_clCreateFromGLTexture2D clCreateFromGLTexture2D;
- KHRpfn_clCreateFromGLTexture3D clCreateFromGLTexture3D;
- KHRpfn_clCreateFromGLRenderbuffer clCreateFromGLRenderbuffer;
- KHRpfn_clGetGLObjectInfo clGetGLObjectInfo;
- KHRpfn_clGetGLTextureInfo clGetGLTextureInfo;
- KHRpfn_clEnqueueAcquireGLObjects clEnqueueAcquireGLObjects;
- KHRpfn_clEnqueueReleaseGLObjects clEnqueueReleaseGLObjects;
- KHRpfn_clGetGLContextInfoKHR clGetGLContextInfoKHR;
-
- /* cl_khr_d3d10_sharing */
- KHRpfn_clGetDeviceIDsFromD3D10KHR clGetDeviceIDsFromD3D10KHR;
- KHRpfn_clCreateFromD3D10BufferKHR clCreateFromD3D10BufferKHR;
- KHRpfn_clCreateFromD3D10Texture2DKHR clCreateFromD3D10Texture2DKHR;
- KHRpfn_clCreateFromD3D10Texture3DKHR clCreateFromD3D10Texture3DKHR;
- KHRpfn_clEnqueueAcquireD3D10ObjectsKHR clEnqueueAcquireD3D10ObjectsKHR;
- KHRpfn_clEnqueueReleaseD3D10ObjectsKHR clEnqueueReleaseD3D10ObjectsKHR;
-
- /* OpenCL 1.1 */
- KHRpfn_clSetEventCallback clSetEventCallback;
- KHRpfn_clCreateSubBuffer clCreateSubBuffer;
- KHRpfn_clSetMemObjectDestructorCallback clSetMemObjectDestructorCallback;
- KHRpfn_clCreateUserEvent clCreateUserEvent;
- KHRpfn_clSetUserEventStatus clSetUserEventStatus;
- KHRpfn_clEnqueueReadBufferRect clEnqueueReadBufferRect;
- KHRpfn_clEnqueueWriteBufferRect clEnqueueWriteBufferRect;
- KHRpfn_clEnqueueCopyBufferRect clEnqueueCopyBufferRect;
-
- /* cl_ext_device_fission */
- KHRpfn_clCreateSubDevicesEXT clCreateSubDevicesEXT;
- KHRpfn_clRetainDeviceEXT clRetainDeviceEXT;
- KHRpfn_clReleaseDeviceEXT clReleaseDeviceEXT;
-
- /* cl_khr_gl_event */
- KHRpfn_clCreateEventFromGLsyncKHR clCreateEventFromGLsyncKHR;
-
- /* OpenCL 1.2 */
- KHRpfn_clCreateSubDevices clCreateSubDevices;
- KHRpfn_clRetainDevice clRetainDevice;
- KHRpfn_clReleaseDevice clReleaseDevice;
- KHRpfn_clCreateImage clCreateImage;
- KHRpfn_clCreateProgramWithBuiltInKernels clCreateProgramWithBuiltInKernels;
- KHRpfn_clCompileProgram clCompileProgram;
- KHRpfn_clLinkProgram clLinkProgram;
- KHRpfn_clUnloadPlatformCompiler clUnloadPlatformCompiler;
- KHRpfn_clGetKernelArgInfo clGetKernelArgInfo;
- KHRpfn_clEnqueueFillBuffer clEnqueueFillBuffer;
- KHRpfn_clEnqueueFillImage clEnqueueFillImage;
- KHRpfn_clEnqueueMigrateMemObjects clEnqueueMigrateMemObjects;
- KHRpfn_clEnqueueMarkerWithWaitList clEnqueueMarkerWithWaitList;
- KHRpfn_clEnqueueBarrierWithWaitList clEnqueueBarrierWithWaitList;
- KHRpfn_clGetExtensionFunctionAddressForPlatform clGetExtensionFunctionAddressForPlatform;
- KHRpfn_clCreateFromGLTexture clCreateFromGLTexture;
-
- /* cl_khr_d3d11_sharing */
- KHRpfn_clGetDeviceIDsFromD3D11KHR clGetDeviceIDsFromD3D11KHR;
- KHRpfn_clCreateFromD3D11BufferKHR clCreateFromD3D11BufferKHR;
- KHRpfn_clCreateFromD3D11Texture2DKHR clCreateFromD3D11Texture2DKHR;
- KHRpfn_clCreateFromD3D11Texture3DKHR clCreateFromD3D11Texture3DKHR;
- KHRpfn_clCreateFromDX9MediaSurfaceKHR clCreateFromDX9MediaSurfaceKHR;
- KHRpfn_clEnqueueAcquireD3D11ObjectsKHR clEnqueueAcquireD3D11ObjectsKHR;
- KHRpfn_clEnqueueReleaseD3D11ObjectsKHR clEnqueueReleaseD3D11ObjectsKHR;
-
- /* cl_khr_dx9_media_sharing */
- KHRpfn_clGetDeviceIDsFromDX9MediaAdapterKHR clGetDeviceIDsFromDX9MediaAdapterKHR;
- KHRpfn_clEnqueueAcquireDX9MediaSurfacesKHR clEnqueueAcquireDX9MediaSurfacesKHR;
- KHRpfn_clEnqueueReleaseDX9MediaSurfacesKHR clEnqueueReleaseDX9MediaSurfacesKHR;
-
- /* cl_khr_egl_image */
- KHRpfn_clCreateFromEGLImageKHR clCreateFromEGLImageKHR;
- KHRpfn_clEnqueueAcquireEGLObjectsKHR clEnqueueAcquireEGLObjectsKHR;
- KHRpfn_clEnqueueReleaseEGLObjectsKHR clEnqueueReleaseEGLObjectsKHR;
-
- /* cl_khr_egl_event */
- KHRpfn_clCreateEventFromEGLSyncKHR clCreateEventFromEGLSyncKHR;
-
- /* OpenCL 2.0 */
- KHRpfn_clCreateCommandQueueWithProperties clCreateCommandQueueWithProperties;
- KHRpfn_clCreatePipe clCreatePipe;
- KHRpfn_clGetPipeInfo clGetPipeInfo;
- KHRpfn_clSVMAlloc clSVMAlloc;
- KHRpfn_clSVMFree clSVMFree;
- KHRpfn_clEnqueueSVMFree clEnqueueSVMFree;
- KHRpfn_clEnqueueSVMMemcpy clEnqueueSVMMemcpy;
- KHRpfn_clEnqueueSVMMemFill clEnqueueSVMMemFill;
- KHRpfn_clEnqueueSVMMap clEnqueueSVMMap;
- KHRpfn_clEnqueueSVMUnmap clEnqueueSVMUnmap;
- KHRpfn_clCreateSamplerWithProperties clCreateSamplerWithProperties;
- KHRpfn_clSetKernelArgSVMPointer clSetKernelArgSVMPointer;
- KHRpfn_clSetKernelExecInfo clSetKernelExecInfo;
-
- /* cl_khr_sub_groups */
- KHRpfn_clGetKernelSubGroupInfoKHR clGetKernelSubGroupInfoKHR;
-
- /* OpenCL 2.1 */
- KHRpfn_clCloneKernel clCloneKernel;
- KHRpfn_clCreateProgramWithIL clCreateProgramWithIL;
- KHRpfn_clEnqueueSVMMigrateMem clEnqueueSVMMigrateMem;
- KHRpfn_clGetDeviceAndHostTimer clGetDeviceAndHostTimer;
- KHRpfn_clGetHostTimer clGetHostTimer;
- KHRpfn_clGetKernelSubGroupInfo clGetKernelSubGroupInfo;
- KHRpfn_clSetDefaultDeviceCommandQueue clSetDefaultDeviceCommandQueue;
-
- /* OpenCL 2.2 */
- KHRpfn_clSetProgramReleaseCallback clSetProgramReleaseCallback;
- KHRpfn_clSetProgramSpecializationConstant clSetProgramSpecializationConstant;
-};
-
-/*
- *
- * vendor dispatch table structure
- *
- */
-
-struct _cl_platform_id
-{
- KHRicdVendorDispatch *dispatch;
-};
-
-struct _cl_device_id
-{
- KHRicdVendorDispatch *dispatch;
-};
-
-struct _cl_context
-{
- KHRicdVendorDispatch *dispatch;
-};
-
-struct _cl_command_queue
-{
- KHRicdVendorDispatch *dispatch;
-};
-
-struct _cl_mem
-{
- KHRicdVendorDispatch *dispatch;
-};
-
-struct _cl_program
-{
- KHRicdVendorDispatch *dispatch;
-};
-
-struct _cl_kernel
-{
- KHRicdVendorDispatch *dispatch;
-};
-
-struct _cl_event
-{
- KHRicdVendorDispatch *dispatch;
-};
-
-struct _cl_sampler
-{
- KHRicdVendorDispatch *dispatch;
-};
-
-#endif // _ICD_DISPATCH_H_
-
+++ /dev/null
-/*
- * Copyright (c) 2016-2019 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.
- */
-
-OPENCL_1.0 {
- global:
- clBuildProgram;
- clCreateBuffer;
- clCreateCommandQueue;
- clCreateContext;
- clCreateContextFromType;
- clCreateFromGLBuffer;
- clCreateFromGLRenderbuffer;
- clCreateFromGLTexture2D;
- clCreateFromGLTexture3D;
- clCreateImage2D;
- clCreateImage3D;
- clCreateKernel;
- clCreateKernelsInProgram;
- clCreateProgramWithBinary;
- clCreateProgramWithSource;
- clCreateSampler;
- clEnqueueAcquireGLObjects;
- clEnqueueBarrier;
- clEnqueueCopyBuffer;
- clEnqueueCopyBufferToImage;
- clEnqueueCopyImage;
- clEnqueueCopyImageToBuffer;
- clEnqueueMapBuffer;
- clEnqueueMapImage;
- clEnqueueMarker;
- clEnqueueNDRangeKernel;
- clEnqueueNativeKernel;
- clEnqueueReadBuffer;
- clEnqueueReadImage;
- clEnqueueReleaseGLObjects;
- clEnqueueTask;
- clEnqueueUnmapMemObject;
- clEnqueueWaitForEvents;
- clEnqueueWriteBuffer;
- clEnqueueWriteImage;
- clFinish;
- clFlush;
- clGetCommandQueueInfo;
- clGetContextInfo;
- clGetDeviceIDs;
- clGetDeviceInfo;
- clGetEventInfo;
- clGetEventProfilingInfo;
- clGetExtensionFunctionAddress;
- clGetGLObjectInfo;
- clGetGLTextureInfo;
- clGetImageInfo;
- clGetKernelInfo;
- clGetKernelWorkGroupInfo;
- clGetMemObjectInfo;
- clGetPlatformIDs;
- clGetPlatformInfo;
- clGetProgramBuildInfo;
- clGetProgramInfo;
- clGetSamplerInfo;
- clGetSupportedImageFormats;
- clReleaseCommandQueue;
- clReleaseContext;
- clReleaseEvent;
- clReleaseKernel;
- clReleaseMemObject;
- clReleaseProgram;
- clReleaseSampler;
- clRetainCommandQueue;
- clRetainContext;
- clRetainEvent;
- clRetainKernel;
- clRetainMemObject;
- clRetainProgram;
- clRetainSampler;
- clSetCommandQueueProperty;
- clSetKernelArg;
- clUnloadCompiler;
- clWaitForEvents;
-
- local:
- /* Everything else is local to ICD. */
- *;
-};
-
-OPENCL_1.1 {
- global:
- clCreateSubBuffer;
- clCreateUserEvent;
- clEnqueueCopyBufferRect;
- clEnqueueReadBufferRect;
- clEnqueueWriteBufferRect;
- clSetEventCallback;
- clSetMemObjectDestructorCallback;
- clSetUserEventStatus;
-} OPENCL_1.0;
-
-OPENCL_1.2 {
- global:
- clCompileProgram;
- clCreateFromGLTexture;
- clCreateImage;
- clCreateProgramWithBuiltInKernels;
- clCreateSubDevices;
- clEnqueueBarrierWithWaitList;
- clEnqueueFillBuffer;
- clEnqueueFillImage;
- clEnqueueMarkerWithWaitList;
- clEnqueueMigrateMemObjects;
- clGetExtensionFunctionAddressForPlatform;
- clGetKernelArgInfo;
- clLinkProgram;
- clReleaseDevice;
- clRetainDevice;
- clUnloadPlatformCompiler;
-} OPENCL_1.1;
-
-OPENCL_2.0 {
- global:
- clCreateCommandQueueWithProperties;
- clCreatePipe;
- clGetPipeInfo;
- clSVMAlloc;
- clSVMFree;
- clEnqueueSVMFree;
- clEnqueueSVMMemcpy;
- clEnqueueSVMMemFill;
- clEnqueueSVMMap;
- clEnqueueSVMUnmap;
- clCreateSamplerWithProperties;
- clSetKernelArgSVMPointer;
- clSetKernelExecInfo;
-} OPENCL_1.2;
-
-OPENCL_2.1 {
- global:
- clCloneKernel;
- clCreateProgramWithIL;
- clEnqueueSVMMigrateMem;
- clGetDeviceAndHostTimer;
- clGetHostTimer;
- clGetKernelSubGroupInfo;
- clSetDefaultDeviceCommandQueue;
-} OPENCL_2.0;
-
-OPENCL_2.2 {
- global:
- clSetProgramReleaseCallback;
- clSetProgramSpecializationConstant;
-} OPENCL_2.1;
+++ /dev/null
-/*
- * Copyright (c) 2016-2019 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.h"
-#include <dlfcn.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <dirent.h>
-#include <pthread.h>
-
-static pthread_once_t initialized = PTHREAD_ONCE_INIT;
-
-/*
- *
- * Vendor enumeration functions
- *
- */
-
-// go through the list of vendors in the two configuration files
-void khrIcdOsVendorsEnumerate(void)
-{
- DIR *dir = NULL;
- struct dirent *dirEntry = NULL;
-#ifdef __ANDROID__
- char *vendorPath = "/system/vendor/Khronos/OpenCL/vendors/";
-#else
- char *vendorPath = "/etc/OpenCL/vendors/";
-#endif // ANDROID
-
- // open the directory
- dir = opendir(vendorPath);
- if (NULL == dir)
- {
- KHR_ICD_TRACE("Failed to open path %s\n", vendorPath);
- goto Cleanup;
- }
-
- // attempt to load all files in the directory
- for (dirEntry = readdir(dir); dirEntry; dirEntry = readdir(dir) )
- {
- switch(dirEntry->d_type)
- {
- case DT_UNKNOWN:
- case DT_REG:
- case DT_LNK:
- {
- const char* extension = ".icd";
- FILE *fin = NULL;
- char* fileName = NULL;
- char* buffer = NULL;
- long bufferSize = 0;
-
- // make sure the file name ends in .icd
- if (strlen(extension) > strlen(dirEntry->d_name) )
- {
- break;
- }
- if (strcmp(dirEntry->d_name + strlen(dirEntry->d_name) - strlen(extension), extension) )
- {
- break;
- }
-
- // allocate space for the full path of the vendor library name
- fileName = malloc(strlen(dirEntry->d_name) + strlen(vendorPath) + 1);
- if (!fileName)
- {
- KHR_ICD_TRACE("Failed allocate space for ICD file path\n");
- break;
- }
- sprintf(fileName, "%s%s", vendorPath, dirEntry->d_name);
-
- // open the file and read its contents
- fin = fopen(fileName, "r");
- if (!fin)
- {
- free(fileName);
- break;
- }
- fseek(fin, 0, SEEK_END);
- bufferSize = ftell(fin);
-
- buffer = malloc(bufferSize+1);
- if (!buffer)
- {
- free(fileName);
- fclose(fin);
- break;
- }
- memset(buffer, 0, bufferSize+1);
- fseek(fin, 0, SEEK_SET);
- if (bufferSize != (long)fread(buffer, 1, bufferSize, fin) )
- {
- free(fileName);
- free(buffer);
- fclose(fin);
- break;
- }
- // ignore a newline at the end of the file
- if (buffer[bufferSize-1] == '\n') buffer[bufferSize-1] = '\0';
-
- // load the string read from the file
- khrIcdVendorAdd(buffer);
-
- free(fileName);
- free(buffer);
- fclose(fin);
- }
- break;
- default:
- break;
- }
- }
-
-Cleanup:
-
- // free resources and exit
- if (dir)
- {
- closedir(dir);
- }
-}
-
-// go through the list of vendors only once
-void khrIcdOsVendorsEnumerateOnce(void)
-{
- pthread_once(&initialized, khrIcdOsVendorsEnumerate);
-}
-
-/*
- *
- * Dynamic library loading functions
- *
- */
-
-// dynamically load a library. returns NULL on failure
-void *khrIcdOsLibraryLoad(const char *libraryName)
-{
- return dlopen (libraryName, RTLD_NOW);
-}
-
-// get a function pointer from a loaded library. returns NULL on failure.
-void *khrIcdOsLibraryGetFunctionAddress(void *library, const char *functionName)
-{
- return dlsym(library, functionName);
-}
-
-// unload a library
-void khrIcdOsLibraryUnload(void *library)
-{
- dlclose(library);
-}
-
+++ /dev/null
-/*
- * Copyright (c) 2016-2019 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.h"
-#include "icd_windows_hkr.h"
-#include <stdio.h>
-#include <windows.h>
-#include <winreg.h>
-
-static INIT_ONCE initialized = INIT_ONCE_STATIC_INIT;
-
-/*
- *
- * Vendor enumeration functions
- *
- */
-
-// go through the list of vendors in the registry and call khrIcdVendorAdd
-// for each vendor encountered
-BOOL CALLBACK khrIcdOsVendorsEnumerate(PINIT_ONCE InitOnce, PVOID Parameter, PVOID *lpContext)
-{
- LONG result;
- const char* platformsName = "SOFTWARE\\Khronos\\OpenCL\\Vendors";
- HKEY platformsKey = NULL;
- DWORD dwIndex;
-
- if (!khrIcdOsVendorsEnumerateHKR())
- {
- KHR_ICD_TRACE("Failed to enumerate HKR entries, continuing\n");
- }
-
- KHR_ICD_TRACE("Opening key HKLM\\%s...\n", platformsName);
- result = RegOpenKeyExA(
- HKEY_LOCAL_MACHINE,
- platformsName,
- 0,
- KEY_READ,
- &platformsKey);
- if (ERROR_SUCCESS != result)
- {
- KHR_ICD_TRACE("Failed to open platforms key %s, continuing\n", platformsName);
- return TRUE;
- }
-
- // for each value
- for (dwIndex = 0;; ++dwIndex)
- {
- char cszLibraryName[1024] = {0};
- DWORD dwLibraryNameSize = sizeof(cszLibraryName);
- DWORD dwLibraryNameType = 0;
- DWORD dwValue = 0;
- DWORD dwValueSize = sizeof(dwValue);
-
- // read the value name
- KHR_ICD_TRACE("Reading value %d...\n", dwIndex);
- result = RegEnumValueA(
- platformsKey,
- dwIndex,
- cszLibraryName,
- &dwLibraryNameSize,
- NULL,
- &dwLibraryNameType,
- (LPBYTE)&dwValue,
- &dwValueSize);
- // if RegEnumKeyEx fails, we are done with the enumeration
- if (ERROR_SUCCESS != result)
- {
- KHR_ICD_TRACE("Failed to read value %d, done reading key.\n", dwIndex);
- break;
- }
- KHR_ICD_TRACE("Value %s found...\n", cszLibraryName);
-
- // Require that the value be a DWORD and equal zero
- if (REG_DWORD != dwLibraryNameType)
- {
- KHR_ICD_TRACE("Value not a DWORD, skipping\n");
- continue;
- }
- if (dwValue)
- {
- KHR_ICD_TRACE("Value not zero, skipping\n");
- continue;
- }
-
- // add the library
- khrIcdVendorAdd(cszLibraryName);
- }
-
- result = RegCloseKey(platformsKey);
- if (ERROR_SUCCESS != result)
- {
- KHR_ICD_TRACE("Failed to close platforms key %s, ignoring\n", platformsName);
- }
-
- return TRUE;
-}
-
-// go through the list of vendors only once
-void khrIcdOsVendorsEnumerateOnce()
-{
- InitOnceExecuteOnce(&initialized, khrIcdOsVendorsEnumerate, NULL, NULL);
-}
-
-/*
- *
- * Dynamic library loading functions
- *
- */
-
-// dynamically load a library. returns NULL on failure
-void *khrIcdOsLibraryLoad(const char *libraryName)
-{
- return (void *)LoadLibraryA(libraryName);
-}
-
-// get a function pointer from a loaded library. returns NULL on failure.
-void *khrIcdOsLibraryGetFunctionAddress(void *library, const char *functionName)
-{
- if (!library || !functionName)
- {
- return NULL;
- }
- return GetProcAddress( (HMODULE)library, functionName);
-}
-
-// unload a library.
-void khrIcdOsLibraryUnload(void *library)
-{
- FreeLibrary( (HMODULE)library);
-}
-
+++ /dev/null
-/*
- * Copyright (c) 2017-2019 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.h"
-#include "icd_windows_hkr.h"
-#include <windows.h>
-#include <cfgmgr32.h>
-#include <assert.h>
-#include <stdbool.h>
-#include <initguid.h>
-#include <Devpkey.h>
-#include <devguid.h>
-
- // This GUID was only added to devguid.h on Windows SDK v10.0.16232 which
- // corresponds to Windows 10 Redstone 3 (Windows 10 Fall Creators Update).
-DEFINE_GUID(OCL_GUID_DEVCLASS_SOFTWARECOMPONENT, 0x5c4c3332, 0x344d, 0x483c, 0x87, 0x39, 0x25, 0x9e, 0x93, 0x4c, 0x9c, 0xc8);
-
-typedef enum
-{
- ProbeFailure,
- PendingReboot,
- Valid
-} DeviceProbeResult;
-
-#define KHR_SAFE_RELEASE(mem) \
- do \
- { \
- free(mem); \
- mem = NULL; \
- } while (0)
-
-static const char OPENCL_REG_SUB_KEY[] = "OpenCLDriverName";
-
-#ifndef _WIN64
-static const char OPENCL_REG_SUB_KEY_WOW[] = "OpenCLDriverNameWow";
-#endif
-
-// Do not free the memory returned by this function.
-static const char* GetOpenCLRegKeyName(void)
-{
-#ifdef _WIN64
- return OPENCL_REG_SUB_KEY;
-#else
- // The suffix/substring "WoW" is meaningful only when a 32-bit
- // application is running on a 64-bit Windows OS. A 32-bit application
- // running on a 32-bit OS uses non-WoW names.
- BOOL is_wow64;
- if (IsWow64Process(GetCurrentProcess(), &is_wow64) && is_wow64)
- {
- return OPENCL_REG_SUB_KEY_WOW;
- }
-
- return OPENCL_REG_SUB_KEY;
-#endif
-}
-
-static bool ReadOpenCLKey(DEVINST dnDevNode)
-{
- HKEY hkey = 0;
- CONFIGRET ret;
- bool bRet = false;
- DWORD dwLibraryNameType = 0;
- char *cszOclPath = NULL;
- DWORD dwOclPathSize = 0;
- LSTATUS result;
-
- ret = CM_Open_DevNode_Key(
- dnDevNode,
- KEY_QUERY_VALUE,
- 0,
- RegDisposition_OpenExisting,
- &hkey,
- CM_REGISTRY_SOFTWARE);
-
- if (CR_SUCCESS != ret)
- {
- KHR_ICD_TRACE("Failed with ret 0x%x\n", ret);
- goto out;
- }
- else
- {
- result = RegQueryValueExA(
- hkey,
- GetOpenCLRegKeyName(),
- NULL,
- &dwLibraryNameType,
- NULL,
- &dwOclPathSize);
-
- if (ERROR_SUCCESS != result)
- {
- KHR_ICD_TRACE("Failed to open sub key 0x%x\n", result);
- goto out;
- }
-
- cszOclPath = malloc(dwOclPathSize);
- if (NULL == cszOclPath)
- {
- KHR_ICD_TRACE("Failed to allocate %u bytes for registry value\n", dwOclPathSize);
- goto out;
- }
-
- result = RegQueryValueExA(
- hkey,
- OPENCL_REG_SUB_KEY,
- NULL,
- &dwLibraryNameType,
- (LPBYTE)cszOclPath,
- &dwOclPathSize);
- if (ERROR_SUCCESS != result)
- {
- KHR_ICD_TRACE("Failed to open sub key 0x%x\n", result);
- goto out;
- }
-
- if (REG_SZ != dwLibraryNameType)
- {
- KHR_ICD_TRACE("Unexpected registry entry 0x%x! continuing\n", dwLibraryNameType);
- goto out;
- }
-
- KHR_ICD_TRACE(" Path: %s\n", cszOclPath);
-
- khrIcdVendorAdd(cszOclPath);
-
- bRet = true;
- }
-
-out:
- free(cszOclPath);
-
- if (hkey)
- {
- result = RegCloseKey(hkey);
- if (ERROR_SUCCESS != result)
- {
- KHR_ICD_TRACE("WARNING: failed to close hkey 0x%x\n", result);
- }
- }
-
- return bRet;
-}
-
-static DeviceProbeResult ProbeDevice(DEVINST devnode)
-{
- CONFIGRET ret;
- ULONG ulStatus;
- ULONG ulProblem;
-
- ret = CM_Get_DevNode_Status(
- &ulStatus,
- &ulProblem,
- devnode,
- 0);
-
- if (CR_SUCCESS != ret)
- {
- KHR_ICD_TRACE(" WARNING: failed to probe the status of the device 0x%x\n", ret);
- return ProbeFailure;
- }
-
- //
- // Careful here, we need to check 2 scenarios:
- // 1. DN_NEED_RESTART
- // status flag indicates that a reboot is needed when an _already started_
- // device cannot be stopped. This covers devices that are still started with their
- // old KMD (because they couldn't be stopped/restarted) while the UMD is updated
- // and possibly out of sync.
- //
- // 2. Status & DN_HAS_PROBLEM && Problem == CM_PROB_NEED_RESTART
- // indicates that a reboot is needed when a _stopped device_ cannot be (re)started.
- //
- if (((ulStatus & DN_HAS_PROBLEM) && ulProblem == CM_PROB_NEED_RESTART) ||
- ulStatus & DN_NEED_RESTART)
- {
- KHR_ICD_TRACE(" WARNING: device is pending reboot (0x%x), skipping...\n", ulStatus);
- return PendingReboot;
- }
-
- return Valid;
-}
-
-// Tries to look for the OpenCL key under the display devices and
-// if not found, falls back to software component devices.
-bool khrIcdOsVendorsEnumerateHKR(void)
-{
- CONFIGRET ret;
- int iret;
- bool foundOpenCLKey = false;
- DEVINST devinst = 0;
- DEVINST devchild = 0;
- wchar_t *deviceIdList = NULL;
- ULONG szBuffer = 0;
-
- OLECHAR display_adapter_guid_str[MAX_GUID_STRING_LEN];
- ULONG ulFlags = CM_GETIDLIST_FILTER_CLASS |
- CM_GETIDLIST_FILTER_PRESENT;
-
- iret = StringFromGUID2(
- &GUID_DEVCLASS_DISPLAY,
- display_adapter_guid_str,
- MAX_GUID_STRING_LEN);
-
- if (MAX_GUID_STRING_LEN != iret)
- {
- KHR_ICD_TRACE("StringFromGUID2 failed with %d\n", iret);
- goto out;
- }
-
- // Paranoia: we might have a new device added to the list between the call
- // to CM_Get_Device_ID_List_Size() and the call to CM_Get_Device_ID_List().
- do
- {
- ret = CM_Get_Device_ID_List_SizeW(
- &szBuffer,
- display_adapter_guid_str,
- ulFlags);
-
- if (CR_SUCCESS != ret)
- {
- KHR_ICD_TRACE("CM_Get_Device_ID_List_size failed with 0x%x\n", ret);
- break;
- }
-
- // "pulLen [out] Receives a value representing the required buffer
- // size, in characters."
- // So we need to allocate the right size in bytes but we still need
- // to keep szBuffer as it was returned from CM_Get_Device_ID_List_Size so
- // the call to CM_Get_Device_ID_List will receive the correct size.
- deviceIdList = malloc(szBuffer * sizeof(wchar_t));
- if (NULL == deviceIdList)
- {
- KHR_ICD_TRACE("Failed to allocate %u bytes for device ID strings\n", szBuffer);
- break;
- }
-
- ret = CM_Get_Device_ID_ListW(
- display_adapter_guid_str,
- deviceIdList,
- szBuffer,
- ulFlags);
-
- if (CR_SUCCESS != ret)
- {
- KHR_ICD_TRACE("CM_Get_Device_ID_List failed with 0x%x\n", ret);
- KHR_SAFE_RELEASE(deviceIdList);
- }
- } while (CR_BUFFER_SMALL == ret);
-
- if (NULL == deviceIdList)
- {
- goto out;
- }
-
- for (PWSTR deviceId = deviceIdList; *deviceId; deviceId += wcslen(deviceId) + 1)
- {
- DEVPROPTYPE devpropType;
-
- KHR_ICD_WIDE_TRACE(L"Device ID: %ls\n", deviceId);
-
- ret = CM_Locate_DevNodeW(&devinst, deviceId, 0);
- if (CR_SUCCESS == ret)
- {
- KHR_ICD_TRACE(" devinst: %d\n", devinst);
- }
- else
- {
- KHR_ICD_TRACE("CM_Locate_DevNode failed with 0x%x\n", ret);
- continue;
- }
-
- if (ProbeDevice(devinst) != Valid)
- {
- continue;
- }
-
- KHR_ICD_TRACE(" Trying to look for the key in the display adapter HKR...\n");
- if (ReadOpenCLKey(devinst))
- {
- foundOpenCLKey = true;
- continue;
- }
-
- KHR_ICD_TRACE(" Could not find the key, proceeding to children software components...\n");
-
- ret = CM_Get_Child(
- &devchild,
- devinst,
- 0);
-
- if (CR_SUCCESS != ret)
- {
- KHR_ICD_TRACE(" CM_Get_Child returned 0x%x, skipping children...\n", ret);
- }
- else
- {
- do
- {
- wchar_t deviceInstanceID[MAX_DEVICE_ID_LEN] = { 0 };
- GUID guid;
- ULONG szGuid = sizeof(guid);
-
- KHR_ICD_TRACE(" devchild: %d\n", devchild);
- ret = CM_Get_Device_IDW(
- devchild,
- deviceInstanceID,
- sizeof(deviceInstanceID),
- 0);
-
- if (CR_SUCCESS != ret)
- {
- KHR_ICD_TRACE(" CM_Get_Device_ID returned 0x%x, skipping device...\n", ret);
- continue;
- }
- else
- {
- KHR_ICD_WIDE_TRACE(L" deviceInstanceID: %ls\n", deviceInstanceID);
- }
-
- ret = CM_Get_DevNode_PropertyW(
- devchild,
- &DEVPKEY_Device_ClassGuid,
- &devpropType,
- (PBYTE)&guid,
- &szGuid,
- 0);
-
- if (CR_SUCCESS != ret ||
- !IsEqualGUID(&OCL_GUID_DEVCLASS_SOFTWARECOMPONENT, &guid))
- {
- continue;
- }
-
- if (ProbeDevice(devchild) != Valid)
- {
- continue;
- }
-
- if (ReadOpenCLKey(devchild))
- {
- foundOpenCLKey = true;
- break;
- }
- } while (CM_Get_Sibling(&devchild, devchild, 0) == CR_SUCCESS);
- }
- }
-
-out:
- free(deviceIdList);
- return foundOpenCLKey;
-}
+++ /dev/null
-/*
- * Copyright (c) 2017-2019 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 <stdbool.h>
-
-bool khrIcdOsVendorsEnumerateHKR(void);
--- /dev/null
+/*
+ * Copyright (c) 2016-2019 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.h"
+#include "icd_dispatch.h"
+#include <stdlib.h>
+#include <string.h>
+
+KHRicdVendor *khrIcdVendors = NULL;
+
+// entrypoint to initialize the ICD and add all vendors
+void khrIcdInitialize(void)
+{
+ // enumerate vendors present on the system
+ khrIcdOsVendorsEnumerateOnce();
+}
+
+void khrIcdVendorAdd(const char *libraryName)
+{
+ void *library = NULL;
+ cl_int result = CL_SUCCESS;
+ pfn_clGetExtensionFunctionAddress p_clGetExtensionFunctionAddress = NULL;
+ pfn_clIcdGetPlatformIDs p_clIcdGetPlatformIDs = NULL;
+ cl_uint i = 0;
+ cl_uint platformCount = 0;
+ cl_platform_id *platforms = NULL;
+ KHRicdVendor *vendorIterator = NULL;
+
+ // require that the library name be valid
+ if (!libraryName)
+ {
+ goto Done;
+ }
+ KHR_ICD_TRACE("attempting to add vendor %s...\n", libraryName);
+
+ // load its library and query its function pointers
+ library = khrIcdOsLibraryLoad(libraryName);
+ if (!library)
+ {
+ KHR_ICD_TRACE("failed to load library %s\n", libraryName);
+ goto Done;
+ }
+
+ // ensure that we haven't already loaded this vendor
+ for (vendorIterator = khrIcdVendors; vendorIterator; vendorIterator = vendorIterator->next)
+ {
+ if (vendorIterator->library == library)
+ {
+ KHR_ICD_TRACE("already loaded vendor %s, nothing to do here\n", libraryName);
+ goto Done;
+ }
+ }
+
+ // get the library's clGetExtensionFunctionAddress pointer
+ p_clGetExtensionFunctionAddress = (pfn_clGetExtensionFunctionAddress)(size_t)khrIcdOsLibraryGetFunctionAddress(library, "clGetExtensionFunctionAddress");
+ if (!p_clGetExtensionFunctionAddress)
+ {
+ KHR_ICD_TRACE("failed to get function address clGetExtensionFunctionAddress\n");
+ goto Done;
+ }
+
+ // use that function to get the clIcdGetPlatformIDsKHR function pointer
+ p_clIcdGetPlatformIDs = (pfn_clIcdGetPlatformIDs)(size_t)p_clGetExtensionFunctionAddress("clIcdGetPlatformIDsKHR");
+ if (!p_clIcdGetPlatformIDs)
+ {
+ KHR_ICD_TRACE("failed to get extension function address clIcdGetPlatformIDsKHR\n");
+ goto Done;
+ }
+
+ // query the number of platforms available and allocate space to store them
+ result = p_clIcdGetPlatformIDs(0, NULL, &platformCount);
+ if (CL_SUCCESS != result)
+ {
+ KHR_ICD_TRACE("failed clIcdGetPlatformIDs\n");
+ goto Done;
+ }
+ platforms = (cl_platform_id *)malloc(platformCount * sizeof(cl_platform_id) );
+ if (!platforms)
+ {
+ KHR_ICD_TRACE("failed to allocate memory\n");
+ goto Done;
+ }
+ memset(platforms, 0, platformCount * sizeof(cl_platform_id) );
+ result = p_clIcdGetPlatformIDs(platformCount, platforms, NULL);
+ if (CL_SUCCESS != result)
+ {
+ KHR_ICD_TRACE("failed clIcdGetPlatformIDs\n");
+ goto Done;
+ }
+
+ // for each platform, add it
+ for (i = 0; i < platformCount; ++i)
+ {
+ KHRicdVendor* vendor = NULL;
+ char *suffix;
+ size_t suffixSize;
+
+ // call clGetPlatformInfo on the returned platform to get the suffix
+ if (!platforms[i])
+ {
+ continue;
+ }
+ result = platforms[i]->dispatch->clGetPlatformInfo(
+ platforms[i],
+ CL_PLATFORM_ICD_SUFFIX_KHR,
+ 0,
+ NULL,
+ &suffixSize);
+ if (CL_SUCCESS != result)
+ {
+ continue;
+ }
+ suffix = (char *)malloc(suffixSize);
+ if (!suffix)
+ {
+ continue;
+ }
+ result = platforms[i]->dispatch->clGetPlatformInfo(
+ platforms[i],
+ CL_PLATFORM_ICD_SUFFIX_KHR,
+ suffixSize,
+ suffix,
+ NULL);
+ if (CL_SUCCESS != result)
+ {
+ free(suffix);
+ continue;
+ }
+
+ // allocate a structure for the vendor
+ vendor = (KHRicdVendor*)malloc(sizeof(*vendor) );
+ if (!vendor)
+ {
+ free(suffix);
+ KHR_ICD_TRACE("failed to allocate memory\n");
+ continue;
+ }
+ memset(vendor, 0, sizeof(*vendor) );
+
+ // populate vendor data
+ vendor->library = khrIcdOsLibraryLoad(libraryName);
+ if (!vendor->library)
+ {
+ free(suffix);
+ free(vendor);
+ KHR_ICD_TRACE("failed get platform handle to library\n");
+ continue;
+ }
+ vendor->clGetExtensionFunctionAddress = p_clGetExtensionFunctionAddress;
+ vendor->platform = platforms[i];
+ vendor->suffix = suffix;
+
+ // add this vendor to the list of vendors at the tail
+ {
+ KHRicdVendor **prevNextPointer = NULL;
+ for (prevNextPointer = &khrIcdVendors; *prevNextPointer; prevNextPointer = &( (*prevNextPointer)->next) );
+ *prevNextPointer = vendor;
+ }
+
+ KHR_ICD_TRACE("successfully added vendor %s with suffix %s\n", libraryName, suffix);
+
+ }
+
+Done:
+
+ if (library)
+ {
+ khrIcdOsLibraryUnload(library);
+ }
+ if (platforms)
+ {
+ free(platforms);
+ }
+}
+
+void khrIcdContextPropertiesGetPlatform(const cl_context_properties *properties, cl_platform_id *outPlatform)
+{
+ if (properties == NULL && khrIcdVendors != NULL)
+ {
+ *outPlatform = khrIcdVendors[0].platform;
+ }
+ else
+ {
+ const cl_context_properties *property = (cl_context_properties *)NULL;
+ *outPlatform = NULL;
+ for (property = properties; property && property[0]; property += 2)
+ {
+ if ((cl_context_properties)CL_CONTEXT_PLATFORM == property[0])
+ {
+ *outPlatform = (cl_platform_id)property[1];
+ }
+ }
+ }
+}
+
--- /dev/null
+/*
+ * Copyright (c) 2016-2019 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.
+ */
+
+#ifndef _ICD_H_
+#define _ICD_H_
+
+#ifndef CL_USE_DEPRECATED_OPENCL_1_0_APIS
+#define CL_USE_DEPRECATED_OPENCL_1_0_APIS
+#endif
+
+#ifndef CL_USE_DEPRECATED_OPENCL_1_1_APIS
+#define CL_USE_DEPRECATED_OPENCL_1_1_APIS
+#endif
+
+#ifndef CL_USE_DEPRECATED_OPENCL_1_2_APIS
+#define CL_USE_DEPRECATED_OPENCL_1_2_APIS
+#endif
+
+#include <CL/cl.h>
+#include <CL/cl_ext.h>
+
+#ifdef _WIN32
+#include <tchar.h>
+#endif
+
+/*
+ * type definitions
+ */
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *pfn_clIcdGetPlatformIDs)(
+ cl_uint num_entries,
+ cl_platform_id *platforms,
+ cl_uint *num_platforms) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *pfn_clGetPlatformInfo)(
+ cl_platform_id platform,
+ cl_platform_info param_name,
+ size_t param_value_size,
+ void * param_value,
+ size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY void *(CL_API_CALL *pfn_clGetExtensionFunctionAddress)(
+ const char *function_name) CL_API_SUFFIX__VERSION_1_0;
+
+typedef struct KHRicdVendorRec KHRicdVendor;
+
+/*
+ * KHRicdVendor
+ *
+ * Data for a single ICD vendor platform.
+ */
+struct KHRicdVendorRec
+{
+ // the loaded library object (true type varies on Linux versus Windows)
+ void *library;
+
+ // the extension suffix for this platform
+ char *suffix;
+
+ // function pointer to the ICD platform IDs extracted from the library
+ pfn_clGetExtensionFunctionAddress clGetExtensionFunctionAddress;
+
+ // the platform retrieved from clGetIcdPlatformIDsKHR
+ cl_platform_id platform;
+
+ // next vendor in the list vendors
+ KHRicdVendor *next;
+};
+
+// the global state
+extern KHRicdVendor * khrIcdVendors;
+
+/*
+ * khrIcd interface
+ */
+
+// read vendors from system configuration and store the data
+// loaded into khrIcdState. this will call the OS-specific
+// function khrIcdEnumerateVendors. this is called at every
+// dispatch function which may be a valid first call into the
+// API (e.g, getPlatformIDs, etc).
+void khrIcdInitialize(void);
+
+// go through the list of vendors (in /etc/OpenCL.conf or through
+// the registry) and call khrIcdVendorAdd for each vendor encountered
+// n.b, this call is OS-specific
+void khrIcdOsVendorsEnumerateOnce(void);
+
+// add a vendor's implementation to the list of libraries
+void khrIcdVendorAdd(const char *libraryName);
+
+// dynamically load a library. returns NULL on failure
+// n.b, this call is OS-specific
+void *khrIcdOsLibraryLoad(const char *libraryName);
+
+// get a function pointer from a loaded library. returns NULL on failure.
+// n.b, this call is OS-specific
+void *khrIcdOsLibraryGetFunctionAddress(void *library, const char *functionName);
+
+// unload a library.
+// n.b, this call is OS-specific
+void khrIcdOsLibraryUnload(void *library);
+
+// parse properties and determine the platform to use from them
+void khrIcdContextPropertiesGetPlatform(
+ const cl_context_properties *properties,
+ cl_platform_id *outPlatform);
+
+// internal tracing macros
+#if 0
+ #include <stdio.h>
+ #define KHR_ICD_TRACE(...) \
+ do \
+ { \
+ fprintf(stderr, "KHR ICD trace at %s:%d: ", __FILE__, __LINE__); \
+ fprintf(stderr, __VA_ARGS__); \
+ } while (0)
+#ifdef _WIN32
+#define KHR_ICD_WIDE_TRACE(...) \
+ do \
+ { \
+ fwprintf(stderr, L"KHR ICD trace at %hs:%d: ", __FILE__, __LINE__); \
+ fwprintf(stderr, __VA_ARGS__); \
+ } while (0)
+#else
+#define KHR_ICD_WIDE_TRACE(...)
+#endif
+ #define KHR_ICD_ASSERT(x) \
+ do \
+ { \
+ if (!(x)) \
+ { \
+ fprintf(stderr, "KHR ICD assert at %s:%d: %s failed", __FILE__, __LINE__, #x); \
+ } \
+ } while (0)
+#else
+ #define KHR_ICD_TRACE(...)
+ #define KHR_ICD_WIDE_TRACE(...)
+ #define KHR_ICD_ASSERT(x)
+#endif
+
+// if handle is NULL then return invalid_handle_error_code
+#define KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(handle,invalid_handle_error_code) \
+ do \
+ { \
+ if (!handle) \
+ { \
+ return invalid_handle_error_code; \
+ } \
+ } while (0)
+
+// if handle is NULL then set errcode_ret to invalid_handle_error and return NULL
+// (NULL being an invalid handle)
+#define KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(handle,invalid_handle_error) \
+ do \
+ { \
+ if (!handle) \
+ { \
+ if (errcode_ret) \
+ { \
+ *errcode_ret = invalid_handle_error; \
+ } \
+ return NULL; \
+ } \
+ } while (0)
+
+
+#endif
+
--- /dev/null
+/*
+ * Copyright (c) 2012-2019 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_dispatch.h"
+#include "icd.h"
+#include <stdlib.h>
+#include <string.h>
+
+// Platform APIs
+CL_API_ENTRY cl_int CL_API_CALL
+clGetPlatformIDs(cl_uint num_entries,
+ cl_platform_id * platforms,
+ cl_uint * num_platforms) CL_API_SUFFIX__VERSION_1_0
+{
+ KHRicdVendor* vendor = NULL;
+ cl_uint i;
+
+ // initialize the platforms (in case they have not been already)
+ khrIcdInitialize();
+
+ if (!num_entries && platforms)
+ {
+ return CL_INVALID_VALUE;
+ }
+ if (!platforms && !num_platforms)
+ {
+ return CL_INVALID_VALUE;
+ }
+ // set num_platforms to 0 and set all platform pointers to NULL
+ if (num_platforms)
+ {
+ *num_platforms = 0;
+ }
+ for (i = 0; i < num_entries && platforms; ++i)
+ {
+ platforms[i] = NULL;
+ }
+ // return error if we have no platforms
+ if (!khrIcdVendors)
+ {
+ return CL_PLATFORM_NOT_FOUND_KHR;
+ }
+ // otherwise enumerate all platforms
+ for (vendor = khrIcdVendors; vendor; vendor = vendor->next)
+ {
+ if (num_entries && platforms)
+ {
+ *(platforms++) = vendor->platform;
+ --num_entries;
+ }
+ if (num_platforms)
+ {
+ ++(*num_platforms);
+ }
+ }
+ return CL_SUCCESS;
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clGetPlatformInfo(cl_platform_id platform,
+ cl_platform_info param_name,
+ size_t param_value_size,
+ void * param_value,
+ size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
+{
+ // initialize the platforms (in case they have not been already)
+ khrIcdInitialize();
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(platform, CL_INVALID_PLATFORM);
+ return platform->dispatch->clGetPlatformInfo(
+ platform,
+ param_name,
+ param_value_size,
+ param_value,
+ param_value_size_ret);
+}
+
+// Device APIs
+CL_API_ENTRY cl_int CL_API_CALL
+clGetDeviceIDs(cl_platform_id platform,
+ cl_device_type device_type,
+ cl_uint num_entries,
+ cl_device_id * devices,
+ cl_uint * num_devices) CL_API_SUFFIX__VERSION_1_0
+{
+ // initialize the platforms (in case they have not been already)
+ khrIcdInitialize();
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(platform, CL_INVALID_PLATFORM);
+ return platform->dispatch->clGetDeviceIDs(
+ platform,
+ device_type,
+ num_entries,
+ devices,
+ num_devices);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clGetDeviceInfo(
+ cl_device_id device,
+ cl_device_info param_name,
+ size_t param_value_size,
+ void * param_value,
+ size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
+ return device->dispatch->clGetDeviceInfo(
+ device,
+ param_name,
+ param_value_size,
+ param_value,
+ param_value_size_ret);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clCreateSubDevices(cl_device_id in_device,
+ const cl_device_partition_property * properties,
+ cl_uint num_entries,
+ cl_device_id * out_devices,
+ cl_uint * num_devices) CL_API_SUFFIX__VERSION_1_2
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(in_device, CL_INVALID_DEVICE);
+ return in_device->dispatch->clCreateSubDevices(
+ in_device,
+ properties,
+ num_entries,
+ out_devices,
+ num_devices);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clRetainDevice(cl_device_id device) CL_API_SUFFIX__VERSION_1_2
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
+ return device->dispatch->clRetainDevice(device);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clReleaseDevice(cl_device_id device) CL_API_SUFFIX__VERSION_1_2
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
+ return device->dispatch->clReleaseDevice(device);
+}
+
+// Context APIs
+CL_API_ENTRY cl_context CL_API_CALL
+clCreateContext(const cl_context_properties * properties,
+ cl_uint num_devices,
+ const cl_device_id * devices,
+ void (CL_CALLBACK *pfn_notify)(const char *, const void *, size_t, void *),
+ void * user_data,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
+{
+ // initialize the platforms (in case they have not been already)
+ khrIcdInitialize();
+ if (!num_devices || !devices)
+ {
+ if (errcode_ret)
+ {
+ *errcode_ret = CL_INVALID_VALUE;
+ }
+ return NULL;
+ }
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(devices[0], CL_INVALID_DEVICE);
+ return devices[0]->dispatch->clCreateContext(
+ properties,
+ num_devices,
+ devices,
+ pfn_notify,
+ user_data,
+ errcode_ret);
+}
+
+CL_API_ENTRY cl_context CL_API_CALL
+clCreateContextFromType(const cl_context_properties * properties,
+ cl_device_type device_type,
+ void (CL_CALLBACK *pfn_notify)(const char *, const void *, size_t, void *),
+ void * user_data,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
+{
+ cl_platform_id platform = NULL;
+
+ // initialize the platforms (in case they have not been already)
+ khrIcdInitialize();
+
+ // determine the platform to use from the properties specified
+ khrIcdContextPropertiesGetPlatform(properties, &platform);
+
+ // validate the platform handle and dispatch
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(platform, CL_INVALID_PLATFORM);
+ return platform->dispatch->clCreateContextFromType(
+ properties,
+ device_type,
+ pfn_notify,
+ user_data,
+ errcode_ret);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clRetainContext(cl_context context) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clRetainContext(context);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clReleaseContext(cl_context context) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clReleaseContext(context);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clGetContextInfo(cl_context context,
+ cl_context_info param_name,
+ size_t param_value_size,
+ void * param_value,
+ size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clGetContextInfo(
+ context,
+ param_name,
+ param_value_size,
+ param_value,
+ param_value_size_ret);
+}
+
+// Command Queue APIs
+CL_API_ENTRY cl_command_queue CL_API_CALL
+clCreateCommandQueue(cl_context context,
+ cl_device_id device,
+ cl_command_queue_properties properties,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clCreateCommandQueue(
+ context,
+ device,
+ properties,
+ errcode_ret);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clRetainCommandQueue(cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clRetainCommandQueue(command_queue);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clReleaseCommandQueue(cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clReleaseCommandQueue(command_queue);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clGetCommandQueueInfo(cl_command_queue command_queue,
+ cl_command_queue_info param_name,
+ size_t param_value_size,
+ void * param_value,
+ size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clGetCommandQueueInfo(
+ command_queue,
+ param_name,
+ param_value_size,
+ param_value,
+ param_value_size_ret);
+}
+
+// Memory Object APIs
+CL_API_ENTRY cl_mem CL_API_CALL
+clCreateBuffer(cl_context context,
+ cl_mem_flags flags,
+ size_t size,
+ void * host_ptr,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clCreateBuffer(
+ context,
+ flags,
+ size,
+ host_ptr,
+ errcode_ret);
+}
+
+CL_API_ENTRY cl_mem CL_API_CALL
+clCreateImage(cl_context context,
+ cl_mem_flags flags,
+ const cl_image_format * image_format,
+ const cl_image_desc * image_desc,
+ void * host_ptr,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clCreateImage(
+ context,
+ flags,
+ image_format,
+ image_desc,
+ host_ptr,
+ errcode_ret);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clRetainMemObject(cl_mem memobj) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(memobj, CL_INVALID_MEM_OBJECT);
+ return memobj->dispatch->clRetainMemObject(memobj);
+}
+
+
+CL_API_ENTRY cl_int CL_API_CALL
+clReleaseMemObject(cl_mem memobj) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(memobj, CL_INVALID_MEM_OBJECT);
+ return memobj->dispatch->clReleaseMemObject(memobj);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clGetSupportedImageFormats(cl_context context,
+ cl_mem_flags flags,
+ cl_mem_object_type image_type,
+ cl_uint num_entries,
+ cl_image_format * image_formats,
+ cl_uint * num_image_formats) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clGetSupportedImageFormats(
+ context,
+ flags,
+ image_type,
+ num_entries,
+ image_formats,
+ num_image_formats);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clGetMemObjectInfo(cl_mem memobj,
+ cl_mem_info param_name,
+ size_t param_value_size,
+ void * param_value,
+ size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(memobj, CL_INVALID_MEM_OBJECT);
+ return memobj->dispatch->clGetMemObjectInfo(
+ memobj,
+ param_name,
+ param_value_size,
+ param_value,
+ param_value_size_ret);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clGetImageInfo(cl_mem image,
+ cl_image_info param_name,
+ size_t param_value_size,
+ void * param_value,
+ size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(image, CL_INVALID_MEM_OBJECT);
+ return image->dispatch->clGetImageInfo(
+ image,
+ param_name,
+ param_value_size,
+ param_value,
+ param_value_size_ret);
+}
+
+// Sampler APIs
+CL_API_ENTRY cl_sampler CL_API_CALL
+clCreateSampler(cl_context context,
+ cl_bool normalized_coords,
+ cl_addressing_mode addressing_mode,
+ cl_filter_mode filter_mode,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clCreateSampler(
+ context,
+ normalized_coords,
+ addressing_mode,
+ filter_mode,
+ errcode_ret);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clRetainSampler(cl_sampler sampler) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(sampler, CL_INVALID_SAMPLER);
+ return sampler->dispatch->clRetainSampler(sampler);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clReleaseSampler(cl_sampler sampler) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(sampler, CL_INVALID_SAMPLER);
+ return sampler->dispatch->clReleaseSampler(sampler);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clGetSamplerInfo(cl_sampler sampler,
+ cl_sampler_info param_name,
+ size_t param_value_size,
+ void * param_value,
+ size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(sampler, CL_INVALID_SAMPLER);
+ return sampler->dispatch->clGetSamplerInfo(
+ sampler,
+ param_name,
+ param_value_size,
+ param_value,
+ param_value_size_ret);
+}
+
+// Program Object APIs
+CL_API_ENTRY cl_program CL_API_CALL
+clCreateProgramWithSource(cl_context context,
+ cl_uint count,
+ const char ** strings,
+ const size_t * lengths,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clCreateProgramWithSource(
+ context,
+ count,
+ strings,
+ lengths,
+ errcode_ret);
+}
+
+CL_API_ENTRY cl_program CL_API_CALL
+clCreateProgramWithBinary(cl_context context,
+ cl_uint num_devices,
+ const cl_device_id * device_list,
+ const size_t * lengths,
+ const unsigned char ** binaries,
+ cl_int * binary_status,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clCreateProgramWithBinary(
+ context,
+ num_devices,
+ device_list,
+ lengths,
+ binaries,
+ binary_status,
+ errcode_ret);
+}
+
+CL_API_ENTRY cl_program CL_API_CALL
+clCreateProgramWithBuiltInKernels(cl_context context,
+ cl_uint num_devices,
+ const cl_device_id * device_list,
+ const char * kernel_names,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clCreateProgramWithBuiltInKernels(
+ context,
+ num_devices,
+ device_list,
+ kernel_names,
+ errcode_ret);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clRetainProgram(cl_program program) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
+ return program->dispatch->clRetainProgram(program);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clReleaseProgram(cl_program program) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
+ return program->dispatch->clReleaseProgram(program);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clBuildProgram(cl_program program,
+ cl_uint num_devices,
+ const cl_device_id * device_list,
+ const char * options,
+ void (CL_CALLBACK *pfn_notify)(cl_program program, void * user_data),
+ void * user_data) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
+ return program->dispatch->clBuildProgram(
+ program,
+ num_devices,
+ device_list,
+ options,
+ pfn_notify,
+ user_data);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clCompileProgram(cl_program program,
+ cl_uint num_devices,
+ const cl_device_id * device_list,
+ const char * options,
+ cl_uint num_input_headers,
+ const cl_program * input_headers,
+ const char ** header_include_names,
+ void (CL_CALLBACK * pfn_notify)(cl_program program, void * user_data),
+ void * user_data) CL_API_SUFFIX__VERSION_1_2
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
+ return program->dispatch->clCompileProgram(
+ program,
+ num_devices,
+ device_list,
+ options,
+ num_input_headers,
+ input_headers,
+ header_include_names,
+ pfn_notify,
+ user_data);
+}
+
+CL_API_ENTRY cl_program CL_API_CALL
+clLinkProgram(cl_context context,
+ cl_uint num_devices,
+ const cl_device_id * device_list,
+ const char * options,
+ cl_uint num_input_programs,
+ const cl_program * input_programs,
+ void (CL_CALLBACK * pfn_notify)(cl_program program, void * user_data),
+ void * user_data,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clLinkProgram(
+ context,
+ num_devices,
+ device_list,
+ options,
+ num_input_programs,
+ input_programs,
+ pfn_notify,
+ user_data,
+ errcode_ret);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clSetProgramSpecializationConstant(cl_program program,
+ cl_uint spec_id,
+ size_t spec_size,
+ const void* spec_value) CL_API_SUFFIX__VERSION_2_2
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
+ return program->dispatch->clSetProgramSpecializationConstant(
+ program,
+ spec_id,
+ spec_size,
+ spec_value);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clSetProgramReleaseCallback(cl_program program,
+ void (CL_CALLBACK * pfn_notify)(cl_program program, void * user_data),
+ void * user_data) CL_API_SUFFIX__VERSION_2_2
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
+ return program->dispatch->clSetProgramReleaseCallback(
+ program,
+ pfn_notify,
+ user_data);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clUnloadPlatformCompiler(cl_platform_id platform) CL_API_SUFFIX__VERSION_1_2
+{
+ // initialize the platforms (in case they have not been already)
+ khrIcdInitialize();
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(platform, CL_INVALID_PLATFORM);
+ return platform->dispatch->clUnloadPlatformCompiler(platform);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clGetProgramInfo(cl_program program,
+ cl_program_info param_name,
+ size_t param_value_size,
+ void * param_value,
+ size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
+ return program->dispatch->clGetProgramInfo(
+ program,
+ param_name,
+ param_value_size,
+ param_value,
+ param_value_size_ret);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clGetProgramBuildInfo(cl_program program,
+ cl_device_id device,
+ cl_program_build_info param_name,
+ size_t param_value_size,
+ void * param_value,
+ size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
+ return program->dispatch->clGetProgramBuildInfo(
+ program,
+ device,
+ param_name,
+ param_value_size,
+ param_value,
+ param_value_size_ret);
+}
+
+// Kernel Object APIs
+CL_API_ENTRY cl_kernel CL_API_CALL
+clCreateKernel(cl_program program,
+ const char * kernel_name,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(program, CL_INVALID_PROGRAM);
+ return program->dispatch->clCreateKernel(
+ program,
+ kernel_name,
+ errcode_ret);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clCreateKernelsInProgram(cl_program program,
+ cl_uint num_kernels,
+ cl_kernel * kernels,
+ cl_uint * num_kernels_ret) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
+ return program->dispatch->clCreateKernelsInProgram(
+ program,
+ num_kernels,
+ kernels,
+ num_kernels_ret);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clRetainKernel(cl_kernel kernel) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
+ return kernel->dispatch->clRetainKernel(kernel);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clReleaseKernel(cl_kernel kernel) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
+ return kernel->dispatch->clReleaseKernel(kernel);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clSetKernelArg(cl_kernel kernel,
+ cl_uint arg_index,
+ size_t arg_size,
+ const void * arg_value) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
+ return kernel->dispatch->clSetKernelArg(
+ kernel,
+ arg_index,
+ arg_size,
+ arg_value);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clGetKernelInfo(cl_kernel kernel,
+ cl_kernel_info param_name,
+ size_t param_value_size,
+ void * param_value,
+ size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
+ return kernel->dispatch->clGetKernelInfo(
+ kernel,
+ param_name,
+ param_value_size,
+ param_value,
+ param_value_size_ret);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clGetKernelArgInfo(cl_kernel kernel,
+ cl_uint arg_indx,
+ cl_kernel_arg_info param_name,
+ size_t param_value_size,
+ void * param_value,
+ size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_2
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
+ return kernel->dispatch->clGetKernelArgInfo(
+ kernel,
+ arg_indx,
+ param_name,
+ param_value_size,
+ param_value,
+ param_value_size_ret);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clGetKernelWorkGroupInfo(cl_kernel kernel,
+ cl_device_id device,
+ cl_kernel_work_group_info param_name,
+ size_t param_value_size,
+ void * param_value,
+ size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
+ return kernel->dispatch->clGetKernelWorkGroupInfo(
+ kernel,
+ device,
+ param_name,
+ param_value_size,
+ param_value,
+ param_value_size_ret);
+}
+
+// Event Object APIs
+CL_API_ENTRY cl_int CL_API_CALL
+clWaitForEvents(cl_uint num_events,
+ const cl_event * event_list) CL_API_SUFFIX__VERSION_1_0
+{
+ if (!num_events || !event_list)
+ {
+ return CL_INVALID_VALUE;
+ }
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(event_list[0], CL_INVALID_EVENT);
+ return event_list[0]->dispatch->clWaitForEvents(
+ num_events,
+ event_list);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clGetEventInfo(cl_event event,
+ cl_event_info param_name,
+ size_t param_value_size,
+ void * param_value,
+ size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(event, CL_INVALID_EVENT);
+ return event->dispatch->clGetEventInfo(
+ event,
+ param_name,
+ param_value_size,
+ param_value,
+ param_value_size_ret);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clRetainEvent(cl_event event) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(event, CL_INVALID_EVENT);
+ return event->dispatch->clRetainEvent(event);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clReleaseEvent(cl_event event) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(event, CL_INVALID_EVENT);
+ return event->dispatch->clReleaseEvent(event);
+}
+
+// Profiling APIs
+CL_API_ENTRY cl_int CL_API_CALL
+clGetEventProfilingInfo(cl_event event,
+ cl_profiling_info param_name,
+ size_t param_value_size,
+ void * param_value,
+ size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(event, CL_INVALID_EVENT);
+ return event->dispatch->clGetEventProfilingInfo(
+ event,
+ param_name,
+ param_value_size,
+ param_value,
+ param_value_size_ret);
+}
+
+// Flush and Finish APIs
+CL_API_ENTRY cl_int CL_API_CALL
+clFlush(cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clFlush(command_queue);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clFinish(cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clFinish(command_queue);
+}
+
+// Enqueued Commands APIs
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueReadBuffer(cl_command_queue command_queue,
+ cl_mem buffer,
+ cl_bool blocking_read,
+ size_t offset,
+ size_t cb,
+ void * ptr,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueReadBuffer(
+ command_queue,
+ buffer,
+ blocking_read,
+ offset,
+ cb,
+ ptr,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueReadBufferRect(
+ cl_command_queue command_queue,
+ cl_mem buffer,
+ cl_bool blocking_read,
+ const size_t * buffer_origin,
+ const size_t * host_origin,
+ const size_t * region,
+ size_t buffer_row_pitch,
+ size_t buffer_slice_pitch,
+ size_t host_row_pitch,
+ size_t host_slice_pitch,
+ void * ptr,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_1
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueReadBufferRect(
+ command_queue,
+ buffer,
+ blocking_read,
+ buffer_origin,
+ host_origin,
+ region,
+ buffer_row_pitch,
+ buffer_slice_pitch,
+ host_row_pitch,
+ host_slice_pitch,
+ ptr,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueWriteBuffer(cl_command_queue command_queue,
+ cl_mem buffer,
+ cl_bool blocking_write,
+ size_t offset,
+ size_t cb,
+ const void * ptr,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueWriteBuffer(
+ command_queue,
+ buffer,
+ blocking_write,
+ offset,
+ cb,
+ ptr,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueWriteBufferRect(
+ cl_command_queue command_queue,
+ cl_mem buffer,
+ cl_bool blocking_read,
+ const size_t * buffer_origin,
+ const size_t * host_origin,
+ const size_t * region,
+ size_t buffer_row_pitch,
+ size_t buffer_slice_pitch,
+ size_t host_row_pitch,
+ size_t host_slice_pitch,
+ const void * ptr,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_1
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueWriteBufferRect(
+ command_queue,
+ buffer,
+ blocking_read,
+ buffer_origin,
+ host_origin,
+ region,
+ buffer_row_pitch,
+ buffer_slice_pitch,
+ host_row_pitch,
+ host_slice_pitch,
+ ptr,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueFillBuffer(cl_command_queue command_queue,
+ cl_mem buffer,
+ const void * pattern,
+ size_t pattern_size,
+ size_t offset,
+ size_t cb,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_2
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueFillBuffer(
+ command_queue,
+ buffer,
+ pattern,
+ pattern_size,
+ offset,
+ cb,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueCopyBuffer(cl_command_queue command_queue,
+ cl_mem src_buffer,
+ cl_mem dst_buffer,
+ size_t src_offset,
+ size_t dst_offset,
+ size_t cb,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueCopyBuffer(
+ command_queue,
+ src_buffer,
+ dst_buffer,
+ src_offset,
+ dst_offset,
+ cb,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueCopyBufferRect(
+ cl_command_queue command_queue,
+ cl_mem src_buffer,
+ cl_mem dst_buffer,
+ const size_t * src_origin,
+ const size_t * dst_origin,
+ const size_t * region,
+ size_t src_row_pitch,
+ size_t src_slice_pitch,
+ size_t dst_row_pitch,
+ size_t dst_slice_pitch,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_1
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueCopyBufferRect(
+ command_queue,
+ src_buffer,
+ dst_buffer,
+ src_origin,
+ dst_origin,
+ region,
+ src_row_pitch,
+ src_slice_pitch,
+ dst_row_pitch,
+ dst_slice_pitch,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueReadImage(cl_command_queue command_queue,
+ cl_mem image,
+ cl_bool blocking_read,
+ const size_t * origin,
+ const size_t * region,
+ size_t row_pitch,
+ size_t slice_pitch,
+ void * ptr,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueReadImage(
+ command_queue,
+ image,
+ blocking_read,
+ origin,
+ region,
+ row_pitch,
+ slice_pitch,
+ ptr,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueWriteImage(cl_command_queue command_queue,
+ cl_mem image,
+ cl_bool blocking_write,
+ const size_t * origin,
+ const size_t * region,
+ size_t input_row_pitch,
+ size_t input_slice_pitch,
+ const void * ptr,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueWriteImage(
+ command_queue,
+ image,
+ blocking_write,
+ origin,
+ region,
+ input_row_pitch,
+ input_slice_pitch,
+ ptr,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueFillImage(cl_command_queue command_queue,
+ cl_mem image,
+ const void * fill_color,
+ const size_t origin[3],
+ const size_t region[3],
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_2
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueFillImage(
+ command_queue,
+ image,
+ fill_color,
+ origin,
+ region,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueCopyImage(cl_command_queue command_queue,
+ cl_mem src_image,
+ cl_mem dst_image,
+ const size_t * src_origin,
+ const size_t * dst_origin,
+ const size_t * region,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueCopyImage(
+ command_queue,
+ src_image,
+ dst_image,
+ src_origin,
+ dst_origin,
+ region,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueCopyImageToBuffer(cl_command_queue command_queue,
+ cl_mem src_image,
+ cl_mem dst_buffer,
+ const size_t * src_origin,
+ const size_t * region,
+ size_t dst_offset,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueCopyImageToBuffer(
+ command_queue,
+ src_image,
+ dst_buffer,
+ src_origin,
+ region,
+ dst_offset,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueCopyBufferToImage(cl_command_queue command_queue,
+ cl_mem src_buffer,
+ cl_mem dst_image,
+ size_t src_offset,
+ const size_t * dst_origin,
+ const size_t * region,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueCopyBufferToImage(
+ command_queue,
+ src_buffer,
+ dst_image,
+ src_offset,
+ dst_origin,
+ region,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+CL_API_ENTRY void * CL_API_CALL
+clEnqueueMapBuffer(cl_command_queue command_queue,
+ cl_mem buffer,
+ cl_bool blocking_map,
+ cl_map_flags map_flags,
+ size_t offset,
+ size_t cb,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueMapBuffer(
+ command_queue,
+ buffer,
+ blocking_map,
+ map_flags,
+ offset,
+ cb,
+ num_events_in_wait_list,
+ event_wait_list,
+ event,
+ errcode_ret);
+}
+
+CL_API_ENTRY void * CL_API_CALL
+clEnqueueMapImage(cl_command_queue command_queue,
+ cl_mem image,
+ cl_bool blocking_map,
+ cl_map_flags map_flags,
+ const size_t * origin,
+ const size_t * region,
+ size_t * image_row_pitch,
+ size_t * image_slice_pitch,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueMapImage(
+ command_queue,
+ image,
+ blocking_map,
+ map_flags,
+ origin,
+ region,
+ image_row_pitch,
+ image_slice_pitch,
+ num_events_in_wait_list,
+ event_wait_list,
+ event,
+ errcode_ret);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueUnmapMemObject(cl_command_queue command_queue,
+ cl_mem memobj,
+ void * mapped_ptr,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueUnmapMemObject(
+ command_queue,
+ memobj,
+ mapped_ptr,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueMigrateMemObjects(cl_command_queue command_queue,
+ cl_uint num_mem_objects,
+ const cl_mem * mem_objects,
+ cl_mem_migration_flags flags,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_2
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueMigrateMemObjects(
+ command_queue,
+ num_mem_objects,
+ mem_objects,
+ flags,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueNDRangeKernel(cl_command_queue command_queue,
+ cl_kernel kernel,
+ cl_uint work_dim,
+ const size_t * global_work_offset,
+ const size_t * global_work_size,
+ const size_t * local_work_size,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueNDRangeKernel(
+ command_queue,
+ kernel,
+ work_dim,
+ global_work_offset,
+ global_work_size,
+ local_work_size,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueTask(cl_command_queue command_queue,
+ cl_kernel kernel,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueTask(
+ command_queue,
+ kernel,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueNativeKernel(cl_command_queue command_queue,
+ void (CL_CALLBACK * user_func)(void *),
+ void * args,
+ size_t cb_args,
+ cl_uint num_mem_objects,
+ const cl_mem * mem_list,
+ const void ** args_mem_loc,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueNativeKernel(
+ command_queue,
+ user_func,
+ args,
+ cb_args,
+ num_mem_objects,
+ mem_list,
+ args_mem_loc,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueMarkerWithWaitList(cl_command_queue command_queue,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_2
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueMarkerWithWaitList(
+ command_queue,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueBarrierWithWaitList(cl_command_queue command_queue,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_2
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueBarrierWithWaitList(
+ command_queue,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+CL_API_ENTRY void * CL_API_CALL
+clGetExtensionFunctionAddressForPlatform(cl_platform_id platform,
+ const char * function_name) CL_API_SUFFIX__VERSION_1_2
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(function_name, NULL);
+
+ // make sure the ICD is initialized
+ khrIcdInitialize();
+
+ // return any ICD-aware extensions
+
+ // Most extensions, including multi-vendor KHR and EXT extensions,
+ // do not need to be ICD-aware and do not require any ICD loader
+ // modifications. The KHR and EXT extensions below were added for
+ // backwards compatibility only.
+ #define CL_COMMON_EXTENSION_ENTRYPOINT_ADD(name) if (!strcmp(function_name, #name) ) return (void *)(size_t)&name
+
+ // Functions supporting the creation of OpenCL Memory Objects
+ // from OpenGL Objects (cl_apple_gl_sharing, cl_khr_gl_sharing)
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLBuffer);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLTexture);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLTexture2D);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLTexture3D);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLRenderbuffer);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetGLObjectInfo);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetGLTextureInfo);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireGLObjects);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseGLObjects);
+
+ // cl_khr_gl_sharing
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetGLContextInfoKHR);
+
+ // cl_khr_gl_event
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateEventFromGLsyncKHR);
+
+#if defined(_WIN32)
+ // cl_khr_d3d10_sharing
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetDeviceIDsFromD3D10KHR);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D10BufferKHR);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D10Texture2DKHR);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D10Texture3DKHR);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireD3D10ObjectsKHR);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseD3D10ObjectsKHR);
+ // cl_khr_d3d11_sharing
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetDeviceIDsFromD3D11KHR);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D11BufferKHR);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D11Texture2DKHR);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D11Texture3DKHR);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireD3D11ObjectsKHR);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseD3D11ObjectsKHR);
+ // cl_khr_dx9_media_sharing
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetDeviceIDsFromDX9MediaAdapterKHR);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromDX9MediaSurfaceKHR);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireDX9MediaSurfacesKHR);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseDX9MediaSurfacesKHR);
+#endif
+
+ // cl_ext_device_fission
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateSubDevicesEXT);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clRetainDeviceEXT);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clReleaseDeviceEXT);
+
+ /* cl_khr_egl_image */
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromEGLImageKHR);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireEGLObjectsKHR);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseEGLObjectsKHR);
+
+ /* cl_khr_egl_event */
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateEventFromEGLSyncKHR);
+
+ /* cl_khr_sub_groups */
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetKernelSubGroupInfoKHR);
+
+ #undef CL_COMMON_EXTENSION_ENTRYPOINT_ADD
+
+ // This is not an ICD-aware extension, so call into the implementation
+ // to get the extension function address.
+
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(platform, NULL);
+ return platform->dispatch->clGetExtensionFunctionAddressForPlatform(
+ platform,
+ function_name);
+}
+
+// Deprecated APIs
+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) CL_EXT_SUFFIX__VERSION_1_0_DEPRECATED
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clSetCommandQueueProperty(
+ command_queue,
+ properties,
+ enable,
+ old_properties);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clCreateSubDevicesEXT(
+ cl_device_id in_device,
+ const cl_device_partition_property_ext * partition_properties,
+ cl_uint num_entries,
+ cl_device_id * out_devices,
+ cl_uint * num_devices) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(in_device, CL_INVALID_DEVICE);
+ return in_device->dispatch->clCreateSubDevicesEXT(
+ in_device,
+ partition_properties,
+ num_entries,
+ out_devices,
+ num_devices);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clRetainDeviceEXT(cl_device_id device) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
+ return device->dispatch->clRetainDeviceEXT(device);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clReleaseDeviceEXT(cl_device_id device) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
+ return device->dispatch->clReleaseDeviceEXT(device);
+}
+
+CL_API_ENTRY cl_mem CL_API_CALL
+clCreateImage2D(cl_context context,
+ cl_mem_flags flags,
+ const cl_image_format * image_format,
+ size_t image_width,
+ size_t image_height,
+ size_t image_row_pitch,
+ void * host_ptr,
+ cl_int * errcode_ret) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clCreateImage2D(
+ context,
+ flags,
+ image_format,
+ image_width,
+ image_height,
+ image_row_pitch,
+ host_ptr,
+ errcode_ret);
+}
+
+CL_API_ENTRY cl_mem CL_API_CALL
+clCreateImage3D(cl_context context,
+ cl_mem_flags flags,
+ const cl_image_format * image_format,
+ size_t image_width,
+ size_t image_height,
+ size_t image_depth,
+ size_t image_row_pitch,
+ size_t image_slice_pitch,
+ void * host_ptr,
+ cl_int * errcode_ret) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clCreateImage3D(
+ context,
+ flags,
+ image_format,
+ image_width,
+ image_height,
+ image_depth,
+ image_row_pitch,
+ image_slice_pitch,
+ host_ptr,
+ errcode_ret);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clUnloadCompiler(void) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
+{
+ return CL_SUCCESS;
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueMarker(cl_command_queue command_queue,
+ cl_event * event) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueMarker(
+ command_queue,
+ event);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueWaitForEvents(cl_command_queue command_queue,
+ cl_uint num_events,
+ const cl_event * event_list) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueWaitForEvents(
+ command_queue,
+ num_events,
+ event_list);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueBarrier(cl_command_queue command_queue) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueBarrier(command_queue);
+}
+
+CL_API_ENTRY void * CL_API_CALL
+clGetExtensionFunctionAddress(const char *function_name) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
+{
+ size_t function_name_length = 0;
+ KHRicdVendor* vendor = NULL;
+
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(function_name, NULL);
+
+ // make sure the ICD is initialized
+ khrIcdInitialize();
+ function_name_length = strlen(function_name);
+
+ // return any ICD-aware extensions
+
+ // Most extensions, including multi-vendor KHR and EXT extensions,
+ // do not need to be ICD-aware and do not require any ICD loader
+ // modifications. The KHR and EXT extensions below were added for
+ // backwards compatibility only.
+ #define CL_COMMON_EXTENSION_ENTRYPOINT_ADD(name) if (!strcmp(function_name, #name) ) return (void *)(size_t)&name
+
+ // Functions supporting the creation of OpenCL Memory Objects
+ // from OpenGL Objects (cl_apple_gl_sharing, cl_khr_gl_sharing)
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLBuffer);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLTexture);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLTexture2D);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLTexture3D);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromGLRenderbuffer);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetGLObjectInfo);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetGLTextureInfo);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireGLObjects);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseGLObjects);
+
+ // cl_khr_gl_sharing
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetGLContextInfoKHR);
+
+ // cl_khr_gl_event
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateEventFromGLsyncKHR);
+
+#if defined(_WIN32)
+ // cl_khr_d3d10_sharing
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetDeviceIDsFromD3D10KHR);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D10BufferKHR);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D10Texture2DKHR);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D10Texture3DKHR);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireD3D10ObjectsKHR);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseD3D10ObjectsKHR);
+ // cl_khr_d3d11_sharing
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetDeviceIDsFromD3D11KHR);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D11BufferKHR);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D11Texture2DKHR);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromD3D11Texture3DKHR);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireD3D11ObjectsKHR);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseD3D11ObjectsKHR);
+ // cl_khr_dx9_media_sharing
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetDeviceIDsFromDX9MediaAdapterKHR);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromDX9MediaSurfaceKHR);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireDX9MediaSurfacesKHR);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseDX9MediaSurfacesKHR);
+#endif
+
+ // cl_ext_device_fission
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateSubDevicesEXT);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clRetainDeviceEXT);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clReleaseDeviceEXT);
+
+ /* cl_khr_egl_image */
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateFromEGLImageKHR);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueAcquireEGLObjectsKHR);
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clEnqueueReleaseEGLObjectsKHR);
+
+ /* cl_khr_egl_event */
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateEventFromEGLSyncKHR);
+
+ /* cl_khr_sub_groups */
+ CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetKernelSubGroupInfoKHR);
+
+ #undef CL_COMMON_EXTENSION_ENTRYPOINT_ADD
+
+ // fall back to vendor extension detection
+ for (vendor = khrIcdVendors; vendor; vendor = vendor->next)
+ {
+ size_t vendor_suffix_length = strlen(vendor->suffix);
+ if (vendor_suffix_length <= function_name_length && vendor_suffix_length > 0)
+ {
+ const char *function_suffix = function_name+function_name_length-vendor_suffix_length;
+ if (!strcmp(function_suffix, vendor->suffix) )
+ {
+ return vendor->clGetExtensionFunctionAddress(function_name);
+ }
+ }
+ }
+ return NULL;
+}
+
+// GL and other APIs
+CL_API_ENTRY cl_mem CL_API_CALL clCreateFromGLBuffer(
+ cl_context context,
+ cl_mem_flags flags,
+ cl_GLuint bufobj,
+ int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clCreateFromGLBuffer(
+ context,
+ flags,
+ bufobj,
+ errcode_ret);
+}
+
+CL_API_ENTRY cl_mem CL_API_CALL clCreateFromGLTexture(
+ cl_context context,
+ cl_mem_flags flags,
+ cl_GLenum target,
+ cl_GLint miplevel,
+ cl_GLuint texture,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clCreateFromGLTexture(
+ context,
+ flags,
+ target,
+ miplevel,
+ texture,
+ errcode_ret);
+}
+
+CL_API_ENTRY cl_mem CL_API_CALL clCreateFromGLTexture2D(
+ cl_context context,
+ cl_mem_flags flags,
+ cl_GLenum target,
+ cl_GLint miplevel,
+ cl_GLuint texture,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clCreateFromGLTexture2D(
+ context,
+ flags,
+ target,
+ miplevel,
+ texture,
+ errcode_ret);
+}
+
+CL_API_ENTRY cl_mem CL_API_CALL clCreateFromGLTexture3D(
+ cl_context context,
+ cl_mem_flags flags,
+ cl_GLenum target,
+ cl_GLint miplevel,
+ cl_GLuint texture,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clCreateFromGLTexture3D(
+ context,
+ flags,
+ target,
+ miplevel,
+ texture,
+ errcode_ret);
+}
+
+CL_API_ENTRY cl_mem CL_API_CALL clCreateFromGLRenderbuffer(
+ cl_context context,
+ cl_mem_flags flags,
+ cl_GLuint renderbuffer,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clCreateFromGLRenderbuffer(
+ context,
+ flags,
+ renderbuffer,
+ errcode_ret);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL clGetGLObjectInfo(
+ cl_mem memobj,
+ cl_gl_object_type * gl_object_type,
+ cl_GLuint * gl_object_name) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(memobj, CL_INVALID_MEM_OBJECT);
+ return memobj->dispatch->clGetGLObjectInfo(
+ memobj,
+ gl_object_type,
+ gl_object_name);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL clGetGLTextureInfo(
+ cl_mem memobj,
+ cl_gl_texture_info param_name,
+ size_t param_value_size,
+ void * param_value,
+ size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(memobj, CL_INVALID_MEM_OBJECT);
+ return memobj->dispatch->clGetGLTextureInfo(
+ memobj,
+ param_name,
+ param_value_size,
+ param_value,
+ param_value_size_ret);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL clEnqueueAcquireGLObjects(
+ cl_command_queue command_queue,
+ cl_uint num_objects,
+ const cl_mem * mem_objects,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueAcquireGLObjects(
+ command_queue,
+ num_objects,
+ mem_objects,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL clEnqueueReleaseGLObjects(
+ cl_command_queue command_queue,
+ cl_uint num_objects,
+ const cl_mem * mem_objects,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueReleaseGLObjects(
+ command_queue,
+ num_objects,
+ mem_objects,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL clGetGLContextInfoKHR(
+ const cl_context_properties *properties,
+ cl_gl_context_info param_name,
+ size_t param_value_size,
+ void *param_value,
+ size_t *param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
+{
+ cl_platform_id platform = NULL;
+
+ // initialize the platforms (in case they have not been already)
+ khrIcdInitialize();
+
+ // determine the platform to use from the properties specified
+ khrIcdContextPropertiesGetPlatform(properties, &platform);
+
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(platform, CL_INVALID_PLATFORM);
+ return platform->dispatch->clGetGLContextInfoKHR(
+ properties,
+ param_name,
+ param_value_size,
+ param_value,
+ param_value_size_ret);
+}
+
+CL_API_ENTRY cl_event CL_API_CALL clCreateEventFromGLsyncKHR(
+ cl_context context,
+ cl_GLsync sync,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_1
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clCreateEventFromGLsyncKHR(
+ context,
+ sync,
+ errcode_ret);
+}
+
+#if defined(_WIN32)
+/*
+ *
+ * cl_d3d10_sharing_khr
+ *
+ */
+
+CL_API_ENTRY cl_int CL_API_CALL
+clGetDeviceIDsFromD3D10KHR(
+ cl_platform_id platform,
+ cl_d3d10_device_source_khr d3d_device_source,
+ void *d3d_object,
+ cl_d3d10_device_set_khr d3d_device_set,
+ cl_uint num_entries,
+ cl_device_id *devices,
+ cl_uint *num_devices)
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(platform, CL_INVALID_PLATFORM);
+ return platform->dispatch->clGetDeviceIDsFromD3D10KHR(
+ platform,
+ d3d_device_source,
+ d3d_object,
+ d3d_device_set,
+ num_entries,
+ devices,
+ num_devices);
+}
+
+CL_API_ENTRY cl_mem CL_API_CALL
+clCreateFromD3D10BufferKHR(
+ cl_context context,
+ cl_mem_flags flags,
+ ID3D10Buffer *resource,
+ cl_int *errcode_ret)
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clCreateFromD3D10BufferKHR(
+ context,
+ flags,
+ resource,
+ errcode_ret);
+}
+
+CL_API_ENTRY cl_mem CL_API_CALL
+clCreateFromD3D10Texture2DKHR(
+ cl_context context,
+ cl_mem_flags flags,
+ ID3D10Texture2D * resource,
+ UINT subresource,
+ cl_int * errcode_ret)
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clCreateFromD3D10Texture2DKHR(
+ context,
+ flags,
+ resource,
+ subresource,
+ errcode_ret);
+}
+
+CL_API_ENTRY cl_mem CL_API_CALL
+clCreateFromD3D10Texture3DKHR(
+ cl_context context,
+ cl_mem_flags flags,
+ ID3D10Texture3D *resource,
+ UINT subresource,
+ cl_int *errcode_ret)
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clCreateFromD3D10Texture3DKHR(
+ context,
+ flags,
+ resource,
+ subresource,
+ errcode_ret);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueAcquireD3D10ObjectsKHR(
+ cl_command_queue command_queue,
+ cl_uint num_objects,
+ const cl_mem *mem_objects,
+ cl_uint num_events_in_wait_list,
+ const cl_event *event_wait_list,
+ cl_event *event)
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueAcquireD3D10ObjectsKHR(
+ command_queue,
+ num_objects,
+ mem_objects,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueReleaseD3D10ObjectsKHR(
+ cl_command_queue command_queue,
+ cl_uint num_objects,
+ const cl_mem *mem_objects,
+ cl_uint num_events_in_wait_list,
+ const cl_event *event_wait_list,
+ cl_event *event)
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueReleaseD3D10ObjectsKHR(
+ command_queue,
+ num_objects,
+ mem_objects,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+/*
+ *
+ * cl_d3d11_sharing_khr
+ *
+ */
+
+CL_API_ENTRY cl_int CL_API_CALL
+clGetDeviceIDsFromD3D11KHR(
+ cl_platform_id platform,
+ cl_d3d11_device_source_khr d3d_device_source,
+ void * d3d_object,
+ cl_d3d11_device_set_khr d3d_device_set,
+ cl_uint num_entries,
+ cl_device_id * devices,
+ cl_uint * num_devices)
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(platform, CL_INVALID_PLATFORM);
+ return platform->dispatch->clGetDeviceIDsFromD3D11KHR(
+ platform,
+ d3d_device_source,
+ d3d_object,
+ d3d_device_set,
+ num_entries,
+ devices,
+ num_devices);
+}
+
+CL_API_ENTRY cl_mem CL_API_CALL
+clCreateFromD3D11BufferKHR(
+ cl_context context,
+ cl_mem_flags flags,
+ ID3D11Buffer * resource,
+ cl_int * errcode_ret)
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clCreateFromD3D11BufferKHR(
+ context,
+ flags,
+ resource,
+ errcode_ret);
+}
+
+CL_API_ENTRY cl_mem CL_API_CALL
+clCreateFromD3D11Texture2DKHR(
+ cl_context context,
+ cl_mem_flags flags,
+ ID3D11Texture2D * resource,
+ UINT subresource,
+ cl_int * errcode_ret)
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clCreateFromD3D11Texture2DKHR(
+ context,
+ flags,
+ resource,
+ subresource,
+ errcode_ret);
+}
+
+CL_API_ENTRY cl_mem CL_API_CALL
+clCreateFromD3D11Texture3DKHR(
+ cl_context context,
+ cl_mem_flags flags,
+ ID3D11Texture3D * resource,
+ UINT subresource,
+ cl_int * errcode_ret)
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clCreateFromD3D11Texture3DKHR(
+ context,
+ flags,
+ resource,
+ subresource,
+ errcode_ret);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueAcquireD3D11ObjectsKHR(
+ cl_command_queue command_queue,
+ cl_uint num_objects,
+ const cl_mem * mem_objects,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event)
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueAcquireD3D11ObjectsKHR(
+ command_queue,
+ num_objects,
+ mem_objects,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueReleaseD3D11ObjectsKHR(
+ cl_command_queue command_queue,
+ cl_uint num_objects,
+ const cl_mem * mem_objects,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event)
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueReleaseD3D11ObjectsKHR(
+ command_queue,
+ num_objects,
+ mem_objects,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+/*
+ *
+ * cl_khr_dx9_media_sharing
+ *
+ */
+
+CL_API_ENTRY cl_int CL_API_CALL
+clGetDeviceIDsFromDX9MediaAdapterKHR(
+ cl_platform_id platform,
+ cl_uint num_media_adapters,
+ cl_dx9_media_adapter_type_khr * media_adapters_type,
+ void * media_adapters,
+ cl_dx9_media_adapter_set_khr media_adapter_set,
+ cl_uint num_entries,
+ cl_device_id * devices,
+ cl_uint * num_devices)
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(platform, CL_INVALID_PLATFORM);
+ return platform->dispatch->clGetDeviceIDsFromDX9MediaAdapterKHR(
+ platform,
+ num_media_adapters,
+ media_adapters_type,
+ media_adapters,
+ media_adapter_set,
+ num_entries,
+ devices,
+ num_devices);
+}
+
+CL_API_ENTRY cl_mem CL_API_CALL
+clCreateFromDX9MediaSurfaceKHR(
+ cl_context context,
+ cl_mem_flags flags,
+ cl_dx9_media_adapter_type_khr adapter_type,
+ void * surface_info,
+ cl_uint plane,
+ cl_int * errcode_ret)
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clCreateFromDX9MediaSurfaceKHR(
+ context,
+ flags,
+ adapter_type,
+ surface_info,
+ plane,
+ errcode_ret);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueAcquireDX9MediaSurfacesKHR(
+ cl_command_queue command_queue,
+ cl_uint num_objects,
+ const cl_mem * mem_objects,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event)
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueAcquireDX9MediaSurfacesKHR(
+ command_queue,
+ num_objects,
+ mem_objects,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueReleaseDX9MediaSurfacesKHR(
+ cl_command_queue command_queue,
+ cl_uint num_objects,
+ const cl_mem * mem_objects,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event)
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueReleaseDX9MediaSurfacesKHR(
+ command_queue,
+ num_objects,
+ mem_objects,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+#endif
+
+CL_API_ENTRY cl_int CL_API_CALL
+clSetEventCallback(
+ cl_event event,
+ cl_int command_exec_callback_type,
+ void (CL_CALLBACK *pfn_notify)(cl_event, cl_int, void *),
+ void *user_data) CL_API_SUFFIX__VERSION_1_1
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(event, CL_INVALID_EVENT);
+ return event->dispatch->clSetEventCallback(
+ event,
+ command_exec_callback_type,
+ pfn_notify,
+ user_data);
+}
+
+CL_API_ENTRY cl_mem CL_API_CALL
+clCreateSubBuffer(
+ cl_mem buffer,
+ cl_mem_flags flags,
+ cl_buffer_create_type buffer_create_type,
+ const void * buffer_create_info,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_1
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(buffer, CL_INVALID_MEM_OBJECT);
+ return buffer->dispatch->clCreateSubBuffer(
+ buffer,
+ flags,
+ buffer_create_type,
+ buffer_create_info,
+ errcode_ret);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clSetMemObjectDestructorCallback(
+ cl_mem memobj,
+ void (CL_CALLBACK * pfn_notify)( cl_mem, void*),
+ void * user_data ) CL_API_SUFFIX__VERSION_1_1
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(memobj, CL_INVALID_MEM_OBJECT);
+ return memobj->dispatch->clSetMemObjectDestructorCallback(
+ memobj,
+ pfn_notify,
+ user_data);
+}
+
+CL_API_ENTRY cl_event CL_API_CALL
+clCreateUserEvent(
+ cl_context context,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_1
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clCreateUserEvent(
+ context,
+ errcode_ret);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clSetUserEventStatus(
+ cl_event event,
+ cl_int execution_status) CL_API_SUFFIX__VERSION_1_1
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(event, CL_INVALID_EVENT);
+ return event->dispatch->clSetUserEventStatus(
+ event,
+ execution_status);
+}
+
+CL_API_ENTRY cl_mem CL_API_CALL
+clCreateFromEGLImageKHR(
+ cl_context context,
+ CLeglDisplayKHR display,
+ CLeglImageKHR image,
+ cl_mem_flags flags,
+ const cl_egl_image_properties_khr *properties,
+ cl_int *errcode_ret)
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clCreateFromEGLImageKHR(
+ context,
+ display,
+ image,
+ flags,
+ properties,
+ errcode_ret);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueAcquireEGLObjectsKHR(
+ cl_command_queue command_queue,
+ cl_uint num_objects,
+ const cl_mem *mem_objects,
+ cl_uint num_events_in_wait_list,
+ const cl_event *event_wait_list,
+ cl_event *event)
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueAcquireEGLObjectsKHR(
+ command_queue,
+ num_objects,
+ mem_objects,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueReleaseEGLObjectsKHR(
+ cl_command_queue command_queue,
+ cl_uint num_objects,
+ const cl_mem *mem_objects,
+ cl_uint num_events_in_wait_list,
+ const cl_event *event_wait_list,
+ cl_event *event)
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueReleaseEGLObjectsKHR(
+ command_queue,
+ num_objects,
+ mem_objects,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+/* cl_khr_egl_event */
+CL_API_ENTRY cl_event CL_API_CALL
+clCreateEventFromEGLSyncKHR(
+ cl_context context,
+ CLeglSyncKHR sync,
+ CLeglDisplayKHR display,
+ cl_int *errcode_ret)
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clCreateEventFromEGLSyncKHR(
+ context,
+ sync,
+ display,
+ errcode_ret);
+}
+
+CL_API_ENTRY cl_command_queue CL_API_CALL
+clCreateCommandQueueWithProperties(
+ cl_context context,
+ cl_device_id device,
+ const cl_queue_properties * properties,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_2_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clCreateCommandQueueWithProperties(
+ context,
+ device,
+ properties,
+ errcode_ret);
+}
+
+CL_API_ENTRY cl_mem CL_API_CALL
+clCreatePipe(
+ cl_context context,
+ cl_mem_flags flags,
+ cl_uint pipe_packet_size,
+ cl_uint pipe_max_packets,
+ const cl_pipe_properties * properties,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_2_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clCreatePipe(
+ context,
+ flags,
+ pipe_packet_size,
+ pipe_max_packets,
+ properties,
+ errcode_ret);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clGetPipeInfo(
+ cl_mem pipe,
+ cl_pipe_info param_name,
+ size_t param_value_size,
+ void * param_value,
+ size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_2_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(pipe, CL_INVALID_MEM_OBJECT);
+ return pipe->dispatch->clGetPipeInfo(
+ pipe,
+ param_name,
+ param_value_size,
+ param_value,
+ param_value_size_ret);
+}
+
+CL_API_ENTRY void * CL_API_CALL
+clSVMAlloc(
+ cl_context context,
+ cl_svm_mem_flags flags,
+ size_t size,
+ cl_uint alignment) CL_API_SUFFIX__VERSION_2_0
+{
+ if (!context) {
+ return NULL;
+ }
+ return context->dispatch->clSVMAlloc(
+ context,
+ flags,
+ size,
+ alignment);
+}
+
+CL_API_ENTRY void CL_API_CALL
+clSVMFree(
+ cl_context context,
+ void * svm_pointer) CL_API_SUFFIX__VERSION_2_0
+{
+ if (!context || !svm_pointer) {
+ return;
+ }
+ context->dispatch->clSVMFree(
+ context,
+ svm_pointer);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueSVMFree(
+ cl_command_queue command_queue,
+ cl_uint num_svm_pointers,
+ void* svm_pointers[],
+ void (CL_CALLBACK* pfn_free_func)(
+ cl_command_queue queue,
+ cl_uint num_svm_pointers,
+ void* svm_pointers[],
+ void* user_data),
+ void* user_data,
+ cl_uint num_events_in_wait_list,
+ const cl_event* event_wait_list,
+ cl_event* event) CL_API_SUFFIX__VERSION_2_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueSVMFree(
+ command_queue,
+ num_svm_pointers,
+ svm_pointers,
+ pfn_free_func,
+ user_data,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueSVMMemcpy(
+ cl_command_queue command_queue,
+ cl_bool blocking_copy,
+ void * dst_ptr,
+ const void * src_ptr,
+ size_t size,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_2_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueSVMMemcpy(
+ command_queue,
+ blocking_copy,
+ dst_ptr,
+ src_ptr,
+ size,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueSVMMemFill(
+ cl_command_queue command_queue,
+ void * svm_ptr,
+ const void * pattern,
+ size_t pattern_size,
+ size_t size,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_2_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueSVMMemFill(
+ command_queue,
+ svm_ptr,
+ pattern,
+ pattern_size,
+ size,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueSVMMap(
+ cl_command_queue command_queue,
+ cl_bool blocking_map,
+ cl_map_flags flags,
+ void * svm_ptr,
+ size_t size,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_2_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueSVMMap(
+ command_queue,
+ blocking_map,
+ flags,
+ svm_ptr,
+ size,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueSVMUnmap(
+ cl_command_queue command_queue,
+ void * svm_ptr,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_2_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueSVMUnmap(
+ command_queue,
+ svm_ptr,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+CL_API_ENTRY cl_sampler CL_API_CALL
+clCreateSamplerWithProperties(
+ cl_context context,
+ const cl_sampler_properties * sampler_properties,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_2_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clCreateSamplerWithProperties(
+ context,
+ sampler_properties,
+ errcode_ret);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clSetKernelArgSVMPointer(
+ cl_kernel kernel,
+ cl_uint arg_index,
+ const void * arg_value) CL_API_SUFFIX__VERSION_2_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
+ return kernel->dispatch->clSetKernelArgSVMPointer(
+ kernel,
+ arg_index,
+ arg_value);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clSetKernelExecInfo(
+ cl_kernel kernel,
+ cl_kernel_exec_info param_name,
+ size_t param_value_size,
+ const void * param_value) CL_API_SUFFIX__VERSION_2_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
+ return kernel->dispatch->clSetKernelExecInfo(
+ kernel,
+ param_name,
+ param_value_size,
+ param_value);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clGetKernelSubGroupInfoKHR(
+ cl_kernel in_kernel,
+ cl_device_id in_device,
+ cl_kernel_sub_group_info param_name,
+ size_t input_value_size,
+ const void * input_value,
+ size_t param_value_size,
+ void * param_value,
+ size_t * param_value_size_ret) CL_EXT_SUFFIX__VERSION_2_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(in_kernel, CL_INVALID_KERNEL);
+ return in_kernel->dispatch->clGetKernelSubGroupInfoKHR(
+ in_kernel,
+ in_device,
+ param_name,
+ input_value_size,
+ input_value,
+ param_value_size,
+ param_value,
+ param_value_size_ret);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clSetDefaultDeviceCommandQueue(
+ cl_context context,
+ cl_device_id device,
+ cl_command_queue command_queue) CL_API_SUFFIX__VERSION_2_1
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(context, CL_INVALID_CONTEXT);
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
+ return context->dispatch->clSetDefaultDeviceCommandQueue(
+ context,
+ device,
+ command_queue);
+}
+
+CL_API_ENTRY cl_program CL_API_CALL
+clCreateProgramWithIL(
+ cl_context context,
+ const void * il,
+ size_t length,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_2_1
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clCreateProgramWithIL(
+ context,
+ il,
+ length,
+ errcode_ret);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clGetKernelSubGroupInfo(
+ cl_kernel kernel,
+ cl_device_id device,
+ cl_kernel_sub_group_info param_name,
+ size_t input_value_size,
+ const void * input_value,
+ size_t param_value_size,
+ void * param_value,
+ size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_2_1
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(kernel, CL_INVALID_KERNEL);
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
+ return kernel->dispatch->clGetKernelSubGroupInfo(
+ kernel,
+ device,
+ param_name,
+ input_value_size,
+ input_value,
+ param_value_size,
+ param_value,
+ param_value_size_ret);
+}
+
+CL_API_ENTRY cl_kernel CL_API_CALL
+clCloneKernel(
+ cl_kernel source_kernel,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_2_1
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(source_kernel, CL_INVALID_KERNEL);
+ return source_kernel->dispatch->clCloneKernel(
+ source_kernel,
+ errcode_ret);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueSVMMigrateMem(
+ cl_command_queue command_queue,
+ cl_uint num_svm_pointers,
+ const void ** svm_pointers,
+ const size_t * sizes,
+ cl_mem_migration_flags flags,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_2_1
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(command_queue, CL_INVALID_COMMAND_QUEUE);
+ return command_queue->dispatch->clEnqueueSVMMigrateMem(
+ command_queue,
+ num_svm_pointers,
+ svm_pointers,
+ sizes,
+ flags,
+ num_events_in_wait_list,
+ event_wait_list,
+ event);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clGetDeviceAndHostTimer(
+ cl_device_id device,
+ cl_ulong * device_timestamp,
+ cl_ulong * host_timestamp) CL_API_SUFFIX__VERSION_2_1
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
+ return device->dispatch->clGetDeviceAndHostTimer(
+ device,
+ device_timestamp,
+ host_timestamp);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL
+clGetHostTimer(
+ cl_device_id device,
+ cl_ulong * host_timestamp) CL_API_SUFFIX__VERSION_2_1
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
+ return device->dispatch->clGetHostTimer(
+ device,
+ host_timestamp);
+}
+
+
--- /dev/null
+/*
+ * Copyright (c) 2016-2019 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.
+ */
+
+#ifndef _ICD_DISPATCH_H_
+#define _ICD_DISPATCH_H_
+
+#ifndef CL_USE_DEPRECATED_OPENCL_1_0_APIS
+#define CL_USE_DEPRECATED_OPENCL_1_0_APIS
+#endif
+
+#ifndef CL_USE_DEPRECATED_OPENCL_1_1_APIS
+#define CL_USE_DEPRECATED_OPENCL_1_1_APIS
+#endif
+
+#ifndef CL_USE_DEPRECATED_OPENCL_1_2_APIS
+#define CL_USE_DEPRECATED_OPENCL_1_2_APIS
+#endif
+
+#ifndef CL_USE_DEPRECATED_OPENCL_2_0_APIS
+#define CL_USE_DEPRECATED_OPENCL_2_0_APIS
+#endif
+
+// cl.h
+#include <CL/cl.h>
+
+// cl_gl.h and required files
+#ifdef _WIN32
+#include <windows.h>
+#include <d3d9.h>
+#include <d3d10_1.h>
+#include <CL/cl_d3d10.h>
+#include <CL/cl_d3d11.h>
+#include <CL/cl_dx9_media_sharing.h>
+#endif
+#include <CL/cl_gl.h>
+#include <CL/cl_gl_ext.h>
+#include <CL/cl_ext.h>
+#include <CL/cl_egl.h>
+
+/*
+ *
+ * function pointer typedefs
+ *
+ */
+
+// Platform APIs
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetPlatformIDs)(
+ cl_uint num_entries,
+ cl_platform_id * platforms,
+ cl_uint * num_platforms) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetPlatformInfo)(
+ cl_platform_id platform,
+ cl_platform_info param_name,
+ size_t param_value_size,
+ void * param_value,
+ size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
+
+// Device APIs
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetDeviceIDs)(
+ cl_platform_id platform,
+ cl_device_type device_type,
+ cl_uint num_entries,
+ cl_device_id * devices,
+ cl_uint * num_devices) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetDeviceInfo)(
+ cl_device_id device,
+ cl_device_info param_name,
+ size_t param_value_size,
+ void * param_value,
+ size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clCreateSubDevices)(
+ cl_device_id in_device,
+ const cl_device_partition_property * partition_properties,
+ cl_uint num_entries,
+ cl_device_id * out_devices,
+ cl_uint * num_devices);
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL * KHRpfn_clRetainDevice)(
+ cl_device_id device) CL_API_SUFFIX__VERSION_1_2;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL * KHRpfn_clReleaseDevice)(
+ cl_device_id device) CL_API_SUFFIX__VERSION_1_2;
+
+// Context APIs
+typedef CL_API_ENTRY cl_context (CL_API_CALL *KHRpfn_clCreateContext)(
+ const cl_context_properties * properties,
+ cl_uint num_devices,
+ const cl_device_id * devices,
+ void (CL_CALLBACK *pfn_notify)(const char *, const void *, size_t, void *),
+ void * user_data,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_context (CL_API_CALL *KHRpfn_clCreateContextFromType)(
+ const cl_context_properties * properties,
+ cl_device_type device_type,
+ void (CL_CALLBACK *pfn_notify)(const char *, const void *, size_t, void *),
+ void * user_data,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clRetainContext)(
+ cl_context context) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clReleaseContext)(
+ cl_context context) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetContextInfo)(
+ cl_context context,
+ cl_context_info param_name,
+ size_t param_value_size,
+ void * param_value,
+ size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
+
+// Command Queue APIs
+typedef CL_API_ENTRY cl_command_queue (CL_API_CALL *KHRpfn_clCreateCommandQueue)(
+ cl_context context,
+ cl_device_id device,
+ cl_command_queue_properties properties,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_command_queue (CL_API_CALL *KHRpfn_clCreateCommandQueueWithProperties)(
+ cl_context /* context */,
+ cl_device_id /* device */,
+ const cl_queue_properties * /* properties */,
+ cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_2_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clRetainCommandQueue)(
+ cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clReleaseCommandQueue)(
+ cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetCommandQueueInfo)(
+ cl_command_queue command_queue,
+ cl_command_queue_info param_name,
+ size_t param_value_size,
+ void * param_value,
+ size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
+
+// Memory Object APIs
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateBuffer)(
+ cl_context context,
+ cl_mem_flags flags,
+ size_t size,
+ void * host_ptr,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateImage)(
+ cl_context context,
+ cl_mem_flags flags,
+ const cl_image_format * image_format,
+ const cl_image_desc * image_desc,
+ void * host_ptr,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clRetainMemObject)(cl_mem memobj) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clReleaseMemObject)(cl_mem memobj) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetSupportedImageFormats)(
+ cl_context context,
+ cl_mem_flags flags,
+ cl_mem_object_type image_type,
+ cl_uint num_entries,
+ cl_image_format * image_formats,
+ cl_uint * num_image_formats) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetMemObjectInfo)(
+ cl_mem memobj,
+ cl_mem_info param_name,
+ size_t param_value_size,
+ void * param_value,
+ size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetImageInfo)(
+ cl_mem image,
+ cl_image_info param_name,
+ size_t param_value_size,
+ void * param_value,
+ size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreatePipe)(
+ cl_context /* context */,
+ cl_mem_flags /* flags */,
+ cl_uint /* pipe_packet_size */,
+ cl_uint /* pipe_max_packets */,
+ const cl_pipe_properties * /* properties */,
+ cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_2_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetPipeInfo)(
+ cl_mem /* pipe */,
+ cl_pipe_info /* param_name */,
+ size_t /* param_value_size */,
+ void * /* param_value */,
+ size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_2_0;
+
+typedef CL_API_ENTRY void * (CL_API_CALL *KHRpfn_clSVMAlloc)(
+ cl_context /* context */,
+ cl_svm_mem_flags /* flags */,
+ size_t /* size */,
+ unsigned int /* alignment */) CL_API_SUFFIX__VERSION_2_0;
+
+typedef CL_API_ENTRY void (CL_API_CALL *KHRpfn_clSVMFree)(
+ cl_context /* context */,
+ void * /* svm_pointer */) CL_API_SUFFIX__VERSION_2_0;
+
+// Sampler APIs
+typedef CL_API_ENTRY cl_sampler (CL_API_CALL *KHRpfn_clCreateSampler)(
+ cl_context context,
+ cl_bool normalized_coords,
+ cl_addressing_mode addressing_mode,
+ cl_filter_mode filter_mode,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clRetainSampler)(cl_sampler sampler) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clReleaseSampler)(cl_sampler sampler) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetSamplerInfo)(
+ cl_sampler sampler,
+ cl_sampler_info param_name,
+ size_t param_value_size,
+ void * param_value,
+ size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_sampler (CL_API_CALL *KHRpfn_clCreateSamplerWithProperties)(
+ cl_context /* context */,
+ const cl_sampler_properties * /* sampler_properties */,
+ cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_2_0;
+
+// Program Object APIs
+typedef CL_API_ENTRY cl_program (CL_API_CALL *KHRpfn_clCreateProgramWithSource)(
+ cl_context context,
+ cl_uint count,
+ const char ** strings,
+ const size_t * lengths,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_program (CL_API_CALL *KHRpfn_clCreateProgramWithBinary)(
+ cl_context context,
+ cl_uint num_devices,
+ const cl_device_id * device_list,
+ const size_t * lengths,
+ const unsigned char ** binaries,
+ cl_int * binary_status,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_program (CL_API_CALL *KHRpfn_clCreateProgramWithBuiltInKernels)(
+ cl_context context,
+ cl_uint num_devices,
+ const cl_device_id * device_list,
+ const char * kernel_names,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clRetainProgram)(cl_program program) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clReleaseProgram)(cl_program program) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clBuildProgram)(
+ cl_program program,
+ cl_uint num_devices,
+ const cl_device_id * device_list,
+ const char * options,
+ void (CL_CALLBACK *pfn_notify)(cl_program program, void * user_data),
+ void * user_data) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clCompileProgram)(
+ cl_program program,
+ cl_uint num_devices,
+ const cl_device_id * device_list,
+ const char * options,
+ cl_uint num_input_headers,
+ const cl_program * input_headers,
+ const char ** header_include_names,
+ void (CL_CALLBACK * pfn_notify)(cl_program program, void * user_data),
+ void * user_data) CL_API_SUFFIX__VERSION_1_2;
+
+typedef CL_API_ENTRY cl_program (CL_API_CALL *KHRpfn_clLinkProgram)(
+ cl_context context,
+ cl_uint num_devices,
+ const cl_device_id * device_list,
+ const char * options,
+ cl_uint num_input_programs,
+ const cl_program * input_programs,
+ void (CL_CALLBACK * pfn_notify)(cl_program program, void * user_data),
+ void * user_data,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clSetProgramSpecializationConstant)(
+ cl_program program,
+ cl_uint spec_id,
+ size_t spec_size,
+ const void* spec_value) CL_API_SUFFIX__VERSION_2_2;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clSetProgramReleaseCallback)(
+ cl_program program,
+ void (CL_CALLBACK * pfn_notify)(cl_program program, void * user_data),
+ void * user_data) CL_API_SUFFIX__VERSION_2_2;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clUnloadPlatformCompiler)(
+ cl_platform_id platform) CL_API_SUFFIX__VERSION_1_2;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetProgramInfo)(
+ cl_program program,
+ cl_program_info param_name,
+ size_t param_value_size,
+ void * param_value,
+ size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetProgramBuildInfo)(
+ cl_program program,
+ cl_device_id device,
+ cl_program_build_info param_name,
+ size_t param_value_size,
+ void * param_value,
+ size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
+
+// Kernel Object APIs
+typedef CL_API_ENTRY cl_kernel (CL_API_CALL *KHRpfn_clCreateKernel)(
+ cl_program program,
+ const char * kernel_name,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clCreateKernelsInProgram)(
+ cl_program program,
+ cl_uint num_kernels,
+ cl_kernel * kernels,
+ cl_uint * num_kernels_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clRetainKernel)(cl_kernel kernel) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clReleaseKernel)(cl_kernel kernel) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clSetKernelArg)(
+ cl_kernel kernel,
+ cl_uint arg_index,
+ size_t arg_size,
+ const void * arg_value) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetKernelInfo)(
+ cl_kernel kernel,
+ cl_kernel_info param_name,
+ size_t param_value_size,
+ void * param_value,
+ size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetKernelArgInfo)(
+ cl_kernel kernel,
+ cl_uint arg_indx,
+ cl_kernel_arg_info param_name,
+ size_t param_value_size,
+ void * param_value,
+ size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_2;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetKernelWorkGroupInfo)(
+ cl_kernel kernel,
+ cl_device_id device,
+ cl_kernel_work_group_info param_name,
+ size_t param_value_size,
+ void * param_value,
+ size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clSetKernelArgSVMPointer)(
+ cl_kernel /* kernel */,
+ cl_uint /* arg_index */,
+ const void * /* arg_value */) CL_API_SUFFIX__VERSION_2_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clSetKernelExecInfo)(
+ cl_kernel /* kernel */,
+ cl_kernel_exec_info /* param_name */,
+ size_t /* param_value_size */,
+ const void * /* param_value */) CL_API_SUFFIX__VERSION_2_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetKernelSubGroupInfoKHR)(
+ cl_kernel /* in_kernel */,
+ cl_device_id /*in_device*/,
+ cl_kernel_sub_group_info /* param_name */,
+ size_t /*input_value_size*/,
+ const void * /*input_value*/,
+ size_t /*param_value_size*/,
+ void* /*param_value*/,
+ size_t* /*param_value_size_ret*/) CL_EXT_SUFFIX__VERSION_2_0;
+
+// Event Object APIs
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clWaitForEvents)(
+ cl_uint num_events,
+ const cl_event * event_list) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetEventInfo)(
+ cl_event event,
+ cl_event_info param_name,
+ size_t param_value_size,
+ void * param_value,
+ size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clRetainEvent)(cl_event event) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clReleaseEvent)(cl_event event) CL_API_SUFFIX__VERSION_1_0;
+
+// Profiling APIs
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetEventProfilingInfo)(
+ cl_event event,
+ cl_profiling_info param_name,
+ size_t param_value_size,
+ void * param_value,
+ size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
+
+// Flush and Finish APIs
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clFlush)(cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clFinish)(cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0;
+
+// Enqueued Commands APIs
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueReadBuffer)(
+ cl_command_queue command_queue,
+ cl_mem buffer,
+ cl_bool blocking_read,
+ size_t offset,
+ size_t cb,
+ void * ptr,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueReadBufferRect)(
+ cl_command_queue command_queue,
+ cl_mem buffer,
+ cl_bool blocking_read,
+ const size_t * buffer_origin,
+ const size_t * host_origin,
+ const size_t * region,
+ size_t buffer_row_pitch,
+ size_t buffer_slice_pitch,
+ size_t host_row_pitch,
+ size_t host_slice_pitch,
+ void * ptr,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_1;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueWriteBuffer)(
+ cl_command_queue command_queue,
+ cl_mem buffer,
+ cl_bool blocking_write,
+ size_t offset,
+ size_t cb,
+ const void * ptr,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueWriteBufferRect)(
+ cl_command_queue command_queue,
+ cl_mem buffer,
+ cl_bool blocking_read,
+ const size_t * buffer_origin,
+ const size_t * host_origin,
+ const size_t * region,
+ size_t buffer_row_pitch,
+ size_t buffer_slice_pitch,
+ size_t host_row_pitch,
+ size_t host_slice_pitch,
+ const void * ptr,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_1;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueFillBuffer)(
+ cl_command_queue command_queue,
+ cl_mem buffer,
+ const void * pattern,
+ size_t pattern_size,
+ size_t offset,
+ size_t cb,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_2;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueCopyBuffer)(
+ cl_command_queue command_queue,
+ cl_mem src_buffer,
+ cl_mem dst_buffer,
+ size_t src_offset,
+ size_t dst_offset,
+ size_t cb,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueCopyBufferRect)(
+ cl_command_queue command_queue,
+ cl_mem src_buffer,
+ cl_mem dst_buffer,
+ const size_t * src_origin,
+ const size_t * dst_origin,
+ const size_t * region,
+ size_t src_row_pitch,
+ size_t src_slice_pitch,
+ size_t dst_row_pitch,
+ size_t dst_slice_pitch,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_1;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueReadImage)(
+ cl_command_queue command_queue,
+ cl_mem image,
+ cl_bool blocking_read,
+ const size_t * origin,
+ const size_t * region,
+ size_t row_pitch,
+ size_t slice_pitch,
+ void * ptr,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueWriteImage)(
+ cl_command_queue command_queue,
+ cl_mem image,
+ cl_bool blocking_write,
+ const size_t * origin,
+ const size_t * region,
+ size_t input_row_pitch,
+ size_t input_slice_pitch,
+ const void * ptr,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueFillImage)(
+ cl_command_queue command_queue,
+ cl_mem image,
+ const void * fill_color,
+ const size_t origin[3],
+ const size_t region[3],
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_2;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueCopyImage)(
+ cl_command_queue command_queue,
+ cl_mem src_image,
+ cl_mem dst_image,
+ const size_t * src_origin,
+ const size_t * dst_origin,
+ const size_t * region,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueCopyImageToBuffer)(
+ cl_command_queue command_queue,
+ cl_mem src_image,
+ cl_mem dst_buffer,
+ const size_t * src_origin,
+ const size_t * region,
+ size_t dst_offset,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueCopyBufferToImage)(
+ cl_command_queue command_queue,
+ cl_mem src_buffer,
+ cl_mem dst_image,
+ size_t src_offset,
+ const size_t * dst_origin,
+ const size_t * region,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY void * (CL_API_CALL *KHRpfn_clEnqueueMapBuffer)(
+ cl_command_queue command_queue,
+ cl_mem buffer,
+ cl_bool blocking_map,
+ cl_map_flags map_flags,
+ size_t offset,
+ size_t cb,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY void * (CL_API_CALL *KHRpfn_clEnqueueMapImage)(
+ cl_command_queue command_queue,
+ cl_mem image,
+ cl_bool blocking_map,
+ cl_map_flags map_flags,
+ const size_t * origin,
+ const size_t * region,
+ size_t * image_row_pitch,
+ size_t * image_slice_pitch,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueUnmapMemObject)(
+ cl_command_queue command_queue,
+ cl_mem memobj,
+ void * mapped_ptr,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueMigrateMemObjects)(
+ cl_command_queue command_queue,
+ cl_uint num_mem_objects,
+ const cl_mem * mem_objects,
+ cl_mem_migration_flags flags,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_2;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueNDRangeKernel)(
+ cl_command_queue command_queue,
+ cl_kernel kernel,
+ cl_uint work_dim,
+ const size_t * global_work_offset,
+ const size_t * global_work_size,
+ const size_t * local_work_size,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueTask)(
+ cl_command_queue command_queue,
+ cl_kernel kernel,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueNativeKernel)(
+ cl_command_queue command_queue,
+ void (CL_CALLBACK * user_func)(void *),
+ void * args,
+ size_t cb_args,
+ cl_uint num_mem_objects,
+ const cl_mem * mem_list,
+ const void ** args_mem_loc,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueMarkerWithWaitList)(
+ cl_command_queue command_queue,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_2;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueBarrierWithWaitList)(
+ cl_command_queue command_queue,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_2;
+
+typedef CL_API_ENTRY void * (CL_API_CALL *KHRpfn_clGetExtensionFunctionAddressForPlatform)(
+ cl_platform_id platform,
+ const char * function_name) CL_API_SUFFIX__VERSION_1_2;
+
+// Shared Virtual Memory APIs
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueSVMFree)(
+ cl_command_queue /* command_queue */,
+ cl_uint /* num_svm_pointers */,
+ void ** /* svm_pointers */,
+ void (CL_CALLBACK *pfn_free_func)(
+ cl_command_queue /* queue */,
+ cl_uint /* num_svm_pointers */,
+ void ** /* svm_pointers[] */,
+ void * /* user_data */),
+ void * /* user_data */,
+ cl_uint /* num_events_in_wait_list */,
+ const cl_event * /* event_wait_list */,
+ cl_event * /* event */) CL_API_SUFFIX__VERSION_2_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueSVMMemcpy)(
+ cl_command_queue /* command_queue */,
+ cl_bool /* blocking_copy */,
+ void * /* dst_ptr */,
+ const void * /* src_ptr */,
+ size_t /* size */,
+ cl_uint /* num_events_in_wait_list */,
+ const cl_event * /* event_wait_list */,
+ cl_event * /* event */) CL_API_SUFFIX__VERSION_2_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueSVMMemFill)(
+ cl_command_queue /* command_queue */,
+ void * /* svm_ptr */,
+ const void * /* pattern */,
+ size_t /* pattern_size */,
+ size_t /* size */,
+ cl_uint /* num_events_in_wait_list */,
+ const cl_event * /* event_wait_list */,
+ cl_event * /* event */) CL_API_SUFFIX__VERSION_2_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueSVMMap)(
+ cl_command_queue /* command_queue */,
+ cl_bool /* blocking_map */,
+ cl_map_flags /* map_flags */,
+ void * /* svm_ptr */,
+ size_t /* size */,
+ cl_uint /* num_events_in_wait_list */,
+ const cl_event * /* event_wait_list */,
+ cl_event * /* event */) CL_API_SUFFIX__VERSION_2_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueSVMUnmap)(
+ cl_command_queue /* command_queue */,
+ void * /* svm_ptr */,
+ cl_uint /* num_events_in_wait_list */,
+ const cl_event * /* event_wait_list */,
+ cl_event * /* event */) CL_API_SUFFIX__VERSION_2_0;
+
+// Deprecated APIs
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clSetCommandQueueProperty)(
+ cl_command_queue command_queue,
+ cl_command_queue_properties properties,
+ cl_bool enable,
+ cl_command_queue_properties * old_properties) CL_EXT_SUFFIX__VERSION_1_0_DEPRECATED;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateImage2D)(
+ cl_context context,
+ cl_mem_flags flags,
+ const cl_image_format * image_format,
+ size_t image_width,
+ size_t image_height,
+ size_t image_row_pitch,
+ void * host_ptr,
+ cl_int * errcode_ret) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateImage3D)(
+ cl_context context,
+ cl_mem_flags flags,
+ const cl_image_format * image_format,
+ size_t image_width,
+ size_t image_height,
+ size_t image_depth,
+ size_t image_row_pitch,
+ size_t image_slice_pitch,
+ void * host_ptr,
+ cl_int * errcode_ret) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clUnloadCompiler)(void) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueMarker)(
+ cl_command_queue command_queue,
+ cl_event * event) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueWaitForEvents)(
+ cl_command_queue command_queue,
+ cl_uint num_events,
+ const cl_event * event_list) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueBarrier)(cl_command_queue command_queue) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
+
+typedef CL_API_ENTRY void * (CL_API_CALL *KHRpfn_clGetExtensionFunctionAddress)(const char *function_name) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
+
+// GL and other APIs
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateFromGLBuffer)(
+ cl_context context,
+ cl_mem_flags flags,
+ cl_GLuint bufobj,
+ int * errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateFromGLTexture)(
+ cl_context context,
+ cl_mem_flags flags,
+ cl_GLenum target,
+ cl_GLint miplevel,
+ cl_GLuint texture,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateFromGLTexture2D)(
+ cl_context context,
+ cl_mem_flags flags,
+ cl_GLenum target,
+ cl_GLint miplevel,
+ cl_GLuint texture,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateFromGLTexture3D)(
+ cl_context context,
+ cl_mem_flags flags,
+ cl_GLenum target,
+ cl_GLint miplevel,
+ cl_GLuint texture,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateFromGLRenderbuffer)(
+ cl_context context,
+ cl_mem_flags flags,
+ cl_GLuint renderbuffer,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetGLObjectInfo)(
+ cl_mem memobj,
+ cl_gl_object_type * gl_object_type,
+ cl_GLuint * gl_object_name) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetGLTextureInfo)(
+ cl_mem memobj,
+ cl_gl_texture_info param_name,
+ size_t param_value_size,
+ void * param_value,
+ size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueAcquireGLObjects)(
+ cl_command_queue command_queue,
+ cl_uint num_objects,
+ const cl_mem * mem_objects,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueReleaseGLObjects)(
+ cl_command_queue command_queue,
+ cl_uint num_objects,
+ const cl_mem * mem_objects,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_0;
+
+/* cl_khr_gl_sharing */
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetGLContextInfoKHR)(
+ const cl_context_properties *properties,
+ cl_gl_context_info param_name,
+ size_t param_value_size,
+ void *param_value,
+ size_t *param_value_size_ret);
+
+/* cl_khr_gl_event */
+typedef CL_API_ENTRY cl_event (CL_API_CALL *KHRpfn_clCreateEventFromGLsyncKHR)(
+ cl_context context,
+ cl_GLsync sync,
+ cl_int *errcode_ret);
+
+
+#if defined(_WIN32)
+
+/* cl_khr_d3d10_sharing */
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetDeviceIDsFromD3D10KHR)(
+ cl_platform_id platform,
+ cl_d3d10_device_source_khr d3d_device_source,
+ void * d3d_object,
+ cl_d3d10_device_set_khr d3d_device_set,
+ cl_uint num_entries,
+ cl_device_id * devices,
+ cl_uint * num_devices) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateFromD3D10BufferKHR)(
+ cl_context context,
+ cl_mem_flags flags,
+ ID3D10Buffer * resource,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateFromD3D10Texture2DKHR)(
+ cl_context context,
+ cl_mem_flags flags,
+ ID3D10Texture2D * resource,
+ UINT subresource,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateFromD3D10Texture3DKHR)(
+ cl_context context,
+ cl_mem_flags flags,
+ ID3D10Texture3D * resource,
+ UINT subresource,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueAcquireD3D10ObjectsKHR)(
+ cl_command_queue command_queue,
+ cl_uint num_objects,
+ const cl_mem * mem_objects,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueReleaseD3D10ObjectsKHR)(
+ cl_command_queue command_queue,
+ cl_uint num_objects,
+ const cl_mem * mem_objects,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clGetDeviceIDsFromD3D10KHR(
+ cl_platform_id platform,
+ cl_d3d10_device_source_khr d3d_device_source,
+ void *d3d_object,
+ cl_d3d10_device_set_khr d3d_device_set,
+ cl_uint num_entries,
+ cl_device_id *devices,
+ cl_uint *num_devices);
+
+extern CL_API_ENTRY cl_mem CL_API_CALL
+clCreateFromD3D10BufferKHR(
+ cl_context context,
+ cl_mem_flags flags,
+ ID3D10Buffer *resource,
+ cl_int *errcode_ret);
+
+extern CL_API_ENTRY cl_mem CL_API_CALL
+clCreateFromD3D10Texture2DKHR(
+ cl_context context,
+ cl_mem_flags flags,
+ ID3D10Texture2D * resource,
+ UINT subresource,
+ cl_int * errcode_ret);
+
+extern CL_API_ENTRY cl_mem CL_API_CALL
+clCreateFromD3D10Texture3DKHR(
+ cl_context context,
+ cl_mem_flags flags,
+ ID3D10Texture3D *resource,
+ UINT subresource,
+ cl_int *errcode_ret);
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueAcquireD3D10ObjectsKHR(
+ cl_command_queue command_queue,
+ cl_uint num_objects,
+ const cl_mem *mem_objects,
+ cl_uint num_events_in_wait_list,
+ const cl_event *event_wait_list,
+ cl_event *event);
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueReleaseD3D10ObjectsKHR(
+ cl_command_queue command_queue,
+ cl_uint num_objects,
+ const cl_mem *mem_objects,
+ cl_uint num_events_in_wait_list,
+ const cl_event *event_wait_list,
+ cl_event *event);
+
+/* cl_khr_d3d11_sharing */
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetDeviceIDsFromD3D11KHR)(
+ cl_platform_id platform,
+ cl_d3d11_device_source_khr d3d_device_source,
+ void * d3d_object,
+ cl_d3d11_device_set_khr d3d_device_set,
+ cl_uint num_entries,
+ cl_device_id * devices,
+ cl_uint * num_devices) CL_API_SUFFIX__VERSION_1_2;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateFromD3D11BufferKHR)(
+ cl_context context,
+ cl_mem_flags flags,
+ ID3D11Buffer * resource,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateFromD3D11Texture2DKHR)(
+ cl_context context,
+ cl_mem_flags flags,
+ ID3D11Texture2D * resource,
+ UINT subresource,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateFromD3D11Texture3DKHR)(
+ cl_context context,
+ cl_mem_flags flags,
+ ID3D11Texture3D * resource,
+ UINT subresource,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueAcquireD3D11ObjectsKHR)(
+ cl_command_queue command_queue,
+ cl_uint num_objects,
+ const cl_mem * mem_objects,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_2;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueReleaseD3D11ObjectsKHR)(
+ cl_command_queue command_queue,
+ cl_uint num_objects,
+ const cl_mem * mem_objects,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_2;
+
+/* cl_khr_dx9_media_sharing */
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetDeviceIDsFromDX9MediaAdapterKHR)(
+ cl_platform_id platform,
+ cl_uint num_media_adapters,
+ cl_dx9_media_adapter_type_khr * media_adapters_type,
+ void * media_adapters,
+ cl_dx9_media_adapter_set_khr media_adapter_set,
+ cl_uint num_entries,
+ cl_device_id * devices,
+ cl_uint * num_devices) CL_API_SUFFIX__VERSION_1_2;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateFromDX9MediaSurfaceKHR)(
+ cl_context context,
+ cl_mem_flags flags,
+ cl_dx9_media_adapter_type_khr adapter_type,
+ void * surface_info,
+ cl_uint plane,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueAcquireDX9MediaSurfacesKHR)(
+ cl_command_queue command_queue,
+ cl_uint num_objects,
+ const cl_mem * mem_objects,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_2;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueReleaseDX9MediaSurfacesKHR)(
+ cl_command_queue command_queue,
+ cl_uint num_objects,
+ const cl_mem * mem_objects,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_1_2;
+
+/* cl_khr_d3d11_sharing */
+extern CL_API_ENTRY cl_int CL_API_CALL
+clGetDeviceIDsFromD3D11KHR(
+ cl_platform_id platform,
+ cl_d3d11_device_source_khr d3d_device_source,
+ void * d3d_object,
+ cl_d3d11_device_set_khr d3d_device_set,
+ cl_uint num_entries,
+ cl_device_id * devices,
+ cl_uint * num_devices);
+
+extern CL_API_ENTRY cl_mem CL_API_CALL
+clCreateFromD3D11BufferKHR(
+ cl_context context,
+ cl_mem_flags flags,
+ ID3D11Buffer * resource,
+ cl_int * errcode_ret);
+
+extern CL_API_ENTRY cl_mem CL_API_CALL
+clCreateFromD3D11Texture2DKHR(
+ cl_context context,
+ cl_mem_flags flags,
+ ID3D11Texture2D * resource,
+ UINT subresource,
+ cl_int * errcode_ret);
+
+extern CL_API_ENTRY cl_mem CL_API_CALL
+clCreateFromD3D11Texture3DKHR(
+ cl_context context,
+ cl_mem_flags flags,
+ ID3D11Texture3D * resource,
+ UINT subresource,
+ cl_int * errcode_ret);
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueAcquireD3D11ObjectsKHR(
+ cl_command_queue command_queue,
+ cl_uint num_objects,
+ const cl_mem * mem_objects,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event);
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueReleaseD3D11ObjectsKHR(
+ cl_command_queue command_queue,
+ cl_uint num_objects,
+ const cl_mem * mem_objects,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event);
+
+/* cl_khr_dx9_media_sharing */
+extern CL_API_ENTRY cl_int CL_API_CALL
+clGetDeviceIDsFromDX9MediaAdapterKHR(
+ cl_platform_id platform,
+ cl_uint num_media_adapters,
+ cl_dx9_media_adapter_type_khr * media_adapter_type,
+ void * media_adapters,
+ cl_dx9_media_adapter_set_khr media_adapter_set,
+ cl_uint num_entries,
+ cl_device_id * devices,
+ cl_uint * num_devices);
+
+extern CL_API_ENTRY cl_mem CL_API_CALL
+clCreateFromDX9MediaSurfaceKHR(
+ cl_context context,
+ cl_mem_flags flags,
+ cl_dx9_media_adapter_type_khr adapter_type,
+ void * surface_info,
+ cl_uint plane,
+ cl_int * errcode_ret);
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueAcquireDX9MediaSurfacesKHR(
+ cl_command_queue command_queue,
+ cl_uint num_objects,
+ const cl_mem * mem_objects,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event);
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueReleaseDX9MediaSurfacesKHR(
+ cl_command_queue command_queue,
+ cl_uint num_objects,
+ const cl_mem * mem_objects,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event);
+
+#else
+
+/* cl_khr_d3d10_sharing */
+typedef void *KHRpfn_clGetDeviceIDsFromD3D10KHR;
+typedef void *KHRpfn_clCreateFromD3D10BufferKHR;
+typedef void *KHRpfn_clCreateFromD3D10Texture2DKHR;
+typedef void *KHRpfn_clCreateFromD3D10Texture3DKHR;
+typedef void *KHRpfn_clEnqueueAcquireD3D10ObjectsKHR;
+typedef void *KHRpfn_clEnqueueReleaseD3D10ObjectsKHR;
+
+/* cl_khr_d3d11_sharing */
+typedef void *KHRpfn_clGetDeviceIDsFromD3D11KHR;
+typedef void *KHRpfn_clCreateFromD3D11BufferKHR;
+typedef void *KHRpfn_clCreateFromD3D11Texture2DKHR;
+typedef void *KHRpfn_clCreateFromD3D11Texture3DKHR;
+typedef void *KHRpfn_clEnqueueAcquireD3D11ObjectsKHR;
+typedef void *KHRpfn_clEnqueueReleaseD3D11ObjectsKHR;
+
+/* cl_khr_dx9_media_sharing */
+typedef void *KHRpfn_clCreateFromDX9MediaSurfaceKHR;
+typedef void *KHRpfn_clEnqueueAcquireDX9MediaSurfacesKHR;
+typedef void *KHRpfn_clEnqueueReleaseDX9MediaSurfacesKHR;
+typedef void *KHRpfn_clGetDeviceIDsFromDX9MediaAdapterKHR;
+
+#endif
+
+/* OpenCL 1.1 */
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clSetEventCallback)(
+ cl_event /* event */,
+ cl_int /* command_exec_callback_type */,
+ void (CL_CALLBACK * /* pfn_notify */)(cl_event, cl_int, void *),
+ void * /* user_data */) CL_API_SUFFIX__VERSION_1_1;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateSubBuffer)(
+ cl_mem /* buffer */,
+ cl_mem_flags /* flags */,
+ cl_buffer_create_type /* buffer_create_type */,
+ const void * /* buffer_create_info */,
+ cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_1;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clSetMemObjectDestructorCallback)(
+ cl_mem /* memobj */,
+ void (CL_CALLBACK * /*pfn_notify*/)( cl_mem /* memobj */, void* /*user_data*/),
+ void * /*user_data */ ) CL_API_SUFFIX__VERSION_1_1;
+
+typedef CL_API_ENTRY cl_event (CL_API_CALL *KHRpfn_clCreateUserEvent)(
+ cl_context /* context */,
+ cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_1;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clSetUserEventStatus)(
+ cl_event /* event */,
+ cl_int /* execution_status */) CL_API_SUFFIX__VERSION_1_1;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clCreateSubDevicesEXT)(
+ cl_device_id in_device,
+ const cl_device_partition_property_ext * partition_properties,
+ cl_uint num_entries,
+ cl_device_id * out_devices,
+ cl_uint * num_devices);
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL * KHRpfn_clRetainDeviceEXT)(
+ cl_device_id device) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL * KHRpfn_clReleaseDeviceEXT)(
+ cl_device_id device) CL_API_SUFFIX__VERSION_1_0;
+
+/* cl_khr_egl_image */
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *KHRpfn_clCreateFromEGLImageKHR)(
+ cl_context context,
+ CLeglDisplayKHR display,
+ CLeglImageKHR image,
+ cl_mem_flags flags,
+ const cl_egl_image_properties_khr *properties,
+ cl_int *errcode_ret);
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueAcquireEGLObjectsKHR)(
+ cl_command_queue command_queue,
+ cl_uint num_objects,
+ const cl_mem *mem_objects,
+ cl_uint num_events_in_wait_list,
+ const cl_event *event_wait_list,
+ cl_event *event);
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueReleaseEGLObjectsKHR)(
+ cl_command_queue command_queue,
+ cl_uint num_objects,
+ const cl_mem *mem_objects,
+ cl_uint num_events_in_wait_list,
+ const cl_event *event_wait_list,
+ cl_event *event);
+
+/* cl_khr_egl_event */
+typedef CL_API_ENTRY cl_event (CL_API_CALL *KHRpfn_clCreateEventFromEGLSyncKHR)(
+ cl_context context,
+ CLeglSyncKHR sync,
+ CLeglDisplayKHR display,
+ cl_int *errcode_ret);
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clSetDefaultDeviceCommandQueue)(
+ cl_context context,
+ cl_device_id device,
+ cl_command_queue command_queue) CL_API_SUFFIX__VERSION_2_1;
+
+typedef CL_API_ENTRY cl_program (CL_API_CALL *KHRpfn_clCreateProgramWithIL)(
+ cl_context context,
+ const void * il,
+ size_t length,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_2_1;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetKernelSubGroupInfo )(
+ cl_kernel kernel,
+ cl_device_id device,
+ cl_kernel_sub_group_info param_name,
+ size_t input_value_size,
+ const void * input_value,
+ size_t param_value_size,
+ void * param_value,
+ size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_2_1;
+
+typedef CL_API_ENTRY cl_kernel (CL_API_CALL *KHRpfn_clCloneKernel)(
+ cl_kernel source_kernel,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_2_1;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clEnqueueSVMMigrateMem)(
+ cl_command_queue command_queue,
+ cl_uint num_svm_pointers,
+ const void ** svm_pointers,
+ const size_t * sizes,
+ cl_mem_migration_flags flags,
+ cl_uint num_events_in_wait_list,
+ const cl_event * event_wait_list,
+ cl_event * event) CL_API_SUFFIX__VERSION_2_1;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetDeviceAndHostTimer)(
+ cl_device_id device,
+ cl_ulong * device_timestamp,
+ cl_ulong * host_timestamp) CL_API_SUFFIX__VERSION_2_1;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *KHRpfn_clGetHostTimer)(
+ cl_device_id device,
+ cl_ulong * host_timestamp) CL_API_SUFFIX__VERSION_2_1;
+
+/*
+ *
+ * vendor dispatch table structure
+ *
+ * note that the types in the structure KHRicdVendorDispatch mirror the function
+ * names listed in the string table khrIcdVendorDispatchFunctionNames
+ *
+ */
+
+typedef struct KHRicdVendorDispatchRec KHRicdVendorDispatch;
+
+struct KHRicdVendorDispatchRec
+{
+ /* OpenCL 1.0 */
+ KHRpfn_clGetPlatformIDs clGetPlatformIDs;
+ KHRpfn_clGetPlatformInfo clGetPlatformInfo;
+ KHRpfn_clGetDeviceIDs clGetDeviceIDs;
+ KHRpfn_clGetDeviceInfo clGetDeviceInfo;
+ KHRpfn_clCreateContext clCreateContext;
+ KHRpfn_clCreateContextFromType clCreateContextFromType;
+ KHRpfn_clRetainContext clRetainContext;
+ KHRpfn_clReleaseContext clReleaseContext;
+ KHRpfn_clGetContextInfo clGetContextInfo;
+ KHRpfn_clCreateCommandQueue clCreateCommandQueue;
+ KHRpfn_clRetainCommandQueue clRetainCommandQueue;
+ KHRpfn_clReleaseCommandQueue clReleaseCommandQueue;
+ KHRpfn_clGetCommandQueueInfo clGetCommandQueueInfo;
+ KHRpfn_clSetCommandQueueProperty clSetCommandQueueProperty;
+ KHRpfn_clCreateBuffer clCreateBuffer;
+ KHRpfn_clCreateImage2D clCreateImage2D;
+ KHRpfn_clCreateImage3D clCreateImage3D;
+ KHRpfn_clRetainMemObject clRetainMemObject;
+ KHRpfn_clReleaseMemObject clReleaseMemObject;
+ KHRpfn_clGetSupportedImageFormats clGetSupportedImageFormats;
+ KHRpfn_clGetMemObjectInfo clGetMemObjectInfo;
+ KHRpfn_clGetImageInfo clGetImageInfo;
+ KHRpfn_clCreateSampler clCreateSampler;
+ KHRpfn_clRetainSampler clRetainSampler;
+ KHRpfn_clReleaseSampler clReleaseSampler;
+ KHRpfn_clGetSamplerInfo clGetSamplerInfo;
+ KHRpfn_clCreateProgramWithSource clCreateProgramWithSource;
+ KHRpfn_clCreateProgramWithBinary clCreateProgramWithBinary;
+ KHRpfn_clRetainProgram clRetainProgram;
+ KHRpfn_clReleaseProgram clReleaseProgram;
+ KHRpfn_clBuildProgram clBuildProgram;
+ KHRpfn_clUnloadCompiler clUnloadCompiler;
+ KHRpfn_clGetProgramInfo clGetProgramInfo;
+ KHRpfn_clGetProgramBuildInfo clGetProgramBuildInfo;
+ KHRpfn_clCreateKernel clCreateKernel;
+ KHRpfn_clCreateKernelsInProgram clCreateKernelsInProgram;
+ KHRpfn_clRetainKernel clRetainKernel;
+ KHRpfn_clReleaseKernel clReleaseKernel;
+ KHRpfn_clSetKernelArg clSetKernelArg;
+ KHRpfn_clGetKernelInfo clGetKernelInfo;
+ KHRpfn_clGetKernelWorkGroupInfo clGetKernelWorkGroupInfo;
+ KHRpfn_clWaitForEvents clWaitForEvents;
+ KHRpfn_clGetEventInfo clGetEventInfo;
+ KHRpfn_clRetainEvent clRetainEvent;
+ KHRpfn_clReleaseEvent clReleaseEvent;
+ KHRpfn_clGetEventProfilingInfo clGetEventProfilingInfo;
+ KHRpfn_clFlush clFlush;
+ KHRpfn_clFinish clFinish;
+ KHRpfn_clEnqueueReadBuffer clEnqueueReadBuffer;
+ KHRpfn_clEnqueueWriteBuffer clEnqueueWriteBuffer;
+ KHRpfn_clEnqueueCopyBuffer clEnqueueCopyBuffer;
+ KHRpfn_clEnqueueReadImage clEnqueueReadImage;
+ KHRpfn_clEnqueueWriteImage clEnqueueWriteImage;
+ KHRpfn_clEnqueueCopyImage clEnqueueCopyImage;
+ KHRpfn_clEnqueueCopyImageToBuffer clEnqueueCopyImageToBuffer;
+ KHRpfn_clEnqueueCopyBufferToImage clEnqueueCopyBufferToImage;
+ KHRpfn_clEnqueueMapBuffer clEnqueueMapBuffer;
+ KHRpfn_clEnqueueMapImage clEnqueueMapImage;
+ KHRpfn_clEnqueueUnmapMemObject clEnqueueUnmapMemObject;
+ KHRpfn_clEnqueueNDRangeKernel clEnqueueNDRangeKernel;
+ KHRpfn_clEnqueueTask clEnqueueTask;
+ KHRpfn_clEnqueueNativeKernel clEnqueueNativeKernel;
+ KHRpfn_clEnqueueMarker clEnqueueMarker;
+ KHRpfn_clEnqueueWaitForEvents clEnqueueWaitForEvents;
+ KHRpfn_clEnqueueBarrier clEnqueueBarrier;
+ KHRpfn_clGetExtensionFunctionAddress clGetExtensionFunctionAddress;
+ KHRpfn_clCreateFromGLBuffer clCreateFromGLBuffer;
+ KHRpfn_clCreateFromGLTexture2D clCreateFromGLTexture2D;
+ KHRpfn_clCreateFromGLTexture3D clCreateFromGLTexture3D;
+ KHRpfn_clCreateFromGLRenderbuffer clCreateFromGLRenderbuffer;
+ KHRpfn_clGetGLObjectInfo clGetGLObjectInfo;
+ KHRpfn_clGetGLTextureInfo clGetGLTextureInfo;
+ KHRpfn_clEnqueueAcquireGLObjects clEnqueueAcquireGLObjects;
+ KHRpfn_clEnqueueReleaseGLObjects clEnqueueReleaseGLObjects;
+ KHRpfn_clGetGLContextInfoKHR clGetGLContextInfoKHR;
+
+ /* cl_khr_d3d10_sharing */
+ KHRpfn_clGetDeviceIDsFromD3D10KHR clGetDeviceIDsFromD3D10KHR;
+ KHRpfn_clCreateFromD3D10BufferKHR clCreateFromD3D10BufferKHR;
+ KHRpfn_clCreateFromD3D10Texture2DKHR clCreateFromD3D10Texture2DKHR;
+ KHRpfn_clCreateFromD3D10Texture3DKHR clCreateFromD3D10Texture3DKHR;
+ KHRpfn_clEnqueueAcquireD3D10ObjectsKHR clEnqueueAcquireD3D10ObjectsKHR;
+ KHRpfn_clEnqueueReleaseD3D10ObjectsKHR clEnqueueReleaseD3D10ObjectsKHR;
+
+ /* OpenCL 1.1 */
+ KHRpfn_clSetEventCallback clSetEventCallback;
+ KHRpfn_clCreateSubBuffer clCreateSubBuffer;
+ KHRpfn_clSetMemObjectDestructorCallback clSetMemObjectDestructorCallback;
+ KHRpfn_clCreateUserEvent clCreateUserEvent;
+ KHRpfn_clSetUserEventStatus clSetUserEventStatus;
+ KHRpfn_clEnqueueReadBufferRect clEnqueueReadBufferRect;
+ KHRpfn_clEnqueueWriteBufferRect clEnqueueWriteBufferRect;
+ KHRpfn_clEnqueueCopyBufferRect clEnqueueCopyBufferRect;
+
+ /* cl_ext_device_fission */
+ KHRpfn_clCreateSubDevicesEXT clCreateSubDevicesEXT;
+ KHRpfn_clRetainDeviceEXT clRetainDeviceEXT;
+ KHRpfn_clReleaseDeviceEXT clReleaseDeviceEXT;
+
+ /* cl_khr_gl_event */
+ KHRpfn_clCreateEventFromGLsyncKHR clCreateEventFromGLsyncKHR;
+
+ /* OpenCL 1.2 */
+ KHRpfn_clCreateSubDevices clCreateSubDevices;
+ KHRpfn_clRetainDevice clRetainDevice;
+ KHRpfn_clReleaseDevice clReleaseDevice;
+ KHRpfn_clCreateImage clCreateImage;
+ KHRpfn_clCreateProgramWithBuiltInKernels clCreateProgramWithBuiltInKernels;
+ KHRpfn_clCompileProgram clCompileProgram;
+ KHRpfn_clLinkProgram clLinkProgram;
+ KHRpfn_clUnloadPlatformCompiler clUnloadPlatformCompiler;
+ KHRpfn_clGetKernelArgInfo clGetKernelArgInfo;
+ KHRpfn_clEnqueueFillBuffer clEnqueueFillBuffer;
+ KHRpfn_clEnqueueFillImage clEnqueueFillImage;
+ KHRpfn_clEnqueueMigrateMemObjects clEnqueueMigrateMemObjects;
+ KHRpfn_clEnqueueMarkerWithWaitList clEnqueueMarkerWithWaitList;
+ KHRpfn_clEnqueueBarrierWithWaitList clEnqueueBarrierWithWaitList;
+ KHRpfn_clGetExtensionFunctionAddressForPlatform clGetExtensionFunctionAddressForPlatform;
+ KHRpfn_clCreateFromGLTexture clCreateFromGLTexture;
+
+ /* cl_khr_d3d11_sharing */
+ KHRpfn_clGetDeviceIDsFromD3D11KHR clGetDeviceIDsFromD3D11KHR;
+ KHRpfn_clCreateFromD3D11BufferKHR clCreateFromD3D11BufferKHR;
+ KHRpfn_clCreateFromD3D11Texture2DKHR clCreateFromD3D11Texture2DKHR;
+ KHRpfn_clCreateFromD3D11Texture3DKHR clCreateFromD3D11Texture3DKHR;
+ KHRpfn_clCreateFromDX9MediaSurfaceKHR clCreateFromDX9MediaSurfaceKHR;
+ KHRpfn_clEnqueueAcquireD3D11ObjectsKHR clEnqueueAcquireD3D11ObjectsKHR;
+ KHRpfn_clEnqueueReleaseD3D11ObjectsKHR clEnqueueReleaseD3D11ObjectsKHR;
+
+ /* cl_khr_dx9_media_sharing */
+ KHRpfn_clGetDeviceIDsFromDX9MediaAdapterKHR clGetDeviceIDsFromDX9MediaAdapterKHR;
+ KHRpfn_clEnqueueAcquireDX9MediaSurfacesKHR clEnqueueAcquireDX9MediaSurfacesKHR;
+ KHRpfn_clEnqueueReleaseDX9MediaSurfacesKHR clEnqueueReleaseDX9MediaSurfacesKHR;
+
+ /* cl_khr_egl_image */
+ KHRpfn_clCreateFromEGLImageKHR clCreateFromEGLImageKHR;
+ KHRpfn_clEnqueueAcquireEGLObjectsKHR clEnqueueAcquireEGLObjectsKHR;
+ KHRpfn_clEnqueueReleaseEGLObjectsKHR clEnqueueReleaseEGLObjectsKHR;
+
+ /* cl_khr_egl_event */
+ KHRpfn_clCreateEventFromEGLSyncKHR clCreateEventFromEGLSyncKHR;
+
+ /* OpenCL 2.0 */
+ KHRpfn_clCreateCommandQueueWithProperties clCreateCommandQueueWithProperties;
+ KHRpfn_clCreatePipe clCreatePipe;
+ KHRpfn_clGetPipeInfo clGetPipeInfo;
+ KHRpfn_clSVMAlloc clSVMAlloc;
+ KHRpfn_clSVMFree clSVMFree;
+ KHRpfn_clEnqueueSVMFree clEnqueueSVMFree;
+ KHRpfn_clEnqueueSVMMemcpy clEnqueueSVMMemcpy;
+ KHRpfn_clEnqueueSVMMemFill clEnqueueSVMMemFill;
+ KHRpfn_clEnqueueSVMMap clEnqueueSVMMap;
+ KHRpfn_clEnqueueSVMUnmap clEnqueueSVMUnmap;
+ KHRpfn_clCreateSamplerWithProperties clCreateSamplerWithProperties;
+ KHRpfn_clSetKernelArgSVMPointer clSetKernelArgSVMPointer;
+ KHRpfn_clSetKernelExecInfo clSetKernelExecInfo;
+
+ /* cl_khr_sub_groups */
+ KHRpfn_clGetKernelSubGroupInfoKHR clGetKernelSubGroupInfoKHR;
+
+ /* OpenCL 2.1 */
+ KHRpfn_clCloneKernel clCloneKernel;
+ KHRpfn_clCreateProgramWithIL clCreateProgramWithIL;
+ KHRpfn_clEnqueueSVMMigrateMem clEnqueueSVMMigrateMem;
+ KHRpfn_clGetDeviceAndHostTimer clGetDeviceAndHostTimer;
+ KHRpfn_clGetHostTimer clGetHostTimer;
+ KHRpfn_clGetKernelSubGroupInfo clGetKernelSubGroupInfo;
+ KHRpfn_clSetDefaultDeviceCommandQueue clSetDefaultDeviceCommandQueue;
+
+ /* OpenCL 2.2 */
+ KHRpfn_clSetProgramReleaseCallback clSetProgramReleaseCallback;
+ KHRpfn_clSetProgramSpecializationConstant clSetProgramSpecializationConstant;
+};
+
+/*
+ *
+ * vendor dispatch table structure
+ *
+ */
+
+struct _cl_platform_id
+{
+ KHRicdVendorDispatch *dispatch;
+};
+
+struct _cl_device_id
+{
+ KHRicdVendorDispatch *dispatch;
+};
+
+struct _cl_context
+{
+ KHRicdVendorDispatch *dispatch;
+};
+
+struct _cl_command_queue
+{
+ KHRicdVendorDispatch *dispatch;
+};
+
+struct _cl_mem
+{
+ KHRicdVendorDispatch *dispatch;
+};
+
+struct _cl_program
+{
+ KHRicdVendorDispatch *dispatch;
+};
+
+struct _cl_kernel
+{
+ KHRicdVendorDispatch *dispatch;
+};
+
+struct _cl_event
+{
+ KHRicdVendorDispatch *dispatch;
+};
+
+struct _cl_sampler
+{
+ KHRicdVendorDispatch *dispatch;
+};
+
+#endif // _ICD_DISPATCH_H_
+
--- /dev/null
+/*
+ * Copyright (c) 2016-2019 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.
+ */
+
+OPENCL_1.0 {
+ global:
+ clBuildProgram;
+ clCreateBuffer;
+ clCreateCommandQueue;
+ clCreateContext;
+ clCreateContextFromType;
+ clCreateFromGLBuffer;
+ clCreateFromGLRenderbuffer;
+ clCreateFromGLTexture2D;
+ clCreateFromGLTexture3D;
+ clCreateImage2D;
+ clCreateImage3D;
+ clCreateKernel;
+ clCreateKernelsInProgram;
+ clCreateProgramWithBinary;
+ clCreateProgramWithSource;
+ clCreateSampler;
+ clEnqueueAcquireGLObjects;
+ clEnqueueBarrier;
+ clEnqueueCopyBuffer;
+ clEnqueueCopyBufferToImage;
+ clEnqueueCopyImage;
+ clEnqueueCopyImageToBuffer;
+ clEnqueueMapBuffer;
+ clEnqueueMapImage;
+ clEnqueueMarker;
+ clEnqueueNDRangeKernel;
+ clEnqueueNativeKernel;
+ clEnqueueReadBuffer;
+ clEnqueueReadImage;
+ clEnqueueReleaseGLObjects;
+ clEnqueueTask;
+ clEnqueueUnmapMemObject;
+ clEnqueueWaitForEvents;
+ clEnqueueWriteBuffer;
+ clEnqueueWriteImage;
+ clFinish;
+ clFlush;
+ clGetCommandQueueInfo;
+ clGetContextInfo;
+ clGetDeviceIDs;
+ clGetDeviceInfo;
+ clGetEventInfo;
+ clGetEventProfilingInfo;
+ clGetExtensionFunctionAddress;
+ clGetGLObjectInfo;
+ clGetGLTextureInfo;
+ clGetImageInfo;
+ clGetKernelInfo;
+ clGetKernelWorkGroupInfo;
+ clGetMemObjectInfo;
+ clGetPlatformIDs;
+ clGetPlatformInfo;
+ clGetProgramBuildInfo;
+ clGetProgramInfo;
+ clGetSamplerInfo;
+ clGetSupportedImageFormats;
+ clReleaseCommandQueue;
+ clReleaseContext;
+ clReleaseEvent;
+ clReleaseKernel;
+ clReleaseMemObject;
+ clReleaseProgram;
+ clReleaseSampler;
+ clRetainCommandQueue;
+ clRetainContext;
+ clRetainEvent;
+ clRetainKernel;
+ clRetainMemObject;
+ clRetainProgram;
+ clRetainSampler;
+ clSetCommandQueueProperty;
+ clSetKernelArg;
+ clUnloadCompiler;
+ clWaitForEvents;
+
+ local:
+ /* Everything else is local to ICD. */
+ *;
+};
+
+OPENCL_1.1 {
+ global:
+ clCreateSubBuffer;
+ clCreateUserEvent;
+ clEnqueueCopyBufferRect;
+ clEnqueueReadBufferRect;
+ clEnqueueWriteBufferRect;
+ clSetEventCallback;
+ clSetMemObjectDestructorCallback;
+ clSetUserEventStatus;
+} OPENCL_1.0;
+
+OPENCL_1.2 {
+ global:
+ clCompileProgram;
+ clCreateFromGLTexture;
+ clCreateImage;
+ clCreateProgramWithBuiltInKernels;
+ clCreateSubDevices;
+ clEnqueueBarrierWithWaitList;
+ clEnqueueFillBuffer;
+ clEnqueueFillImage;
+ clEnqueueMarkerWithWaitList;
+ clEnqueueMigrateMemObjects;
+ clGetExtensionFunctionAddressForPlatform;
+ clGetKernelArgInfo;
+ clLinkProgram;
+ clReleaseDevice;
+ clRetainDevice;
+ clUnloadPlatformCompiler;
+} OPENCL_1.1;
+
+OPENCL_2.0 {
+ global:
+ clCreateCommandQueueWithProperties;
+ clCreatePipe;
+ clGetPipeInfo;
+ clSVMAlloc;
+ clSVMFree;
+ clEnqueueSVMFree;
+ clEnqueueSVMMemcpy;
+ clEnqueueSVMMemFill;
+ clEnqueueSVMMap;
+ clEnqueueSVMUnmap;
+ clCreateSamplerWithProperties;
+ clSetKernelArgSVMPointer;
+ clSetKernelExecInfo;
+} OPENCL_1.2;
+
+OPENCL_2.1 {
+ global:
+ clCloneKernel;
+ clCreateProgramWithIL;
+ clEnqueueSVMMigrateMem;
+ clGetDeviceAndHostTimer;
+ clGetHostTimer;
+ clGetKernelSubGroupInfo;
+ clSetDefaultDeviceCommandQueue;
+} OPENCL_2.0;
+
+OPENCL_2.2 {
+ global:
+ clSetProgramReleaseCallback;
+ clSetProgramSpecializationConstant;
+} OPENCL_2.1;
--- /dev/null
+/*
+ * Copyright (c) 2016-2019 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.h"
+#include <dlfcn.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <dirent.h>
+#include <pthread.h>
+
+static pthread_once_t initialized = PTHREAD_ONCE_INIT;
+
+/*
+ *
+ * Vendor enumeration functions
+ *
+ */
+
+// go through the list of vendors in the two configuration files
+void khrIcdOsVendorsEnumerate(void)
+{
+ DIR *dir = NULL;
+ struct dirent *dirEntry = NULL;
+#ifdef __ANDROID__
+ char *vendorPath = "/system/vendor/Khronos/OpenCL/vendors/";
+#else
+ char *vendorPath = "/etc/OpenCL/vendors/";
+#endif // ANDROID
+
+ // open the directory
+ dir = opendir(vendorPath);
+ if (NULL == dir)
+ {
+ KHR_ICD_TRACE("Failed to open path %s\n", vendorPath);
+ goto Cleanup;
+ }
+
+ // attempt to load all files in the directory
+ for (dirEntry = readdir(dir); dirEntry; dirEntry = readdir(dir) )
+ {
+ switch(dirEntry->d_type)
+ {
+ case DT_UNKNOWN:
+ case DT_REG:
+ case DT_LNK:
+ {
+ const char* extension = ".icd";
+ FILE *fin = NULL;
+ char* fileName = NULL;
+ char* buffer = NULL;
+ long bufferSize = 0;
+
+ // make sure the file name ends in .icd
+ if (strlen(extension) > strlen(dirEntry->d_name) )
+ {
+ break;
+ }
+ if (strcmp(dirEntry->d_name + strlen(dirEntry->d_name) - strlen(extension), extension) )
+ {
+ break;
+ }
+
+ // allocate space for the full path of the vendor library name
+ fileName = malloc(strlen(dirEntry->d_name) + strlen(vendorPath) + 1);
+ if (!fileName)
+ {
+ KHR_ICD_TRACE("Failed allocate space for ICD file path\n");
+ break;
+ }
+ sprintf(fileName, "%s%s", vendorPath, dirEntry->d_name);
+
+ // open the file and read its contents
+ fin = fopen(fileName, "r");
+ if (!fin)
+ {
+ free(fileName);
+ break;
+ }
+ fseek(fin, 0, SEEK_END);
+ bufferSize = ftell(fin);
+
+ buffer = malloc(bufferSize+1);
+ if (!buffer)
+ {
+ free(fileName);
+ fclose(fin);
+ break;
+ }
+ memset(buffer, 0, bufferSize+1);
+ fseek(fin, 0, SEEK_SET);
+ if (bufferSize != (long)fread(buffer, 1, bufferSize, fin) )
+ {
+ free(fileName);
+ free(buffer);
+ fclose(fin);
+ break;
+ }
+ // ignore a newline at the end of the file
+ if (buffer[bufferSize-1] == '\n') buffer[bufferSize-1] = '\0';
+
+ // load the string read from the file
+ khrIcdVendorAdd(buffer);
+
+ free(fileName);
+ free(buffer);
+ fclose(fin);
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+Cleanup:
+
+ // free resources and exit
+ if (dir)
+ {
+ closedir(dir);
+ }
+}
+
+// go through the list of vendors only once
+void khrIcdOsVendorsEnumerateOnce(void)
+{
+ pthread_once(&initialized, khrIcdOsVendorsEnumerate);
+}
+
+/*
+ *
+ * Dynamic library loading functions
+ *
+ */
+
+// dynamically load a library. returns NULL on failure
+void *khrIcdOsLibraryLoad(const char *libraryName)
+{
+ return dlopen (libraryName, RTLD_NOW);
+}
+
+// get a function pointer from a loaded library. returns NULL on failure.
+void *khrIcdOsLibraryGetFunctionAddress(void *library, const char *functionName)
+{
+ return dlsym(library, functionName);
+}
+
+// unload a library
+void khrIcdOsLibraryUnload(void *library)
+{
+ dlclose(library);
+}
+
--- /dev/null
+;
+; Copyright (c) 2016-2019 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.
+
+EXPORTS
+
+;
+; Note:
+;
+; 1. Functions are grouped into blocks according to the OpenCL API version they
+; were introduced in.
+;
+; 2. Function blocks are sorted in ascending order of the API version.
+;
+; 3. Functions within a block are sorted alphabetically.
+;
+
+; OpenCL 1.0 API
+clBuildProgram
+clCreateBuffer
+clCreateCommandQueue
+clCreateContext
+clCreateContextFromType
+clCreateFromGLBuffer
+clCreateFromGLRenderbuffer
+clCreateFromGLTexture2D
+clCreateFromGLTexture3D
+clCreateImage2D
+clCreateImage3D
+clCreateKernel
+clCreateKernelsInProgram
+clCreateProgramWithBinary
+clCreateProgramWithSource
+clCreateSampler
+clEnqueueAcquireGLObjects
+clEnqueueBarrier
+clEnqueueCopyBuffer
+clEnqueueCopyBufferToImage
+clEnqueueCopyImage
+clEnqueueCopyImageToBuffer
+clEnqueueMapBuffer
+clEnqueueMapImage
+clEnqueueMarker
+clEnqueueNDRangeKernel
+clEnqueueNativeKernel
+clEnqueueReadBuffer
+clEnqueueReadImage
+clEnqueueReleaseGLObjects
+clEnqueueTask
+clEnqueueUnmapMemObject
+clEnqueueWaitForEvents
+clEnqueueWriteBuffer
+clEnqueueWriteImage
+clFinish
+clFlush
+clGetCommandQueueInfo
+clGetContextInfo
+clGetDeviceIDs
+clGetDeviceInfo
+clGetEventInfo
+clGetEventProfilingInfo
+clGetExtensionFunctionAddress
+clGetGLObjectInfo
+clGetGLTextureInfo
+clGetImageInfo
+clGetKernelInfo
+clGetKernelWorkGroupInfo
+clGetMemObjectInfo
+clGetPlatformIDs
+clGetPlatformInfo
+clGetProgramBuildInfo
+clGetProgramInfo
+clGetSamplerInfo
+clGetSupportedImageFormats
+clReleaseCommandQueue
+clReleaseContext
+clReleaseEvent
+clReleaseKernel
+clReleaseMemObject
+clReleaseProgram
+clReleaseSampler
+clRetainCommandQueue
+clRetainContext
+clRetainEvent
+clRetainKernel
+clRetainMemObject
+clRetainProgram
+clRetainSampler
+clSetCommandQueueProperty
+clSetKernelArg
+clUnloadCompiler
+clWaitForEvents
+
+; OpenCL 1.1 API
+clCreateSubBuffer
+clCreateUserEvent
+clEnqueueCopyBufferRect
+clEnqueueReadBufferRect
+clEnqueueWriteBufferRect
+clSetEventCallback
+clSetMemObjectDestructorCallback
+clSetUserEventStatus
+
+; OpenCL 1.2 API
+clCompileProgram
+clCreateFromGLTexture
+clCreateImage
+clCreateProgramWithBuiltInKernels
+clCreateSubDevices
+clEnqueueBarrierWithWaitList
+clEnqueueFillBuffer
+clEnqueueFillImage
+clEnqueueMarkerWithWaitList
+clEnqueueMigrateMemObjects
+clGetExtensionFunctionAddressForPlatform
+clGetKernelArgInfo
+clLinkProgram
+clReleaseDevice
+clRetainDevice
+clUnloadPlatformCompiler
+
+; OpenCL 2.0 API
+clCreateCommandQueueWithProperties
+clCreatePipe
+clCreateSamplerWithProperties
+clEnqueueSVMFree
+clEnqueueSVMMap
+clEnqueueSVMMemcpy
+clEnqueueSVMMemFill
+clEnqueueSVMUnmap
+clGetPipeInfo
+clSetKernelArgSVMPointer
+clSetKernelExecInfo
+clSVMAlloc
+clSVMFree
+
+; OpenCL 2.1 API
+clCloneKernel
+clCreateProgramWithIL
+clEnqueueSVMMigrateMem
+clGetDeviceAndHostTimer
+clGetHostTimer
+clGetKernelSubGroupInfo
+clSetDefaultDeviceCommandQueue
+
+; OpenCL 2.2 API
+clSetProgramReleaseCallback
+clSetProgramSpecializationConstant
+
--- /dev/null
+/*
+ * Copyright (c) 2016-2019 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 <windows.h>
+
+#ifdef RC_INVOKED
+
+VS_VERSION_INFO VERSIONINFO
+FILEVERSION 2,2,1,0
+PRODUCTVERSION 2,2,1,0
+FILETYPE VFT_DLL
+
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904E4"
+ BEGIN
+ VALUE "FileDescription" ,"OpenCL Client DLL"
+ VALUE "ProductName" ,"Khronos OpenCL ICD"
+ VALUE "LegalCopyright" ,"Copyright \251 The Khronos Group Inc 2016-2019"
+ VALUE "FileVersion" ,"2.2.1.0"
+ VALUE "CompanyName" ,"Khronos Group"
+ VALUE "InternalName" ,"OpenCL"
+ VALUE "OriginalFilename","OpenCL.dll"
+ END
+ END
+
+ BLOCK "VarFileInfo"
+ BEGIN
+ // extend this line for localized versions
+ VALUE "Translation", 0x0409, 0x04E4
+ END
+END
+
+#endif
+
--- /dev/null
+/*
+ * Copyright (c) 2016-2019 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.h"
+#include "icd_windows_hkr.h"
+#include <stdio.h>
+#include <windows.h>
+#include <winreg.h>
+
+static INIT_ONCE initialized = INIT_ONCE_STATIC_INIT;
+
+/*
+ *
+ * Vendor enumeration functions
+ *
+ */
+
+// go through the list of vendors in the registry and call khrIcdVendorAdd
+// for each vendor encountered
+BOOL CALLBACK khrIcdOsVendorsEnumerate(PINIT_ONCE InitOnce, PVOID Parameter, PVOID *lpContext)
+{
+ LONG result;
+ const char* platformsName = "SOFTWARE\\Khronos\\OpenCL\\Vendors";
+ HKEY platformsKey = NULL;
+ DWORD dwIndex;
+
+ if (!khrIcdOsVendorsEnumerateHKR())
+ {
+ KHR_ICD_TRACE("Failed to enumerate HKR entries, continuing\n");
+ }
+
+ KHR_ICD_TRACE("Opening key HKLM\\%s...\n", platformsName);
+ result = RegOpenKeyExA(
+ HKEY_LOCAL_MACHINE,
+ platformsName,
+ 0,
+ KEY_READ,
+ &platformsKey);
+ if (ERROR_SUCCESS != result)
+ {
+ KHR_ICD_TRACE("Failed to open platforms key %s, continuing\n", platformsName);
+ return TRUE;
+ }
+
+ // for each value
+ for (dwIndex = 0;; ++dwIndex)
+ {
+ char cszLibraryName[1024] = {0};
+ DWORD dwLibraryNameSize = sizeof(cszLibraryName);
+ DWORD dwLibraryNameType = 0;
+ DWORD dwValue = 0;
+ DWORD dwValueSize = sizeof(dwValue);
+
+ // read the value name
+ KHR_ICD_TRACE("Reading value %d...\n", dwIndex);
+ result = RegEnumValueA(
+ platformsKey,
+ dwIndex,
+ cszLibraryName,
+ &dwLibraryNameSize,
+ NULL,
+ &dwLibraryNameType,
+ (LPBYTE)&dwValue,
+ &dwValueSize);
+ // if RegEnumKeyEx fails, we are done with the enumeration
+ if (ERROR_SUCCESS != result)
+ {
+ KHR_ICD_TRACE("Failed to read value %d, done reading key.\n", dwIndex);
+ break;
+ }
+ KHR_ICD_TRACE("Value %s found...\n", cszLibraryName);
+
+ // Require that the value be a DWORD and equal zero
+ if (REG_DWORD != dwLibraryNameType)
+ {
+ KHR_ICD_TRACE("Value not a DWORD, skipping\n");
+ continue;
+ }
+ if (dwValue)
+ {
+ KHR_ICD_TRACE("Value not zero, skipping\n");
+ continue;
+ }
+
+ // add the library
+ khrIcdVendorAdd(cszLibraryName);
+ }
+
+ result = RegCloseKey(platformsKey);
+ if (ERROR_SUCCESS != result)
+ {
+ KHR_ICD_TRACE("Failed to close platforms key %s, ignoring\n", platformsName);
+ }
+
+ return TRUE;
+}
+
+// go through the list of vendors only once
+void khrIcdOsVendorsEnumerateOnce()
+{
+ InitOnceExecuteOnce(&initialized, khrIcdOsVendorsEnumerate, NULL, NULL);
+}
+
+/*
+ *
+ * Dynamic library loading functions
+ *
+ */
+
+// dynamically load a library. returns NULL on failure
+void *khrIcdOsLibraryLoad(const char *libraryName)
+{
+ return (void *)LoadLibraryA(libraryName);
+}
+
+// get a function pointer from a loaded library. returns NULL on failure.
+void *khrIcdOsLibraryGetFunctionAddress(void *library, const char *functionName)
+{
+ if (!library || !functionName)
+ {
+ return NULL;
+ }
+ return GetProcAddress( (HMODULE)library, functionName);
+}
+
+// unload a library.
+void khrIcdOsLibraryUnload(void *library)
+{
+ FreeLibrary( (HMODULE)library);
+}
+
--- /dev/null
+/*
+ * Copyright (c) 2017-2019 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.h"
+#include "icd_windows_hkr.h"
+#include <windows.h>
+#include <cfgmgr32.h>
+#include <assert.h>
+#include <stdbool.h>
+#include <initguid.h>
+#include <Devpkey.h>
+#include <devguid.h>
+
+ // This GUID was only added to devguid.h on Windows SDK v10.0.16232 which
+ // corresponds to Windows 10 Redstone 3 (Windows 10 Fall Creators Update).
+DEFINE_GUID(OCL_GUID_DEVCLASS_SOFTWARECOMPONENT, 0x5c4c3332, 0x344d, 0x483c, 0x87, 0x39, 0x25, 0x9e, 0x93, 0x4c, 0x9c, 0xc8);
+
+typedef enum
+{
+ ProbeFailure,
+ PendingReboot,
+ Valid
+} DeviceProbeResult;
+
+#define KHR_SAFE_RELEASE(mem) \
+ do \
+ { \
+ free(mem); \
+ mem = NULL; \
+ } while (0)
+
+static const char OPENCL_REG_SUB_KEY[] = "OpenCLDriverName";
+
+#ifndef _WIN64
+static const char OPENCL_REG_SUB_KEY_WOW[] = "OpenCLDriverNameWow";
+#endif
+
+// Do not free the memory returned by this function.
+static const char* GetOpenCLRegKeyName(void)
+{
+#ifdef _WIN64
+ return OPENCL_REG_SUB_KEY;
+#else
+ // The suffix/substring "WoW" is meaningful only when a 32-bit
+ // application is running on a 64-bit Windows OS. A 32-bit application
+ // running on a 32-bit OS uses non-WoW names.
+ BOOL is_wow64;
+ if (IsWow64Process(GetCurrentProcess(), &is_wow64) && is_wow64)
+ {
+ return OPENCL_REG_SUB_KEY_WOW;
+ }
+
+ return OPENCL_REG_SUB_KEY;
+#endif
+}
+
+static bool ReadOpenCLKey(DEVINST dnDevNode)
+{
+ HKEY hkey = 0;
+ CONFIGRET ret;
+ bool bRet = false;
+ DWORD dwLibraryNameType = 0;
+ char *cszOclPath = NULL;
+ DWORD dwOclPathSize = 0;
+ LSTATUS result;
+
+ ret = CM_Open_DevNode_Key(
+ dnDevNode,
+ KEY_QUERY_VALUE,
+ 0,
+ RegDisposition_OpenExisting,
+ &hkey,
+ CM_REGISTRY_SOFTWARE);
+
+ if (CR_SUCCESS != ret)
+ {
+ KHR_ICD_TRACE("Failed with ret 0x%x\n", ret);
+ goto out;
+ }
+ else
+ {
+ result = RegQueryValueExA(
+ hkey,
+ GetOpenCLRegKeyName(),
+ NULL,
+ &dwLibraryNameType,
+ NULL,
+ &dwOclPathSize);
+
+ if (ERROR_SUCCESS != result)
+ {
+ KHR_ICD_TRACE("Failed to open sub key 0x%x\n", result);
+ goto out;
+ }
+
+ cszOclPath = malloc(dwOclPathSize);
+ if (NULL == cszOclPath)
+ {
+ KHR_ICD_TRACE("Failed to allocate %u bytes for registry value\n", dwOclPathSize);
+ goto out;
+ }
+
+ result = RegQueryValueExA(
+ hkey,
+ OPENCL_REG_SUB_KEY,
+ NULL,
+ &dwLibraryNameType,
+ (LPBYTE)cszOclPath,
+ &dwOclPathSize);
+ if (ERROR_SUCCESS != result)
+ {
+ KHR_ICD_TRACE("Failed to open sub key 0x%x\n", result);
+ goto out;
+ }
+
+ if (REG_SZ != dwLibraryNameType)
+ {
+ KHR_ICD_TRACE("Unexpected registry entry 0x%x! continuing\n", dwLibraryNameType);
+ goto out;
+ }
+
+ KHR_ICD_TRACE(" Path: %s\n", cszOclPath);
+
+ khrIcdVendorAdd(cszOclPath);
+
+ bRet = true;
+ }
+
+out:
+ free(cszOclPath);
+
+ if (hkey)
+ {
+ result = RegCloseKey(hkey);
+ if (ERROR_SUCCESS != result)
+ {
+ KHR_ICD_TRACE("WARNING: failed to close hkey 0x%x\n", result);
+ }
+ }
+
+ return bRet;
+}
+
+static DeviceProbeResult ProbeDevice(DEVINST devnode)
+{
+ CONFIGRET ret;
+ ULONG ulStatus;
+ ULONG ulProblem;
+
+ ret = CM_Get_DevNode_Status(
+ &ulStatus,
+ &ulProblem,
+ devnode,
+ 0);
+
+ if (CR_SUCCESS != ret)
+ {
+ KHR_ICD_TRACE(" WARNING: failed to probe the status of the device 0x%x\n", ret);
+ return ProbeFailure;
+ }
+
+ //
+ // Careful here, we need to check 2 scenarios:
+ // 1. DN_NEED_RESTART
+ // status flag indicates that a reboot is needed when an _already started_
+ // device cannot be stopped. This covers devices that are still started with their
+ // old KMD (because they couldn't be stopped/restarted) while the UMD is updated
+ // and possibly out of sync.
+ //
+ // 2. Status & DN_HAS_PROBLEM && Problem == CM_PROB_NEED_RESTART
+ // indicates that a reboot is needed when a _stopped device_ cannot be (re)started.
+ //
+ if (((ulStatus & DN_HAS_PROBLEM) && ulProblem == CM_PROB_NEED_RESTART) ||
+ ulStatus & DN_NEED_RESTART)
+ {
+ KHR_ICD_TRACE(" WARNING: device is pending reboot (0x%x), skipping...\n", ulStatus);
+ return PendingReboot;
+ }
+
+ return Valid;
+}
+
+// Tries to look for the OpenCL key under the display devices and
+// if not found, falls back to software component devices.
+bool khrIcdOsVendorsEnumerateHKR(void)
+{
+ CONFIGRET ret;
+ int iret;
+ bool foundOpenCLKey = false;
+ DEVINST devinst = 0;
+ DEVINST devchild = 0;
+ wchar_t *deviceIdList = NULL;
+ ULONG szBuffer = 0;
+
+ OLECHAR display_adapter_guid_str[MAX_GUID_STRING_LEN];
+ ULONG ulFlags = CM_GETIDLIST_FILTER_CLASS |
+ CM_GETIDLIST_FILTER_PRESENT;
+
+ iret = StringFromGUID2(
+ &GUID_DEVCLASS_DISPLAY,
+ display_adapter_guid_str,
+ MAX_GUID_STRING_LEN);
+
+ if (MAX_GUID_STRING_LEN != iret)
+ {
+ KHR_ICD_TRACE("StringFromGUID2 failed with %d\n", iret);
+ goto out;
+ }
+
+ // Paranoia: we might have a new device added to the list between the call
+ // to CM_Get_Device_ID_List_Size() and the call to CM_Get_Device_ID_List().
+ do
+ {
+ ret = CM_Get_Device_ID_List_SizeW(
+ &szBuffer,
+ display_adapter_guid_str,
+ ulFlags);
+
+ if (CR_SUCCESS != ret)
+ {
+ KHR_ICD_TRACE("CM_Get_Device_ID_List_size failed with 0x%x\n", ret);
+ break;
+ }
+
+ // "pulLen [out] Receives a value representing the required buffer
+ // size, in characters."
+ // So we need to allocate the right size in bytes but we still need
+ // to keep szBuffer as it was returned from CM_Get_Device_ID_List_Size so
+ // the call to CM_Get_Device_ID_List will receive the correct size.
+ deviceIdList = malloc(szBuffer * sizeof(wchar_t));
+ if (NULL == deviceIdList)
+ {
+ KHR_ICD_TRACE("Failed to allocate %u bytes for device ID strings\n", szBuffer);
+ break;
+ }
+
+ ret = CM_Get_Device_ID_ListW(
+ display_adapter_guid_str,
+ deviceIdList,
+ szBuffer,
+ ulFlags);
+
+ if (CR_SUCCESS != ret)
+ {
+ KHR_ICD_TRACE("CM_Get_Device_ID_List failed with 0x%x\n", ret);
+ KHR_SAFE_RELEASE(deviceIdList);
+ }
+ } while (CR_BUFFER_SMALL == ret);
+
+ if (NULL == deviceIdList)
+ {
+ goto out;
+ }
+
+ for (PWSTR deviceId = deviceIdList; *deviceId; deviceId += wcslen(deviceId) + 1)
+ {
+ DEVPROPTYPE devpropType;
+
+ KHR_ICD_WIDE_TRACE(L"Device ID: %ls\n", deviceId);
+
+ ret = CM_Locate_DevNodeW(&devinst, deviceId, 0);
+ if (CR_SUCCESS == ret)
+ {
+ KHR_ICD_TRACE(" devinst: %d\n", devinst);
+ }
+ else
+ {
+ KHR_ICD_TRACE("CM_Locate_DevNode failed with 0x%x\n", ret);
+ continue;
+ }
+
+ if (ProbeDevice(devinst) != Valid)
+ {
+ continue;
+ }
+
+ KHR_ICD_TRACE(" Trying to look for the key in the display adapter HKR...\n");
+ if (ReadOpenCLKey(devinst))
+ {
+ foundOpenCLKey = true;
+ continue;
+ }
+
+ KHR_ICD_TRACE(" Could not find the key, proceeding to children software components...\n");
+
+ ret = CM_Get_Child(
+ &devchild,
+ devinst,
+ 0);
+
+ if (CR_SUCCESS != ret)
+ {
+ KHR_ICD_TRACE(" CM_Get_Child returned 0x%x, skipping children...\n", ret);
+ }
+ else
+ {
+ do
+ {
+ wchar_t deviceInstanceID[MAX_DEVICE_ID_LEN] = { 0 };
+ GUID guid;
+ ULONG szGuid = sizeof(guid);
+
+ KHR_ICD_TRACE(" devchild: %d\n", devchild);
+ ret = CM_Get_Device_IDW(
+ devchild,
+ deviceInstanceID,
+ sizeof(deviceInstanceID),
+ 0);
+
+ if (CR_SUCCESS != ret)
+ {
+ KHR_ICD_TRACE(" CM_Get_Device_ID returned 0x%x, skipping device...\n", ret);
+ continue;
+ }
+ else
+ {
+ KHR_ICD_WIDE_TRACE(L" deviceInstanceID: %ls\n", deviceInstanceID);
+ }
+
+ ret = CM_Get_DevNode_PropertyW(
+ devchild,
+ &DEVPKEY_Device_ClassGuid,
+ &devpropType,
+ (PBYTE)&guid,
+ &szGuid,
+ 0);
+
+ if (CR_SUCCESS != ret ||
+ !IsEqualGUID(&OCL_GUID_DEVCLASS_SOFTWARECOMPONENT, &guid))
+ {
+ continue;
+ }
+
+ if (ProbeDevice(devchild) != Valid)
+ {
+ continue;
+ }
+
+ if (ReadOpenCLKey(devchild))
+ {
+ foundOpenCLKey = true;
+ break;
+ }
+ } while (CM_Get_Sibling(&devchild, devchild, 0) == CR_SUCCESS);
+ }
+ }
+
+out:
+ free(deviceIdList);
+ return foundOpenCLKey;
+}
--- /dev/null
+/*
+ * Copyright (c) 2017-2019 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 <stdbool.h>
+
+bool khrIcdOsVendorsEnumerateHKR(void);
include_directories (./inc)
-add_subdirectory (platform)
+add_subdirectory (log)
add_subdirectory (driver_stub)
add_subdirectory (loader_test)
-add_test (OPENCL_ICD_LOADER_TEST ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/icd_loader_test)
+add_test (NAME opencl_icd_loader_test COMMAND icd_loader_test)
list (APPEND OPENCL_DRIVER_STUB_SOURCES driver_stub.def)
endif ()
-add_library (OpenCLDriverStub SHARED ${OPENCL_DRIVER_STUB_SOURCES})
+add_library (OpenCLDriverStub ${OPENCL_DRIVER_STUB_SOURCES})
target_link_libraries (OpenCLDriverStub IcdLog)
extern int test_program_objects();
extern int test_image_objects();
extern int test_sampler_objects();
-extern int initialize_log();
-extern int test_icd_match();
-
extern int test_OpenGL_share();
-extern int test_Direct3D10_share();
+extern int test_release_calls();
+
+extern int test_icd_match();
int main(int argc, char **argv)
{
test_image_objects();
test_sampler_objects();
test_OpenGL_share();
-
-// test_Direct3D10_share();
test_release_calls();
+
test_icd_close_app_log();
test_icd_close_stub_log();
struct clEnqueueMigrateMemObjects_st
{
cl_command_queue command_queue;
- size_t num_mem_objects;
+ cl_uint num_mem_objects;
const cl_mem *mem_objects;
cl_mem_migration_flags flags;
cl_uint num_events_in_wait_list;
+#include <stdlib.h>
+
#include <CL/cl.h>
#include "param_struct.h"
#include <platform/icd_test_log.h>
+#include <stdlib.h>
+
#include <CL/cl.h>
#include "param_struct.h"
#include <platform/icd_test_log.h>
--- /dev/null
+add_library (IcdLog icd_test_log.c)
+if (WIN32)
+ target_compile_definitions (IcdLog PRIVATE _CRT_SECURE_NO_WARNINGS)
+endif()
--- /dev/null
+# Set this if system does not have OpenCL headers in standard include directory
+CL_HEADER_PATH := ../../
+
+.PHONY: clean
+
+CFLAGS := -I${CL_HEADER_PATH}
+CFLAGS += -fPIC
+
+OUTDIR := ../../bin
+
+${OUTDIR}/libIcdLog.so: icd_test_log.c
+ ${CC} ${CFLAGS} -shared -Wl,-soname,libIcdLog.so -o $@ $^
+
+clean:
+ rm -f ${OUTDIR}/libIcdLog.so
--- /dev/null
+#include<sys/stat.h>
+#include<stdlib.h>
+#include<stdio.h>
+#include<stdarg.h>
+#include<CL/cl.h>
+#include<platform/icd_test_log.h>
+
+#define APP_LOG_FILE "icd_test_app_log.txt"
+#define STUB_LOG_FILE "icd_test_stub_log.txt"
+
+static FILE *app_log_file;
+static FILE *stub_log_file;
+
+int test_icd_initialize_app_log(void)
+{
+ app_log_file = fopen(APP_LOG_FILE, "w");
+ if (!app_log_file) {
+ printf("Unable to open file %s\n", APP_LOG_FILE);
+ return -1;
+ }
+
+ return 0;
+}
+
+void test_icd_close_app_log(void)
+{
+ fclose(app_log_file);
+}
+
+void test_icd_app_log(const char *format, ...)
+{
+ va_list args;
+ va_start(args, format);
+ vfprintf(app_log_file, format, args);
+ va_end(args);
+}
+
+int test_icd_initialize_stub_log(void)
+{
+ stub_log_file = fopen(STUB_LOG_FILE, "w");
+ if (!stub_log_file) {
+ printf("Unable to open file %s\n", STUB_LOG_FILE);
+ return -1;
+ }
+
+ return 0;
+
+}
+
+void test_icd_close_stub_log(void)
+{
+ fclose(stub_log_file);
+}
+
+void test_icd_stub_log(const char *format, ...)
+{
+ va_list args;
+ va_start(args, format);
+ vfprintf(stub_log_file, format, args);
+ va_end(args);
+}
+
+static char *test_icd_get_log(const char *filename)
+{
+ struct stat statbuf;
+ FILE *fp;
+ char *source = NULL;
+
+ fp = fopen(filename, "rb");
+
+ if (fp) {
+ size_t fsize = 0;
+ stat(filename, &statbuf);
+ fsize = statbuf.st_size;
+ source = (char *)malloc(fsize+1); // +1 for NULL terminator
+ if (source) {
+ if (fsize) {
+ if (fread(source, fsize, 1, fp) != 1) {
+ free(source);
+ source = NULL;
+ } else {
+ source[fsize] = '\0';
+ }
+ } else {
+ // Don't fail when fsize = 0, just return empty string
+ source[fsize] = '\0';
+ }
+ }
+ fclose(fp);
+ }
+
+ return source;
+}
+
+char *test_icd_get_app_log(void)
+{
+ return test_icd_get_log(APP_LOG_FILE);
+}
+
+char *test_icd_get_stub_log(void)
+{
+ return test_icd_get_log(STUB_LOG_FILE);
+}
+++ /dev/null
-add_library (IcdLog SHARED icd_test_log.c)
+++ /dev/null
-# Set this if system does not have OpenCL headers in standard include directory
-CL_HEADER_PATH := ../../
-
-.PHONY: clean
-
-CFLAGS := -I${CL_HEADER_PATH}
-CFLAGS += -fPIC
-
-OUTDIR := ../../bin
-
-${OUTDIR}/libIcdLog.so: icd_test_log.c
- ${CC} ${CFLAGS} -shared -Wl,-soname,libIcdLog.so -o $@ $^
-
-clean:
- rm -f ${OUTDIR}/libIcdLog.so
+++ /dev/null
-#include<sys/stat.h>
-#include<stdlib.h>
-#include<stdio.h>
-#include<stdarg.h>
-#include<CL/cl.h>
-#include<platform/icd_test_log.h>
-
-#define APP_LOG_FILE "icd_test_app_log.txt"
-#define STUB_LOG_FILE "icd_test_stub_log.txt"
-
-static FILE *app_log_file;
-static FILE *stub_log_file;
-
-int test_icd_initialize_app_log(void)
-{
- app_log_file = fopen(APP_LOG_FILE, "w");
- if (!app_log_file) {
- printf("Unable to open file %s\n", APP_LOG_FILE);
- return -1;
- }
-
- return 0;
-}
-
-void test_icd_close_app_log(void)
-{
- fclose(app_log_file);
-}
-
-void test_icd_app_log(const char *format, ...)
-{
- va_list args;
- va_start(args, format);
- vfprintf(app_log_file, format, args);
- va_end(args);
-}
-
-int test_icd_initialize_stub_log(void)
-{
- stub_log_file = fopen(STUB_LOG_FILE, "w");
- if (!stub_log_file) {
- printf("Unable to open file %s\n", STUB_LOG_FILE);
- return -1;
- }
-
- return 0;
-
-}
-
-void test_icd_close_stub_log(void)
-{
- fclose(stub_log_file);
-}
-
-void test_icd_stub_log(const char *format, ...)
-{
- va_list args;
- va_start(args, format);
- vfprintf(stub_log_file, format, args);
- va_end(args);
-}
-
-static char *test_icd_get_log(const char *filename)
-{
- struct stat statbuf;
- FILE *fp;
- char *source = NULL;
-
- fp = fopen(filename, "rb");
-
- if (fp) {
- size_t fsize = 0;
- stat(filename, &statbuf);
- fsize = statbuf.st_size;
- source = (char *)malloc(fsize+1); // +1 for NULL terminator
- if (source) {
- if (fsize) {
- if (fread(source, fsize, 1, fp) != 1) {
- free(source);
- source = NULL;
- } else {
- source[fsize] = '\0';
- }
- } else {
- // Don't fail when fsize = 0, just return empty string
- source[fsize] = '\0';
- }
- }
- fclose(fp);
- }
-
- return source;
-}
-
-char *test_icd_get_app_log(void)
-{
- return test_icd_get_log(APP_LOG_FILE);
-}
-
-char *test_icd_get_stub_log(void)
-{
- return test_icd_get_log(STUB_LOG_FILE);
-}