Test terminateInvocation with frag shader side effects
authorRicardo Garcia <rgarcia@igalia.com>
Tue, 10 Nov 2020 13:01:45 +0000 (14:01 +0100)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Thu, 3 Dec 2020 17:52:38 +0000 (12:52 -0500)
Adds tests that check fragment shader side effects, in the form of SSBO
writes, are not removed by optimizations done when the fragment is
discarded with terminateInvocation.

New tests:
dEQP-VK.rasterization.frag_side_effects.*.terminate_invocation

Components: Framework, Vulkan
VK-GL-CTS issue: 2336

Change-Id: I34c3eac815c7176f9420c2a4ccfc50f5bbd3a8a7

android/cts/master/vk-master-2020-03-01.txt
android/cts/master/vk-master.txt
external/vulkancts/modules/vulkan/rasterization/vktRasterizationFragShaderSideEffectsTests.cpp
external/vulkancts/mustpass/master/vk-default.txt

index 466844e..29ad5b5 100644 (file)
@@ -246392,6 +246392,7 @@ dEQP-VK.rasterization.line_continuity.line-strip
 dEQP-VK.rasterization.line_continuity.polygon-mode-lines
 dEQP-VK.rasterization.frag_side_effects.color_at_beginning.kill
 dEQP-VK.rasterization.frag_side_effects.color_at_beginning.demote
+dEQP-VK.rasterization.frag_side_effects.color_at_beginning.terminate_invocation
 dEQP-VK.rasterization.frag_side_effects.color_at_beginning.sample_mask_before
 dEQP-VK.rasterization.frag_side_effects.color_at_beginning.sample_mask_after
 dEQP-VK.rasterization.frag_side_effects.color_at_beginning.stencil_never
@@ -246401,6 +246402,7 @@ dEQP-VK.rasterization.frag_side_effects.color_at_beginning.alpha_coverage_after
 dEQP-VK.rasterization.frag_side_effects.color_at_beginning.depth_bounds
 dEQP-VK.rasterization.frag_side_effects.color_at_end.kill
 dEQP-VK.rasterization.frag_side_effects.color_at_end.demote
+dEQP-VK.rasterization.frag_side_effects.color_at_end.terminate_invocation
 dEQP-VK.rasterization.frag_side_effects.color_at_end.sample_mask_before
 dEQP-VK.rasterization.frag_side_effects.color_at_end.sample_mask_after
 dEQP-VK.rasterization.frag_side_effects.color_at_end.stencil_never
index 7d6f63f..cda54c0 100644 (file)
@@ -610500,6 +610500,7 @@ dEQP-VK.rasterization.line_continuity.line-strip
 dEQP-VK.rasterization.line_continuity.polygon-mode-lines
 dEQP-VK.rasterization.frag_side_effects.color_at_beginning.kill
 dEQP-VK.rasterization.frag_side_effects.color_at_beginning.demote
+dEQP-VK.rasterization.frag_side_effects.color_at_beginning.terminate_invocation
 dEQP-VK.rasterization.frag_side_effects.color_at_beginning.sample_mask_before
 dEQP-VK.rasterization.frag_side_effects.color_at_beginning.sample_mask_after
 dEQP-VK.rasterization.frag_side_effects.color_at_beginning.stencil_never
@@ -610509,6 +610510,7 @@ dEQP-VK.rasterization.frag_side_effects.color_at_beginning.alpha_coverage_after
 dEQP-VK.rasterization.frag_side_effects.color_at_beginning.depth_bounds
 dEQP-VK.rasterization.frag_side_effects.color_at_end.kill
 dEQP-VK.rasterization.frag_side_effects.color_at_end.demote
+dEQP-VK.rasterization.frag_side_effects.color_at_end.terminate_invocation
 dEQP-VK.rasterization.frag_side_effects.color_at_end.sample_mask_before
 dEQP-VK.rasterization.frag_side_effects.color_at_end.sample_mask_after
 dEQP-VK.rasterization.frag_side_effects.color_at_end.stencil_never
index 9c9d4f1..bfefbb6 100644 (file)
@@ -59,6 +59,7 @@ enum class CaseType
 {
        KILL,
        DEMOTE,
+       TERMINATE_INVOCATION,
        SAMPLE_MASK_BEFORE,
        SAMPLE_MASK_AFTER,
        ALPHA_COVERAGE_BEFORE,
@@ -166,6 +167,10 @@ void FragSideEffectsTestCase::checkSupport (Context& context) const
        {
                context.requireDeviceFunctionality("VK_EXT_shader_demote_to_helper_invocation");
        }
+       else if (m_params.caseType == CaseType::TERMINATE_INVOCATION)
+       {
+               context.requireDeviceFunctionality("VK_KHR_shader_terminate_invocation");
+       }
 
        const auto colorFormatProperties = vk::getPhysicalDeviceFormatProperties(vki, physicalDevice, kColorFormat);
        if ((colorFormatProperties.optimalTilingFeatures & kNeededColorFeatures) != kNeededColorFeatures)
@@ -219,6 +224,10 @@ void FragSideEffectsTestCase::initPrograms (vk::SourceCollections& programCollec
                headers << "#extension GL_EXT_demote_to_helper_invocation : enable\n";
                after   << "    demote;\n";
                break;
+       case CaseType::TERMINATE_INVOCATION:
+               headers << "#extension GL_EXT_terminate_invocation : enable\n";
+               after   << "    terminateInvocation;\n";
+               break;
        case CaseType::SAMPLE_MASK_BEFORE:
                before  << "    gl_SampleMask[0] = 0;\n";
                break;
@@ -697,6 +706,10 @@ tcu::TestCaseGroup* createFragSideEffectsTests (tcu::TestContext& testCtx)
                        colorOrderGroup->addChild(new FragSideEffectsTestCase(testCtx, "demote", "OpDemoteToHelperInvocation after SSBO write", params));
                }
                {
+                       TestParams params(CaseType::TERMINATE_INVOCATION, kDefaultClearColor, kDefaultDrawColor, colorAtEnd, kDefaultDepthBoundsParams);
+                       colorOrderGroup->addChild(new FragSideEffectsTestCase(testCtx, "terminate_invocation", "OpTerminateInvocation after SSBO write", params));
+               }
+               {
                        TestParams params(CaseType::SAMPLE_MASK_BEFORE, kDefaultClearColor, kDefaultDrawColor, colorAtEnd, kDefaultDepthBoundsParams);
                        colorOrderGroup->addChild(new FragSideEffectsTestCase(testCtx, "sample_mask_before", "Set sample mask to zero before SSBO write", params));
                }
index 840397e..4be20c4 100644 (file)
@@ -612641,6 +612641,7 @@ dEQP-VK.rasterization.line_continuity.line-strip
 dEQP-VK.rasterization.line_continuity.polygon-mode-lines
 dEQP-VK.rasterization.frag_side_effects.color_at_beginning.kill
 dEQP-VK.rasterization.frag_side_effects.color_at_beginning.demote
+dEQP-VK.rasterization.frag_side_effects.color_at_beginning.terminate_invocation
 dEQP-VK.rasterization.frag_side_effects.color_at_beginning.sample_mask_before
 dEQP-VK.rasterization.frag_side_effects.color_at_beginning.sample_mask_after
 dEQP-VK.rasterization.frag_side_effects.color_at_beginning.stencil_never
@@ -612650,6 +612651,7 @@ dEQP-VK.rasterization.frag_side_effects.color_at_beginning.alpha_coverage_after
 dEQP-VK.rasterization.frag_side_effects.color_at_beginning.depth_bounds
 dEQP-VK.rasterization.frag_side_effects.color_at_end.kill
 dEQP-VK.rasterization.frag_side_effects.color_at_end.demote
+dEQP-VK.rasterization.frag_side_effects.color_at_end.terminate_invocation
 dEQP-VK.rasterization.frag_side_effects.color_at_end.sample_mask_before
 dEQP-VK.rasterization.frag_side_effects.color_at_end.sample_mask_after
 dEQP-VK.rasterization.frag_side_effects.color_at_end.stencil_never