Skip to content

Commit

Permalink
[Spec Constants] Improved handling of invalid/unsupported spec. const…
Browse files Browse the repository at this point in the history
…ants

Two main changes to how `Kernel/ProgramSetSpecializationConstants`
are handled:
* They may now output either `INVALID_VALUE` or the new
  `INVALID_SPEC_ID` when the provided list is invalid.
* The OpenCL and level 0 adapters now respond to
  `UR_DEVICE_INFO_KERNEL_SET_SPECIALIZATION_CONSTANTS` with `false`
  rather than erroring out. This fixes some tests that were
  incorrectly not being skipped.
* `urKernelSetSpecializationConstants` now "implemented" (as a
  function that returns `UNSUPPORTED_FEATURE` for opencl and cuda.
  • Loading branch information
RossBrunton committed Apr 3, 2024
1 parent 03b7148 commit a4019b0
Show file tree
Hide file tree
Showing 21 changed files with 150 additions and 17 deletions.
11 changes: 11 additions & 0 deletions include/ur_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -494,6 +494,7 @@ typedef enum ur_result_t {
UR_RESULT_ERROR_LAYER_NOT_PRESENT = 68, ///< A requested layer was not found by the loader.
UR_RESULT_ERROR_IN_EVENT_LIST_EXEC_STATUS = 69, ///< An event in the provided wait list has ::UR_EVENT_STATUS_ERROR.
UR_RESULT_ERROR_DEVICE_NOT_AVAILABLE = 70, ///< Device in question has `::UR_DEVICE_INFO_AVAILABLE == false`
UR_RESULT_ERROR_INVALID_SPEC_ID = 71, ///< A specialization constant identifier is not valid.
UR_RESULT_ERROR_INVALID_COMMAND_BUFFER_EXP = 0x1000, ///< Invalid Command-Buffer
UR_RESULT_ERROR_INVALID_COMMAND_BUFFER_SYNC_POINT_EXP = 0x1001, ///< Sync point is not valid for the command-buffer
UR_RESULT_ERROR_INVALID_COMMAND_BUFFER_SYNC_POINT_WAIT_LIST_EXP = 0x1002, ///< Sync point wait list is invalid
Expand Down Expand Up @@ -4539,6 +4540,11 @@ typedef struct ur_specialization_constant_info_t {
/// + `NULL == pSpecConstants`
/// - ::UR_RESULT_ERROR_INVALID_SIZE
/// + `count == 0`
/// - ::UR_RESULT_ERROR_INVALID_VALUE
/// + A pSpecConstant entry contains a size that does not match that of the specialization constant in the module.
/// + A pSpecConstant entry contains a nullptr pValue.
/// - ::UR_RESULT_ERROR_INVALID_SPEC_ID
/// + Any id specified in a pSpecConstant entry is not a valid specialization constant identifier.
UR_APIEXPORT ur_result_t UR_APICALL
urProgramSetSpecializationConstants(
ur_program_handle_t hProgram, ///< [in] handle of the Program object
Expand Down Expand Up @@ -5123,6 +5129,11 @@ urKernelSetArgMemObj(
/// + `count == 0`
/// - ::UR_RESULT_ERROR_UNSUPPORTED_FEATURE
/// + If ::UR_DEVICE_INFO_KERNEL_SET_SPECIALIZATION_CONSTANTS query is false
/// - ::UR_RESULT_ERROR_INVALID_VALUE
/// + A pSpecConstant entry contains a size that does not match that of the specialization constant in the module.
/// + A pSpecConstant entry contains a nullptr pValue.
/// - ::UR_RESULT_ERROR_INVALID_SPEC_ID
/// + Any id specified in a pSpecConstant entry is not a valid specialization constant identifier.
UR_APIEXPORT ur_result_t UR_APICALL
urKernelSetSpecializationConstants(
ur_kernel_handle_t hKernel, ///< [in] handle of the kernel object
Expand Down
3 changes: 3 additions & 0 deletions include/ur_print.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -1545,6 +1545,9 @@ inline std::ostream &operator<<(std::ostream &os, enum ur_result_t value) {
case UR_RESULT_ERROR_DEVICE_NOT_AVAILABLE:
os << "UR_RESULT_ERROR_DEVICE_NOT_AVAILABLE";
break;
case UR_RESULT_ERROR_INVALID_SPEC_ID:
os << "UR_RESULT_ERROR_INVALID_SPEC_ID";
break;
case UR_RESULT_ERROR_INVALID_COMMAND_BUFFER_EXP:
os << "UR_RESULT_ERROR_INVALID_COMMAND_BUFFER_EXP";
break;
Expand Down
2 changes: 2 additions & 0 deletions scripts/core/common.yml
Original file line number Diff line number Diff line change
Expand Up @@ -278,6 +278,8 @@ etors:
desc: "An event in the provided wait list has $X_EVENT_STATUS_ERROR."
- name: ERROR_DEVICE_NOT_AVAILABLE
desc: "Device in question has `$X_DEVICE_INFO_AVAILABLE == false`"
- name: ERROR_INVALID_SPEC_ID
desc: "A specialization constant identifier is not valid."
- name: ERROR_UNKNOWN
value: "0x7ffffffe"
desc: "Unknown or internal error"
Expand Down
5 changes: 5 additions & 0 deletions scripts/core/kernel.yml
Original file line number Diff line number Diff line change
Expand Up @@ -465,6 +465,11 @@ returns:
- "`count == 0`"
- $X_RESULT_ERROR_UNSUPPORTED_FEATURE:
- "If $X_DEVICE_INFO_KERNEL_SET_SPECIALIZATION_CONSTANTS query is false"
- $X_RESULT_ERROR_INVALID_VALUE:
- "A pSpecConstant entry contains a size that does not match that of the specialization constant in the module."
- "A pSpecConstant entry contains a nullptr pValue."
- $X_RESULT_ERROR_INVALID_SPEC_ID:
- "Any id specified in a pSpecConstant entry is not a valid specialization constant identifier."
--- #--------------------------------------------------------------------------
type: function
desc: "Return platform native kernel handle."
Expand Down
5 changes: 5 additions & 0 deletions scripts/core/program.yml
Original file line number Diff line number Diff line change
Expand Up @@ -533,6 +533,11 @@ params:
returns:
- $X_RESULT_ERROR_INVALID_SIZE:
- "`count == 0`"
- $X_RESULT_ERROR_INVALID_VALUE:
- "A pSpecConstant entry contains a size that does not match that of the specialization constant in the module."
- "A pSpecConstant entry contains a nullptr pValue."
- $X_RESULT_ERROR_INVALID_SPEC_ID:
- "Any id specified in a pSpecConstant entry is not a valid specialization constant identifier."
--- #--------------------------------------------------------------------------
type: function
desc: "Return program native program handle."
Expand Down
5 changes: 5 additions & 0 deletions source/adapters/cuda/kernel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -377,3 +377,8 @@ urKernelSetArgSampler(ur_kernel_handle_t hKernel, uint32_t argIndex,
}
return Result;
}

UR_APIEXPORT ur_result_t UR_APICALL urKernelSetSpecializationConstants(
ur_kernel_handle_t, uint32_t, const ur_specialization_constant_info_t *) {
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
}
2 changes: 1 addition & 1 deletion source/adapters/cuda/ur_interface_loader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ UR_DLLEXPORT ur_result_t UR_APICALL urGetKernelProcAddrTable(
pDdiTable->pfnSetArgSampler = urKernelSetArgSampler;
pDdiTable->pfnSetArgValue = urKernelSetArgValue;
pDdiTable->pfnSetExecInfo = urKernelSetExecInfo;
pDdiTable->pfnSetSpecializationConstants = nullptr;
pDdiTable->pfnSetSpecializationConstants = urKernelSetSpecializationConstants;
return UR_RESULT_SUCCESS;
}

Expand Down
2 changes: 2 additions & 0 deletions source/adapters/level_zero/device.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -839,6 +839,8 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(
return ReturnValue(uint32_t{false});
case UR_DEVICE_INFO_IMAGE_SRGB:
return ReturnValue(uint32_t{false});
case UR_DEVICE_INFO_KERNEL_SET_SPECIALIZATION_CONSTANTS:
return ReturnValue(false);

case UR_DEVICE_INFO_QUEUE_ON_DEVICE_PROPERTIES:
case UR_DEVICE_INFO_QUEUE_ON_HOST_PROPERTIES: {
Expand Down
2 changes: 2 additions & 0 deletions source/adapters/opencl/common.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,8 @@ ur_result_t mapCLErrorToUR(cl_int Result) {
return UR_RESULT_ERROR_IN_EVENT_LIST_EXEC_STATUS;
case CL_DEVICE_NOT_AVAILABLE:
return UR_RESULT_ERROR_DEVICE_NOT_AVAILABLE;
case CL_INVALID_SPEC_ID:
return UR_RESULT_ERROR_INVALID_SPEC_ID;
default:
return UR_RESULT_ERROR_UNKNOWN;
}
Expand Down
4 changes: 3 additions & 1 deletion source/adapters/opencl/device.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -838,7 +838,6 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(ur_device_handle_t hDevice,
case UR_DEVICE_INFO_COMPILER_AVAILABLE:
case UR_DEVICE_INFO_LINKER_AVAILABLE:
case UR_DEVICE_INFO_PREFERRED_INTEROP_USER_SYNC:
case UR_DEVICE_INFO_KERNEL_SET_SPECIALIZATION_CONSTANTS:
case UR_DEVICE_INFO_SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS: {
/* CL type: cl_bool
* UR type: ur_bool_t */
Expand Down Expand Up @@ -987,6 +986,9 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(ur_device_handle_t hDevice,
case UR_DEVICE_INFO_COMMAND_BUFFER_UPDATE_SUPPORT_EXP: {
return ReturnValue(false);
}
case UR_DEVICE_INFO_KERNEL_SET_SPECIALIZATION_CONSTANTS: {
return ReturnValue(false);
}
default: {
return UR_RESULT_ERROR_INVALID_ENUMERATION;
}
Expand Down
5 changes: 5 additions & 0 deletions source/adapters/opencl/kernel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -419,3 +419,8 @@ UR_APIEXPORT ur_result_t UR_APICALL urKernelSetArgSampler(
CL_RETURN_ON_FAILURE(RetErr);
return UR_RESULT_SUCCESS;
}

UR_APIEXPORT ur_result_t UR_APICALL urKernelSetSpecializationConstants(
ur_kernel_handle_t, uint32_t, const ur_specialization_constant_info_t *) {
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
}
2 changes: 1 addition & 1 deletion source/adapters/opencl/ur_interface_loader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ UR_DLLEXPORT ur_result_t UR_APICALL urGetKernelProcAddrTable(
pDdiTable->pfnSetArgSampler = urKernelSetArgSampler;
pDdiTable->pfnSetArgValue = urKernelSetArgValue;
pDdiTable->pfnSetExecInfo = urKernelSetExecInfo;
pDdiTable->pfnSetSpecializationConstants = nullptr;
pDdiTable->pfnSetSpecializationConstants = urKernelSetSpecializationConstants;
return UR_RESULT_SUCCESS;
}

Expand Down
10 changes: 10 additions & 0 deletions source/loader/ur_libapi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3405,6 +3405,11 @@ ur_result_t UR_APICALL urProgramGetBuildInfo(
/// + `NULL == pSpecConstants`
/// - ::UR_RESULT_ERROR_INVALID_SIZE
/// + `count == 0`
/// - ::UR_RESULT_ERROR_INVALID_VALUE
/// + A pSpecConstant entry contains a size that does not match that of the specialization constant in the module.
/// + A pSpecConstant entry contains a nullptr pValue.
/// - ::UR_RESULT_ERROR_INVALID_SPEC_ID
/// + Any id specified in a pSpecConstant entry is not a valid specialization constant identifier.
ur_result_t UR_APICALL urProgramSetSpecializationConstants(
ur_program_handle_t hProgram, ///< [in] handle of the Program object
uint32_t count, ///< [in] the number of elements in the pSpecConstants array
Expand Down Expand Up @@ -3990,6 +3995,11 @@ ur_result_t UR_APICALL urKernelSetArgMemObj(
/// + `count == 0`
/// - ::UR_RESULT_ERROR_UNSUPPORTED_FEATURE
/// + If ::UR_DEVICE_INFO_KERNEL_SET_SPECIALIZATION_CONSTANTS query is false
/// - ::UR_RESULT_ERROR_INVALID_VALUE
/// + A pSpecConstant entry contains a size that does not match that of the specialization constant in the module.
/// + A pSpecConstant entry contains a nullptr pValue.
/// - ::UR_RESULT_ERROR_INVALID_SPEC_ID
/// + Any id specified in a pSpecConstant entry is not a valid specialization constant identifier.
ur_result_t UR_APICALL urKernelSetSpecializationConstants(
ur_kernel_handle_t hKernel, ///< [in] handle of the kernel object
uint32_t count, ///< [in] the number of elements in the pSpecConstants array
Expand Down
10 changes: 10 additions & 0 deletions source/ur_api.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2900,6 +2900,11 @@ ur_result_t UR_APICALL urProgramGetBuildInfo(
/// + `NULL == pSpecConstants`
/// - ::UR_RESULT_ERROR_INVALID_SIZE
/// + `count == 0`
/// - ::UR_RESULT_ERROR_INVALID_VALUE
/// + A pSpecConstant entry contains a size that does not match that of the specialization constant in the module.
/// + A pSpecConstant entry contains a nullptr pValue.
/// - ::UR_RESULT_ERROR_INVALID_SPEC_ID
/// + Any id specified in a pSpecConstant entry is not a valid specialization constant identifier.
ur_result_t UR_APICALL urProgramSetSpecializationConstants(
ur_program_handle_t hProgram, ///< [in] handle of the Program object
uint32_t count, ///< [in] the number of elements in the pSpecConstants array
Expand Down Expand Up @@ -3388,6 +3393,11 @@ ur_result_t UR_APICALL urKernelSetArgMemObj(
/// + `count == 0`
/// - ::UR_RESULT_ERROR_UNSUPPORTED_FEATURE
/// + If ::UR_DEVICE_INFO_KERNEL_SET_SPECIALIZATION_CONSTANTS query is false
/// - ::UR_RESULT_ERROR_INVALID_VALUE
/// + A pSpecConstant entry contains a size that does not match that of the specialization constant in the module.
/// + A pSpecConstant entry contains a nullptr pValue.
/// - ::UR_RESULT_ERROR_INVALID_SPEC_ID
/// + Any id specified in a pSpecConstant entry is not a valid specialization constant identifier.
ur_result_t UR_APICALL urKernelSetSpecializationConstants(
ur_kernel_handle_t hKernel, ///< [in] handle of the kernel object
uint32_t count, ///< [in] the number of elements in the pSpecConstants array
Expand Down
4 changes: 0 additions & 4 deletions test/conformance/kernel/kernel_adapter_level_zero.match
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,3 @@ urKernelSetExecInfoTest.SuccessIndirectAccess/Intel_R__oneAPI_Unified_Runtime_ov
urKernelSetExecInfoUSMPointersTest.SuccessHost/Intel_R__oneAPI_Unified_Runtime_over_Level_Zero___{{.*}}_
urKernelSetExecInfoUSMPointersTest.SuccessDevice/Intel_R__oneAPI_Unified_Runtime_over_Level_Zero___{{.*}}_
urKernelSetExecInfoUSMPointersTest.SuccessShared/Intel_R__oneAPI_Unified_Runtime_over_Level_Zero___{{.*}}_
urKernelSetSpecializationConstantsTest.Success/Intel_R__oneAPI_Unified_Runtime_over_Level_Zero___{{.*}}_
urKernelSetSpecializationConstantsTest.InvalidNullHandleKernel/Intel_R__oneAPI_Unified_Runtime_over_Level_Zero___{{.*}}_
urKernelSetSpecializationConstantsTest.InvalidNullPointerSpecConstants/Intel_R__oneAPI_Unified_Runtime_over_Level_Zero___{{.*}}_
urKernelSetSpecializationConstantsTest.InvalidSizeCount/Intel_R__oneAPI_Unified_Runtime_over_Level_Zero___{{.*}}_
4 changes: 0 additions & 4 deletions test/conformance/kernel/kernel_adapter_opencl.match
Original file line number Diff line number Diff line change
@@ -1,5 +1 @@
urKernelSetArgValueTest.InvalidKernelArgumentSize/Intel_R__OpenCL___{{.*}}
urKernelSetSpecializationConstantsTest.Success/Intel_R__OpenCL___{{.*}}
urKernelSetSpecializationConstantsTest.InvalidNullHandleKernel/Intel_R__OpenCL___{{.*}}
urKernelSetSpecializationConstantsTest.InvalidNullPointerSpecConstants/Intel_R__OpenCL___{{.*}}
urKernelSetSpecializationConstantsTest.InvalidSizeCount/Intel_R__OpenCL___{{.*}}
47 changes: 47 additions & 0 deletions test/conformance/kernel/urKernelSetSpecializationConstants.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,28 @@ struct urKernelSetSpecializationConstantsTest : uur::urBaseKernelExecutionTest {
};
UUR_INSTANTIATE_KERNEL_TEST_SUITE_P(urKernelSetSpecializationConstantsTest);

struct urKernelSetSpecializationConstantsNegativeTest
: uur::urBaseKernelExecutionTest {
void SetUp() override {
UUR_RETURN_ON_FATAL_FAILURE(urBaseKernelExecutionTest::SetUp());
bool supports_kernel_spec_constant = false;
ASSERT_SUCCESS(urDeviceGetInfo(
device, UR_DEVICE_INFO_KERNEL_SET_SPECIALIZATION_CONSTANTS,
sizeof(supports_kernel_spec_constant),
&supports_kernel_spec_constant, nullptr));
if (supports_kernel_spec_constant) {
GTEST_SKIP() << "Device supports setting kernel spec constants.";
}
Build();
}

uint32_t spec_value = 42;
ur_specialization_constant_info_t info = {0, sizeof(spec_value),
&spec_value};
};
UUR_INSTANTIATE_KERNEL_TEST_SUITE_P(
urKernelSetSpecializationConstantsNegativeTest);

TEST_P(urKernelSetSpecializationConstantsTest, Success) {
ASSERT_SUCCESS(urKernelSetSpecializationConstants(kernel, 1, &info));

Expand All @@ -36,6 +58,11 @@ TEST_P(urKernelSetSpecializationConstantsTest, Success) {
ValidateBuffer<uint32_t>(buffer, sizeof(spec_value), spec_value);
}

TEST_P(urKernelSetSpecializationConstantsNegativeTest, Unsupported) {
ASSERT_EQ_RESULT(UR_RESULT_ERROR_UNSUPPORTED_FEATURE,
urKernelSetSpecializationConstants(kernel, 1, &info));
}

TEST_P(urKernelSetSpecializationConstantsTest, InvalidNullHandleKernel) {
ASSERT_EQ_RESULT(UR_RESULT_ERROR_INVALID_NULL_HANDLE,
urKernelSetSpecializationConstants(nullptr, 1, &info));
Expand All @@ -51,3 +78,23 @@ TEST_P(urKernelSetSpecializationConstantsTest, InvalidSizeCount) {
ASSERT_EQ_RESULT(UR_RESULT_ERROR_INVALID_SIZE,
urKernelSetSpecializationConstants(kernel, 0, &info));
}

TEST_P(urKernelSetSpecializationConstantsTest, InvalidValueSize) {
ur_specialization_constant_info_t bad_info = {0, 0x1000, &spec_value};
ASSERT_EQ_RESULT(UR_RESULT_ERROR_INVALID_VALUE,
urKernelSetSpecializationConstants(kernel, 1, &bad_info));
}

TEST_P(urKernelSetSpecializationConstantsTest, InvalidValueId) {
ur_specialization_constant_info_t bad_info = {999, sizeof(spec_value),
&spec_value};
ASSERT_EQ_RESULT(UR_RESULT_ERROR_INVALID_SPEC_ID,
urKernelSetSpecializationConstants(kernel, 1, &bad_info));
}

TEST_P(urKernelSetSpecializationConstantsTest, InvalidValuePtr) {
ur_specialization_constant_info_t bad_info = {0, sizeof(spec_value),
nullptr};
ASSERT_EQ_RESULT(UR_RESULT_ERROR_INVALID_VALUE,
urKernelSetSpecializationConstants(kernel, 1, &bad_info));
}
5 changes: 4 additions & 1 deletion test/conformance/program/program_adapter_cuda.match
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,7 @@
{{OPT}}urProgramGetInfoTest.InvalidNullHandleProgram/NVIDIA_CUDA_BACKEND___{{.*}}___UR_PROGRAM_INFO_NUM_KERNELS
{{OPT}}urProgramGetInfoTest.InvalidNullHandleProgram/NVIDIA_CUDA_BACKEND___{{.*}}___UR_PROGRAM_INFO_KERNEL_NAMES
{{OPT}}urProgramLinkTest.Success/NVIDIA_CUDA_BACKEND___{{.*}}_
{{OPT}}urProgramSetSpecializationConstantsTest.Success/NVIDIA_CUDA_BACKEND___{{.*}}_
urProgramSetSpecializationConstantsTest.Success/NVIDIA_CUDA_BACKEND___{{.*}}_
urProgramSetSpecializationConstantsTest.InvalidValueSize/NVIDIA_CUDA_BACKEND___{{.*}}_
urProgramSetSpecializationConstantsTest.InvalidValueId/NVIDIA_CUDA_BACKEND___{{.*}}_
urProgramSetSpecializationConstantsTest.InvalidValuePtr/NVIDIA_CUDA_BACKEND___{{.*}}_
5 changes: 4 additions & 1 deletion test/conformance/program/program_adapter_hip.match
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,8 @@
{{OPT}}urProgramGetInfoTest.InvalidNullHandleProgram/AMD_HIP_BACKEND___{{.*}}___UR_PROGRAM_INFO_NUM_KERNELS
{{OPT}}urProgramGetInfoTest.InvalidNullHandleProgram/AMD_HIP_BACKEND___{{.*}}___UR_PROGRAM_INFO_KERNEL_NAMES
{{OPT}}urProgramLinkTest.Success/AMD_HIP_BACKEND___{{.*}}_
{{OPT}}urProgramSetSpecializationConstantsTest.Success/AMD_HIP_BACKEND___{{.*}}_
urProgramSetSpecializationConstantsTest.Success/AMD_HIP_BACKEND___{{.*}}_
urProgramSetSpecializationConstantsTest.InvalidValueSize/AMD_HIP_BACKEND___{{.*}}_
urProgramSetSpecializationConstantsTest.InvalidValueId/AMD_HIP_BACKEND___{{.*}}_
urProgramSetSpecializationConstantsTest.InvalidValuePtr/AMD_HIP_BACKEND___{{.*}}_
{{OPT}}{{Segmentation fault|Aborted}}
11 changes: 7 additions & 4 deletions test/conformance/program/program_adapter_native_cpu.match
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,10 @@
{{OPT}}urProgramReleaseTest.InvalidNullHandleProgram/SYCL_NATIVE_CPU___SYCL_Native_CPU_
{{OPT}}urProgramRetainTest.Success/SYCL_NATIVE_CPU___SYCL_Native_CPU_
{{OPT}}urProgramRetainTest.InvalidNullHandleProgram/SYCL_NATIVE_CPU___SYCL_Native_CPU_
{{OPT}}urProgramSetSpecializationConstantsTest.Success/SYCL_NATIVE_CPU___SYCL_Native_CPU_
{{OPT}}urProgramSetSpecializationConstantsTest.InvalidNullHandleProgram/SYCL_NATIVE_CPU___SYCL_Native_CPU_
{{OPT}}urProgramSetSpecializationConstantsTest.InvalidNullPointerSpecConstants/SYCL_NATIVE_CPU___SYCL_Native_CPU_
{{OPT}}urProgramSetSpecializationConstantsTest.InvalidSizeCount/SYCL_NATIVE_CPU___SYCL_Native_CPU_
urProgramSetSpecializationConstantsTest.Success/SYCL_NATIVE_CPU___SYCL_Native_CPU_
urProgramSetSpecializationConstantsTest.InvalidNullHandleProgram/SYCL_NATIVE_CPU___SYCL_Native_CPU_
urProgramSetSpecializationConstantsTest.InvalidNullPointerSpecConstants/SYCL_NATIVE_CPU___SYCL_Native_CPU_
urProgramSetSpecializationConstantsTest.InvalidSizeCount/SYCL_NATIVE_CPU___SYCL_Native_CPU_
urProgramSetSpecializationConstantsTest.InvalidValueSize/SYCL_NATIVE_CPU___SYCL_Native_CPU_
urProgramSetSpecializationConstantsTest.InvalidValueId/SYCL_NATIVE_CPU___SYCL_Native_CPU_
urProgramSetSpecializationConstantsTest.InvalidValuePtr/SYCL_NATIVE_CPU___SYCL_Native_CPU_
23 changes: 23 additions & 0 deletions test/conformance/program/urProgramSetSpecializationConstants.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,3 +46,26 @@ TEST_P(urProgramSetSpecializationConstantsTest, InvalidSizeCount) {
ASSERT_EQ_RESULT(UR_RESULT_ERROR_INVALID_SIZE,
urProgramSetSpecializationConstants(program, 0, &info));
}

TEST_P(urProgramSetSpecializationConstantsTest, InvalidValueSize) {
ur_specialization_constant_info_t bad_info = {0, 0x1000, &spec_value};
ASSERT_EQ_RESULT(
UR_RESULT_ERROR_INVALID_VALUE,
urProgramSetSpecializationConstants(program, 1, &bad_info));
}

TEST_P(urProgramSetSpecializationConstantsTest, InvalidValueId) {
ur_specialization_constant_info_t bad_info = {999, sizeof(spec_value),
&spec_value};
ASSERT_EQ_RESULT(
UR_RESULT_ERROR_INVALID_SPEC_ID,
urProgramSetSpecializationConstants(program, 1, &bad_info));
}

TEST_P(urProgramSetSpecializationConstantsTest, InvalidValuePtr) {
ur_specialization_constant_info_t bad_info = {0, sizeof(spec_value),
nullptr};
ASSERT_EQ_RESULT(
UR_RESULT_ERROR_INVALID_VALUE,
urProgramSetSpecializationConstants(program, 1, &bad_info));
}

0 comments on commit a4019b0

Please sign in to comment.