Check conservativeRasterizationPostDepthCoverage in affected tests
authorRicardo Garcia <rgarcia@igalia.com>
Thu, 23 Feb 2023 15:03:25 +0000 (16:03 +0100)
committerPiotr Byszewski <piotr.byszewski@mobica.com>
Thu, 16 Mar 2023 16:46:03 +0000 (16:46 +0000)
When using both conservative rasterization and post depth coverage, the
conservative rasterization property mentioned above indicates if the
functionality for both can be combined.

Affects:
dEQP-VK.pipeline.*multisample*.conservative*post_depth_coverage*

VK-GL-CTS issue: 4298
Components: Vulkan

Change-Id: I988a5f44956ab9ba40ab734bf2c078b73686d5a8

external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleTests.cpp

index 3c4dbb5..647026f 100644 (file)
@@ -1701,18 +1701,22 @@ void SampleMaskWithConservativeTest::checkSupport(Context& context) const
        if (m_useFragmentShadingRate && !checkFragmentShadingRateRequirements(context, m_rasterizationSamples))
                TCU_THROW(NotSupportedError, "Required FragmentShadingRate not supported");
 
-       if (m_enablePostDepthCoverage)
-               context.requireDeviceFunctionality("VK_EXT_post_depth_coverage");
-
        context.requireDeviceFunctionality("VK_EXT_conservative_rasterization");
 
-       const VkPhysicalDeviceConservativeRasterizationPropertiesEXT    conservativeRasterizationProperties = context.getConservativeRasterizationPropertiesEXT();
-       const deUint32                                                                                                  subPixelPrecisionBits = context.getDeviceProperties().limits.subPixelPrecisionBits;
-       const deUint32                                                                                                  subPixelPrecision = 1 << subPixelPrecisionBits;
-       const float                                                                                                             primitiveOverestimationSizeMult = float(subPixelPrecision) * conservativeRasterizationProperties.primitiveOverestimationSize;
+       const auto&             conservativeRasterizationProperties     = context.getConservativeRasterizationPropertiesEXT();
+       const deUint32  subPixelPrecisionBits                           = context.getDeviceProperties().limits.subPixelPrecisionBits;
+       const deUint32  subPixelPrecision                                       = (1 << subPixelPrecisionBits);
+       const float             primitiveOverestimationSizeMult         = float(subPixelPrecision) * conservativeRasterizationProperties.primitiveOverestimationSize;
 
        DE_ASSERT(subPixelPrecisionBits < sizeof(deUint32) * 8);
 
+       if (m_enablePostDepthCoverage)
+       {
+               context.requireDeviceFunctionality("VK_EXT_post_depth_coverage");
+               if (!conservativeRasterizationProperties.conservativeRasterizationPostDepthCoverage)
+                       TCU_THROW(NotSupportedError, "conservativeRasterizationPostDepthCoverage not supported");
+       }
+
        context.getTestContext().getLog()
                << tcu::TestLog::Message
                << "maxExtraPrimitiveOverestimationSize=" << conservativeRasterizationProperties.maxExtraPrimitiveOverestimationSize << '\n'