Skip to content

Commit 551a74d

Browse files
authored
Implement clGetICDLoaderInfoOCLICD. (#188)
* Implement clGetICDLoaderInfoOCLICD. * Synchronize `clGetICDLoaderInfoOCLICD` and `OpenCL.rc`. * Change CMake variables prefix to match commonly used prefix. * Generate OPENCL_ICD_LOADER_OCL_VERSION_STRING from CL_TARGET_OPENCL_VERSION. * Renamed cl_icdl.h to cl_icdl_private.h. Change enum to typedef + defines. * Use macro dedicated for string parameter values. * Formating. * Bumped loader version to 3.0.5.
1 parent 8f51613 commit 551a74d

5 files changed

Lines changed: 156 additions & 13 deletions

File tree

CMakeLists.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/loader/icd_cmake_config.h.in
6262
set (OPENCL_ICD_LOADER_SOURCES
6363
loader/icd.c
6464
loader/icd.h
65+
loader/icd_version.h
66+
loader/cl_icdl_private.h
6567
loader/icd_dispatch.c
6668
loader/icd_dispatch.h
6769
loader/icd_dispatch_generated.c
@@ -148,6 +150,11 @@ endif ()
148150
target_compile_definitions (OpenCL
149151
PRIVATE
150152
CL_TARGET_OPENCL_VERSION=300
153+
OPENCL_ICD_LOADER_VERSION_MAJOR=3
154+
OPENCL_ICD_LOADER_VERSION_MINOR=0
155+
OPENCL_ICD_LOADER_VERSION_REV=5
156+
OPENCL_ICD_LOADER_NAME_STRING="Khronos OpenCL ICD Loader"
157+
OPENCL_ICD_LOADER_VENDOR_STRING="Khronos Group"
151158
$<$<BOOL:${ENABLE_OPENCL_LAYERS}>:CL_ENABLE_LAYERS>
152159
)
153160

loader/cl_icdl_private.h

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/*
2+
* Copyright (c) 2016-2020 The Khronos Group Inc.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*
16+
* OpenCL is a trademark of Apple Inc. used under license by Khronos.
17+
*/
18+
19+
#ifndef OPENCL_CL_ICDL_H
20+
#define OPENCL_CL_ICDL_H
21+
22+
#include <CL/cl.h>
23+
24+
#ifdef __cplusplus
25+
extern "C" {
26+
#endif
27+
28+
typedef cl_uint cl_icdl_info;
29+
30+
#define CL_ICDL_OCL_VERSION 1
31+
#define CL_ICDL_VERSION 2
32+
#define CL_ICDL_NAME 3
33+
#define CL_ICDL_VENDOR 4
34+
35+
typedef cl_int
36+
(CL_API_CALL * pfn_clGetICDLoaderInfoOCLICD)(cl_icdl_info param_name,
37+
size_t param_value_size,
38+
void * param_value,
39+
size_t * param_value_size_ret);
40+
41+
#ifdef __cplusplus
42+
}
43+
#endif
44+
45+
46+
#endif /* OPENCL_CL_ICDL_H */

loader/icd_dispatch.c

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,53 @@
1818

1919
#include "icd.h"
2020
#include "icd_dispatch.h"
21+
#include "cl_icdl_private.h"
22+
#include "icd_version.h"
2123

2224
#include <stdlib.h>
2325
#include <string.h>
2426

27+
static cl_int
28+
clGetICDLoaderInfoOCLICD(
29+
cl_icdl_info param_name,
30+
size_t param_value_size,
31+
void * param_value,
32+
size_t * param_value_size_ret)
33+
{
34+
static const char cl_icdl_OCL_VERSION[] = OPENCL_ICD_LOADER_OCL_VERSION_STRING;
35+
static const char cl_icdl_VERSION[] = OPENCL_ICD_LOADER_VERSION_STRING;
36+
static const char cl_icdl_NAME[] = OPENCL_ICD_LOADER_NAME_STRING;
37+
static const char cl_icdl_VENDOR[] = OPENCL_ICD_LOADER_VENDOR_STRING;
38+
size_t pvs;
39+
void * pv;
40+
41+
#define KHR_ICD_CASE_STRING_PARAM_NAME(name) \
42+
case CL_ICDL_ ## name: \
43+
pvs = strlen(cl_icdl_ ## name) + 1; \
44+
pv = (void *)cl_icdl_ ## name; \
45+
break
46+
47+
switch (param_name) {
48+
KHR_ICD_CASE_STRING_PARAM_NAME(OCL_VERSION);
49+
KHR_ICD_CASE_STRING_PARAM_NAME(VERSION);
50+
KHR_ICD_CASE_STRING_PARAM_NAME(NAME);
51+
KHR_ICD_CASE_STRING_PARAM_NAME(VENDOR);
52+
default:
53+
return CL_INVALID_VALUE;
54+
}
55+
56+
#undef KHR_ICD_CASE_PARAM_NAME
57+
58+
if (param_value) {
59+
if (param_value_size < pvs)
60+
return CL_INVALID_VALUE;
61+
memcpy(param_value, pv, pvs);
62+
}
63+
if (param_value_size_ret != NULL)
64+
*param_value_size_ret = pvs;
65+
return CL_SUCCESS;
66+
}
67+
2568
static void* khrIcdGetExtensionFunctionAddress(const char* function_name)
2669
{
2770
// Most extensions, including multi-vendor KHR and EXT extensions,
@@ -93,6 +136,9 @@ static void* khrIcdGetExtensionFunctionAddress(const char* function_name)
93136
// cl_khr_sub_groups
94137
KHR_ICD_CHECK_EXTENSION_FUNCTION(clGetKernelSubGroupInfoKHR);
95138

139+
// cl_icdl
140+
KHR_ICD_CHECK_EXTENSION_FUNCTION(clGetICDLoaderInfoOCLICD);
141+
96142
#undef KHR_ICD_CHECK_EXTENSION_FUNCTION
97143

98144
return NULL;

loader/icd_version.h

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/*
2+
* Copyright (c) 2016-2020 The Khronos Group Inc.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*
16+
* OpenCL is a trademark of Apple Inc. used under license by Khronos.
17+
*/
18+
19+
#ifndef _ICD_VERSION_H_
20+
#define _ICD_VERSION_H_
21+
22+
#define OPENCL_ICD_LOADER_VAL(_v) #_v
23+
#define OPENCL_ICD_LOADER_TOSTRING(_d) OPENCL_ICD_LOADER_VAL(_d)
24+
#define OPENCL_ICD_LOADER_VERSION_STRING \
25+
OPENCL_ICD_LOADER_TOSTRING(OPENCL_ICD_LOADER_VERSION_MAJOR) "." \
26+
OPENCL_ICD_LOADER_TOSTRING(OPENCL_ICD_LOADER_VERSION_MINOR) "." \
27+
OPENCL_ICD_LOADER_TOSTRING(OPENCL_ICD_LOADER_VERSION_REV)
28+
29+
#if CL_TARGET_OPENCL_VERSION == 100
30+
#define OPENCL_ICD_LOADER_OCL_VERSION_NUMBER "1.0"
31+
#endif
32+
#if CL_TARGET_OPENCL_VERSION == 110
33+
#define OPENCL_ICD_LOADER_OCL_VERSION_NUMBER "1.1"
34+
#endif
35+
#if CL_TARGET_OPENCL_VERSION == 120
36+
#define OPENCL_ICD_LOADER_OCL_VERSION_NUMBER "1.2"
37+
#endif
38+
#if CL_TARGET_OPENCL_VERSION == 200
39+
#define OPENCL_ICD_LOADER_OCL_VERSION_NUMBER "2.0"
40+
#endif
41+
#if CL_TARGET_OPENCL_VERSION == 210
42+
#define OPENCL_ICD_LOADER_OCL_VERSION_NUMBER "2.1"
43+
#endif
44+
#if CL_TARGET_OPENCL_VERSION == 220
45+
#define OPENCL_ICD_LOADER_OCL_VERSION_NUMBER "2.2"
46+
#endif
47+
#if CL_TARGET_OPENCL_VERSION == 300
48+
#define OPENCL_ICD_LOADER_OCL_VERSION_NUMBER "3.0"
49+
#endif
50+
51+
#define OPENCL_ICD_LOADER_OCL_VERSION_STRING \
52+
"OpenCL " OPENCL_ICD_LOADER_OCL_VERSION_NUMBER
53+
54+
#endif

loader/windows/OpenCL.rc

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,10 @@
1717
*/
1818

1919
#include <windows.h>
20-
21-
#define OPENCL_ICD_LOADER_VERSION_MAJOR 3
22-
#define OPENCL_ICD_LOADER_VERSION_MINOR 0
23-
#define OPENCL_ICD_LOADER_VERSION_REV 4
20+
#include <icd_version.h>
2421

2522
#ifdef RC_INVOKED
2623

27-
#define OPENCL_ICD_LOADER_VAL(_v) #_v
28-
#define OPENCL_ICD_LOADER_TOSTRING(_d) OPENCL_ICD_LOADER_VAL(_d)
29-
#define OPENCL_ICD_LOADER_VERSION_STRING \
30-
OPENCL_ICD_LOADER_TOSTRING(OPENCL_ICD_LOADER_VERSION_MAJOR) "." \
31-
OPENCL_ICD_LOADER_TOSTRING(OPENCL_ICD_LOADER_VERSION_MINOR) "." \
32-
OPENCL_ICD_LOADER_TOSTRING(OPENCL_ICD_LOADER_VERSION_REV)
33-
3424
VS_VERSION_INFO VERSIONINFO
3525
FILEVERSION OPENCL_ICD_LOADER_VERSION_MAJOR,OPENCL_ICD_LOADER_VERSION_MINOR,OPENCL_ICD_LOADER_VERSION_REV,0
3626
PRODUCTVERSION OPENCL_ICD_LOADER_VERSION_MAJOR,OPENCL_ICD_LOADER_VERSION_MINOR,OPENCL_ICD_LOADER_VERSION_REV,0
@@ -42,10 +32,10 @@ BEGIN
4232
BLOCK "040904E4"
4333
BEGIN
4434
VALUE "FileDescription" ,"OpenCL Client DLL"
45-
VALUE "ProductName" ,"Khronos OpenCL ICD Loader"
35+
VALUE "ProductName" ,OPENCL_ICD_LOADER_NAME_STRING
4636
VALUE "LegalCopyright" ,"Copyright \251 The Khronos Group Inc 2016-2020"
4737
VALUE "FileVersion" ,OPENCL_ICD_LOADER_VERSION_STRING ".0"
48-
VALUE "CompanyName" ,"Khronos Group"
38+
VALUE "CompanyName" ,OPENCL_ICD_LOADER_VENDOR_STRING
4939
VALUE "InternalName" ,"OpenCL"
5040
VALUE "OriginalFilename","OpenCL.dll"
5141
END

0 commit comments

Comments
 (0)