Respect sampleRateShading availability in interpolate tests
authorGary Sweet <gsweet@broadcom.com>
Thu, 27 Jul 2017 09:42:14 +0000 (10:42 +0100)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Fri, 11 Aug 2017 17:05:10 +0000 (13:05 -0400)
Most of the tests in the dEQP-VK.pipeline.multisample_interpolation
group use one of the interpolatAt*() functions in their shaders.
These are only valid if sampleRateShading is available.

The multisampleStateInfo also blindly sets sampleShadingEnable
to true without checking.

Affects:

dEQP-VK.pipeline.multisample_interpolation.*

Components: Vulkan

VK-GL-CTS issue: 600

Change-Id: I0d8a85bcf9b59f1b9513482abef8cbf4ecabace3

external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleBaseResolve.cpp
external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleInterpolationTests.cpp

index fb1f667..fe30e8f 100644 (file)
@@ -39,16 +39,17 @@ using namespace vk;
 
 tcu::TestStatus MSInstanceBaseResolve::iterate (void)
 {
-       const InstanceInterface&        instance                        = m_context.getInstanceInterface();
-       const DeviceInterface&          deviceInterface         = m_context.getDeviceInterface();
-       const VkDevice                          device                          = m_context.getDevice();
-       const VkPhysicalDevice          physicalDevice          = m_context.getPhysicalDevice();
-       Allocator&                                      allocator                       = m_context.getDefaultAllocator();
-       const VkQueue                           queue                           = m_context.getUniversalQueue();
-       const deUint32                          queueFamilyIndex        = m_context.getUniversalQueueFamilyIndex();
-
-       VkImageCreateInfo                       imageMSInfo;
-       VkImageCreateInfo                       imageRSInfo;
+       const InstanceInterface&                instance                        = m_context.getInstanceInterface();
+       const DeviceInterface&                  deviceInterface         = m_context.getDeviceInterface();
+       const VkDevice                                  device                          = m_context.getDevice();
+       const VkPhysicalDevice                  physicalDevice          = m_context.getPhysicalDevice();
+       const VkPhysicalDeviceFeatures& features                        = m_context.getDeviceFeatures();
+       Allocator&                                              allocator                       = m_context.getDefaultAllocator();
+       const VkQueue                                   queue                           = m_context.getUniversalQueue();
+       const deUint32                                  queueFamilyIndex        = m_context.getUniversalQueueFamilyIndex();
+
+       VkImageCreateInfo                               imageMSInfo;
+       VkImageCreateInfo                               imageRSInfo;
 
        // Check if image size does not exceed device limits
        validateImageSize(instance, physicalDevice, m_imageType, m_imageMSParams.imageSize);
@@ -282,7 +283,7 @@ tcu::TestStatus MSInstanceBaseResolve::iterate (void)
                DE_NULL,                                                                                                                // const void*                                                          pNext;
                (VkPipelineMultisampleStateCreateFlags)0u,                                              // VkPipelineMultisampleStateCreateFlags        flags;
                imageMSInfo.samples,                                                                                    // VkSampleCountFlagBits                                        rasterizationSamples;
-               VK_TRUE,                                                                                                                // VkBool32                                                                     sampleShadingEnable;
+               features.sampleRateShading,                                                                             // VkBool32                                                                     sampleShadingEnable;
                1.0f,                                                                                                                   // float                                                                        minSampleShading;
                DE_NULL,                                                                                                                // const VkSampleMask*                                          pSampleMask;
                VK_FALSE,                                                                                                               // VkBool32                                                                     alphaToCoverageEnable;
index d10e0d6..71b4c3c 100644 (file)
@@ -287,6 +287,9 @@ template<> void MSCase<MSCaseInterpolateAtSampleDistinctValues>::initPrograms (v
 
 template<> TestInstance* MSCase<MSCaseInterpolateAtSampleDistinctValues>::createInstance (Context& context) const
 {
+       if (!context.getDeviceFeatures().sampleRateShading)
+               TCU_THROW(NotSupportedError, "sampleRateShading support required");
+
        return new MSInstance<MSInstanceDistinctValues>(context, m_imageMSParams);
 }
 
@@ -409,6 +412,9 @@ template<> void MSCase<MSCaseInterpolateAtSampleSingleSample>::initPrograms (vk:
 
 template<> TestInstance* MSCase<MSCaseInterpolateAtSampleSingleSample>::createInstance (Context& context) const
 {
+       if (!context.getDeviceFeatures().sampleRateShading)
+               TCU_THROW(NotSupportedError, "sampleRateShading support required");
+
        return new MSInstance<MSInstanceInterpolateScreenPosition>(context, m_imageMSParams);
 }
 
@@ -478,6 +484,9 @@ template<> void MSCase<MSCaseInterpolateAtSampleIgnoresCentroid>::initPrograms (
 
 template<> TestInstance* MSCase<MSCaseInterpolateAtSampleIgnoresCentroid>::createInstance (Context& context) const
 {
+       if (!context.getDeviceFeatures().sampleRateShading)
+               TCU_THROW(NotSupportedError, "sampleRateShading support required");
+
        return new MSInstance<MSInstanceInterpolateScreenPosition>(context, m_imageMSParams);
 }
 
@@ -546,6 +555,9 @@ template<> void MSCase<MSCaseInterpolateAtSampleConsistency>::initPrograms (vk::
 
 template<> TestInstance* MSCase<MSCaseInterpolateAtSampleConsistency>::createInstance (Context& context) const
 {
+       if (!context.getDeviceFeatures().sampleRateShading)
+               TCU_THROW(NotSupportedError, "sampleRateShading support required");
+
        return new MSInstance<MSInstanceInterpolateScreenPosition>(context, m_imageMSParams);
 }
 
@@ -614,6 +626,9 @@ template<> void MSCase<MSCaseInterpolateAtCentroidConsistency>::initPrograms (vk
 
 template<> TestInstance* MSCase<MSCaseInterpolateAtCentroidConsistency>::createInstance (Context& context) const
 {
+       if (!context.getDeviceFeatures().sampleRateShading)
+               TCU_THROW(NotSupportedError, "sampleRateShading support required");
+
        return new MSInstance<MSInstanceInterpolateScreenPosition>(context, m_imageMSParams);
 }
 
@@ -689,6 +704,9 @@ template<> void MSCase<MSCaseInterpolateAtOffsetPixelCenter>::initPrograms (vk::
 
 template<> TestInstance* MSCase<MSCaseInterpolateAtOffsetPixelCenter>::createInstance (Context& context) const
 {
+       if (!context.getDeviceFeatures().sampleRateShading)
+               TCU_THROW(NotSupportedError, "sampleRateShading support required");
+
        return new MSInstance<MSInstanceInterpolateScreenPosition>(context, m_imageMSParams);
 }
 
@@ -759,6 +777,9 @@ template<> void MSCase<MSCaseInterpolateAtOffsetSamplePosition>::initPrograms (v
 
 template<> TestInstance* MSCase<MSCaseInterpolateAtOffsetSamplePosition>::createInstance (Context& context) const
 {
+       if (!context.getDeviceFeatures().sampleRateShading)
+               TCU_THROW(NotSupportedError, "sampleRateShading support required");
+
        return new MSInstance<MSInstanceInterpolateScreenPosition>(context, m_imageMSParams);
 }