Check for geometry shader support when testing adjacency topologies
authorChris Forbes <chrisforbes@google.com>
Mon, 15 Apr 2019 23:03:23 +0000 (16:03 -0700)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Tue, 23 Apr 2019 10:53:35 +0000 (06:53 -0400)
Clipping tests would attempt to create pipelines using adjacency
topologies without checking for geometry shader support.

This seems to be a benign failure on most real implementations, but is a
VU violation.

Affects: dEQP-VK.clipping.clip_volume.*
VK-GL-CTS Issue: 1738

Change-Id: Iac6cfc6a669f2e533ce8ceaf4e7c2448b9fe4883
(cherry picked from commit 9c97d200e33e781ebb9f85df1195bcb84e013833)

external/vulkancts/modules/vulkan/clipping/vktClippingTests.cpp

index 5b1fd9c..312a2cd 100644 (file)
@@ -401,19 +401,23 @@ tcu::TestStatus testPrimitivesInside (Context& context, const VkPrimitiveTopolog
                        minExpectedBlackPixels = NUM_RENDER_PIXELS - 5;
                        break;
 
-               case VK_PRIMITIVE_TOPOLOGY_LINE_LIST:
-               case VK_PRIMITIVE_TOPOLOGY_LINE_STRIP:
                case VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY:
                case VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY:
+                       requireFeatures(context.getInstanceInterface(), context.getPhysicalDevice(), FEATURE_GEOMETRY_SHADER);
+                       // Fallthrough
+               case VK_PRIMITIVE_TOPOLOGY_LINE_LIST:
+               case VK_PRIMITIVE_TOPOLOGY_LINE_STRIP:
                        // Allow for some error.
                        minExpectedBlackPixels = NUM_RENDER_PIXELS - 3 * RENDER_SIZE;
                        break;
 
+               case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY:
+               case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY:
+                       requireFeatures(context.getInstanceInterface(), context.getPhysicalDevice(), FEATURE_GEOMETRY_SHADER);
+                       // Fallthrough
                case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST:
                case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP:
                case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN:
-               case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY:
-               case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY:
                        // All render area should be covered.
                        minExpectedBlackPixels = 0;
                        break;
@@ -464,6 +468,18 @@ tcu::TestStatus testPrimitivesInside (Context& context, const VkPrimitiveTopolog
 //! Primitives fully outside the clip volume.
 tcu::TestStatus testPrimitivesOutside (Context& context, const VkPrimitiveTopology topology)
 {
+       switch (topology)
+       {
+               case VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY:
+               case VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY:
+               case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY:
+               case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY:
+                       requireFeatures(context.getInstanceInterface(), context.getPhysicalDevice(), FEATURE_GEOMETRY_SHADER);
+                       break;
+               default:
+                       break;
+       }
+
        std::vector<VulkanShader> shaders;
        shaders.push_back(VulkanShader(VK_SHADER_STAGE_VERTEX_BIT,              context.getBinaryCollection().get("vert")));
        shaders.push_back(VulkanShader(VK_SHADER_STAGE_FRAGMENT_BIT,    context.getBinaryCollection().get("frag")));