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 a number of
  adapters.
  • Loading branch information
RossBrunton committed Aug 7, 2024
1 parent d2ffcce commit 0697190
Show file tree
Hide file tree
Showing 20 changed files with 146 additions and 7 deletions.
11 changes: 11 additions & 0 deletions include/ur_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -502,6 +502,7 @@ typedef enum ur_result_t {
UR_RESULT_ERROR_LAYER_NOT_PRESENT = 67, ///< A requested layer was not found by the loader.
UR_RESULT_ERROR_IN_EVENT_LIST_EXEC_STATUS = 68, ///< An event in the provided wait list has ::UR_EVENT_STATUS_ERROR.
UR_RESULT_ERROR_DEVICE_NOT_AVAILABLE = 69, ///< Device in question has `::UR_DEVICE_INFO_AVAILABLE == false`
UR_RESULT_ERROR_INVALID_SPEC_ID = 70, ///< 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 @@ -4640,6 +4641,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 @@ -5226,6 +5232,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 @@ -1588,6 +1588,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 @@ -276,6 +276,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 @@ -542,6 +542,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 @@ -410,3 +410,8 @@ UR_APIEXPORT ur_result_t UR_APICALL urKernelGetSuggestedLocalWorkSize(
pSuggestedLocalWorkSize);
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;
pDdiTable->pfnGetSuggestedLocalWorkSize = urKernelGetSuggestedLocalWorkSize;
return UR_RESULT_SUCCESS;
}
Expand Down
4 changes: 2 additions & 2 deletions source/adapters/level_zero/device.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -859,6 +859,8 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(
return ReturnValue(ur_bool_t{false});
case UR_DEVICE_INFO_IMAGE_SRGB:
return ReturnValue(ur_bool_t{false});
case UR_DEVICE_INFO_KERNEL_SET_SPECIALIZATION_CONSTANTS:
return ReturnValue(ur_bool_t{false});

case UR_DEVICE_INFO_QUEUE_ON_DEVICE_PROPERTIES:
case UR_DEVICE_INFO_QUEUE_ON_HOST_PROPERTIES: {
Expand Down Expand Up @@ -1054,8 +1056,6 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(
// L0 does not support sampling 1D USM sampled image data.
return ReturnValue(false);
}
case UR_DEVICE_INFO_KERNEL_SET_SPECIALIZATION_CONSTANTS:
return ReturnValue(false);
case UR_DEVICE_INFO_GLOBAL_VARIABLE_SUPPORT:
return ReturnValue(true);
default:
Expand Down
2 changes: 1 addition & 1 deletion source/adapters/native_cpu/kernel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -271,7 +271,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urKernelSetSpecializationConstants(
std::ignore = count;
std::ignore = pSpecConstants;

DIE_NO_IMPLEMENTATION
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
}

UR_APIEXPORT ur_result_t UR_APICALL urKernelGetNativeHandle(
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 @@ -95,6 +95,8 @@ ur_result_t mapCLErrorToUR(cl_int Result) {
return UR_RESULT_ERROR_INVALID_QUEUE;
case CL_INVALID_ARG_SIZE:
return UR_RESULT_ERROR_INVALID_KERNEL_ARGUMENT_SIZE;
case CL_INVALID_SPEC_ID:
return UR_RESULT_ERROR_INVALID_SPEC_ID;
default:
return UR_RESULT_ERROR_UNKNOWN;
}
Expand Down
3 changes: 3 additions & 0 deletions source/adapters/opencl/device.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1031,6 +1031,9 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(ur_device_handle_t hDevice,
deviceSupportsURCommandBufferKernelUpdate(Dev, Supported));
return ReturnValue(Supported);
}
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 @@ -430,3 +430,8 @@ UR_APIEXPORT ur_result_t UR_APICALL urKernelGetSuggestedLocalWorkSize(
pGlobalWorkSize, pSuggestedLocalWorkSize));
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;
pDdiTable->pfnGetSuggestedLocalWorkSize = urKernelGetSuggestedLocalWorkSize;
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 @@ -3486,6 +3486,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 @@ -4079,6 +4084,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 @@ -2981,6 +2981,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 @@ -3470,6 +3475,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
1 change: 1 addition & 0 deletions test/conformance/kernel/kernel_adapter_opencl.match
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
urKernelGetInfoTest.Success/Intel_R__OpenCL_{{.*}}_UR_KERNEL_INFO_NUM_REGS
urKernelSetArgValueTest.InvalidKernelArgumentSize/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));
}
7 changes: 5 additions & 2 deletions test/conformance/program/program_adapter_cuda.match
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,8 @@ urProgramGetInfoTest.Success/NVIDIA_CUDA_BACKEND___{{.*}}___UR_PROGRAM_INFO_NUM_
urProgramGetInfoTest.Success/NVIDIA_CUDA_BACKEND___{{.*}}___UR_PROGRAM_INFO_KERNEL_NAMES
{{OPT}}urProgramSetSpecializationConstantsTest.Success/NVIDIA_CUDA_BACKEND___{{.*}}
{{OPT}}urProgramSetSpecializationConstantsTest.UseDefaultValue/NVIDIA_CUDA_BACKEND___{{.*}}
urProgramSetMultipleSpecializationConstantsTest.MultipleCalls/NVIDIA_CUDA_BACKEND___{{.*}}
urProgramSetMultipleSpecializationConstantsTest.SingleCall/NVIDIA_CUDA_BACKEND___{{.*}}
urProgramSetSpecializationConstantsTest.InvalidValueSize/NVIDIA_CUDA_BACKEND___{{.*}}_
urProgramSetSpecializationConstantsTest.InvalidValueId/NVIDIA_CUDA_BACKEND___{{.*}}_
urProgramSetSpecializationConstantsTest.InvalidValuePtr/NVIDIA_CUDA_BACKEND___{{.*}}_
urProgramSetMultipleSpecializationConstantsTest.MultipleCalls/NVIDIA_CUDA_BACKEND___{{.*}}_
urProgramSetMultipleSpecializationConstantsTest.SingleCall/NVIDIA_CUDA_BACKEND___{{.*}}_
4 changes: 4 additions & 0 deletions test/conformance/program/program_adapter_hip.match
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,11 @@ urProgramGetInfoTest.Success/AMD_HIP_BACKEND___{{.*}}___UR_PROGRAM_INFO_KERNEL_N
# HIP hasn't implemented urProgramLink
{{OPT}}urProgramLinkTest.Success/AMD_HIP_BACKEND___{{.*}}_

# Hip doesn't support specialization constants
urProgramSetSpecializationConstantsTest.Success/AMD_HIP_BACKEND___{{.*}}_
urProgramSetSpecializationConstantsTest.UseDefaultValue/AMD_HIP_BACKEND___{{.*}}_
urProgramSetSpecializationConstantsTest.InvalidValueSize/AMD_HIP_BACKEND___{{.*}}_
urProgramSetSpecializationConstantsTest.InvalidValueId/AMD_HIP_BACKEND___{{.*}}_
urProgramSetSpecializationConstantsTest.InvalidValuePtr/AMD_HIP_BACKEND___{{.*}}_
urProgramSetMultipleSpecializationConstantsTest.MultipleCalls/AMD_HIP_BACKEND___{{.*}}_
urProgramSetMultipleSpecializationConstantsTest.SingleCall/AMD_HIP_BACKEND___{{.*}}_
23 changes: 23 additions & 0 deletions test/conformance/program/urProgramSetSpecializationConstants.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -141,3 +141,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 0697190

Please sign in to comment.