diff --git a/include/ur_api.h b/include/ur_api.h index 13e84bcdda..2c54d56876 100644 --- a/include/ur_api.h +++ b/include/ur_api.h @@ -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 @@ -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 @@ -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 diff --git a/include/ur_print.hpp b/include/ur_print.hpp index a773af3166..af396564f3 100644 --- a/include/ur_print.hpp +++ b/include/ur_print.hpp @@ -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; diff --git a/scripts/core/common.yml b/scripts/core/common.yml index 0dad27d028..33bad303a8 100644 --- a/scripts/core/common.yml +++ b/scripts/core/common.yml @@ -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" diff --git a/scripts/core/kernel.yml b/scripts/core/kernel.yml index 4ce4f9c70a..21e7f7ff3a 100644 --- a/scripts/core/kernel.yml +++ b/scripts/core/kernel.yml @@ -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." diff --git a/scripts/core/program.yml b/scripts/core/program.yml index 98dcc1d267..8a0bba783a 100644 --- a/scripts/core/program.yml +++ b/scripts/core/program.yml @@ -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." diff --git a/source/adapters/cuda/kernel.cpp b/source/adapters/cuda/kernel.cpp index c9334add15..be13276959 100644 --- a/source/adapters/cuda/kernel.cpp +++ b/source/adapters/cuda/kernel.cpp @@ -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; +} diff --git a/source/adapters/cuda/ur_interface_loader.cpp b/source/adapters/cuda/ur_interface_loader.cpp index 2ffc0755ee..30bc125476 100644 --- a/source/adapters/cuda/ur_interface_loader.cpp +++ b/source/adapters/cuda/ur_interface_loader.cpp @@ -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; } diff --git a/source/adapters/level_zero/device.cpp b/source/adapters/level_zero/device.cpp index f4d7f95e0b..eb07a31571 100644 --- a/source/adapters/level_zero/device.cpp +++ b/source/adapters/level_zero/device.cpp @@ -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: { diff --git a/source/adapters/opencl/common.cpp b/source/adapters/opencl/common.cpp index 5e03c0f4cb..131b7eda40 100644 --- a/source/adapters/opencl/common.cpp +++ b/source/adapters/opencl/common.cpp @@ -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; } diff --git a/source/adapters/opencl/device.cpp b/source/adapters/opencl/device.cpp index 229c2429a3..7ba4b941b9 100644 --- a/source/adapters/opencl/device.cpp +++ b/source/adapters/opencl/device.cpp @@ -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 */ @@ -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; } diff --git a/source/adapters/opencl/kernel.cpp b/source/adapters/opencl/kernel.cpp index 4fcbdeefa5..e474ddadd0 100644 --- a/source/adapters/opencl/kernel.cpp +++ b/source/adapters/opencl/kernel.cpp @@ -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; +} diff --git a/source/adapters/opencl/ur_interface_loader.cpp b/source/adapters/opencl/ur_interface_loader.cpp index 8c2c73d7c8..9885566a8d 100644 --- a/source/adapters/opencl/ur_interface_loader.cpp +++ b/source/adapters/opencl/ur_interface_loader.cpp @@ -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; } diff --git a/source/loader/ur_libapi.cpp b/source/loader/ur_libapi.cpp index 6c18993c51..96acbf28a0 100644 --- a/source/loader/ur_libapi.cpp +++ b/source/loader/ur_libapi.cpp @@ -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 @@ -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 diff --git a/source/ur_api.cpp b/source/ur_api.cpp index 8765880c21..103c3876d3 100644 --- a/source/ur_api.cpp +++ b/source/ur_api.cpp @@ -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 @@ -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 diff --git a/test/conformance/kernel/kernel_adapter_level_zero.match b/test/conformance/kernel/kernel_adapter_level_zero.match index 2668b6821a..00f7017d65 100644 --- a/test/conformance/kernel/kernel_adapter_level_zero.match +++ b/test/conformance/kernel/kernel_adapter_level_zero.match @@ -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___{{.*}}_ diff --git a/test/conformance/kernel/kernel_adapter_opencl.match b/test/conformance/kernel/kernel_adapter_opencl.match index 9a71945c45..7ece0484df 100644 --- a/test/conformance/kernel/kernel_adapter_opencl.match +++ b/test/conformance/kernel/kernel_adapter_opencl.match @@ -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___{{.*}} diff --git a/test/conformance/kernel/urKernelSetSpecializationConstants.cpp b/test/conformance/kernel/urKernelSetSpecializationConstants.cpp index 665a20de4a..e12df68db0 100644 --- a/test/conformance/kernel/urKernelSetSpecializationConstants.cpp +++ b/test/conformance/kernel/urKernelSetSpecializationConstants.cpp @@ -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)); @@ -36,6 +58,11 @@ TEST_P(urKernelSetSpecializationConstantsTest, Success) { ValidateBuffer(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)); @@ -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)); +} diff --git a/test/conformance/program/program_adapter_cuda.match b/test/conformance/program/program_adapter_cuda.match index 77f14ed0bb..7974f2b5b9 100644 --- a/test/conformance/program/program_adapter_cuda.match +++ b/test/conformance/program/program_adapter_cuda.match @@ -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___{{.*}}_ diff --git a/test/conformance/program/program_adapter_hip.match b/test/conformance/program/program_adapter_hip.match index 9aa6e56ef6..9749f2323b 100644 --- a/test/conformance/program/program_adapter_hip.match +++ b/test/conformance/program/program_adapter_hip.match @@ -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}} diff --git a/test/conformance/program/program_adapter_native_cpu.match b/test/conformance/program/program_adapter_native_cpu.match index fa17ed17f7..2620d6283e 100644 --- a/test/conformance/program/program_adapter_native_cpu.match +++ b/test/conformance/program/program_adapter_native_cpu.match @@ -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_ diff --git a/test/conformance/program/urProgramSetSpecializationConstants.cpp b/test/conformance/program/urProgramSetSpecializationConstants.cpp index 4149711889..2f43b3974c 100644 --- a/test/conformance/program/urProgramSetSpecializationConstants.cpp +++ b/test/conformance/program/urProgramSetSpecializationConstants.cpp @@ -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)); +}