Add robustness2 limits validation test
authorBoris Zanin <boris.zanin@mobica.com>
Wed, 6 Apr 2022 08:56:47 +0000 (10:56 +0200)
committerMatthew Netsch <quic_mnetsch@quicinc.com>
Thu, 14 Apr 2022 19:02:58 +0000 (19:02 +0000)
Implements VK_EXT_robustness2 properties and features
validation test.

Add:
dEQP-VK.api.info.vulkan1p2_limits_validation.robustness2

Components: Vulkan
VK-GL-CTS issue: 3388

Change-Id: I2e14f062ad2b6826751d223d88db45ce855d0c74

android/cts/main/vk-master-2022-03-01/api.txt
android/cts/main/vk-master/api.txt
external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp
external/vulkancts/mustpass/main/vk-default/api.txt

index 7f47692..e9af675 100644 (file)
@@ -4,6 +4,7 @@ dEQP-VK.api.info.vulkan1p3.properties
 dEQP-VK.api.info.vulkan1p3.feature_extensions_consistency
 dEQP-VK.api.info.vulkan1p3.property_extensions_consistency
 dEQP-VK.api.info.vulkan1p3.feature_bits_influence
+dEQP-VK.api.info.vulkan1p2_limits_validation.robustness2
 dEQP-VK.api.info.vulkan1p3_limits_validation.khr_maintenance4
 dEQP-VK.api.info.vulkan1p3_limits_validation.max_inline_uniform_total_size
 dEQP-VK.api.info.profiles.roadmap_2022
index 32bb949..deef79b 100644 (file)
@@ -1449,6 +1449,7 @@ dEQP-VK.api.info.vulkan1p2_limits_validation.fragment_density_map
 dEQP-VK.api.info.vulkan1p2_limits_validation.nv_ray_tracing
 dEQP-VK.api.info.vulkan1p2_limits_validation.timeline_semaphore
 dEQP-VK.api.info.vulkan1p2_limits_validation.ext_line_rasterization
+dEQP-VK.api.info.vulkan1p2_limits_validation.robustness2
 dEQP-VK.api.info.vulkan1p3_limits_validation.khr_maintenance4
 dEQP-VK.api.info.vulkan1p3_limits_validation.max_inline_uniform_total_size
 dEQP-VK.api.info.image_format_properties2.1d.optimal.r4g4_unorm_pack8
index 36d7cb3..f2e552e 100644 (file)
@@ -1543,6 +1543,33 @@ tcu::TestStatus validateLimitsExtLineRasterization (Context& context)
                return tcu::TestStatus::fail("fail");
 }
 
+void checkSupportRobustness2 (Context& context)
+{
+       context.requireDeviceFunctionality("VK_EXT_robustness2");
+}
+
+tcu::TestStatus validateLimitsRobustness2 (Context& context)
+{
+       const InstanceInterface&                                                vki                                                     = context.getInstanceInterface();
+       const VkPhysicalDevice                                                  physicalDevice                          = context.getPhysicalDevice();
+       const VkPhysicalDeviceRobustness2PropertiesEXT& robustness2PropertiesEXT        = context.getRobustness2PropertiesEXT();
+       VkPhysicalDeviceRobustness2FeaturesEXT                  robustness2Features                     = initVulkanStructure();
+       VkPhysicalDeviceFeatures2                                               features2                                       = initVulkanStructure(&robustness2Features);
+
+       vki.getPhysicalDeviceFeatures2(physicalDevice, &features2);
+
+       if (robustness2Features.robustBufferAccess2 && !features2.features.robustBufferAccess)
+               return tcu::TestStatus::fail("If robustBufferAccess2 is enabled then robustBufferAccess must also be enabled");
+
+       if (robustness2PropertiesEXT.robustStorageBufferAccessSizeAlignment != 1 && robustness2PropertiesEXT.robustStorageBufferAccessSizeAlignment != 4)
+               return tcu::TestStatus::fail("robustness2PropertiesEXT.robustStorageBufferAccessSizeAlignment value must be either 1 or 4.");
+
+       if (!de::inRange(robustness2PropertiesEXT.robustUniformBufferAccessSizeAlignment, (VkDeviceSize)1u, (VkDeviceSize)256u) || !deIsPowerOfTwo64(robustness2PropertiesEXT.robustUniformBufferAccessSizeAlignment))
+               return tcu::TestStatus::fail("robustness2PropertiesEXT.robustUniformBufferAccessSizeAlignment must be a power of two in the range [1, 256]");
+
+       return tcu::TestStatus::pass("pass");
+}
+
 tcu::TestStatus validateLimitsMaxInlineUniformTotalSize (Context& context)
 {
        const VkBool32                                                          checkAlways                     = VK_TRUE;
@@ -6636,6 +6663,7 @@ tcu::TestCaseGroup* createFeatureInfoTests (tcu::TestContext& testCtx)
                addFunctionCase(limitsValidationTests.get(), "nv_ray_tracing",                                  "VK_NV_ray_tracing limit validation",                                   checkSupportNvRayTracing,                                       validateLimitsNvRayTracing);
                addFunctionCase(limitsValidationTests.get(), "timeline_semaphore",                              "VK_KHR_timeline_semaphore limit validation",                   checkSupportKhrTimelineSemaphore,                       validateLimitsKhrTimelineSemaphore);
                addFunctionCase(limitsValidationTests.get(), "ext_line_rasterization",                  "VK_EXT_line_rasterization limit validation",                   checkSupportExtLineRasterization,                       validateLimitsExtLineRasterization);
+               addFunctionCase(limitsValidationTests.get(), "robustness2",                                             "VK_EXT_robustness2 limit validation",                                  checkSupportRobustness2,                                        validateLimitsRobustness2);
 
                infoTests->addChild(limitsValidationTests.release());
        }
index 03f82dc..b80935e 100644 (file)
@@ -1450,6 +1450,7 @@ dEQP-VK.api.info.vulkan1p2_limits_validation.fragment_density_map
 dEQP-VK.api.info.vulkan1p2_limits_validation.nv_ray_tracing
 dEQP-VK.api.info.vulkan1p2_limits_validation.timeline_semaphore
 dEQP-VK.api.info.vulkan1p2_limits_validation.ext_line_rasterization
+dEQP-VK.api.info.vulkan1p2_limits_validation.robustness2
 dEQP-VK.api.info.vulkan1p3_limits_validation.khr_maintenance4
 dEQP-VK.api.info.vulkan1p3_limits_validation.max_inline_uniform_total_size
 dEQP-VK.api.info.image_format_properties2.1d.optimal.r4g4_unorm_pack8