Skip to content

Commit 9989d97

Browse files
committed
Handle INVALID_VALUE in OCL urPlatformGet
The OpenCL function clGetPlatformIDs may return CL_INVALID_VALUE, which needs to be converted into appropriate UR returns as follows: * If a non-null platforms list is provided, but the number of elements in it is 0, then return UR_RESULT_ERROR_INVALID_SIZE. * If neither platform or sizes outputs are provided, then return UR_RESULT_ERROR_INVALID_VALUE. This required a spec change. This fixes a bug Intel are tracking internally as URT-831.
1 parent c742ca4 commit 9989d97

File tree

7 files changed

+24
-0
lines changed

7 files changed

+24
-0
lines changed

include/ur_api.h

+2
Original file line numberDiff line numberDiff line change
@@ -1054,6 +1054,8 @@ typedef enum ur_adapter_backend_t {
10541054
/// + `NULL == phAdapters`
10551055
/// - ::UR_RESULT_ERROR_INVALID_SIZE
10561056
/// + `NumEntries == 0 && phPlatforms != NULL`
1057+
/// - ::UR_RESULT_ERROR_INVALID_VALUE
1058+
/// + `pNumPlatforms == NULL && phPlatforms == NULL`
10571059
UR_APIEXPORT ur_result_t UR_APICALL
10581060
urPlatformGet(
10591061
ur_adapter_handle_t *phAdapters, ///< [in][range(0, NumAdapters)] array of adapters to query for platforms.

scripts/core/platform.yml

+2
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ params:
4848
returns:
4949
- $X_RESULT_ERROR_INVALID_SIZE:
5050
- "`NumEntries == 0 && phPlatforms != NULL`"
51+
- $X_RESULT_ERROR_INVALID_VALUE:
52+
- "`pNumPlatforms == NULL && phPlatforms == NULL`"
5153
--- #--------------------------------------------------------------------------
5254
type: enum
5355
desc: "Supported platform info"

source/adapters/opencl/platform.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,11 @@ urPlatformGet(ur_adapter_handle_t *, uint32_t, uint32_t NumEntries,
9696
}
9797
}
9898

99+
/* INVALID_VALUE is returned when the size is invalid, special case it here */
100+
if (Result == CL_INVALID_VALUE && phPlatforms != nullptr && NumEntries == 0) {
101+
return UR_RESULT_ERROR_INVALID_SIZE;
102+
}
103+
99104
return mapCLErrorToUR(Result);
100105
}
101106

source/loader/layers/validation/ur_valddi.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,10 @@ __urdlllocal ur_result_t UR_APICALL urPlatformGet(
234234
if (NumEntries == 0 && phPlatforms != NULL) {
235235
return UR_RESULT_ERROR_INVALID_SIZE;
236236
}
237+
238+
if (pNumPlatforms == NULL && phPlatforms == NULL) {
239+
return UR_RESULT_ERROR_INVALID_VALUE;
240+
}
237241
}
238242

239243
ur_result_t result =

source/loader/ur_libapi.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,8 @@ ur_result_t UR_APICALL urAdapterGetInfo(
509509
/// + `NULL == phAdapters`
510510
/// - ::UR_RESULT_ERROR_INVALID_SIZE
511511
/// + `NumEntries == 0 && phPlatforms != NULL`
512+
/// - ::UR_RESULT_ERROR_INVALID_VALUE
513+
/// + `pNumPlatforms == NULL && phPlatforms == NULL`
512514
ur_result_t UR_APICALL urPlatformGet(
513515
ur_adapter_handle_t *
514516
phAdapters, ///< [in][range(0, NumAdapters)] array of adapters to query for platforms.

source/ur_api.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -460,6 +460,8 @@ ur_result_t UR_APICALL urAdapterGetInfo(
460460
/// + `NULL == phAdapters`
461461
/// - ::UR_RESULT_ERROR_INVALID_SIZE
462462
/// + `NumEntries == 0 && phPlatforms != NULL`
463+
/// - ::UR_RESULT_ERROR_INVALID_VALUE
464+
/// + `pNumPlatforms == NULL && phPlatforms == NULL`
463465
ur_result_t UR_APICALL urPlatformGet(
464466
ur_adapter_handle_t *
465467
phAdapters, ///< [in][range(0, NumAdapters)] array of adapters to query for platforms.

test/conformance/platform/urPlatformGet.cpp

+7
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,10 @@ TEST_F(urPlatformGetTest, InvalidNullPointer) {
4141
static_cast<uint32_t>(adapters.size()), 0,
4242
nullptr, &count));
4343
}
44+
45+
TEST_F(urPlatformGetTest, NullArgs) {
46+
ASSERT_EQ_RESULT(UR_RESULT_ERROR_INVALID_VALUE,
47+
urPlatformGet(adapters.data(),
48+
static_cast<uint32_t>(adapters.size()), 0,
49+
nullptr, nullptr));
50+
}

0 commit comments

Comments
 (0)