Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cl_khr_icd 2.0.0 loader managed dispatch #238

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions .github/workflows/presubmit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -397,10 +397,17 @@ jobs:
$KEY_NAME = "HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors"
foreach ($Config in 'Release','Debug') {
$VALUE_NAME = "${env:GITHUB_WORKSPACE}/build/$Config/OpenCLDriverStub.dll"
$VALUE_NAME_2 = "${env:GITHUB_WORKSPACE}/build/$Config/OpenCLDriverStubICD2.dll"
& $REG ADD $KEY_NAME /v $VALUE_NAME /t REG_DWORD /d 0
if ($LASTEXITCODE -ne 0) { throw "Editing registry failed." }
& $REG ADD $KEY_NAME /v $VALUE_NAME_2 /t REG_DWORD /d 0
if ($LASTEXITCODE -ne 0) { throw "Editing registry failed." }
& ctest -C $Config --output-on-failure --no-tests=error --parallel ${env:NUMBER_OF_PROCESSORS}
if ($LASTEXITCODE -ne 0) { throw "Testing OpenCL-ICD-Loader in $Config failed." }
& $REG DELETE $KEY_NAME /v $VALUE_NAME_2 /f
if ($LASTEXITCODE -ne 0) { throw "Editing registry failed." }
& $REG DELETE $KEY_NAME /v $VALUE_NAME /f
if ($LASTEXITCODE -ne 0) { throw "Editing registry failed." }
}

- name: Install
Expand Down Expand Up @@ -429,8 +436,11 @@ jobs:
$REG = if('${{matrix.BIN}}' -eq 'x64') {"reg"} else {"${env:SystemRoot}\Syswow64\reg.exe"}
$KEY_NAME = "HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors"
$VALUE_NAME = "${env:GITHUB_WORKSPACE}/build/Release/OpenCLDriverStub.dll"
$VALUE_NAME_2 = "${env:GITHUB_WORKSPACE}/build/Release/OpenCLDriverStubICD2.dll"
& $REG ADD $KEY_NAME /v $VALUE_NAME /t REG_DWORD /d 0
if ($LASTEXITCODE -ne 0) { throw "Editing registry failed." }
& $REG ADD $KEY_NAME /v $VALUE_NAME_2 /t REG_DWORD /d 0
if ($LASTEXITCODE -ne 0) { throw "Editing registry failed." }
foreach ($Config in 'Release','Debug') {
& cmake `
--build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare" `
Expand All @@ -442,6 +452,8 @@ jobs:
}
& $REG DELETE $KEY_NAME /v $VALUE_NAME /f
if ($LASTEXITCODE -ne 0) { throw "Editing registry failed." }
& $REG DELETE $KEY_NAME /v $VALUE_NAME_2 /f
if ($LASTEXITCODE -ne 0) { throw "Editing registry failed." }

- name: "Consume (Ninja-Multi-Config standalone): Configure/Build/Test"
if: matrix.GEN == 'Ninja Multi-Config'
Expand All @@ -464,8 +476,11 @@ jobs:
$REG = if('${{matrix.BIN}}' -eq 'x64') {"reg"} else {"${env:SystemRoot}\Syswow64\reg.exe"}
$KEY_NAME = "HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors"
$VALUE_NAME = "${env:GITHUB_WORKSPACE}/build/Release/OpenCLDriverStub.dll"
$VALUE_NAME_2 = "${env:GITHUB_WORKSPACE}/build/Release/OpenCLDriverStubICD2.dll"
& $REG ADD $KEY_NAME /v $VALUE_NAME /t REG_DWORD /d 0
if ($LASTEXITCODE -ne 0) { throw "Editing registry failed." }
& $REG ADD $KEY_NAME /v $VALUE_NAME_2 /t REG_DWORD /d 0
if ($LASTEXITCODE -ne 0) { throw "Editing registry failed." }
foreach ($Config in 'Release','Debug') {
& cmake `
--build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare" `
Expand All @@ -477,6 +492,8 @@ jobs:
}
& $REG DELETE $KEY_NAME /v $VALUE_NAME /f
if ($LASTEXITCODE -ne 0) { throw "Editing registry failed." }
& $REG DELETE $KEY_NAME /v $VALUE_NAME_2 /f
if ($LASTEXITCODE -ne 0) { throw "Editing registry failed." }

- name: Consume (Emulate SDK presence)
run: |
Expand All @@ -502,8 +519,11 @@ jobs:
$REG = if('${{matrix.BIN}}' -eq 'x64') {"reg"} else {"${env:SystemRoot}\Syswow64\reg.exe"}
$KEY_NAME = "HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors"
$VALUE_NAME = "${env:GITHUB_WORKSPACE}/build/Release/OpenCLDriverStub.dll"
$VALUE_NAME_2 = "${env:GITHUB_WORKSPACE}/build/Release/OpenCLDriverStubICD2.dll"
& $REG ADD $KEY_NAME /v $VALUE_NAME /t REG_DWORD /d 0
if ($LASTEXITCODE -ne 0) { throw "Editing registry failed." }
& $REG ADD $KEY_NAME /v $VALUE_NAME_2 /t REG_DWORD /d 0
if ($LASTEXITCODE -ne 0) { throw "Editing registry failed." }
foreach ($Config in 'Release','Debug') {
& cmake `
--build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk" `
Expand All @@ -515,6 +535,8 @@ jobs:
}
& $REG DELETE $KEY_NAME /v $VALUE_NAME /f
if ($LASTEXITCODE -ne 0) { throw "Editing registry failed." }
& $REG DELETE $KEY_NAME /v $VALUE_NAME_2 /f
if ($LASTEXITCODE -ne 0) { throw "Editing registry failed." }

- name: "Consume (Ninja-Multi-Config SDK): Configure/Build/Test"
if: matrix.GEN == 'Ninja Multi-Config'
Expand All @@ -537,8 +559,11 @@ jobs:
$REG = if('${{matrix.BIN}}' -eq 'x64') {"reg"} else {"${env:SystemRoot}\Syswow64\reg.exe"}
$KEY_NAME = "HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors"
$VALUE_NAME = "${env:GITHUB_WORKSPACE}/build/Release/OpenCLDriverStub.dll"
$VALUE_NAME_2 = "${env:GITHUB_WORKSPACE}/build/Release/OpenCLDriverStubICD2.dll"
& $REG ADD $KEY_NAME /v $VALUE_NAME /t REG_DWORD /d 0
if ($LASTEXITCODE -ne 0) { throw "Editing registry failed." }
& $REG ADD $KEY_NAME /v $VALUE_NAME_2 /t REG_DWORD /d 0
if ($LASTEXITCODE -ne 0) { throw "Editing registry failed." }
foreach ($Config in 'Release','Debug') {
& cmake `
--build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk" `
Expand All @@ -550,6 +575,8 @@ jobs:
}
& $REG DELETE $KEY_NAME /v $VALUE_NAME /f
if ($LASTEXITCODE -ne 0) { throw "Editing registry failed." }
& $REG DELETE $KEY_NAME /v $VALUE_NAME_2 /f
if ($LASTEXITCODE -ne 0) { throw "Editing registry failed." }

macos:
runs-on: macos-latest
Expand Down
4 changes: 4 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ option(OPENCL_ICD_LOADER_BUILD_SHARED_LIBS "Build OpenCL ICD Loader as shared li
# It is currently needed default while the specification is being formalized,
# and to study the performance impact.
option (ENABLE_OPENCL_LAYERS "Enable OpenCL Layers" ON)
option (ENABLE_OPENCL_LOADER_MANAGED_DISPATCH "Enable OpenCL Loader managed dispatch" ON)
include(CMakeDependentOption)
cmake_dependent_option(ENABLE_OPENCL_LAYERINFO "Enable building cllayerinfo tool" ON ENABLE_OPENCL_LAYERS OFF)

Expand All @@ -68,6 +69,7 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/loader/icd_cmake_config.h.in
${CMAKE_CURRENT_BINARY_DIR}/icd_cmake_config.h)

set (OPENCL_ICD_LOADER_SOURCES
include/cl_khr_icd2.h
loader/icd.c
loader/icd.h
loader/icd_version.h
Expand All @@ -76,6 +78,7 @@ set (OPENCL_ICD_LOADER_SOURCES
loader/icd_dispatch_generated.c
loader/icd_envvars.h
loader/icd_platform.h)
include_directories (include)

if (WIN32)
list (APPEND OPENCL_ICD_LOADER_SOURCES
Expand Down Expand Up @@ -161,6 +164,7 @@ set (OPENCL_COMPILE_DEFINITIONS
OPENCL_ICD_LOADER_VERSION_MINOR=0
OPENCL_ICD_LOADER_VERSION_REV=6
$<$<BOOL:${ENABLE_OPENCL_LAYERS}>:CL_ENABLE_LAYERS>
$<$<BOOL:${ENABLE_OPENCL_LOADER_MANAGED_DISPATCH}>:CL_ENABLE_LOADER_MANAGED_DISPATCH>
)

target_compile_definitions (OpenCL
Expand Down
36 changes: 36 additions & 0 deletions include/cl_khr_icd2.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#if !defined(CL_PLATFORM_UNLOADABLE)
#define CL_PLATFORM_UNLOADABLE_KHR 0x0921
#endif

#if defined(CL_ENABLE_LAYERS) && !defined(CL_LAYER_API_VERSION_200)
#define CL_LAYER_API_VERSION_200 200

typedef cl_int CL_API_CALL
clDeinitLayer_t(void);

typedef clDeinitLayer_t *pfn_clDeinitLayer;
#endif //defined(CL_ENABLE_LAYERS) && !defined(CL_LAYER_API_VERSION_200)

#if !defined(CL_ICD2_TAG_KHR)
#if INTPTR_MAX == INT32_MAX
#define CL_ICD2_TAG_KHR ((intptr_t)0x434C3331)
#else
#define CL_ICD2_TAG_KHR ((intptr_t)0x4F50454E434C3331)
#endif

typedef void * CL_API_CALL
clIcdGetFunctionAddressForPlatformKHR_t(
cl_platform_id platform,
const char* func_name);

typedef clIcdGetFunctionAddressForPlatformKHR_t *
clIcdGetFunctionAddressForPlatformKHR_fn;

typedef cl_int CL_API_CALL
clIcdSetPlatformDispatchDataKHR_t(
cl_platform_id platform,
void *disp_data);

typedef clIcdSetPlatformDispatchDataKHR_t *
clIcdSetPlatformDispatchDataKHR_fn;
#endif // !defined(CL_ICD2_TAG_KHR)
3 changes: 1 addition & 2 deletions loader/cllayerinfo.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
#include "icd.h"
#include <stdio.h>
#include <stdlib.h>
#include <CL/cl_layer.h>
#if defined(_WIN32)
#include <io.h>
#include <share.h>
Expand Down Expand Up @@ -90,7 +89,7 @@ static void restore_outputs(void)
void printLayerInfo(const struct KHRLayer *layer)
{
cl_layer_api_version api_version = 0;
pfn_clGetLayerInfo p_clGetLayerInfo = (pfn_clGetLayerInfo)(size_t)layer->p_clGetLayerInfo;
pfn_clGetLayerInfo p_clGetLayerInfo = layer->p_clGetLayerInfo;
cl_int result = CL_SUCCESS;
size_t sz;

Expand Down
Loading