Extend non-const quad broadcast tests
authorGraeme Leese <gleese@broadcom.com>
Fri, 6 Sep 2019 16:00:13 +0000 (17:00 +0100)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Tue, 17 Dec 2019 09:56:23 +0000 (04:56 -0500)
Add two extra broadcasts to the _nonconst tests for lane indices that
are:
1. dynamically uniform in all active lanes but not all lanes are active.
2. Uniform within a quad but different in adjacent quads.

Components: Vulkan
VK-GL-CTS issue: 1978
Affects: dEQP-VK.subgroups.quad.*broadcast_nonconst_*

Change-Id: I1b4c95423de12f3750ed19789e7ca35bf718d366

external/vulkancts/modules/vulkan/subgroups/vktSubgroupsQuadTests.cpp

index 488abe1..080a783 100755 (executable)
@@ -153,6 +153,23 @@ std::string getTestSrc(const CaseDefinition &caseDef)
                                << "  " << fmt << " op = " << op << "(data[gl_SubgroupInvocationID], i);\n"
                                << "  uint otherID = (gl_SubgroupInvocationID & ~0x3) + i;\n"
                                << validate
+                               << "  }\n"
+                               << "  uint quadID = gl_SubgroupInvocationID >> 2;\n"
+                               << "  uint quadInvocation = gl_SubgroupInvocationID & 0x3;\n"
+                               << "  // Test lane ID that is only uniform in active lanes\n"
+                               << "  if (quadInvocation >= 2)\n"
+                               << "  {\n"
+                               << "    uint id = quadInvocation & ~1;\n"
+                               << "    " << fmt << " op = " << op << "(data[gl_SubgroupInvocationID], id);\n"
+                               << "    uint otherID = 4*quadID + id;\n"
+                               << validate
+                               << "  }\n"
+                               << "  // Test lane ID that is only quad uniform, not subgroup uniform\n"
+                               << "  {\n"
+                               << "    uint id = quadID & 0x3;\n"
+                               << "    " << fmt << " op = " << op << "(data[gl_SubgroupInvocationID], id);\n"
+                               << "    uint otherID = 4*quadID + id;\n"
+                               << validate
                                << "  }\n";
        }
        else