Check support for triangle fan primitive topology on rasterization tests
authorSamuel Iglesias Gonsálvez <siglesias@igalia.com>
Thu, 24 Jun 2021 09:48:16 +0000 (11:48 +0200)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Thu, 1 Jul 2021 16:03:16 +0000 (16:03 +0000)
If VK_KHR_portability_subset is supported, check for triangle fan
support in the tests that use that primitive topology.

Component: Vulkan
Fix issue: KhronosGroup#246
VK-GL-CTS issue: 2978

Affected test:
   dEQP-VK.rasterization.*triangle_fan

Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Change-Id: I98a4ab5caee2bf6f07c610822b8166b3a1803e52

external/vulkancts/modules/vulkan/rasterization/vktRasterizationProvokingVertexTests.cpp
external/vulkancts/modules/vulkan/rasterization/vktRasterizationTests.cpp

index 8aed7fe..0a39bbf 100644 (file)
@@ -225,6 +225,13 @@ void ProvokingVertexTestCase::checkSupport (Context& context) const
                                TCU_THROW(NotSupportedError, "provokingVertexModePerPipeline not supported");
                }
        }
+
+       if (m_params.primitiveTopology == VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN &&
+               context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") &&
+               !context.getPortabilitySubsetFeatures().triangleFans)
+       {
+               TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Triangle fans are not supported by this implementation");
+       }
 }
 
 TestInstance* ProvokingVertexTestCase::createInstance (Context& context) const
index b66856b..d305ea8 100644 (file)
@@ -2200,13 +2200,22 @@ void TriangleStripTestInstance::generateTriangles (int iteration, std::vector<tc
 class TriangleFanTestInstance : public BaseTriangleTestInstance
 {
 public:
-                               TriangleFanTestInstance                 (Context& context, VkSampleCountFlagBits sampleCount)
-                                       : BaseTriangleTestInstance(context, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN, sampleCount)
-                               {}
+                               TriangleFanTestInstance                 (Context& context, VkSampleCountFlagBits sampleCount);
+
 
        void            generateTriangles                               (int iteration, std::vector<tcu::Vec4>& outData, std::vector<TriangleSceneSpec::SceneTriangle>& outTriangles);
 };
 
+TriangleFanTestInstance::TriangleFanTestInstance (Context& context, VkSampleCountFlagBits sampleCount)
+       : BaseTriangleTestInstance(context, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN, sampleCount)
+{
+       if (context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") &&
+               !context.getPortabilitySubsetFeatures().triangleFans)
+       {
+               TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Triangle fans are not supported by this implementation");
+       }
+}
+
 void TriangleFanTestInstance::generateTriangles (int iteration, std::vector<tcu::Vec4>& outData, std::vector<TriangleSceneSpec::SceneTriangle>& outTriangles)
 {
        outData.resize(5);