diff --git a/source/adapters/cuda/context.cpp b/source/adapters/cuda/context.cpp index 69796cf79d..ffd991d59f 100644 --- a/source/adapters/cuda/context.cpp +++ b/source/adapters/cuda/context.cpp @@ -98,6 +98,10 @@ UR_APIEXPORT ur_result_t UR_APICALL urContextGetInfo( UR_MEMORY_SCOPE_CAPABILITY_FLAG_DEVICE; return ReturnValue(Capabilities); } + case UR_CONTEXT_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES: + case UR_CONTEXT_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES: { + return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION; + } case UR_CONTEXT_INFO_USM_MEMCPY2D_SUPPORT: // 2D USM memcpy is supported. return ReturnValue(true); diff --git a/source/adapters/hip/context.cpp b/source/adapters/hip/context.cpp index 761eab954d..b36ed73560 100644 --- a/source/adapters/hip/context.cpp +++ b/source/adapters/hip/context.cpp @@ -75,7 +75,7 @@ urContextGetInfo(ur_context_handle_t hContext, ur_context_info_t propName, case UR_CONTEXT_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES: { // These queries should be dealt with in context_impl.cpp by calling the // queries of each device separately and building the intersection set. - return UR_RESULT_ERROR_INVALID_ENUMERATION; + return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION; } case UR_CONTEXT_INFO_USM_MEMCPY2D_SUPPORT: // 2D USM memcpy is supported. diff --git a/source/adapters/level_zero/context.cpp b/source/adapters/level_zero/context.cpp index 296e3e98d5..865b47de5c 100644 --- a/source/adapters/level_zero/context.cpp +++ b/source/adapters/level_zero/context.cpp @@ -126,13 +126,16 @@ ur_result_t urContextGetInfo( UR_MEMORY_ORDER_CAPABILITY_FLAG_SEQ_CST; return ReturnValue(Capabilities); } + case UR_CONTEXT_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES: + case UR_CONTEXT_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES: + case UR_CONTEXT_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES: { + return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION; + } default: // TODO: implement other parameters - die("urGetContextInfo: unsuppported ParamName."); + return UR_RESULT_ERROR_INVALID_ENUMERATION; } - - return UR_RESULT_SUCCESS; } ur_result_t urContextGetNativeHandle( diff --git a/source/adapters/level_zero/v2/context.cpp b/source/adapters/level_zero/v2/context.cpp index 71360dd057..f70a4ea253 100644 --- a/source/adapters/level_zero/v2/context.cpp +++ b/source/adapters/level_zero/v2/context.cpp @@ -173,8 +173,14 @@ ur_result_t urContextGetInfo(ur_context_handle_t hContext, case UR_CONTEXT_INFO_USM_FILL2D_SUPPORT: // 2D USM fill is not supported. return ReturnValue(uint8_t{false}); + case UR_CONTEXT_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES: + case UR_CONTEXT_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES: + case UR_CONTEXT_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES: + case UR_CONTEXT_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES: { + return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION; + } default: - return UR_RESULT_ERROR_UNSUPPORTED_FEATURE; + return UR_RESULT_ERROR_INVALID_ENUMERATION; } } } // namespace ur::level_zero diff --git a/source/adapters/native_cpu/context.cpp b/source/adapters/native_cpu/context.cpp index 8efc61a024..7c178f951a 100644 --- a/source/adapters/native_cpu/context.cpp +++ b/source/adapters/native_cpu/context.cpp @@ -64,7 +64,7 @@ urContextGetInfo(ur_context_handle_t hContext, ur_context_info_t propName, case UR_CONTEXT_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES: case UR_CONTEXT_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES: case UR_CONTEXT_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES: { - return UR_RESULT_ERROR_ADAPTER_SPECIFIC; + return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION; } default: return UR_RESULT_ERROR_INVALID_ENUMERATION; diff --git a/source/adapters/opencl/context.cpp b/source/adapters/opencl/context.cpp index c2c38aa753..34181eda3b 100644 --- a/source/adapters/opencl/context.cpp +++ b/source/adapters/opencl/context.cpp @@ -89,7 +89,7 @@ urContextGetInfo(ur_context_handle_t hContext, ur_context_info_t propName, case UR_CONTEXT_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES: { /* These queries should be dealt with in context_impl.cpp by calling the * queries of each device separately and building the intersection set. */ - return UR_RESULT_ERROR_INVALID_ARGUMENT; + return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION; } case UR_CONTEXT_INFO_NUM_DEVICES: case UR_CONTEXT_INFO_DEVICES: diff --git a/test/conformance/context/context_adapter_level_zero.match b/test/conformance/context/context_adapter_level_zero.match index c36611b9a5..a78979330d 100644 --- a/test/conformance/context/context_adapter_level_zero.match +++ b/test/conformance/context/context_adapter_level_zero.match @@ -1,2 +1,2 @@ {{NONDETERMINISTIC}} -urContextSetExtendedDeleterTest.Success/Intel_R__oneAPI_Unified_Runtime_over_Level_Zero___{{.*}}_ +{{OPT}}urContextSetExtendedDeleterTest.Success/Intel_R__oneAPI_Unified_Runtime_over_Level_Zero___{{.*}}_ diff --git a/test/conformance/context/context_adapter_level_zero_v2.match b/test/conformance/context/context_adapter_level_zero_v2.match index 2e6ea80468..93333a9178 100644 --- a/test/conformance/context/context_adapter_level_zero_v2.match +++ b/test/conformance/context/context_adapter_level_zero_v2.match @@ -1 +1 @@ -urContextSetExtendedDeleterTest.Success/Intel_R__oneAPI_Unified_Runtime_over_Level_Zero___{{.*}}__ +{{OPT}}urContextSetExtendedDeleterTest.Success/Intel_R__oneAPI_Unified_Runtime_over_Level_Zero___{{.*}}__ diff --git a/test/conformance/context/context_adapter_native_cpu.match b/test/conformance/context/context_adapter_native_cpu.match index 3f80da7c36..b5665a8f1a 100644 --- a/test/conformance/context/context_adapter_native_cpu.match +++ b/test/conformance/context/context_adapter_native_cpu.match @@ -1 +1 @@ -urContextSetExtendedDeleterTest.Success/SYCL_NATIVE_CPU___SYCL_Native_CPU__{{.*}} +{{OPT}}urContextSetExtendedDeleterTest.Success/SYCL_NATIVE_CPU___SYCL_Native_CPU__{{.*}} diff --git a/test/conformance/context/urContextCreate.cpp b/test/conformance/context/urContextCreate.cpp index 0f268a3992..0dc4341bd0 100644 --- a/test/conformance/context/urContextCreate.cpp +++ b/test/conformance/context/urContextCreate.cpp @@ -36,6 +36,17 @@ TEST_P(urContextCreateTest, InvalidNullPointerContext) { urContextCreate(1, &device, nullptr, nullptr)); } +TEST_P(urContextCreateTest, InvalidEnumeration) { + auto device = GetParam(); + + ur_context_properties_t properties{UR_STRUCTURE_TYPE_CONTEXT_PROPERTIES, + nullptr, UR_CONTEXT_FLAGS_MASK}; + uur::raii::Context context = nullptr; + + ASSERT_EQ_RESULT(UR_RESULT_ERROR_INVALID_ENUMERATION, + urContextCreate(1, &device, &properties, context.ptr())); +} + using urContextCreateMultiDeviceTest = uur::urAllDevicesTest; TEST_F(urContextCreateMultiDeviceTest, Success) { if (devices.size() < 2) { diff --git a/test/conformance/context/urContextGetInfo.cpp b/test/conformance/context/urContextGetInfo.cpp index f9f699d511..46bc2cd179 100644 --- a/test/conformance/context/urContextGetInfo.cpp +++ b/test/conformance/context/urContextGetInfo.cpp @@ -17,6 +17,24 @@ struct urContextGetInfoTestWithInfoParam {UR_CONTEXT_INFO_REFERENCE_COUNT, sizeof(uint32_t)}, {UR_CONTEXT_INFO_USM_MEMCPY2D_SUPPORT, sizeof(bool)}, {UR_CONTEXT_INFO_USM_FILL2D_SUPPORT, sizeof(bool)}, + {UR_CONTEXT_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES, + sizeof(ur_memory_order_capability_flags_t)}, + {UR_CONTEXT_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES, + sizeof(ur_memory_order_capability_flags_t)}, + {UR_CONTEXT_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES, + sizeof(ur_memory_order_capability_flags_t)}, + {UR_CONTEXT_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES, + sizeof(ur_memory_order_capability_flags_t)}}; + + ctx_info_mem_flags_map = { + {UR_CONTEXT_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES, + UR_MEMORY_ORDER_CAPABILITY_FLAGS_MASK}, + {UR_CONTEXT_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES, + UR_MEMORY_SCOPE_CAPABILITY_FLAGS_MASK}, + {UR_CONTEXT_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES, + UR_MEMORY_ORDER_CAPABILITY_FLAGS_MASK}, + {UR_CONTEXT_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES, + UR_MEMORY_SCOPE_CAPABILITY_FLAGS_MASK}, }; } @@ -26,24 +44,30 @@ struct urContextGetInfoTestWithInfoParam } std::unordered_map ctx_info_size_map; + std::unordered_map + ctx_info_mem_flags_map; }; UUR_TEST_SUITE_P(urContextGetInfoTestWithInfoParam, ::testing::Values( - UR_CONTEXT_INFO_NUM_DEVICES, // - UR_CONTEXT_INFO_DEVICES, // - UR_CONTEXT_INFO_USM_MEMCPY2D_SUPPORT, // - UR_CONTEXT_INFO_USM_FILL2D_SUPPORT, // - UR_CONTEXT_INFO_REFERENCE_COUNT // - + UR_CONTEXT_INFO_NUM_DEVICES, // + UR_CONTEXT_INFO_DEVICES, // + UR_CONTEXT_INFO_USM_MEMCPY2D_SUPPORT, // + UR_CONTEXT_INFO_USM_FILL2D_SUPPORT, // + UR_CONTEXT_INFO_REFERENCE_COUNT, // + UR_CONTEXT_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES, // + UR_CONTEXT_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES, // + UR_CONTEXT_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES, // + UR_CONTEXT_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES // ), uur::deviceTestWithParamPrinter); TEST_P(urContextGetInfoTestWithInfoParam, Success) { ur_context_info_t info = getParam(); size_t info_size = 0; - ASSERT_SUCCESS(urContextGetInfo(context, info, 0, nullptr, &info_size)); + UUR_ASSERT_SUCCESS_OR_UNSUPPORTED( + urContextGetInfo(context, info, 0, nullptr, &info_size)); ASSERT_NE(info_size, 0); if (const auto expected_size = ctx_info_size_map.find(info); diff --git a/test/conformance/context/urContextSetExtendedDeleter.cpp b/test/conformance/context/urContextSetExtendedDeleter.cpp index 99e72ecaa0..ad09ac2179 100644 --- a/test/conformance/context/urContextSetExtendedDeleter.cpp +++ b/test/conformance/context/urContextSetExtendedDeleter.cpp @@ -21,7 +21,8 @@ TEST_P(urContextSetExtendedDeleterTest, Success) { *static_cast(userdata) = true; }; - ASSERT_SUCCESS(urContextSetExtendedDeleter(context, deleter, &called)); + UUR_ASSERT_SUCCESS_OR_UNSUPPORTED( + urContextSetExtendedDeleter(context, deleter, &called)); } ASSERT_TRUE(called); } diff --git a/test/conformance/enqueue/urEnqueueUSMFill2D.cpp b/test/conformance/enqueue/urEnqueueUSMFill2D.cpp index fcb244e94a..29123b57bd 100644 --- a/test/conformance/enqueue/urEnqueueUSMFill2D.cpp +++ b/test/conformance/enqueue/urEnqueueUSMFill2D.cpp @@ -34,9 +34,11 @@ struct urEnqueueUSMFill2DTestWithParam UUR_RETURN_ON_FATAL_FAILURE(urQueueTestWithParam::SetUp()); bool memfill2d_support = false; - ASSERT_SUCCESS(urContextGetInfo( + [[maybe_unused]] ur_result_t result = urContextGetInfo( context, UR_CONTEXT_INFO_USM_FILL2D_SUPPORT, - sizeof(memfill2d_support), &memfill2d_support, nullptr)); + sizeof(memfill2d_support), &memfill2d_support, nullptr); + ASSERT_TRUE(result == UR_RESULT_SUCCESS || + result == UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION); if (!memfill2d_support) { GTEST_SKIP() << "2D USM mem fill is not supported"; } diff --git a/test/conformance/enqueue/urEnqueueUSMMemcpy2D.cpp b/test/conformance/enqueue/urEnqueueUSMMemcpy2D.cpp index b1f7e23b66..e12e79a295 100644 --- a/test/conformance/enqueue/urEnqueueUSMMemcpy2D.cpp +++ b/test/conformance/enqueue/urEnqueueUSMMemcpy2D.cpp @@ -28,9 +28,11 @@ struct urEnqueueUSMMemcpy2DTestWithParam } bool memcpy2d_support = false; - ASSERT_SUCCESS(urContextGetInfo( + [[maybe_unused]] ur_result_t result = urContextGetInfo( context, UR_CONTEXT_INFO_USM_MEMCPY2D_SUPPORT, - sizeof(memcpy2d_support), &memcpy2d_support, nullptr)); + sizeof(memcpy2d_support), &memcpy2d_support, nullptr); + ASSERT_TRUE(result == UR_RESULT_SUCCESS || + result == UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION); if (!memcpy2d_support) { GTEST_SKIP() << "2D USM memcpy is not supported"; } diff --git a/test/conformance/testing/include/uur/fixtures.h b/test/conformance/testing/include/uur/fixtures.h index 00bee6ba14..549bef009d 100644 --- a/test/conformance/testing/include/uur/fixtures.h +++ b/test/conformance/testing/include/uur/fixtures.h @@ -24,7 +24,8 @@ #define UUR_ASSERT_SUCCESS_OR_UNSUPPORTED(ret) \ auto status = ret; \ - if (status == UR_RESULT_ERROR_UNSUPPORTED_FEATURE) { \ + if (status == UR_RESULT_ERROR_UNSUPPORTED_FEATURE || \ + status == UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION) { \ GTEST_SKIP(); \ } else { \ ASSERT_EQ(status, UR_RESULT_SUCCESS); \