Merge branch 'master' into master
diff --git a/.appveyor.yml b/.appveyor.yml
index 6b4f86a..39121a2 100644
--- a/.appveyor.yml
+++ b/.appveyor.yml
@@ -15,6 +15,6 @@
- cmake -DOPENCL_ICD_LOADER_HEADERS_DIR=inc/OpenCL-Headers -H. -Bbuild -A%PLATFORM%
build:
- project: build\OPENCL_ICD_LOADER.sln
+ project: build\OpenCL-ICD-Loader.sln
parallel: true
verbosity: normal
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 66a5269..1cf4013 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,6 @@
-cmake_minimum_required (VERSION 2.8.11)
+cmake_minimum_required (VERSION 3.1)
-project (OPENCL_ICD_LOADER)
+project (OpenCL-ICD-Loader VERSION 1.2)
include (GNUInstallDirs)
find_package (Threads REQUIRED)
@@ -34,6 +34,11 @@
# advance. Use it with discretion.
option (BUILD_SHARED_LIBS "Build shared libs" ON)
+# This option enables support for OpenCL 3.0 Provisional in the ICD loader. It
+# is currently off by default while the specification is provisional, as it may
+# change.
+option (ENABLE_OPENCL30_PROVISIONAL "Enable 3.0 provisional entry points" OFF)
+
include(CheckFunctionExists)
check_function_exists(secure_getenv HAVE_SECURE_GETENV)
check_function_exists(__secure_getenv HAVE___SECURE_GETENV)
@@ -45,11 +50,24 @@
loader/icd.h
loader/icd_dispatch.c
loader/icd_dispatch.h
+ loader/icd_dispatch_generated.c
loader/icd_envvars.h
loader/icd_platform.h)
if (WIN32)
+ # By default don't include OpenCL 3.0 symbol definitions (i.e. comment them
+ # out), but include them for OpenCL 3.0 builds. Once the symbols are no
+ # longer provisional then they may be included unconditionally.
+ set(ENABLE_OPENCL30_SYMBOLS ";")
+ if (ENABLE_OPENCL30_PROVISIONAL)
+ set(ENABLE_OPENCL30_SYMBOLS "")
+ endif ()
+ configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/loader/windows/OpenCL.def.in
+ ${CMAKE_CURRENT_BINARY_DIR}/loader/windows/OpenCL.def)
+
list (APPEND OPENCL_ICD_LOADER_SOURCES
+ loader/windows/adapter.h
loader/windows/icd_windows.c
loader/windows/icd_windows.h
loader/windows/icd_windows_dxgk.c
@@ -57,7 +75,9 @@
loader/windows/icd_windows_envvars.c
loader/windows/icd_windows_hkr.c
loader/windows/icd_windows_hkr.h
- loader/windows/OpenCL.def
+ loader/windows/icd_windows_apppackage.cpp
+ loader/windows/icd_windows_apppackage.h
+ ${CMAKE_CURRENT_BINARY_DIR}/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
@@ -67,37 +87,38 @@
include_directories ($ENV{WDK}/km)
endif ()
else ()
+ # By default don't include OpenCL 3.0 symbol definitions (i.e. comment them
+ # out), but include them for OpenCL 3.0 builds. Once the symbols are no
+ # longer provisional then they may be included unconditionally.
+ set(ENABLE_OPENCL30_SYMBOLS_START "/*")
+ set(ENABLE_OPENCL30_SYMBOLS_END "*/")
+ if (ENABLE_OPENCL30_PROVISIONAL)
+ set(ENABLE_OPENCL30_SYMBOLS_START "")
+ set(ENABLE_OPENCL30_SYMBOLS_END "")
+ endif ()
+ configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/loader/linux/icd_exports.map.in
+ ${CMAKE_CURRENT_BINARY_DIR}/loader/linux/icd_exports.map)
+
list (APPEND OPENCL_ICD_LOADER_SOURCES
loader/linux/icd_linux.c
loader/linux/icd_linux_envvars.c
- loader/linux/icd_exports.map)
+ ${CMAKE_CURRENT_BINARY_DIR}/loader/linux/icd_exports.map)
endif ()
set (OPENCL_ICD_LOADER_HEADERS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/inc CACHE PATH "Path to OpenCL Headers")
add_library (OpenCL ${OPENCL_ICD_LOADER_SOURCES})
set_target_properties (OpenCL PROPERTIES VERSION "1.2" SOVERSION "1")
+target_include_directories(OpenCL SYSTEM PUBLIC ${OPENCL_ICD_LOADER_HEADERS_DIR})
if (WIN32)
- target_link_libraries (OpenCL cfgmgr32.lib)
- if(DEFINED ENV{WDKContentRoot})
- file(GLOB D3DKMT_HEADER "$ENV{WDKContentRoot}/Include/*/km/d3dkmthk.h")
- else()
- file(GLOB D3DKMT_HEADER "$ENV{HOMEDRIVE}/Program Files */Windows Kits/10/Include/*/km/d3dkmthk.h")
- endif()
+ target_link_libraries (OpenCL cfgmgr32.lib runtimeobject.lib)
- if(D3DKMT_HEADER)
- list(GET D3DKMT_HEADER -1 LATEST_D3DKMT_HEADER)
- get_filename_component(WDK_DIRECTORY ${LATEST_D3DKMT_HEADER} DIRECTORY)
- get_filename_component(WDK_DIRECTORY ${WDK_DIRECTORY} DIRECTORY)
- message(STATUS "Found the Windows WDK in: ${WDK_DIRECTORY}")
- target_compile_definitions(OpenCL PRIVATE OPENCL_ICD_LOADER_REQUIRE_WDK)
- target_include_directories(OpenCL PRIVATE ${WDK_DIRECTORY}/um)
- target_include_directories(OpenCL PRIVATE ${WDK_DIRECTORY}/km)
- target_include_directories(OpenCL PRIVATE ${WDK_DIRECTORY}/shared)
- else()
- message(FATAL_ERROR "The Windows WDK was not found. Consider disabling OPENCL_ICD_LOADER_REQUIRE_WDK. Aborting.")
+ option (OPENCL_ICD_LOADER_DISABLE_OPENCLON12 "Disable support for OpenCLOn12. Support for OpenCLOn12 should only be disabled when building an import lib to link with, and must be enabled when building an ICD loader for distribution!" OFF)
+ if (OPENCL_ICD_LOADER_DISABLE_OPENCLON12)
+ target_compile_definitions(OpenCL PRIVATE OPENCL_ICD_LOADER_DISABLE_OPENCLON12)
endif()
if(NOT USE_DYNAMIC_VCXX_RUNTIME)
@@ -114,19 +135,27 @@
if (APPLE)
target_link_libraries (OpenCL ${CMAKE_THREAD_LIBS_INIT})
else ()
- set_target_properties (OpenCL PROPERTIES LINK_FLAGS "-Wl,--version-script -Wl,${CMAKE_CURRENT_SOURCE_DIR}/loader/linux/icd_exports.map")
+ set_target_properties (OpenCL PROPERTIES LINK_FLAGS "-Wl,--version-script -Wl,${CMAKE_CURRENT_BINARY_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)
+if (ENABLE_OPENCL30_PROVISIONAL)
+ add_definitions (-DCL_TARGET_OPENCL_VERSION=300)
+else()
+ add_definitions (-DCL_TARGET_OPENCL_VERSION=220)
+endif()
target_include_directories (OpenCL PRIVATE ${CMAKE_CURRENT_BINARY_DIR} loader)
target_link_libraries (OpenCL ${CMAKE_DL_LIBS})
-include (CTest)
-if (BUILD_TESTING)
+option (OPENCL_ICD_LOADER_BUILD_TESTING "Enable support for OpenCL ICD Loader testing." OFF)
+
+if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME OR OPENCL_ICD_LOADER_BUILD_TESTING)
+ include(CTest)
+endif()
+if((CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME OR OPENCL_ICD_LOADER_BUILD_TESTING) AND BUILD_TESTING)
add_subdirectory (test)
endif()
diff --git a/README.md b/README.md
index 827f07c..9721bbc 100644
--- a/README.md
+++ b/README.md
@@ -30,15 +30,13 @@
To use system OpenCL Headers, please specify the OpenCL Header location using the CMake variable `OPENCL_ICD_LOADER_HEADERS_DIR`.
By default, the OpenCL ICD Loader will look for OpenCL Headers in the `inc` directory.
-OpenCL ICD Loader on Windows now requires the Windows Driver Kit (WDK).
-While WDK headers are sufficient to be able to build OpenCL ICD Loader, you will need WDK libraries for it to function correctly.
-Not having WDK installed may prevent the OpenCL ICD Loader from enumerating some OpenCL implementations on latest Windows versions.
-So, we advise that you install recent Windows WDK currently available at -
-* https://docs.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk
-
The OpenCL ICD Loader uses CMake for its build system.
If CMake is not provided by your build system or OS package manager, please consult the [CMake website](https://cmake.org).
+The Windows OpenCL ICD Loader requires the Windows SDK to check for and enumerate the OpenCLOn12 ICD.
+An OpenCL ICD Loader can be built without a dependency on the Windows SDK using the CMake variable `OPENCL_ICD_LOADER_DISABLE_OPENCLON12`.
+This variable should only be used when building an import lib to link with, and must be enabled when building an OpenCL ICD Loader for distribution!
+
### Build and Install Directories
A common convention is to place the `build` directory in the top directory of the repository and to place the `install` directory as a child of the `build` directory.
diff --git a/loader/icd_dispatch.c b/loader/icd_dispatch.c
index df967cb..878f6e0 100644
--- a/loader/icd_dispatch.c
+++ b/loader/icd_dispatch.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2019 The Khronos Group Inc.
+ * Copyright (c) 2012-2020 The Khronos Group Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -21,11 +21,90 @@
#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
+static void* khrIcdGetExtensionFunctionAddress(const char* function_name)
+{
+// 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 KHR_ICD_CHECK_EXTENSION_FUNCTION(name) \
+ do \
+ { \
+ if (!strcmp(function_name, #name)) \
+ { \
+ return (void*)(size_t)&name; \
+ } \
+ } while (0)
+
+ // Functions supporting the creation of OpenCL Memory Objects
+ // from OpenGL Objects (cl_apple_gl_sharing, cl_khr_gl_sharing)
+ KHR_ICD_CHECK_EXTENSION_FUNCTION(clCreateFromGLBuffer);
+ KHR_ICD_CHECK_EXTENSION_FUNCTION(clCreateFromGLTexture);
+ KHR_ICD_CHECK_EXTENSION_FUNCTION(clCreateFromGLTexture2D);
+ KHR_ICD_CHECK_EXTENSION_FUNCTION(clCreateFromGLTexture3D);
+ KHR_ICD_CHECK_EXTENSION_FUNCTION(clCreateFromGLRenderbuffer);
+ KHR_ICD_CHECK_EXTENSION_FUNCTION(clGetGLObjectInfo);
+ KHR_ICD_CHECK_EXTENSION_FUNCTION(clGetGLTextureInfo);
+ KHR_ICD_CHECK_EXTENSION_FUNCTION(clEnqueueAcquireGLObjects);
+ KHR_ICD_CHECK_EXTENSION_FUNCTION(clEnqueueReleaseGLObjects);
+
+ // cl_khr_gl_sharing
+ KHR_ICD_CHECK_EXTENSION_FUNCTION(clGetGLContextInfoKHR);
+
+ // cl_khr_gl_event
+ KHR_ICD_CHECK_EXTENSION_FUNCTION(clCreateEventFromGLsyncKHR);
+
+#if defined(_WIN32)
+ // cl_khr_d3d10_sharing
+ KHR_ICD_CHECK_EXTENSION_FUNCTION(clGetDeviceIDsFromD3D10KHR);
+ KHR_ICD_CHECK_EXTENSION_FUNCTION(clCreateFromD3D10BufferKHR);
+ KHR_ICD_CHECK_EXTENSION_FUNCTION(clCreateFromD3D10Texture2DKHR);
+ KHR_ICD_CHECK_EXTENSION_FUNCTION(clCreateFromD3D10Texture3DKHR);
+ KHR_ICD_CHECK_EXTENSION_FUNCTION(clEnqueueAcquireD3D10ObjectsKHR);
+ KHR_ICD_CHECK_EXTENSION_FUNCTION(clEnqueueReleaseD3D10ObjectsKHR);
+ // cl_khr_d3d11_sharing
+ KHR_ICD_CHECK_EXTENSION_FUNCTION(clGetDeviceIDsFromD3D11KHR);
+ KHR_ICD_CHECK_EXTENSION_FUNCTION(clCreateFromD3D11BufferKHR);
+ KHR_ICD_CHECK_EXTENSION_FUNCTION(clCreateFromD3D11Texture2DKHR);
+ KHR_ICD_CHECK_EXTENSION_FUNCTION(clCreateFromD3D11Texture3DKHR);
+ KHR_ICD_CHECK_EXTENSION_FUNCTION(clEnqueueAcquireD3D11ObjectsKHR);
+ KHR_ICD_CHECK_EXTENSION_FUNCTION(clEnqueueReleaseD3D11ObjectsKHR);
+ // cl_khr_dx9_media_sharing
+ KHR_ICD_CHECK_EXTENSION_FUNCTION(clGetDeviceIDsFromDX9MediaAdapterKHR);
+ KHR_ICD_CHECK_EXTENSION_FUNCTION(clCreateFromDX9MediaSurfaceKHR);
+ KHR_ICD_CHECK_EXTENSION_FUNCTION(clEnqueueAcquireDX9MediaSurfacesKHR);
+ KHR_ICD_CHECK_EXTENSION_FUNCTION(clEnqueueReleaseDX9MediaSurfacesKHR);
+#endif
+
+ // cl_ext_device_fission
+ KHR_ICD_CHECK_EXTENSION_FUNCTION(clCreateSubDevicesEXT);
+ KHR_ICD_CHECK_EXTENSION_FUNCTION(clRetainDeviceEXT);
+ KHR_ICD_CHECK_EXTENSION_FUNCTION(clReleaseDeviceEXT);
+
+ // cl_khr_egl_image
+ KHR_ICD_CHECK_EXTENSION_FUNCTION(clCreateFromEGLImageKHR);
+ KHR_ICD_CHECK_EXTENSION_FUNCTION(clEnqueueAcquireEGLObjectsKHR);
+ KHR_ICD_CHECK_EXTENSION_FUNCTION(clEnqueueReleaseEGLObjectsKHR);
+
+ // cl_khr_egl_event
+ KHR_ICD_CHECK_EXTENSION_FUNCTION(clCreateEventFromEGLSyncKHR);
+
+ // cl_khr_sub_groups
+ KHR_ICD_CHECK_EXTENSION_FUNCTION(clGetKernelSubGroupInfoKHR);
+
+#undef KHR_ICD_CHECK_EXTENSION_FUNCTION
+
+ return NULL;
+}
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+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;
@@ -42,11 +121,11 @@
return CL_INVALID_VALUE;
}
// set num_platforms to 0 and set all platform pointers to NULL
- if (num_platforms)
+ if (num_platforms)
{
*num_platforms = 0;
}
- for (i = 0; i < num_entries && platforms; ++i)
+ for (i = 0; i < num_entries && platforms; ++i)
{
platforms[i] = NULL;
}
@@ -71,1364 +150,62 @@
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
+CL_API_ENTRY void* CL_API_CALL clGetExtensionFunctionAddress(
+ const char* function_name) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
{
- // 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);
-}
+ void* function_address = NULL;
+ size_t function_name_length = 0;
+ KHRicdVendor* vendor = NULL;
-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();
+ khrIcdInitialize();
- // return any ICD-aware extensions
+ // check if this is an ICD-aware extension
+ function_address = khrIcdGetExtensionFunctionAddress(function_name);
+ if (function_address)
+ {
+ return function_address;
+ }
- // 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
+ // fall back to vendor extension detection
+ function_name_length = strlen(function_name);
+ 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);
+ }
+ }
+ }
- // 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);
+ return NULL;
+}
- // cl_khr_gl_sharing
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clGetGLContextInfoKHR);
+CL_API_ENTRY void* CL_API_CALL clGetExtensionFunctionAddressForPlatform(
+ cl_platform_id platform,
+ const char* function_name) CL_API_SUFFIX__VERSION_1_2
+{
+ void* function_address = NULL;
- // cl_khr_gl_event
- CL_COMMON_EXTENSION_ENTRYPOINT_ADD(clCreateEventFromGLsyncKHR);
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(function_name, NULL);
-#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
+ // make sure the ICD is initialized
+ khrIcdInitialize();
- // 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
+ // check if this is an ICD-aware extension
+ function_address = khrIcdGetExtensionFunctionAddress(function_name);
+ if (function_address)
+ {
+ return function_address;
+ }
// This is not an ICD-aware extension, so call into the implementation
// to get the extension function address.
@@ -1439,1236 +216,63 @@
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);
-}
+#ifdef CL_VERSION_3_0
+/* ICD loader entry points should not normally be ifdef'ed, but prevent
+ * OpenCL 3.0 provisional entry points from being in general builds before the
+ * specification is finalized. */
-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
+CL_API_ENTRY cl_mem CL_API_CALL clCreateBufferWithProperties(
+ cl_context context,
+ const cl_mem_properties* properties,
+ cl_mem_flags flags,
+ size_t size,
+ void* host_ptr,
+ cl_int* errcode_ret) CL_API_SUFFIX__VERSION_3_0
{
KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
- return context->dispatch->clCreateImage2D(
+ return context->dispatch->clCreateBufferWithProperties(
context,
+ properties,
flags,
- image_format,
- image_width,
- image_height,
- image_row_pitch,
+ size,
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
+CL_API_ENTRY cl_mem CL_API_CALL clCreateImageWithProperties(
+ cl_context context,
+ const cl_mem_properties* properties,
+ 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_3_0
{
KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
- return context->dispatch->clCreateImage3D(
+ return context->dispatch->clCreateImageWithProperties(
context,
+ properties,
flags,
image_format,
- image_width,
- image_height,
- image_depth,
- image_row_pitch,
- image_slice_pitch,
+ image_desc,
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_API_ENTRY cl_int CL_API_CALL clSetContextDestructorCallback(
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
+ void (CL_CALLBACK* pfn_notify)(cl_context context, void* user_data),
+ void* user_data) CL_API_SUFFIX__VERSION_3_0
{
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);
+ return context->dispatch->clSetContextDestructorCallback(
+ context,
+ pfn_notify,
+ user_data);
}
-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);
+#endif // CL_VERSION_3_0
+
+#ifdef __cplusplus
}
-
-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);
-}
-
-
+#endif
diff --git a/loader/icd_dispatch.h b/loader/icd_dispatch.h
index 22af335..c1adbfa 100644
--- a/loader/icd_dispatch.h
+++ b/loader/icd_dispatch.h
@@ -35,6 +35,14 @@
#define CL_USE_DEPRECATED_OPENCL_2_0_APIS
#endif
+#ifndef CL_USE_DEPRECATED_OPENCL_2_1_APIS
+#define CL_USE_DEPRECATED_OPENCL_2_1_APIS
+#endif
+
+#ifndef CL_USE_DEPRECATED_OPENCL_2_2_APIS
+#define CL_USE_DEPRECATED_OPENCL_2_2_APIS
+#endif
+
// cl.h
#include <CL/cl.h>
@@ -51,1410 +59,7 @@
#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;
-};
+#include <CL/cl_icd.h>
/*
*
@@ -1464,47 +69,47 @@
struct _cl_platform_id
{
- KHRicdVendorDispatch *dispatch;
+ cl_icd_dispatch *dispatch;
};
struct _cl_device_id
{
- KHRicdVendorDispatch *dispatch;
+ cl_icd_dispatch *dispatch;
};
struct _cl_context
{
- KHRicdVendorDispatch *dispatch;
+ cl_icd_dispatch *dispatch;
};
struct _cl_command_queue
{
- KHRicdVendorDispatch *dispatch;
+ cl_icd_dispatch *dispatch;
};
struct _cl_mem
{
- KHRicdVendorDispatch *dispatch;
+ cl_icd_dispatch *dispatch;
};
struct _cl_program
{
- KHRicdVendorDispatch *dispatch;
+ cl_icd_dispatch *dispatch;
};
struct _cl_kernel
{
- KHRicdVendorDispatch *dispatch;
+ cl_icd_dispatch *dispatch;
};
struct _cl_event
{
- KHRicdVendorDispatch *dispatch;
+ cl_icd_dispatch *dispatch;
};
struct _cl_sampler
{
- KHRicdVendorDispatch *dispatch;
+ cl_icd_dispatch *dispatch;
};
#endif // _ICD_DISPATCH_H_
diff --git a/loader/icd_dispatch_generated.c b/loader/icd_dispatch_generated.c
new file mode 100644
index 0000000..8a05935
--- /dev/null
+++ b/loader/icd_dispatch_generated.c
@@ -0,0 +1,2618 @@
+/*
+ * Copyright (c) 2012-2020 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * OpenCL is a trademark of Apple Inc. used under license by Khronos.
+ */
+
+#include "icd_dispatch.h"
+#include "icd.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// Core APIs:
+
+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
+{
+ 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);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+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
+{
+ 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_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* errinfo, const void* private_info, size_t cb, void* user_data),
+ void* user_data,
+ cl_int* errcode_ret) CL_API_SUFFIX__VERSION_1_0
+{
+ if (num_devices == 0 || devices == NULL) {
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(NULL, CL_INVALID_VALUE);
+ }
+ 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* errinfo, const void* private_info, size_t cb, void* user_data),
+ void* user_data,
+ cl_int* errcode_ret) CL_API_SUFFIX__VERSION_1_0
+{
+ cl_platform_id platform = NULL;
+ khrIcdInitialize();
+ khrIcdContextPropertiesGetPlatform(properties, &platform);
+ 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);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+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);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+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_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);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+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);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+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_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 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);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+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 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);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+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 == 0 || event_list == NULL) {
+ 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);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+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);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+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);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+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 size,
+ 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,
+ size,
+ 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 size,
+ 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,
+ size,
+ ptr,
+ 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 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->clEnqueueCopyBuffer(
+ command_queue,
+ src_buffer,
+ dst_buffer,
+ src_offset,
+ dst_offset,
+ size,
+ 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 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 size,
+ 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,
+ size,
+ 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 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 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 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_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 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 cl_int CL_API_CALL clUnloadCompiler(
+ void ) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
+{
+ // Nothing!
+ return CL_SUCCESS;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+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_EXT_SUFFIX__VERSION_1_2_DEPRECATED
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clCreateCommandQueue(
+ context,
+ device,
+ properties,
+ errcode_ret);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+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_EXT_SUFFIX__VERSION_1_2_DEPRECATED
+{
+ 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 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_EXT_SUFFIX__VERSION_1_2_DEPRECATED
+{
+ 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_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 memobj, void* user_data),
+ 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_int CL_API_CALL clSetEventCallback(
+ cl_event event,
+ cl_int command_exec_callback_type,
+ void (CL_CALLBACK* pfn_notify)(cl_event event, cl_int event_command_status, void *user_data),
+ 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_int CL_API_CALL clEnqueueReadBufferRect(
+ cl_command_queue command_queue,
+ cl_mem buffer,
+ cl_bool blocking_read,
+ const size_t* buffer_offset,
+ const size_t* host_offset,
+ 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_offset,
+ host_offset,
+ 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 clEnqueueWriteBufferRect(
+ cl_command_queue command_queue,
+ cl_mem buffer,
+ cl_bool blocking_write,
+ const size_t* buffer_offset,
+ const size_t* host_offset,
+ 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_write,
+ buffer_offset,
+ host_offset,
+ 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 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 clCreateSubDevices(
+ cl_device_id in_device,
+ const cl_device_partition_property* properties,
+ cl_uint num_devices,
+ cl_device_id* out_devices,
+ cl_uint* num_devices_ret) 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_devices,
+ out_devices,
+ num_devices_ret);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+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);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+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_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 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 clUnloadPlatformCompiler(
+ cl_platform_id platform) CL_API_SUFFIX__VERSION_1_2
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(platform, CL_INVALID_PLATFORM);
+ return platform->dispatch->clUnloadPlatformCompiler(
+ platform);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+CL_API_ENTRY cl_int CL_API_CALL clGetKernelArgInfo(
+ cl_kernel kernel,
+ cl_uint arg_index,
+ 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_index,
+ param_name,
+ param_value_size,
+ param_value,
+ param_value_size_ret);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+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 size,
+ 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,
+ size,
+ 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,
+ 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_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 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 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 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
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(context, 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 == NULL) return;
+ context->dispatch->clSVMFree(
+ context,
+ svm_pointer);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+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 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_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);
+ return context->dispatch->clSetDefaultDeviceCommandQueue(
+ context,
+ device,
+ command_queue);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+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);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+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_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 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);
+ 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_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 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_EXT_SUFFIX__VERSION_2_2_DEPRECATED
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(program, CL_INVALID_PROGRAM);
+ return program->dispatch->clSetProgramReleaseCallback(
+ program,
+ pfn_notify,
+ user_data);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+// cl_ext_device_fission
+
+CL_API_ENTRY cl_int CL_API_CALL clReleaseDeviceEXT(
+ cl_device_id device) CL_EXT_SUFFIX__VERSION_1_1
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
+ return device->dispatch->clReleaseDeviceEXT(
+ device);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL clRetainDeviceEXT(
+ cl_device_id device) CL_EXT_SUFFIX__VERSION_1_1
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(device, CL_INVALID_DEVICE);
+ return device->dispatch->clRetainDeviceEXT(
+ device);
+}
+
+CL_API_ENTRY cl_int CL_API_CALL clCreateSubDevicesEXT(
+ cl_device_id in_device,
+ const cl_device_partition_property_ext* properties,
+ cl_uint num_entries,
+ cl_device_id* out_devices,
+ cl_uint* num_devices) CL_EXT_SUFFIX__VERSION_1_1
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(in_device, CL_INVALID_DEVICE);
+ return in_device->dispatch->clCreateSubDevicesEXT(
+ in_device,
+ properties,
+ num_entries,
+ out_devices,
+ num_devices);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+// cl_khr_d3d10_sharing
+
+#if defined(_WIN32)
+
+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) CL_API_SUFFIX__VERSION_1_0
+{
+ 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) CL_API_SUFFIX__VERSION_1_0
+{
+ 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) CL_API_SUFFIX__VERSION_1_0
+{
+ 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) CL_API_SUFFIX__VERSION_1_0
+{
+ 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) CL_API_SUFFIX__VERSION_1_0
+{
+ 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) CL_API_SUFFIX__VERSION_1_0
+{
+ 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);
+}
+
+#endif // defined(_WIN32)
+
+///////////////////////////////////////////////////////////////////////////////
+
+// cl_khr_d3d11_sharing
+
+#if defined(_WIN32)
+
+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) CL_API_SUFFIX__VERSION_1_2
+{
+ 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) CL_API_SUFFIX__VERSION_1_2
+{
+ 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) CL_API_SUFFIX__VERSION_1_2
+{
+ 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) CL_API_SUFFIX__VERSION_1_2
+{
+ 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) CL_API_SUFFIX__VERSION_1_2
+{
+ 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) CL_API_SUFFIX__VERSION_1_2
+{
+ 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);
+}
+
+#endif // defined(_WIN32)
+
+///////////////////////////////////////////////////////////////////////////////
+
+// cl_khr_dx9_media_sharing
+
+#if defined(_WIN32)
+
+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) CL_API_SUFFIX__VERSION_1_2
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(platform, CL_INVALID_PLATFORM);
+ return platform->dispatch->clGetDeviceIDsFromDX9MediaAdapterKHR(
+ platform,
+ num_media_adapters,
+ media_adapter_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) CL_API_SUFFIX__VERSION_1_2
+{
+ 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) CL_API_SUFFIX__VERSION_1_2
+{
+ 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) CL_API_SUFFIX__VERSION_1_2
+{
+ 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 // defined(_WIN32)
+
+///////////////////////////////////////////////////////////////////////////////
+
+// cl_khr_egl_event
+
+CL_API_ENTRY cl_event CL_API_CALL clCreateEventFromEGLSyncKHR(
+ cl_context context,
+ CLeglSyncKHR sync,
+ CLeglDisplayKHR display,
+ cl_int* errcode_ret) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clCreateEventFromEGLSyncKHR(
+ context,
+ sync,
+ display,
+ errcode_ret);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+// cl_khr_egl_image
+
+CL_API_ENTRY cl_mem CL_API_CALL clCreateFromEGLImageKHR(
+ cl_context context,
+ CLeglDisplayKHR egldisplay,
+ CLeglImageKHR eglimage,
+ cl_mem_flags flags,
+ const cl_egl_image_properties_khr* properties,
+ cl_int* errcode_ret) CL_API_SUFFIX__VERSION_1_0
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clCreateFromEGLImageKHR(
+ context,
+ egldisplay,
+ eglimage,
+ 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) CL_API_SUFFIX__VERSION_1_0
+{
+ 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) CL_API_SUFFIX__VERSION_1_0
+{
+ 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_gl_event
+
+CL_API_ENTRY cl_event CL_API_CALL clCreateEventFromGLsyncKHR(
+ cl_context context,
+ cl_GLsync sync,
+ cl_int* errcode_ret) CL_EXT_SUFFIX__VERSION_1_1
+{
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(context, CL_INVALID_CONTEXT);
+ return context->dispatch->clCreateEventFromGLsyncKHR(
+ context,
+ sync,
+ errcode_ret);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+// cl_khr_gl_sharing
+
+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;
+ khrIcdInitialize();
+ 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_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_EXT_SUFFIX__VERSION_1_1_DEPRECATED
+{
+ 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_EXT_SUFFIX__VERSION_1_1_DEPRECATED
+{
+ 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_khr_subgroups
+
+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_DEPRECATED
+{
+ 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);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/loader/icd_platform.h b/loader/icd_platform.h
index b16d0db..f84f519 100644
--- a/loader/icd_platform.h
+++ b/loader/icd_platform.h
@@ -24,9 +24,9 @@
#define PATH_SEPARATOR ':'
#define DIRECTORY_SYMBOL '/'
#ifdef __ANDROID__
-#define ICD_VENDOR_PATH "/system/vendor/Khronos/OpenCL/vendors/";
+#define ICD_VENDOR_PATH "/system/vendor/Khronos/OpenCL/vendors";
#else
-#define ICD_VENDOR_PATH "/etc/OpenCL/vendors/";
+#define ICD_VENDOR_PATH "/etc/OpenCL/vendors";
#endif // ANDROID
#elif defined(_WIN32)
diff --git a/loader/linux/icd_exports.map b/loader/linux/icd_exports.map.in
similarity index 94%
rename from loader/linux/icd_exports.map
rename to loader/linux/icd_exports.map.in
index c716a39..8ef522b 100644
--- a/loader/linux/icd_exports.map
+++ b/loader/linux/icd_exports.map.in
@@ -163,3 +163,12 @@
clSetProgramReleaseCallback;
clSetProgramSpecializationConstant;
} OPENCL_2.1;
+
+@ENABLE_OPENCL30_SYMBOLS_START@
+OPENCL_3.0 {
+ global:
+ clCreateBufferWithProperties;
+ clCreateImageWithProperties;
+ clSetContextDestructorCallback;
+} OPENCL_2.2;
+@ENABLE_OPENCL30_SYMBOLS_END@
diff --git a/loader/linux/icd_linux.c b/loader/linux/icd_linux.c
index 809f095..bb21b2a 100644
--- a/loader/linux/icd_linux.c
+++ b/loader/linux/icd_linux.c
@@ -84,13 +84,13 @@
}
// allocate space for the full path of the vendor library name
- fileName = malloc(strlen(dirEntry->d_name) + strlen(vendorPath) + 1);
+ fileName = malloc(strlen(dirEntry->d_name) + strlen(vendorPath) + 2);
if (!fileName)
{
KHR_ICD_TRACE("Failed allocate space for ICD file path\n");
break;
}
- sprintf(fileName, "%s%s", vendorPath, dirEntry->d_name);
+ sprintf(fileName, "%s/%s", vendorPath, dirEntry->d_name);
// open the file and read its contents
fin = fopen(fileName, "r");
diff --git a/loader/windows/OpenCL.def b/loader/windows/OpenCL.def.in
similarity index 94%
rename from loader/windows/OpenCL.def
rename to loader/windows/OpenCL.def.in
index 98abc9b..7fbd39c 100644
--- a/loader/windows/OpenCL.def
+++ b/loader/windows/OpenCL.def.in
@@ -160,3 +160,7 @@
clSetProgramReleaseCallback
clSetProgramSpecializationConstant
+; OpenCL 3.0 API
+@ENABLE_OPENCL30_SYMBOLS@clCreateBufferWithProperties
+@ENABLE_OPENCL30_SYMBOLS@clCreateImageWithProperties
+@ENABLE_OPENCL30_SYMBOLS@clSetContextDestructorCallback
diff --git a/loader/windows/OpenCL.rc b/loader/windows/OpenCL.rc
index 71140c2..a0f2084 100644
--- a/loader/windows/OpenCL.rc
+++ b/loader/windows/OpenCL.rc
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2019 The Khronos Group Inc.
+ * Copyright (c) 2016-2020 The Khronos Group Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -20,7 +20,7 @@
#define OPENCL_ICD_LOADER_VERSION_MAJOR 2
#define OPENCL_ICD_LOADER_VERSION_MINOR 2
-#define OPENCL_ICD_LOADER_VERSION_REV 5
+#define OPENCL_ICD_LOADER_VERSION_REV 9
#ifdef RC_INVOKED
@@ -48,7 +48,7 @@
BEGIN
VALUE "FileDescription" ,"OpenCL Client DLL"
VALUE "ProductName" ,"Khronos OpenCL ICD Loader"
- VALUE "LegalCopyright" ,"Copyright \251 The Khronos Group Inc 2016-2019"
+ VALUE "LegalCopyright" ,"Copyright \251 The Khronos Group Inc 2016-2020"
VALUE "FileVersion" ,OPENCL_ICD_LOADER_VERSION_STRING ".0"
VALUE "CompanyName" ,"Khronos Group"
VALUE "InternalName" ,"OpenCL"
diff --git a/loader/windows/adapter.h b/loader/windows/adapter.h
new file mode 100644
index 0000000..ef97d66
--- /dev/null
+++ b/loader/windows/adapter.h
@@ -0,0 +1,80 @@
+/*
+* Copyright (c) 2019 The Khronos Group Inc.
+* Copyright (c) 2019 Valve Corporation
+* Copyright (c) 2019 LunarG, 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.
+*
+* Author: Lenny Komow <lenny@lunarg.com>
+*/
+
+typedef struct LoaderEnumAdapters2 {
+ ULONG adapter_count;
+ struct {
+ UINT handle;
+ LUID luid;
+ ULONG source_count;
+ BOOL present_move_regions_preferred;
+ } * adapters;
+} LoaderEnumAdapters2;
+
+typedef _Check_return_ NTSTATUS(APIENTRY *PFN_LoaderEnumAdapters2)(const LoaderEnumAdapters2 *);
+
+typedef enum AdapterInfoType {
+ LOADER_QUERY_TYPE_REGISTRY = 48,
+} AdapterInfoType;
+
+typedef struct LoaderQueryAdapterInfo {
+ UINT handle;
+ AdapterInfoType type;
+ VOID *private_data;
+ UINT private_data_size;
+} LoaderQueryAdapterInfo;
+
+typedef _Check_return_ NTSTATUS(APIENTRY *PFN_LoaderQueryAdapterInfo)(const LoaderQueryAdapterInfo *);
+
+typedef enum LoaderQueryRegistryType {
+ LOADER_QUERY_REGISTRY_ADAPTER_KEY = 1,
+} LoaderQueryRegistryType;
+
+typedef enum LoaderQueryRegistryStatus {
+ LOADER_QUERY_REGISTRY_STATUS_SUCCESS = 0,
+ LOADER_QUERY_REGISTRY_STATUS_BUFFER_OVERFLOW = 1,
+} LoaderQueryRegistryStatus;
+
+typedef struct LoaderQueryRegistryFlags {
+ union {
+ struct {
+ UINT translate_path : 1;
+ UINT mutable_value : 1;
+ UINT reserved : 30;
+ };
+ UINT value;
+ };
+} LoaderQueryRegistryFlags;
+
+typedef struct LoaderQueryRegistryInfo {
+ LoaderQueryRegistryType query_type;
+ LoaderQueryRegistryFlags query_flags;
+ WCHAR value_name[MAX_PATH];
+ ULONG value_type;
+ ULONG physical_adapter_index;
+ ULONG output_value_size;
+ LoaderQueryRegistryStatus status;
+ union {
+ DWORD output_dword;
+ UINT64 output_qword;
+ WCHAR output_string[1];
+ BYTE output_binary[1];
+ };
+} LoaderQueryRegistryInfo;
diff --git a/loader/windows/icd_windows.c b/loader/windows/icd_windows.c
index 3fec097..da884f6 100644
--- a/loader/windows/icd_windows.c
+++ b/loader/windows/icd_windows.c
@@ -20,6 +20,7 @@
#include "icd_windows.h"
#include "icd_windows_hkr.h"
#include "icd_windows_dxgk.h"
+#include "icd_windows_apppackage.h"
#include <stdio.h>
#include <winreg.h>
@@ -118,6 +119,8 @@
KHR_ICD_TRACE("Failed to enumerate HKR entries, continuing\n");
}
}
+
+ status |= khrIcdOsVendorsEnumerateAppPackage();
KHR_ICD_TRACE("Opening key HKLM\\%s...\n", platformsName);
result = RegOpenKeyExA(
@@ -249,7 +252,12 @@
// dynamically load a library. returns NULL on failure
void *khrIcdOsLibraryLoad(const char *libraryName)
{
- return (void *)LoadLibraryA(libraryName);
+ HMODULE hTemp = LoadLibraryExA(libraryName, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
+ if (!hTemp && GetLastError() == ERROR_INVALID_PARAMETER)
+ {
+ hTemp = LoadLibraryExA(libraryName, NULL, 0);
+ }
+ return (void*)hTemp;
}
// get a function pointer from a loaded library. returns NULL on failure.
diff --git a/loader/windows/icd_windows_apppackage.cpp b/loader/windows/icd_windows_apppackage.cpp
new file mode 100644
index 0000000..96a0bb2
--- /dev/null
+++ b/loader/windows/icd_windows_apppackage.cpp
@@ -0,0 +1,179 @@
+/*
+ * 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.
+ */
+
+extern "C"
+{
+#include "icd.h"
+#include "icd_windows.h"
+}
+
+#ifdef OPENCL_ICD_LOADER_DISABLE_OPENCLON12
+
+extern "C" bool khrIcdOsVendorsEnumerateAppPackage()
+{
+ KHR_ICD_TRACE("OpenCLOn12 is disabled\n");
+ return false;
+}
+
+#else
+
+#include "icd_windows_apppackage.h"
+
+#include <windows.management.deployment.h>
+#include <wrl/client.h>
+#include <wrl/wrappers/corewrappers.h>
+
+#include <locale>
+#include <codecvt>
+
+template <typename F>
+struct ScopeExit {
+ ScopeExit(F&& f) : f(std::forward<F>(f)) {}
+ ~ScopeExit() { f(); }
+ F f;
+};
+
+template <typename F>
+inline ScopeExit<F> MakeScopeExit(F&& f) {
+ return ScopeExit<F>(std::forward<F>(f));
+};
+
+using namespace Microsoft::WRL;
+using namespace Microsoft::WRL::Wrappers;
+
+extern "C" bool khrIcdOsVendorsEnumerateAppPackage()
+{
+ HRESULT hrInit = Windows::Foundation::Initialize(RO_INIT_MULTITHREADED);
+ if (hrInit == RPC_E_CHANGED_MODE)
+ {
+ hrInit = Windows::Foundation::Initialize(RO_INIT_SINGLETHREADED);
+ }
+ if (FAILED(hrInit))
+ {
+ KHR_ICD_TRACE("Failed to init WinRT\n");
+ return false;
+ }
+ auto Cleanup = MakeScopeExit([]()
+ {
+ Windows::Foundation::Uninitialize();
+ });
+
+ using ABI::Windows::Management::Deployment::IPackageManager;
+ ComPtr<IPackageManager> packageManager;
+ if (FAILED(Windows::Foundation::ActivateInstance(
+ HStringReference(RuntimeClass_Windows_Management_Deployment_PackageManager).Get(),
+ &packageManager)))
+ {
+ KHR_ICD_TRACE("Failed to get package manager\n");
+ return false;
+ }
+
+ using IPackageCollection = ABI::Windows::Foundation::Collections::__FIIterable_1_Windows__CApplicationModel__CPackage_t;
+ ComPtr<IPackageCollection> collection;
+ if (FAILED(packageManager->FindPackagesByUserSecurityIdPackageFamilyName(
+ HStringReference(L"").Get(),
+ HStringReference(L"Microsoft.D3DMappingLayers_8wekyb3d8bbwe").Get(),
+ &collection)))
+ {
+ KHR_ICD_TRACE("Failed to find mapping layers package\n");
+ return false;
+ }
+
+ using IPackageIterator = ABI::Windows::Foundation::Collections::IIterator<
+ ABI::Windows::ApplicationModel::Package*>;
+ ComPtr<IPackageIterator> iter;
+ if (FAILED(collection->First(&iter)))
+ {
+ KHR_ICD_TRACE("Failed to get package collection iterator\n");
+ return false;
+ }
+
+ while ([&iter]()
+ {
+ boolean hasCurrent = false;
+ return SUCCEEDED(iter->get_HasCurrent(&hasCurrent)) && hasCurrent;
+ }())
+ {
+ using ABI::Windows::ApplicationModel::IPackage;
+ ComPtr<IPackage> package;
+ if (FAILED(iter->get_Current(&package)))
+ {
+ KHR_ICD_TRACE("Failed to get package\n");
+ boolean hasCurrent = false;
+ (void)iter->MoveNext(&hasCurrent);
+ continue;
+ }
+
+ boolean hasCurrent = false;
+ (void)iter->MoveNext(&hasCurrent);
+
+ using ABI::Windows::Storage::IStorageFolder;
+ ComPtr<IStorageFolder> folder;
+ if (FAILED(package->get_InstalledLocation(&folder)))
+ {
+ KHR_ICD_TRACE("Failed to get package install folder\n");
+ continue;
+ }
+
+ using ABI::Windows::Storage::IStorageItem;
+ ComPtr<IStorageItem> item;
+ if (FAILED(folder.As(&item)))
+ {
+ KHR_ICD_TRACE("Failed to convert folder to storage item\n");
+ continue;
+ }
+
+ HString path;
+ if (FAILED(item->get_Path(path.GetAddressOf())))
+ {
+ KHR_ICD_TRACE("Failed to get path\n");
+ continue;
+ }
+
+ UINT pathSize = 0;
+ auto rawPath = path.GetRawBuffer(&pathSize);
+ if (pathSize == 0 || rawPath == nullptr)
+ {
+ KHR_ICD_TRACE("Failed to get path\n");
+ continue;
+ }
+
+#if defined(_M_AMD64)
+#define PLATFORM_PATH L"x64"
+#elif defined(_M_ARM)
+#define PLATFORM_PATH L"arm"
+#elif defined(_M_ARM64)
+#define PLATFORM_PATH L"arm64"
+#elif defined(_M_IX86)
+#define PLATFORM_PATH L"x86"
+#endif
+
+ wchar_t dllPath[MAX_PATH];
+ wcscpy_s(dllPath, rawPath);
+ wcscat_s(dllPath, L"\\" PLATFORM_PATH L"\\OpenCLOn12.dll");
+
+ std::wstring_convert<std::codecvt_utf8<wchar_t>> convert;
+ std::string narrowDllPath = convert.to_bytes(dllPath);
+
+ adapterAdd(narrowDllPath.c_str(), {});
+ return true;
+ }
+ return false;
+}
+
+#endif
diff --git a/loader/windows/icd_windows_apppackage.h b/loader/windows/icd_windows_apppackage.h
new file mode 100644
index 0000000..d4c55da
--- /dev/null
+++ b/loader/windows/icd_windows_apppackage.h
@@ -0,0 +1,25 @@
+/*
+ * 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>
+#include "icd_windows.h"
+
+#ifdef __cplusplus
+extern "C"
+#endif
+bool khrIcdOsVendorsEnumerateAppPackage(void);
diff --git a/loader/windows/icd_windows_dxgk.c b/loader/windows/icd_windows_dxgk.c
index 660dbb6..65e896a 100644
--- a/loader/windows/icd_windows_dxgk.c
+++ b/loader/windows/icd_windows_dxgk.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017-2019 The Khronos Group Inc.
+ * Copyright (c) 2017-2020 The Khronos Group Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -19,8 +19,8 @@
#include "icd.h"
#include "icd_windows_dxgk.h"
-#if defined(OPENCL_ICD_LOADER_REQUIRE_WDK)
#include <windows.h>
+#include "adapter.h"
#ifndef NTSTATUS
typedef LONG NTSTATUS;
@@ -29,38 +29,41 @@
#define NT_SUCCESS(status) (((NTSTATUS)(status)) >= 0)
#endif
-#include <d3dkmthk.h>
-#endif
-
bool khrIcdOsVendorsEnumerateDXGK(void)
{
bool ret = false;
int result = 0;
-#if defined(DXGKDDI_INTERFACE_VERSION_WDDM2_4) && (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_4)
// Get handle to GDI Runtime
HMODULE h = LoadLibrary("gdi32.dll");
if (h == NULL)
return ret;
- if(GetProcAddress((HMODULE)h, "D3DKMTSubmitPresentBltToHwQueue")) // OS Version check
+ if(GetProcAddress(h, "D3DKMTSubmitPresentBltToHwQueue")) // OS Version check
{
- D3DKMT_ADAPTERINFO* pAdapterInfo = NULL;
- D3DKMT_ENUMADAPTERS2 EnumAdapters;
+ LoaderEnumAdapters2 EnumAdapters;
+
NTSTATUS status = STATUS_SUCCESS;
char cszLibraryName[MAX_PATH] = { 0 };
- EnumAdapters.NumAdapters = 0;
- EnumAdapters.pAdapters = NULL;
- PFND3DKMT_ENUMADAPTERS2 pEnumAdapters2 = (PFND3DKMT_ENUMADAPTERS2)GetProcAddress((HMODULE)h, "D3DKMTEnumAdapters2");
+ EnumAdapters.adapter_count = 0;
+ EnumAdapters.adapters = NULL;
+ PFN_LoaderEnumAdapters2 pEnumAdapters2 = (PFN_LoaderEnumAdapters2)GetProcAddress(h, "D3DKMTEnumAdapters2");
if (!pEnumAdapters2)
{
- KHR_ICD_TRACE("GetProcAddress failed for D3DKMT_ENUMADAPTERS2\n");
+ KHR_ICD_TRACE("GetProcAddress failed for D3DKMTEnumAdapters2\n");
+ goto out;
+ }
+ PFN_LoaderQueryAdapterInfo pQueryAdapterInfo = (PFN_LoaderQueryAdapterInfo)GetProcAddress(h, "D3DKMTQueryAdapterInfo");
+ if (!pQueryAdapterInfo)
+ {
+ KHR_ICD_TRACE("GetProcAddress failed for D3DKMTQueryAdapterInfo\n");
goto out;
}
while (1)
{
- EnumAdapters.NumAdapters = 0;
- EnumAdapters.pAdapters = NULL;
+ EnumAdapters.adapter_count = 0;
+ EnumAdapters.adapters = NULL;
+
status = pEnumAdapters2(&EnumAdapters);
if (status == STATUS_BUFFER_TOO_SMALL)
{
@@ -69,88 +72,95 @@
}
else if (!NT_SUCCESS(status))
{
- KHR_ICD_TRACE("D3DKMT_ENUMADAPTERS2 status != SUCCESS\n");
+ KHR_ICD_TRACE("D3DKMTEnumAdapters2 status != SUCCESS\n");
goto out;
}
break;
}
- pAdapterInfo = (D3DKMT_ADAPTERINFO*)malloc(sizeof(D3DKMT_ADAPTERINFO)*(EnumAdapters.NumAdapters));
- if (pAdapterInfo == NULL)
+ EnumAdapters.adapters = malloc(sizeof(*EnumAdapters.adapters)*(EnumAdapters.adapter_count));
+ if (EnumAdapters.adapters == NULL)
{
- KHR_ICD_TRACE("Allocation failure for AdapterInfo buffer\n");
+ KHR_ICD_TRACE("Allocation failure for adapters buffer\n");
goto out;
}
- EnumAdapters.pAdapters = pAdapterInfo;
+
status = pEnumAdapters2(&EnumAdapters);
if (!NT_SUCCESS(status))
{
- KHR_ICD_TRACE("D3DKMT_ENUMADAPTERS2 status != SUCCESS\n");
+ KHR_ICD_TRACE("D3DKMTEnumAdapters2 status != SUCCESS\n");
goto out;
}
const char* cszOpenCLRegKeyName = getOpenCLRegKeyName();
const int szOpenCLRegKeyName = (int)(strlen(cszOpenCLRegKeyName) + 1)*sizeof(cszOpenCLRegKeyName[0]);
- PFND3DKMT_QUERYADAPTERINFO pQueryAdapterInfo = (PFND3DKMT_QUERYADAPTERINFO)GetProcAddress((HMODULE)h, "D3DKMTQueryAdapterInfo");
- if (!pQueryAdapterInfo)
+
+ for (UINT AdapterIndex = 0; AdapterIndex < EnumAdapters.adapter_count; AdapterIndex++)
+
{
- KHR_ICD_TRACE("GetProcAddress failed for D3DKMT_ENUMADAPTERS2\n");
- goto out;
- }
-
- for (UINT AdapterIndex = 0; AdapterIndex < EnumAdapters.NumAdapters; AdapterIndex++)
- {
- D3DDDI_QUERYREGISTRY_INFO queryArgs = {0};
- D3DDDI_QUERYREGISTRY_INFO* pQueryArgs = &queryArgs;
- D3DDDI_QUERYREGISTRY_INFO* pQueryBuffer = NULL;
- queryArgs.QueryType = D3DDDI_QUERYREGISTRY_ADAPTERKEY;
- queryArgs.QueryFlags.TranslatePath = TRUE;
- queryArgs.ValueType = REG_SZ;
+ LoaderQueryRegistryInfo queryArgs = {0};
+ LoaderQueryRegistryInfo* pQueryArgs = &queryArgs;
+ LoaderQueryRegistryInfo* pQueryBuffer = NULL;
+ queryArgs.query_type = LOADER_QUERY_REGISTRY_ADAPTER_KEY;
+ queryArgs.query_flags.translate_path = TRUE;
+ queryArgs.value_type = REG_SZ;
result = MultiByteToWideChar(
CP_ACP,
0,
cszOpenCLRegKeyName,
szOpenCLRegKeyName,
- queryArgs.ValueName,
- ARRAYSIZE(queryArgs.ValueName));
+ queryArgs.value_name,
+ ARRAYSIZE(queryArgs.value_name));
if (!result)
{
KHR_ICD_TRACE("MultiByteToWideChar status != SUCCESS\n");
continue;
}
- D3DKMT_QUERYADAPTERINFO queryAdapterInfo = {0};
- queryAdapterInfo.hAdapter = pAdapterInfo[AdapterIndex].hAdapter;
- queryAdapterInfo.Type = KMTQAITYPE_QUERYREGISTRY;
- queryAdapterInfo.pPrivateDriverData = &queryArgs;
- queryAdapterInfo.PrivateDriverDataSize = sizeof(queryArgs);
+ LoaderQueryAdapterInfo queryAdapterInfo = {0};
+ queryAdapterInfo.handle = EnumAdapters.adapters[AdapterIndex].handle;
+ queryAdapterInfo.type = LOADER_QUERY_TYPE_REGISTRY;
+ queryAdapterInfo.private_data = &queryArgs;
+ queryAdapterInfo.private_data_size = sizeof(queryArgs);
status = pQueryAdapterInfo(&queryAdapterInfo);
if (!NT_SUCCESS(status))
{
- // Continue trying to get as much info on each adapter as possible.
- // It's too late to return FALSE and claim WDDM2_4 enumeration is not available here.
- continue;
+ // Try a different value type. Some vendors write the key as a multi-string type.
+ queryArgs.value_type = REG_MULTI_SZ;
+ status = pQueryAdapterInfo(&queryAdapterInfo);
+ if (NT_SUCCESS(status))
+ {
+ KHR_ICD_TRACE("Accepting multi-string registry key type\n");
+ }
+ else
+ {
+ // Continue trying to get as much info on each adapter as possible.
+ // It's too late to return FALSE and claim WDDM2_4 enumeration is not available here.
+ continue;
+ }
}
- if (NT_SUCCESS(status) && pQueryArgs->Status == D3DDDI_QUERYREGISTRY_STATUS_BUFFER_OVERFLOW)
+
+ if (NT_SUCCESS(status) && pQueryArgs->status == LOADER_QUERY_REGISTRY_STATUS_BUFFER_OVERFLOW)
{
- ULONG queryBufferSize = sizeof(D3DDDI_QUERYREGISTRY_INFO) + queryArgs.OutputValueSize;
- pQueryBuffer = (D3DDDI_QUERYREGISTRY_INFO*)malloc(queryBufferSize);
+ ULONG queryBufferSize = sizeof(LoaderQueryRegistryInfo) + queryArgs.output_value_size;
+ pQueryBuffer = malloc(queryBufferSize);
if (pQueryBuffer == NULL)
continue;
- memcpy(pQueryBuffer, &queryArgs, sizeof(D3DDDI_QUERYREGISTRY_INFO));
- queryAdapterInfo.pPrivateDriverData = pQueryBuffer;
- queryAdapterInfo.PrivateDriverDataSize = queryBufferSize;
+ memcpy(pQueryBuffer, &queryArgs, sizeof(LoaderQueryRegistryInfo));
+ queryAdapterInfo.private_data = pQueryBuffer;
+ queryAdapterInfo.private_data_size = queryBufferSize;
status = pQueryAdapterInfo(&queryAdapterInfo);
pQueryArgs = pQueryBuffer;
}
- if (NT_SUCCESS(status) && pQueryArgs->Status == D3DDDI_QUERYREGISTRY_STATUS_SUCCESS)
+ if (NT_SUCCESS(status) && pQueryArgs->status == LOADER_QUERY_REGISTRY_STATUS_SUCCESS)
{
- wchar_t* pWchar = pQueryArgs->OutputString;
+ wchar_t* pWchar = pQueryArgs->output_string;
memset(cszLibraryName, 0, sizeof(cszLibraryName));
{
- size_t len = wcstombs(cszLibraryName, pWchar, sizeof(cszLibraryName));
+ size_t len;
+ wcstombs_s(&len, cszLibraryName, sizeof(cszLibraryName), pWchar, sizeof(cszLibraryName));
KHR_ICD_ASSERT(len == (sizeof(cszLibraryName) - 1));
- ret |= adapterAdd(cszLibraryName, pAdapterInfo[AdapterIndex].AdapterLuid);
+ ret |= adapterAdd(cszLibraryName, EnumAdapters.adapters[AdapterIndex].luid);
}
}
- else if (status == STATUS_INVALID_PARAMETER && pQueryArgs->Status == D3DDDI_QUERYREGISTRY_STATUS_FAIL)
+ else if (status == STATUS_INVALID_PARAMETER)
{
free(pQueryBuffer);
goto out;
@@ -158,11 +168,10 @@
free(pQueryBuffer);
}
out:
- free(pAdapterInfo);
+ free(EnumAdapters.adapters);
}
FreeLibrary(h);
-#endif
return ret;
}
diff --git a/loader/windows/icd_windows_hkr.c b/loader/windows/icd_windows_hkr.c
index b383f2b..cc57574 100644
--- a/loader/windows/icd_windows_hkr.c
+++ b/loader/windows/icd_windows_hkr.c
@@ -130,8 +130,15 @@
if (REG_MULTI_SZ != dwLibraryNameType)
{
- KHR_ICD_TRACE("Unexpected registry entry 0x%x! continuing\n", dwLibraryNameType);
- goto out;
+ if (REG_MULTI_SZ == dwLibraryNameType)
+ {
+ KHR_ICD_TRACE("Accepting multi-string registry key type\n");
+ }
+ else
+ {
+ KHR_ICD_TRACE("Unexpected registry entry 0x%x! continuing\n", dwLibraryNameType);
+ goto out;
+ }
}
KHR_ICD_TRACE(" Path: %s\n", cszOclPath);
diff --git a/scripts/README.md b/scripts/README.md
new file mode 100644
index 0000000..1b7a371
--- /dev/null
+++ b/scripts/README.md
@@ -0,0 +1,35 @@
+# OpenCL ICD Loader Code Generation
+
+## Introduction
+
+In order to ease maintenance and enable faster development of related OpenCL ICD loader features, the OpenCL ICD loader API dispatch functions are generated from the OpenCL XML machine readable grammar.
+
+## Dependencies
+
+The API dispatch functions are generated using Python [Mako Templates](https://www.makotemplates.org/).
+
+In most cases, after installing Python for your platform, Mako may be installed using:
+
+```sh
+$ pip install Mako
+```
+
+## Making Changes
+
+Most changes only require modifications to the Mako templates.
+Small changes modifying syntax or layout are simple and straightforward.
+Occasionally more complicated changes will be required, say when a new API is added that is unlike any previous API, but this should be rare.
+
+The Python script should only need to be modified if additional information needs to be propagated from the XML file into the Mako template itself.
+
+## Generating Files
+
+Files for the OpenCL ICD loader may be generated by executing the `gen_loader.py` script.
+
+The script requires the `cl.xml` machine readable grammar.
+By default, the script searches for `cl.xml` in the current directory.
+The latest version of `cl.xml` may be found in the Khronos OpenCL-Docs repo [here](https://github.com/KhronosGroup/OpenCL-Docs/blob/master/xml/cl.xml).
+
+The output from the script is placed in the current directory by default, to allow easy comparisons between the generated files and the current files.
+After the generated files are evaluated, they should be manually copied into the source tree.
+These steps may be automated in the future.
diff --git a/scripts/gen_loader.py b/scripts/gen_loader.py
new file mode 100644
index 0000000..d939ac5
--- /dev/null
+++ b/scripts/gen_loader.py
@@ -0,0 +1,137 @@
+#!/usr/bin/python3
+
+# Copyright (c) 2020 The Khronos Group Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from mako.template import Template
+
+from collections import OrderedDict
+from collections import namedtuple
+
+import argparse
+import sys
+import urllib
+import xml.etree.ElementTree as etree
+import urllib.request
+
+# parse_xml - Helper function to parse the XML file from a URL or local file.
+def parse_xml(path):
+ file = urllib.request.urlopen(path) if path.startswith("http") else open(path, 'r')
+ with file:
+ tree = etree.parse(file)
+ return tree
+
+# noneStr - returns string argument, or "" if argument is None.
+def noneStr(s):
+ if s:
+ return s
+ return ""
+
+if __name__ == "__main__":
+ parser = argparse.ArgumentParser()
+
+ # To pull the latest registry file from GitHub, pass:
+ # -registry "https://raw.githubusercontent.com/KhronosGroup/OpenCL-Registry/master/xml/cl.xml"
+
+ parser.add_argument('-registry', action='store',
+ default='cl.xml',
+ help='Use specified registry file instead of cl.xml')
+ parser.add_argument('-o', action='store', dest='directory',
+ default='.',
+ help='Create target and related files in specified directory')
+
+ args = parser.parse_args()
+
+ specpath = args.registry
+
+ print('Parsing XML file from: ' + specpath)
+ spec = parse_xml(specpath)
+
+ # Generate the API function signatures dictionary:
+ apisigs = OrderedDict()
+ ApiSignature = namedtuple('ApiSignature', 'Name RetType Params Suffix')
+ ApiParam = namedtuple('ApiParam', 'Type TypeEnd Name')
+ print('Generating API signatures dictionary...')
+ for command in spec.findall('commands/command'):
+ suffix = noneStr(command.get('suffix'))
+ proto = command.find('proto')
+ ret = noneStr(proto.text)
+ name = ""
+ params = ""
+ for elem in proto:
+ if elem.tag == 'name':
+ name = noneStr(elem.text) + noneStr(elem.tail)
+ else:
+ ret = ret + noneStr(elem.text) + noneStr(elem.tail)
+ ret = ret.strip()
+ name = name.strip()
+
+ plist = []
+ for param in command.findall('param'):
+ ptype = noneStr(param.text)
+ ptypeend = ""
+ pname = ""
+ for elem in param:
+ if elem.tag == 'name':
+ pname = noneStr(elem.text)
+ ptypeend = noneStr(elem.tail)
+ else:
+ ptype = ptype + noneStr(elem.text) + noneStr(elem.tail)
+ ptype = ptype.strip()
+ ptypeend = ptypeend.strip()
+ pname = pname.strip()
+ plist.append(ApiParam(ptype, ptypeend, pname))
+ apisigs[name] = ApiSignature(name, ret, plist, suffix)
+
+ # Generate the core API dictionary:
+ coreapis = OrderedDict()
+ print('Generating core API dictionary...')
+ for feature in spec.findall('feature'):
+ version = noneStr(feature.get('name'))
+
+ alist = []
+ for function in feature.findall('require/command'):
+ name = function.get('name')
+ alist.append(apisigs[name])
+ coreapis[version] = alist
+
+ # Generate the extensions API dictionary:
+ extapis = OrderedDict()
+ print('Generating API extensions dictionary...')
+ for feature in spec.findall('extensions/extension'):
+ extension = noneStr(feature.get('name'))
+
+ alist = []
+ for function in feature.findall('require/command'):
+ name = function.get('name')
+ alist.append(apisigs[name])
+ extapis[extension] = alist
+
+ try:
+ # Create the loader cpp file from the API dictionary:
+ test = open(args.directory + '/icd_dispatch_generated.c', 'wb')
+ icd_dispatch_generated_template = Template(filename='icd_dispatch_generated.c.mako')
+ test.write(
+ icd_dispatch_generated_template.render_unicode(
+ spec=spec,
+ apisigs=apisigs,
+ coreapis=coreapis,
+ extapis=extapis).
+ encode('utf-8', 'replace'))
+ except:
+ traceback = RichTraceback()
+ for (filename, lineno, function, line) in traceback.traceback:
+ print('%s(%s) : error in %s' % (filename, lineno, function))
+ print(' ', line)
+ print('%s: %s' % (str(traceback.error.__class__.__name__), traceback.error))
diff --git a/scripts/icd_dispatch_generated.c.mako b/scripts/icd_dispatch_generated.c.mako
new file mode 100644
index 0000000..5bc9db4
--- /dev/null
+++ b/scripts/icd_dispatch_generated.c.mako
@@ -0,0 +1,216 @@
+<%
+# APIs to skip - they need to be done "manually":
+apiskip = {
+ 'clGetPlatformIDs', # to query platforms
+ 'clGetExtensionFunctionAddress', # to return ICD-aware extensions
+ 'clGetExtensionFunctionAddressForPlatform', # to return ICD-aware extensions
+ 'clCreateBufferWithProperties', # only until OpenCL 3.0 is final
+ 'clCreateImageWithProperties', # only until OpenCL 3.0 is final
+ 'clSetContextDestructorCallback', # only until OpenCL 3.0 is final
+ }
+
+# Handles, and mappings to errors when handles are invalid:
+apihandles = {
+ 'cl_command_queue' : 'CL_INVALID_COMMAND_QUEUE',
+ 'cl_context' : 'CL_INVALID_CONTEXT',
+ 'cl_device_id' : 'CL_INVALID_DEVICE',
+ 'cl_event' : 'CL_INVALID_EVENT',
+ 'cl_kernel' : 'CL_INVALID_KERNEL',
+ 'cl_mem' : 'CL_INVALID_MEM_OBJECT',
+ 'cl_platform_id' : 'CL_INVALID_PLATFORM',
+ 'cl_program' : 'CL_INVALID_PROGRAM',
+ 'cl_sampler' : 'CL_INVALID_SAMPLER',
+ }
+%>/*
+ * Copyright (c) 2012-2020 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * OpenCL is a trademark of Apple Inc. used under license by Khronos.
+ */
+
+#include "icd_dispatch.h"
+#include "icd.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// Core APIs:
+%for apis in coreapis.values():
+%for api in apis:
+%if not api.Name in apiskip:
+<%
+ handle = api.Params[0]
+ if handle.Type in apihandles:
+ invalid = apihandles[handle.Type]
+ else:
+ invalid = 'NULL'
+%>
+CL_API_ENTRY ${api.RetType} CL_API_CALL ${api.Name}(
+%for i, param in enumerate(api.Params):
+% if i < len(api.Params)-1:
+ ${param.Type} ${param.Name}${param.TypeEnd},
+% else:
+ ${param.Type} ${param.Name}${param.TypeEnd}) ${api.Suffix}
+% endif
+%endfor
+{
+%if api.RetType in apihandles or api.RetType == "void*":
+## clCreateContext is a special case, since it calls through
+## the dispatch table via the first "device":
+% if api.Name == "clCreateContext":
+ if (${api.Params[1].Name} == 0 || ${api.Params[2].Name} == NULL) {
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(NULL, CL_INVALID_VALUE);
+ }
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(${api.Params[2].Name}[0], CL_INVALID_DEVICE);
+## clCreateContextFromType is a special case, since it calls
+## through a platform passed via properties:
+% elif api.Name == "clCreateContextFromType":
+ cl_platform_id platform = NULL;
+ khrIcdInitialize();
+ khrIcdContextPropertiesGetPlatform(properties, &platform);
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(platform, CL_INVALID_PLATFORM);
+## These APIs are special cases because they return a void*, but
+## do not nave an errcode_ret:
+% elif api.Name == "clSVMAlloc" or api.Name == "clGetExtensionFunctionAddressForPlatform":
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(${handle.Name}, NULL);
+% else:
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(${handle.Name}, ${invalid});
+% endif
+%elif api.Name == "clSVMFree":
+## clSVMFree has no return value or errcode_ret:
+ if (${handle.Name} == NULL) return;
+## clWaitForEvents is a special case, since it calls through
+## the dispatch table via the first "event":
+%elif api.Name == "clWaitForEvents":
+ if (${api.Params[0].Name} == 0 || ${api.Params[1].Name} == NULL) {
+ return CL_INVALID_VALUE;
+ }
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(${api.Params[1].Name}[0], CL_INVALID_EVENT);
+%elif api.Name == "clUnloadCompiler":
+ // Nothing!
+%else:
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(${handle.Name}, ${invalid});
+%endif
+%if api.Name == "clCreateContext":
+ return ${api.Params[2].Name}[0]->dispatch->${api.Name}(
+%elif api.Name == "clWaitForEvents":
+ return ${api.Params[1].Name}[0]->dispatch->${api.Name}(
+%elif api.Name == "clCreateContextFromType":
+ return platform->dispatch->${api.Name}(
+%elif api.Name == "clSVMFree":
+ ${handle.Name}->dispatch->${api.Name}(
+%elif api.Name == "clUnloadCompiler":
+ return CL_SUCCESS;
+%else:
+ return ${handle.Name}->dispatch->${api.Name}(
+%endif:
+%for i, param in enumerate(api.Params):
+% if i < len(api.Params)-1:
+ ${param.Name},
+% elif param.Name: # for clUnloadCompiler
+ ${param.Name});
+% endif
+%endfor
+}
+
+///////////////////////////////////////////////////////////////////////////////
+%endif
+%endfor
+%endfor
+<%
+icdextensions = [
+ 'cl_ext_device_fission',
+ 'cl_khr_d3d10_sharing',
+ 'cl_khr_d3d11_sharing',
+ 'cl_khr_dx9_media_sharing',
+ 'cl_khr_egl_event',
+ 'cl_khr_egl_image',
+ 'cl_khr_gl_event',
+ 'cl_khr_gl_sharing',
+ 'cl_khr_subgroups'
+ ]
+win32extensions = {
+ 'cl_khr_d3d10_sharing',
+ 'cl_khr_d3d11_sharing',
+ 'cl_khr_dx9_media_sharing',
+ }
+%>
+%for extension in icdextensions:
+<%
+ apis = extapis[extension]
+%>// ${extension}
+%if extension in win32extensions:
+
+#if defined(_WIN32)
+%endif
+%for api in apis:
+<%
+ handle = api.Params[0]
+ if handle.Type in apihandles:
+ invalid = apihandles[handle.Type]
+ else:
+ invalid = 'NULL'
+%>
+CL_API_ENTRY ${api.RetType} CL_API_CALL ${api.Name}(
+%for i, param in enumerate(api.Params):
+% if i < len(api.Params)-1:
+ ${param.Type} ${param.Name}${param.TypeEnd},
+% else:
+ ${param.Type} ${param.Name}${param.TypeEnd}) ${api.Suffix}
+% endif
+%endfor
+{
+%if api.RetType in apihandles or api.RetType == "void*":
+% if False:
+ // api.Name == "clXXX": # There are currently no API special cases here.
+% else:
+ KHR_ICD_VALIDATE_HANDLE_RETURN_HANDLE(${handle.Name}, ${invalid});
+% endif
+%else:
+% if api.Name == "clGetGLContextInfoKHR":
+ cl_platform_id platform = NULL;
+ khrIcdInitialize();
+ khrIcdContextPropertiesGetPlatform(properties, &platform);
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(platform, CL_INVALID_PLATFORM);
+% else:
+ KHR_ICD_VALIDATE_HANDLE_RETURN_ERROR(${handle.Name}, ${invalid});
+% endif
+%endif
+%if api.Name == "clGetGLContextInfoKHR":
+ return platform->dispatch->${api.Name}(
+%else:
+ return ${handle.Name}->dispatch->${api.Name}(
+%endif
+%for i, param in enumerate(api.Params):
+% if i < len(api.Params)-1:
+ ${param.Name},
+% elif param.Name: # for clUnloadCompiler
+ ${param.Name});
+% endif
+%endfor
+}
+%endfor
+
+%if extension in win32extensions:
+#endif // defined(_WIN32)
+
+%endif
+///////////////////////////////////////////////////////////////////////////////
+
+%endfor
+#ifdef __cplusplus
+}
+#endif
diff --git a/test/driver_stub/cl.c b/test/driver_stub/cl.c
index 8021923..733a2aa 100644
--- a/test/driver_stub/cl.c
+++ b/test/driver_stub/cl.c
@@ -355,6 +355,30 @@
return return_value;
}
+#ifdef CL_VERSION_3_0
+
+CL_API_ENTRY cl_int CL_API_CALL
+clSetContextDestructorCallback(cl_context context,
+ void (CL_CALLBACK* pfn_notify)(cl_context context,
+ void* user_data),
+ void* user_data) CL_API_SUFFIX__VERSION_3_0
+{
+ cl_int return_value = CL_OUT_OF_RESOURCES;
+ test_icd_stub_log("clSetContextDestructorCallback(%p, %p, %p)\n",
+ context,
+ pfn_notify,
+ user_data);
+ pfn_notify(context, user_data);
+ test_icd_stub_log("setcontextdestructor_callback(%p, %p)\n",
+ context,
+ user_data);
+
+ test_icd_stub_log("Value returned: %d\n", return_value);
+ return return_value;
+}
+
+#endif
+
/* Command Queue APIs */
CL_API_ENTRY cl_command_queue CL_API_CALL
clCreateCommandQueue(cl_context context,
@@ -551,6 +575,56 @@
return obj;
}
+#ifdef CL_VERSION_3_0
+
+CL_API_ENTRY cl_mem CL_API_CALL
+clCreateBufferWithProperties(cl_context context ,
+ const cl_mem_properties * properties,
+ cl_mem_flags flags ,
+ size_t size ,
+ void * host_ptr ,
+ cl_int * errcode_ret) CL_API_SUFFIX__VERSION_3_0
+{
+ cl_mem obj = (cl_mem) malloc(sizeof(struct _cl_mem));
+ obj->dispatch = dispatchTable;
+ test_icd_stub_log("clCreateBufferWithProperties(%p, %p, %x, %u, %p, %p)\n",
+ context,
+ properties,
+ flags,
+ size,
+ host_ptr,
+ errcode_ret);
+
+ test_icd_stub_log("Value returned: %p\n", obj);
+ return obj;
+}
+
+CL_API_ENTRY cl_mem CL_API_CALL
+clCreateImageWithProperties(cl_context context,
+ const cl_mem_properties * properties,
+ 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_3_0
+{
+ cl_mem obj = (cl_mem) malloc(sizeof(struct _cl_mem));
+ obj->dispatch = dispatchTable;
+ test_icd_stub_log("clCreateImageWithProperties(%p, %p, %x, %p, %p, %p, %p)\n",
+ context,
+ properties,
+ flags,
+ image_format,
+ image_desc,
+ host_ptr,
+ errcode_ret);
+
+ test_icd_stub_log("Value returned: %p\n", obj);
+ return obj;
+}
+
+#endif // CL_VERSION_3_0
+
CL_API_ENTRY cl_int CL_API_CALL
clRetainMemObject(cl_mem memobj) CL_API_SUFFIX__VERSION_1_0
{
@@ -639,10 +713,10 @@
memobj,
pfn_notify,
user_data);
- pfn_notify(memobj, NULL);
+ pfn_notify(memobj, user_data);
test_icd_stub_log("setmemobjectdestructor_callback(%p, %p)\n",
memobj,
- NULL);
+ user_data);
test_icd_stub_log("Value returned: %d\n", return_value);
return return_value;
diff --git a/test/driver_stub/icd.c b/test/driver_stub/icd.c
index d2b1b2b..eea8665 100644
--- a/test/driver_stub/icd.c
+++ b/test/driver_stub/icd.c
@@ -7,6 +7,9 @@
#define CL_USE_DEPRECATED_OPENCL_1_0_APIS
#define CL_USE_DEPRECATED_OPENCL_1_1_APIS
#define CL_USE_DEPRECATED_OPENCL_1_2_APIS
+#define CL_USE_DEPRECATED_OPENCL_2_0_APIS
+#define CL_USE_DEPRECATED_OPENCL_2_1_APIS
+#define CL_USE_DEPRECATED_OPENCL_2_2_APIS
// Need to rename all CL API functions to prevent ICD loader functions calling
// themselves via the dispatch table. Include this before cl headers.
@@ -148,12 +151,15 @@
ICD_DISPATCH_TABLE_ENTRY ( clEnqueueWriteBufferRect);
ICD_DISPATCH_TABLE_ENTRY ( clEnqueueCopyBufferRect);
+ /* cl_ext_device_fission */
ICD_DISPATCH_TABLE_ENTRY ( /*clCreateSubDevicesEXT*/NULL);
ICD_DISPATCH_TABLE_ENTRY ( /*clRetainDeviceEXT*/ NULL);
ICD_DISPATCH_TABLE_ENTRY ( /*clReleaseDevice*/NULL);
+ /* cl_khr_gl_event */
ICD_DISPATCH_TABLE_ENTRY ( clCreateEventFromGLsyncKHR);
+ /* OpenCL 1.2 */
ICD_DISPATCH_TABLE_ENTRY ( clCreateSubDevices);
ICD_DISPATCH_TABLE_ENTRY ( clRetainDevice);
ICD_DISPATCH_TABLE_ENTRY ( clReleaseDevice);
@@ -171,6 +177,70 @@
ICD_DISPATCH_TABLE_ENTRY ( clGetExtensionFunctionAddressForPlatform);
ICD_DISPATCH_TABLE_ENTRY ( clCreateFromGLTexture);
+ /* cl_khr_d3d11_sharing */
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+
+ /* cl_khr_dx9_media_sharing */
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+
+ /* cl_khr_egl_image */
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+
+ /* cl_khr_egl_event */
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+
+ /* OpenCL 2.0 */
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+
+ /* cl_khr_sub_groups */
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+
+ /* OpenCL 2.1 */
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+
+ /* OpenCL 2.2 */
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+
+#ifdef CL_VERSION_3_0
+ /* OpenCL 3.0 */
+ ICD_DISPATCH_TABLE_ENTRY ( clCreateBufferWithProperties );
+ ICD_DISPATCH_TABLE_ENTRY ( clCreateImageWithProperties );
+ ICD_DISPATCH_TABLE_ENTRY ( clSetContextDestructorCallback );
+#else
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+ ICD_DISPATCH_TABLE_ENTRY( NULL );
+#endif // CL_VERSION_3_0
+
// return success
*outDispatchTable = dispatchTable;
return CL_SUCCESS;
diff --git a/test/driver_stub/rename_api.h b/test/driver_stub/rename_api.h
index 7d5130c..555695d 100644
--- a/test/driver_stub/rename_api.h
+++ b/test/driver_stub/rename_api.h
@@ -102,5 +102,8 @@
#define clEnqueueReleaseGLObjects ___clEnqueueReleaseGLObjects
#define clGetGLContextInfoKHR ___clGetGLContextInfoKHR
#define clCreateEventFromGLsyncKHR ___clCreateEventFromGLsyncKHR
+#define clCreateBufferWithProperties ___clCreateBufferWithProperties
+#define clCreateImageWithProperties ___clCreateImageWithProperties
+#define clSetContextDestructorCallback ___clSetContextDestructorCallback
#endif /* __RENAME_API_H__ */
diff --git a/test/loader_test/callbacks.c b/test/loader_test/callbacks.c
index 8e0b493..73d5a95 100644
--- a/test/loader_test/callbacks.c
+++ b/test/loader_test/callbacks.c
@@ -11,6 +11,11 @@
_d);
}
+void CL_CALLBACK setcontextdestructor_callback(cl_context _a, void* _b)
+{
+ test_icd_app_log("setcontextdestructor_callback(%p, %p)\n", _a, _b);
+}
+
void CL_CALLBACK setmemobjectdestructor_callback(cl_mem _a, void* _b)
{
test_icd_app_log("setmemobjectdestructor_callback(%p, %p)\n",
diff --git a/test/loader_test/param_struct.h b/test/loader_test/param_struct.h
index 06a1f2b..0e2db51 100644
--- a/test/loader_test/param_struct.h
+++ b/test/loader_test/param_struct.h
@@ -68,6 +68,15 @@
size_t *param_value_size_ret;
};
+#ifdef CL_VERSION_3_0
+struct clSetContextDestructorCallback_st
+{
+ cl_context context;
+ void (CL_CALLBACK *pfn_notify)(cl_context context, void *user_data);
+ void *user_data;
+};
+#endif // CL_VERSION_3_0
+
struct clGetPlatformIDs_st
{
cl_uint num_entries;
@@ -113,6 +122,7 @@
#define NUM_ITEMS_clRetainContext 1
#define NUM_ITEMS_clReleaseContext 1
#define NUM_ITEMS_clGetContextInfo 1
+#define NUM_ITEMS_clSetContextDestructorCallback 1
#define NUM_ITEMS_clGetPlatformIDs 1
#define NUM_ITEMS_clGetPlatformInfo 1
#define NUM_ITEMS_clGetDeviceIDs 1
@@ -151,6 +161,7 @@
#define NUM_ITEMS_clCreateBuffer 1
+#define NUM_ITEMS_clCreateBufferWithProperties 1
#define NUM_ITEMS_clCreateSubBuffer 1
#define NUM_ITEMS_clEnqueueReadBuffer 1
#define NUM_ITEMS_clEnqueueWriteBuffer 1
@@ -174,6 +185,17 @@
void *host_ptr;
cl_int *errcode_ret;
};
+#ifdef CL_VERSION_3_0
+struct clCreateBufferWithProperties_st
+{
+ cl_context context;
+ const cl_mem_properties * properties;
+ cl_mem_flags flags;
+ size_t size;
+ void *host_ptr;
+ cl_int *errcode_ret;
+};
+#endif // CL_VERSION_3_0
struct clCreateSubBuffer_st
{
cl_mem buffer;
@@ -473,6 +495,7 @@
#define NUM_ITEMS_clCreateImage2D 1
#define NUM_ITEMS_clCreateImage3D 1
#define NUM_ITEMS_clCreateImage 1
+#define NUM_ITEMS_clCreateImageWithProperties 1
#define NUM_ITEMS_clGetSupportedImageFormats 1
#define NUM_ITEMS_clEnqueueCopyImageToBuffer 1
#define NUM_ITEMS_clEnqueueCopyBufferToImage 1
@@ -494,6 +517,19 @@
cl_int *errcode_ret;
};
+#ifdef CL_VERSION_3_0
+struct clCreateImageWithProperties_st
+{
+ cl_context context;
+ const cl_mem_properties * properties;
+ cl_mem_flags flags;
+ const cl_image_format *image_format;
+ const cl_image_desc *image_desc;
+ void *host_ptr;
+ cl_int *errcode_ret;
+};
+#endif // CL_VERSION_3_0
+
struct clCreateImage2D_st
{
cl_context context;
diff --git a/test/loader_test/test_cl_runtime.c b/test/loader_test/test_cl_runtime.c
index 6b08212..60bd3ee 100644
--- a/test/loader_test/test_cl_runtime.c
+++ b/test/loader_test/test_cl_runtime.c
@@ -4,8 +4,6 @@
extern cl_command_queue command_queue;
-cl_int ret_val;
-
const struct clRetainCommandQueue_st clRetainCommandQueueData[NUM_ITEMS_clRetainCommandQueue] = {
{NULL}
};
@@ -16,6 +14,8 @@
int test_clRetainCommandQueue(const struct clRetainCommandQueue_st *data)
{
+ cl_int ret_val;
+
test_icd_app_log("clRetainCommandQueue(%p)\n", command_queue);
ret_val = clRetainCommandQueue(command_queue);
@@ -28,6 +28,8 @@
int test_clGetCommandQueueInfo(const struct clGetCommandQueueInfo_st *data)
{
+ cl_int ret_val;
+
test_icd_app_log("clGetCommandQueueInfo(%p, %u, %u, %p, %p)\n",
command_queue,
data->param_name,
@@ -40,7 +42,7 @@
data->param_value_size,
data->param_value,
data->param_value_size_ret);
-
+
test_icd_app_log("Value returned: %d\n", ret_val);
return 0;
@@ -54,7 +56,7 @@
for (i=0; i<NUM_ITEMS_clRetainCommandQueue; i++) {
test_clRetainCommandQueue(&clRetainCommandQueueData[i]);
}
-
+
for (i=0; i<NUM_ITEMS_clGetCommandQueueInfo; i++) {
test_clGetCommandQueueInfo(&clGetCommandQueueInfoData[i]);
}
diff --git a/test/loader_test/test_clgl.c b/test/loader_test/test_clgl.c
index 4e3cee4..b72c589 100644
--- a/test/loader_test/test_clgl.c
+++ b/test/loader_test/test_clgl.c
@@ -12,8 +12,6 @@
extern cl_command_queue command_queue;
extern cl_event event;
extern cl_context_properties context_properties[3];
-cl_int ret_val;
-cl_mem ret_mem;
struct clCreateFromGLBuffer_st clCreateFromGLBufferData[NUM_ITEMS_clCreateFromGLBuffer] = {
{NULL, 0x0, 0, NULL}
@@ -21,20 +19,21 @@
int test_clCreateFromGLBuffer(const struct clCreateFromGLBuffer_st* data)
{
+ cl_mem ret_mem;
test_icd_app_log("clCreateFromGLBuffer(%p, %x, %u, %p)\n",
context,
data->flags,
- data->bufobj,
+ data->bufobj,
data->errcode_ret);
ret_mem = clCreateFromGLBuffer(context,
data->flags,
- data->bufobj,
- data->errcode_ret);
+ data->bufobj,
+ data->errcode_ret);
test_icd_app_log("Value returned: %p\n", ret_mem);
-
+
return 0;
}
@@ -44,23 +43,25 @@
int test_clCreateFromGLTexture(const struct clCreateFromGLTexture_st* data)
{
+ cl_mem ret_mem;
+
test_icd_app_log("clCreateFromGLTexture(%p, %x, %d, %d, %u, %p)\n",
context,
- data->flags,
+ data->flags,
data->texture_target,
- data->miplevel,
- data->texture,
+ data->miplevel,
+ data->texture,
data->errcode_ret);
ret_mem = clCreateFromGLTexture(context,
- data->flags,
+ data->flags,
data->texture_target,
- data->miplevel,
- data->texture,
+ data->miplevel,
+ data->texture,
data->errcode_ret);
test_icd_app_log("Value returned: %p\n", ret_mem);
-
+
return 0;
}
@@ -70,23 +71,25 @@
int test_clCreateFromGLTexture2D(const struct clCreateFromGLTexture2D_st* data)
{
+ cl_mem ret_mem;
+
test_icd_app_log("clCreateFromGLTexture2D(%p, %x, %d, %d, %u, %p)\n",
context,
- data->flags,
+ data->flags,
data->texture_target,
- data->miplevel,
- data->texture,
+ data->miplevel,
+ data->texture,
data->errcode_ret);
ret_mem = clCreateFromGLTexture2D(context,
- data->flags,
+ data->flags,
data->texture_target,
- data->miplevel,
- data->texture,
+ data->miplevel,
+ data->texture,
data->errcode_ret);
test_icd_app_log("Value returned: %p\n", ret_mem);
-
+
return 0;
}
@@ -95,21 +98,23 @@
};
int test_clCreateFromGLTexture3D(const struct clCreateFromGLTexture3D_st* data)
-{
+{
+ cl_mem ret_mem;
+
test_icd_app_log("clCreateFromGLTexture3D(%p, %x, %d, %d, %u, %p)\n",
context,
data->flags,
data->texture_target,
- data->miplevel,
- data->texture,
+ data->miplevel,
+ data->texture,
data->errcode_ret);
ret_mem = clCreateFromGLTexture3D(context,
- data->flags,
+ data->flags,
data->texture_target,
- data->miplevel,
- data->texture,
- data->errcode_ret);
+ data->miplevel,
+ data->texture,
+ data->errcode_ret);
test_icd_app_log("Value returned: %p\n", ret_mem);
@@ -122,15 +127,17 @@
int test_clCreateFromGLRenderbuffer(const struct clCreateFromGLRenderbuffer_st* data)
{
+ cl_mem ret_mem;
+
test_icd_app_log("clCreateFromGLRenderbuffer(%p, %x, %d, %p)\n",
- context,
+ context,
data->flags,
- data->renderbuffer,
+ data->renderbuffer,
data->errcode_ret);
- ret_mem = clCreateFromGLRenderbuffer(context,
+ ret_mem = clCreateFromGLRenderbuffer(context,
data->flags,
- data->renderbuffer,
+ data->renderbuffer,
data->errcode_ret);
test_icd_app_log("Value returned: %p\n", ret_mem);
@@ -144,17 +151,19 @@
int test_clGetGLObjectInfo(const struct clGetGLObjectInfo_st* data)
{
+ cl_int ret_val;
+
test_icd_app_log("clGetGLObjectInfo(%p, %p, %p)\n",
buffer,
- data->gl_object_type,
+ data->gl_object_type,
data->gl_object_name);
ret_val = clGetGLObjectInfo(buffer,
- data->gl_object_type,
+ data->gl_object_type,
data->gl_object_name);
test_icd_app_log("Value returned: %p\n", ret_val);
-
+
return ret_val;
}
@@ -165,16 +174,18 @@
int test_clGetGLTextureInfo(const struct clGetGLTextureInfo_st* data)
{
+ cl_int ret_val;
+
test_icd_app_log("clGetGLTextureInfo(%p, %u, %u, %p, %p)\n",
buffer,
data->param_name,
- data->param_value_size,
+ data->param_value_size,
data->param_value,
data->param_value_size_ret);
ret_val = clGetGLTextureInfo (buffer,
data->param_name,
- data->param_value_size,
+ data->param_value_size,
data->param_value,
data->param_value_size_ret);
@@ -189,19 +200,21 @@
int test_clEnqueueAcquireGLObjects(const struct clEnqueueAcquireGLObjects_st* data)
{
+ cl_int ret_val;
+
test_icd_app_log("clEnqueueAcquireGLObjects(%p, %u, %p, %u, %p, %p)\n",
command_queue,
- data->num_objects,
+ data->num_objects,
data->mem_objects,
data->num_events_in_wait_list,
&event,
&event);
ret_val = clEnqueueAcquireGLObjects (command_queue,
- data->num_objects,
+ data->num_objects,
data->mem_objects,
data->num_events_in_wait_list,
- &event,
+ &event,
&event);
test_icd_app_log("Value returned: %p\n", ret_val);
@@ -215,19 +228,21 @@
int test_clEnqueueReleaseGLObjects(const struct clEnqueueReleaseGLObjects_st* data)
{
+ cl_int ret_val;
+
test_icd_app_log("clEnqueueReleaseGLObjects(%p, %u, %p, %u, %p, %p)\n",
command_queue,
- data->num_objects,
+ data->num_objects,
data->mem_objects,
data->num_events_in_wait_list,
- &event,
+ &event,
&event);
ret_val = clEnqueueReleaseGLObjects (command_queue,
- data->num_objects,
+ data->num_objects,
data->mem_objects,
data->num_events_in_wait_list,
- &event,
+ &event,
&event);
@@ -250,8 +265,8 @@
PFN_clCreateEventFromGLsyncKHR pfn_clCreateEventFromGLsyncKHR = NULL;
test_icd_app_log("clCreateEventFromGLsyncKHR(%p, %p, %p)\n",
- context,
- data->sync,
+ context,
+ data->sync,
data->errcode_ret);
pfn_clCreateEventFromGLsyncKHR = clGetExtensionFunctionAddress("clCreateEventFromGLsyncKHR");
@@ -260,8 +275,8 @@
return 1;
}
- ret_event = pfn_clCreateEventFromGLsyncKHR (context,
- data->sync,
+ ret_event = pfn_clCreateEventFromGLsyncKHR (context,
+ data->sync,
data->errcode_ret);
test_icd_app_log("Value returned: %p\n", ret_event);
@@ -278,14 +293,16 @@
size_t /* param_value_size */,
void * /* param_value */,
size_t * /* param_value_size_ret */);
-
+
int test_clGetGLContextInfoKHR(const struct clGetGLContextInfoKHR_st* data)
{
+ cl_int ret_val;
+
PFN_clGetGLContextInfoKHR pfn_clGetGLContextInfoKHR = NULL;
test_icd_app_log("clGetGLContextInfoKHR(%p, %u, %u, %p, %p)\n",
context_properties,
data->param_name,
- data->param_value_size,
+ data->param_value_size,
data->param_value,
data->param_value_size_ret);
@@ -297,7 +314,7 @@
ret_val = pfn_clGetGLContextInfoKHR(context_properties,
data->param_name,
- data->param_value_size,
+ data->param_value_size,
data->param_value,
data->param_value_size_ret);
@@ -309,7 +326,7 @@
int test_OpenGL_share()
{
int i;
-
+
for(i=0;i<NUM_ITEMS_clCreateFromGLBuffer;i++)
test_clCreateFromGLBuffer(&clCreateFromGLBufferData[i]);
@@ -333,15 +350,15 @@
for(i=0;i<NUM_ITEMS_clEnqueueAcquireGLObjects;i++)
test_clEnqueueAcquireGLObjects(&clEnqueueAcquireGLObjectsData[i]);
-
+
for(i=0;i<NUM_ITEMS_clEnqueueReleaseGLObjects;i++)
- test_clEnqueueReleaseGLObjects(&clEnqueueReleaseGLObjectsData[i]);
-
+ test_clEnqueueReleaseGLObjects(&clEnqueueReleaseGLObjectsData[i]);
+
for(i=0;i<NUM_ITEMS_clCreateEventFromGLsyncKHR;i++)
test_clCreateEventFromGLsyncKHR(&clCreateEventFromGLsyncKHRData[i]);
-
+
for(i=0;i<NUM_ITEMS_clGetGLContextInfoKHR;i++)
test_clGetGLContextInfoKHR(&clGetGLContextInfoKHRData[i]);
-
+
return 0;
}
diff --git a/test/loader_test/test_create_calls.c b/test/loader_test/test_create_calls.c
index dfce9c2..f7e8990 100644
--- a/test/loader_test/test_create_calls.c
+++ b/test/loader_test/test_create_calls.c
@@ -60,6 +60,13 @@
{NULL, 0, 0, NULL, NULL}
};
+#ifdef CL_VERSION_3_0
+const struct clCreateBufferWithProperties_st clCreateBufferWithPropertiesData[NUM_ITEMS_clCreateBufferWithProperties] =
+{
+ {NULL, NULL, 0, 0, NULL, NULL}
+};
+#endif // CL_VERSION_3_0
+
const struct clCreateSubBuffer_st clCreateSubBufferData[NUM_ITEMS_clCreateSubBuffer] =
{
{NULL, 0, 0, NULL, NULL}
@@ -70,6 +77,13 @@
{ NULL, 0x0, NULL, NULL, NULL, NULL}
};
+#ifdef CL_VERSION_3_0
+const struct clCreateImageWithProperties_st clCreateImageWithPropertiesData[NUM_ITEMS_clCreateImageWithProperties] =
+{
+ { NULL, NULL, 0x0, NULL, NULL, NULL, NULL}
+};
+#endif // CL_VERSION_3_0
+
const struct clCreateImage2D_st clCreateImage2DData[NUM_ITEMS_clCreateImage2D] =
{
{ NULL, 0x0, NULL, 0, 0, 0, NULL, NULL}
@@ -299,6 +313,33 @@
}
+#ifdef CL_VERSION_3_0
+int test_clCreateBufferWithProperties(const struct clCreateBufferWithProperties_st *data)
+{
+ test_icd_app_log("clCreateBufferWithProperties(%p, %p, %x, %u, %p, %p)\n",
+ context,
+ data->properties,
+ data->flags,
+ data->size,
+ data->host_ptr,
+ data->errcode_ret);
+
+ buffer = clCreateBufferWithProperties(context,
+ data->properties,
+ data->flags,
+ data->size,
+ data->host_ptr,
+ data->errcode_ret);
+
+ clReleaseMemObjectData->memobj = buffer;
+
+ test_icd_app_log("Value returned: %p\n", buffer);
+
+ return 0;
+
+}
+#endif // CL_VERSION_3_0
+
int test_clCreateSubBuffer(const struct clCreateSubBuffer_st *data)
{
test_icd_app_log("clCreateSubBuffer(%p, %x, %u, %p, %p)\n",
@@ -346,6 +387,34 @@
}
+#ifdef CL_VERSION_3_0
+int test_clCreateImageWithProperties(const struct clCreateImageWithProperties_st *data)
+{
+ test_icd_app_log("clCreateImageWithProperties(%p, %p, %x, %p, %p, %p, %p)\n",
+ context,
+ data->properties,
+ data->flags,
+ data->image_format,
+ data->image_desc,
+ data->host_ptr,
+ data->errcode_ret);
+
+ image = clCreateImageWithProperties(context,
+ data->properties,
+ data->flags,
+ data->image_format,
+ data->image_desc,
+ data->host_ptr,
+ data->errcode_ret);
+
+ clReleaseMemObjectDataImage[0].memobj = image;
+ test_icd_app_log("Value returned: %p\n", image);
+
+ return 0;
+
+}
+#endif // CL_VERSION_3_0
+
int test_clCreateImage2D(const struct clCreateImage2D_st *data)
{
test_icd_app_log("clCreateImage2D(%p, %x, %p, %u, %u, %u, %p, %p)\n",
@@ -710,10 +779,18 @@
test_clCreateBuffer(clCreateBufferData);
+#ifdef CL_VERSION_3_0
+ test_clCreateBufferWithProperties(clCreateBufferWithPropertiesData);
+#endif
+
test_clCreateSubBuffer(clCreateSubBufferData);
test_clCreateImage(clCreateImageData);
+#ifdef CL_VERSION_3_0
+ test_clCreateImageWithProperties(clCreateImageWithPropertiesData);
+#endif
+
test_clReleaseMemObject(clReleaseMemObjectDataImage);
test_clCreateImage2D(clCreateImage2DData);
diff --git a/test/loader_test/test_image_objects.c b/test/loader_test/test_image_objects.c
index f399451..34040ce 100644
--- a/test/loader_test/test_image_objects.c
+++ b/test/loader_test/test_image_objects.c
@@ -10,8 +10,6 @@
extern cl_event event;
extern cl_mem buffer;
-int ret_val;
-
const struct clGetSupportedImageFormats_st clGetSupportedImageFormatsData[NUM_ITEMS_clGetSupportedImageFormats] =
{
{ NULL, 0x0, 0, 0, NULL, NULL }
@@ -59,6 +57,8 @@
int test_clGetSupportedImageFormats(const struct clGetSupportedImageFormats_st *data)
{
+ cl_int ret_val;
+
test_icd_app_log("clGetSupportedImageFormats(%p, %x, %u, %u, %p, %p)\n",
context,
data->flags,
@@ -66,7 +66,7 @@
data->num_entries,
data->image_formats,
data->num_image_formats);
-
+
ret_val = clGetSupportedImageFormats(context,
data->flags,
data->image_type,
@@ -82,6 +82,8 @@
int test_clEnqueueCopyImageToBuffer(const struct clEnqueueCopyImageToBuffer_st *data)
{
+ cl_int ret_val;
+
test_icd_app_log("clEnqueueCopyImageToBuffer(%p, %p, %p, %p, %p, %u, %u, %p, %p)\n",
command_queue,
image,
@@ -111,6 +113,8 @@
int test_clEnqueueCopyBufferToImage(const struct clEnqueueCopyBufferToImage_st *data)
{
+ cl_int ret_val;
+
test_icd_app_log("clEnqueueCopyBufferToImage(%p, %p, %p, %u, %p, %p, %u, %p, %p)\n",
command_queue,
buffer,
@@ -178,11 +182,13 @@
int test_clEnqueueReadImage(const struct clEnqueueReadImage_st *data)
{
+ cl_int ret_val;
+
test_icd_app_log("clEnqueueReadImage(%p, %p, %u, %p, %p, %u, %u, %p, %u, %p, %p)\n",
command_queue,
image,
data->blocking_read,
- data->origin,
+ data->origin,
data->region,
data->row_pitch,
data->slice_pitch,
@@ -195,11 +201,11 @@
image,
data->blocking_read,
data->origin,
- data->region,
- data->row_pitch,
- data->slice_pitch,
- data->ptr,
- data->num_events_in_wait_list,
+ data->region,
+ data->row_pitch,
+ data->slice_pitch,
+ data->ptr,
+ data->num_events_in_wait_list,
data->event_wait_list,
&event);
@@ -211,6 +217,8 @@
int test_clEnqueueWriteImage(const struct clEnqueueWriteImage_st *data)
{
+ cl_int ret_val;
+
test_icd_app_log("clEnqueueWriteImage(%p, %p, %u, %p, %p, %u, %u, %p, %u, %p, %p)\n",
command_queue,
image,
@@ -244,6 +252,8 @@
int test_clEnqueueFillImage(const struct clEnqueueFillImage_st *data)
{
+ cl_int ret_val;
+
test_icd_app_log("clEnqueueFillImage(%p, %p, %p, %p, %p, %u, %p, %p)\n",
command_queue,
image,
@@ -251,16 +261,16 @@
data->origin,
data->region,
data->num_events_in_wait_list,
- data->event_wait_list,
+ data->event_wait_list,
&event);
ret_val = clEnqueueFillImage(command_queue,
- image,
+ image,
data->fill_color,
data->origin,
data->region,
data->num_events_in_wait_list,
- data->event_wait_list,
+ data->event_wait_list,
&event);
test_icd_app_log("Value returned: %d\n", ret_val);
@@ -270,6 +280,8 @@
}
int test_clEnqueueCopyImage(const struct clEnqueueCopyImage_st *data)
{
+ cl_int ret_val;
+
test_icd_app_log("clEnqueueCopyImage(%p, %p, %p, %p, %p, %p, %u, %p, %p)\n",
command_queue,
image,
@@ -278,7 +290,7 @@
data->dst_origin,
data->region,
data->num_events_in_wait_list,
- data->event_wait_list,
+ data->event_wait_list,
&event);
ret_val = clEnqueueCopyImage(command_queue,
@@ -288,7 +300,7 @@
data->dst_origin,
data->region,
data->num_events_in_wait_list,
- data->event_wait_list,
+ data->event_wait_list,
&event);
test_icd_app_log("Value returned: %d\n", ret_val);
@@ -300,6 +312,8 @@
int test_clGetImageInfo(const struct clGetImageInfo_st *data)
{
+ cl_int ret_val;
+
test_icd_app_log("clGetImageInfo(%p, %u, %u, %p, %p)\n",
image,
data->param_name,
diff --git a/test/loader_test/test_platforms.c b/test/loader_test/test_platforms.c
index d22a3d0..8296e65 100644
--- a/test/loader_test/test_platforms.c
+++ b/test/loader_test/test_platforms.c
@@ -8,7 +8,7 @@
extern cl_device_id devices;
-int ret_val;
+extern void CL_CALLBACK setcontextdestructor_callback(cl_context _a, void* _b);
struct clRetainContext_st clRetainContextData[NUM_ITEMS_clRetainContext] =
{
@@ -20,6 +20,12 @@
{NULL, 0, 0, NULL, NULL}
};
+#ifdef CL_VERSION_3_0
+struct clSetContextDestructorCallback_st clSetContextDestructorCallbackData[NUM_ITEMS_clSetContextDestructorCallback] =
+{
+ {NULL, setcontextdestructor_callback, NULL}
+};
+#endif // CL_VERSION_3_0
struct clGetPlatformInfo_st clGetPlatformInfoData[NUM_ITEMS_clGetPlatformInfo] =
{
@@ -45,7 +51,9 @@
int test_clRetainContext(const struct clRetainContext_st* data)
{
- test_icd_app_log("clRetainContext(%p)\n", context);
+ cl_int ret_val;
+
+ test_icd_app_log("clRetainContext(%p)\n", context);
ret_val = clRetainContext(context);
@@ -55,21 +63,22 @@
}
-
int test_clGetContextInfo(const struct clGetContextInfo_st* data)
{
+ cl_int ret_val;
+
test_icd_app_log("clGetContextInfo(%p, %u, %u, %p, %p)\n",
context,
- data->param_name,
+ data->param_name,
data->param_value_size,
- data->param_value,
- data->param_value_size_ret);
+ data->param_value,
+ data->param_value_size_ret);
ret_val = clGetContextInfo(context,
- data->param_name,
+ data->param_name,
data->param_value_size,
- data->param_value,
+ data->param_value,
data->param_value_size_ret);
test_icd_app_log("Value returned: %d\n", ret_val);
@@ -77,20 +86,47 @@
return 0;
}
+
+#ifdef CL_VERSION_3_0
+int test_clSetContextDestructorCallback(
+ const struct clSetContextDestructorCallback_st* data)
+{
+ cl_int ret_val;
+
+ test_icd_app_log(
+ "clSetContextDestructorCallback(%p, %p, %p)\n",
+ context,
+ data->pfn_notify,
+ data->user_data);
+
+ ret_val = clSetContextDestructorCallback(
+ context,
+ data->pfn_notify,
+ data->user_data);
+
+ test_icd_app_log("Value returned: %d\n", ret_val);
+
+ return 0;
+}
+#endif // CL_VERSION_3_0
+
+
int test_clGetPlatformInfo(const struct clGetPlatformInfo_st* data)
{
+ cl_int ret_val;
+
test_icd_app_log("clGetPlatformInfo(%p, %u, %u, %p, %p)\n",
platform,
data->param_name,
data->param_value_size,
- data->param_value,
- data->param_value_size_ret);
+ data->param_value,
+ data->param_value_size_ret);
ret_val = clGetPlatformInfo(platform,
data->param_name,
data->param_value_size,
data->param_value,
- data->param_value_size_ret);
+ data->param_value_size_ret);
test_icd_app_log("Value returned: %d\n", ret_val);
@@ -99,19 +135,21 @@
}
int test_clGetDeviceInfo(const struct clGetDeviceInfo_st* data)
-{
+{
+ cl_int ret_val;
+
test_icd_app_log("clGetDeviceInfo(%p, %u, %u, %p, %p)\n",
devices,
- data->param_name,
- data->param_value_size,
- data->param_value,
- data->param_value_size_ret);
+ data->param_name,
+ data->param_value_size,
+ data->param_value,
+ data->param_value_size_ret);
ret_val = clGetDeviceInfo(devices,
- data->param_name,
- data->param_value_size,
- data->param_value,
- data->param_value_size_ret);
+ data->param_name,
+ data->param_value_size,
+ data->param_value,
+ data->param_value_size_ret);
test_icd_app_log("Value returned: %d\n", ret_val);
@@ -120,18 +158,20 @@
int test_clCreateSubDevices(const struct clCreateSubDevices_st* data)
{
+ cl_int ret_val;
+
test_icd_app_log("clCreateSubDevices(%p, %p, %u, %p, %p)\n",
devices,
- data->properties,
- data->num_entries,
- &devices,
- data->num_devices);
+ data->properties,
+ data->num_entries,
+ &devices,
+ data->num_devices);
ret_val = clCreateSubDevices(devices,
- data->properties,
+ data->properties,
data->num_entries,
- &devices,
- data->num_devices);
+ &devices,
+ data->num_devices);
test_icd_app_log("Value returned: %d\n", ret_val);
@@ -140,9 +180,11 @@
int test_clRetainDevice(const struct clRetainDevice_st* data)
{
- test_icd_app_log("clRetainDevice(%p)\n", devices);
+ cl_int ret_val;
- ret_val = clRetainDevice(devices);
+ test_icd_app_log("clRetainDevice(%p)\n", devices);
+
+ ret_val = clRetainDevice(devices);
test_icd_app_log("Value returned: %d\n", ret_val);
@@ -153,31 +195,37 @@
{
int i;
- for (i = 0;i<NUM_ITEMS_clRetainContext;i++) {
- test_clRetainContext(&clRetainContextData[i]);
- }
+ for (i = 0;i<NUM_ITEMS_clRetainContext;i++) {
+ test_clRetainContext(&clRetainContextData[i]);
+ }
- for (i = 0;i<NUM_ITEMS_clGetContextInfo;i++) {
- test_clGetContextInfo(&clGetContextInfoData[i]);
- }
+#ifdef CL_VERSION_3_0
+ for (i = 0;i<NUM_ITEMS_clSetContextDestructorCallback;i++) {
+ test_clSetContextDestructorCallback(&clSetContextDestructorCallbackData[i]);
+ }
+#endif // CL_VERSION_3_0
+
+ for (i = 0;i<NUM_ITEMS_clGetContextInfo;i++) {
+ test_clGetContextInfo(&clGetContextInfoData[i]);
+ }
#if 0
- for (i = 0;i<NUM_ITEMS_clGetPlatformInfo;i++) {
- test_clGetPlatformInfo(&clGetPlatformInfoData[i]);
+ for (i = 0;i<NUM_ITEMS_clGetPlatformInfo;i++) {
+ test_clGetPlatformInfo(&clGetPlatformInfoData[i]);
}
#endif
- for (i = 0;i<NUM_ITEMS_clGetDeviceInfo;i++) {
- test_clGetDeviceInfo(&clGetDeviceInfoData[i]);
- }
+ for (i = 0;i<NUM_ITEMS_clGetDeviceInfo;i++) {
+ test_clGetDeviceInfo(&clGetDeviceInfoData[i]);
+ }
- for (i = 0;i<NUM_ITEMS_clCreateSubDevices;i++) {
- test_clCreateSubDevices(&clCreateSubDevicesData[i]);
- }
+ for (i = 0;i<NUM_ITEMS_clCreateSubDevices;i++) {
+ test_clCreateSubDevices(&clCreateSubDevicesData[i]);
+ }
- for (i = 0;i<NUM_ITEMS_clRetainDevice;i++) {
- test_clRetainDevice(&clRetainDeviceData[i]);
- }
+ for (i = 0;i<NUM_ITEMS_clRetainDevice;i++) {
+ test_clRetainDevice(&clRetainDeviceData[i]);
+ }
return 0;
}
diff --git a/test/loader_test/test_program_objects.c b/test/loader_test/test_program_objects.c
index 30c99a1..04395d4 100644
--- a/test/loader_test/test_program_objects.c
+++ b/test/loader_test/test_program_objects.c
@@ -7,8 +7,6 @@
extern cl_platform_id platform;
extern cl_device_id devices;
-int ret_val;
-
extern void CL_CALLBACK program_callback(cl_program _a, void* _b);
const struct clRetainProgram_st clRetainProgramData[NUM_ITEMS_clRetainProgram]=
@@ -53,6 +51,8 @@
int test_clRetainProgram(const struct clRetainProgram_st *data)
{
+ cl_int ret_val;
+
test_icd_app_log("clRetainProgram(%p)\n",
program);
@@ -67,6 +67,8 @@
int test_clBuildProgram(const struct clBuildProgram_st *data)
{
+ cl_int ret_val;
+
test_icd_app_log("clBuildProgram(%p, %u, %p, %p, %p, %p)\n",
program,
data->num_devices,
@@ -90,6 +92,8 @@
int test_clCompileProgram(const struct clCompileProgram_st *data)
{
+ cl_int ret_val;
+
test_icd_app_log("clCompileProgram(%p, %u, %p, %p, %u, %p, %p, %p)\n",
program,
data->num_devices,
@@ -148,6 +152,8 @@
int test_clUnloadPlatformCompiler(const struct clUnloadPlatformCompiler_st *data)
{
+ cl_int ret_val;
+
test_icd_app_log("clUnloadPlatformCompiler(%p)\n", platform);
ret_val=clUnloadPlatformCompiler(platform);
@@ -162,7 +168,7 @@
{
void *return_value;
test_icd_app_log("clGetExtensionFunctionAddressForPlatform(%p, %p)\n",
- platform,
+ platform,
data->func_name);
return_value=clGetExtensionFunctionAddressForPlatform(platform,
@@ -176,6 +182,8 @@
int test_clGetProgramInfo(const struct clGetProgramInfo_st *data)
{
+ cl_int ret_val;
+
test_icd_app_log("clGetProgramInfo(%p, %u, %u, %p, %p)\n",
program,
data->param_name,
@@ -197,6 +205,8 @@
int test_clGetProgramBuildInfo(const struct clGetProgramBuildInfo_st *data)
{
+ cl_int ret_val;
+
test_icd_app_log("clGetProgramBuildInfo(%p, %p, %u, %u, %p, %p)\n",
program,
data->device,
@@ -224,7 +234,7 @@
for (i=0;i<NUM_ITEMS_clRetainProgram;i++) {
test_clRetainProgram(&clRetainProgramData[i]);
- }
+ }
for (i=0;i<NUM_ITEMS_clBuildProgram;i++) {
test_clBuildProgram(&clBuildProgramData[i]);
diff --git a/test/loader_test/test_sampler_objects.c b/test/loader_test/test_sampler_objects.c
index 1f2835f..7994411 100644
--- a/test/loader_test/test_sampler_objects.c
+++ b/test/loader_test/test_sampler_objects.c
@@ -3,7 +3,6 @@
#include <platform/icd_test_log.h>
extern cl_sampler sampler;
-int ret_val;
const struct clRetainSampler_st clRetainSamplerData[NUM_ITEMS_clRetainSampler]=
{
@@ -18,6 +17,8 @@
int test_clRetainSampler(const struct clRetainSampler_st *data)
{
+ cl_int ret_val;
+
test_icd_app_log("clRetainSampler(%p)\n", sampler);
ret_val=clRetainSampler(sampler);
@@ -29,6 +30,8 @@
int test_clGetSamplerInfo(const struct clGetSamplerInfo_st *data)
{
+ cl_int ret_val;
+
test_icd_app_log("clGetSamplerInfo(%p, %u, %u, %p, %p)\n",
sampler,
data->param_name,