Test single-path switch statements
authorToni Merilehti <toni.merilehti@siru.fi>
Fri, 6 May 2022 06:23:56 +0000 (09:23 +0300)
committerMatthew Netsch <quic_mnetsch@quicinc.com>
Thu, 2 Jun 2022 22:39:50 +0000 (22:39 +0000)
This CL tests switch statements that only have a default case and also
an empty case that falls through into a default case.

New tests:
dEQP-GLES3.functional.shaders.switch.default_only*
dEQP-GLES3.functional.shaders.switch.empty_case_default*

VK-GL-CTS Issue: 3659

Components: OpenGL

Change-Id: I9a59582ec2829d73f590f1fe62d841b36e02e915

android/cts/main/gles3-master-2022-03-01.txt
android/cts/main/gles3-master.txt
external/openglcts/data/mustpass/gles/aosp_mustpass/3.2.5.x/gles3-master.txt
external/openglcts/data/mustpass/gles/aosp_mustpass/3.2.6.x/gles3-master.txt
external/openglcts/data/mustpass/gles/aosp_mustpass/main/gles3-master.txt
modules/gles3/functional/es3fShaderSwitchTests.cpp

index 12dadf7..ce107c0 100644 (file)
@@ -1,3 +1,11 @@
+dEQP-GLES3.functional.shaders.switch.default_only_static_vertex
+dEQP-GLES3.functional.shaders.switch.default_only_static_fragment
+dEQP-GLES3.functional.shaders.switch.default_only_uniform_vertex
+dEQP-GLES3.functional.shaders.switch.default_only_uniform_fragment
+dEQP-GLES3.functional.shaders.switch.empty_case_default_static_vertex
+dEQP-GLES3.functional.shaders.switch.empty_case_default_static_fragment
+dEQP-GLES3.functional.shaders.switch.empty_case_default_uniform_vertex
+dEQP-GLES3.functional.shaders.switch.empty_case_default_uniform_fragment
 dEQP-GLES3.functional.texture.format.sized.2d.srgb_rg8_pot
 dEQP-GLES3.functional.texture.format.sized.2d.srgb_rg8_npot
 dEQP-GLES3.functional.texture.format.sized.cube.srgb_rg8_pot
index df0b45a..30d9874 100644 (file)
@@ -16358,6 +16358,14 @@ dEQP-GLES3.functional.shaders.switch.no_default_label_uniform_vertex
 dEQP-GLES3.functional.shaders.switch.no_default_label_uniform_fragment
 dEQP-GLES3.functional.shaders.switch.no_default_label_dynamic_vertex
 dEQP-GLES3.functional.shaders.switch.no_default_label_dynamic_fragment
+dEQP-GLES3.functional.shaders.switch.default_only_static_vertex
+dEQP-GLES3.functional.shaders.switch.default_only_static_fragment
+dEQP-GLES3.functional.shaders.switch.default_only_uniform_vertex
+dEQP-GLES3.functional.shaders.switch.default_only_uniform_fragment
+dEQP-GLES3.functional.shaders.switch.empty_case_default_static_vertex
+dEQP-GLES3.functional.shaders.switch.empty_case_default_static_fragment
+dEQP-GLES3.functional.shaders.switch.empty_case_default_uniform_vertex
+dEQP-GLES3.functional.shaders.switch.empty_case_default_uniform_fragment
 dEQP-GLES3.functional.shaders.switch.fall_through_static_vertex
 dEQP-GLES3.functional.shaders.switch.fall_through_static_fragment
 dEQP-GLES3.functional.shaders.switch.fall_through_uniform_vertex
index 4fb7c76..72e9da8 100644 (file)
@@ -16575,6 +16575,14 @@ dEQP-GLES3.functional.shaders.switch.no_default_label_uniform_vertex
 dEQP-GLES3.functional.shaders.switch.no_default_label_uniform_fragment
 dEQP-GLES3.functional.shaders.switch.no_default_label_dynamic_vertex
 dEQP-GLES3.functional.shaders.switch.no_default_label_dynamic_fragment
+dEQP-GLES3.functional.shaders.switch.default_only_static_vertex
+dEQP-GLES3.functional.shaders.switch.default_only_static_fragment
+dEQP-GLES3.functional.shaders.switch.default_only_uniform_vertex
+dEQP-GLES3.functional.shaders.switch.default_only_uniform_fragment
+dEQP-GLES3.functional.shaders.switch.empty_case_default_static_vertex
+dEQP-GLES3.functional.shaders.switch.empty_case_default_static_fragment
+dEQP-GLES3.functional.shaders.switch.empty_case_default_uniform_vertex
+dEQP-GLES3.functional.shaders.switch.empty_case_default_uniform_fragment
 dEQP-GLES3.functional.shaders.switch.fall_through_static_vertex
 dEQP-GLES3.functional.shaders.switch.fall_through_static_fragment
 dEQP-GLES3.functional.shaders.switch.fall_through_uniform_vertex
index 4fb7c76..72e9da8 100644 (file)
@@ -16575,6 +16575,14 @@ dEQP-GLES3.functional.shaders.switch.no_default_label_uniform_vertex
 dEQP-GLES3.functional.shaders.switch.no_default_label_uniform_fragment
 dEQP-GLES3.functional.shaders.switch.no_default_label_dynamic_vertex
 dEQP-GLES3.functional.shaders.switch.no_default_label_dynamic_fragment
+dEQP-GLES3.functional.shaders.switch.default_only_static_vertex
+dEQP-GLES3.functional.shaders.switch.default_only_static_fragment
+dEQP-GLES3.functional.shaders.switch.default_only_uniform_vertex
+dEQP-GLES3.functional.shaders.switch.default_only_uniform_fragment
+dEQP-GLES3.functional.shaders.switch.empty_case_default_static_vertex
+dEQP-GLES3.functional.shaders.switch.empty_case_default_static_fragment
+dEQP-GLES3.functional.shaders.switch.empty_case_default_uniform_vertex
+dEQP-GLES3.functional.shaders.switch.empty_case_default_uniform_fragment
 dEQP-GLES3.functional.shaders.switch.fall_through_static_vertex
 dEQP-GLES3.functional.shaders.switch.fall_through_static_fragment
 dEQP-GLES3.functional.shaders.switch.fall_through_uniform_vertex
index 4fb7c76..72e9da8 100644 (file)
@@ -16575,6 +16575,14 @@ dEQP-GLES3.functional.shaders.switch.no_default_label_uniform_vertex
 dEQP-GLES3.functional.shaders.switch.no_default_label_uniform_fragment
 dEQP-GLES3.functional.shaders.switch.no_default_label_dynamic_vertex
 dEQP-GLES3.functional.shaders.switch.no_default_label_dynamic_fragment
+dEQP-GLES3.functional.shaders.switch.default_only_static_vertex
+dEQP-GLES3.functional.shaders.switch.default_only_static_fragment
+dEQP-GLES3.functional.shaders.switch.default_only_uniform_vertex
+dEQP-GLES3.functional.shaders.switch.default_only_uniform_fragment
+dEQP-GLES3.functional.shaders.switch.empty_case_default_static_vertex
+dEQP-GLES3.functional.shaders.switch.empty_case_default_static_fragment
+dEQP-GLES3.functional.shaders.switch.empty_case_default_uniform_vertex
+dEQP-GLES3.functional.shaders.switch.empty_case_default_uniform_fragment
 dEQP-GLES3.functional.shaders.switch.fall_through_static_vertex
 dEQP-GLES3.functional.shaders.switch.fall_through_static_fragment
 dEQP-GLES3.functional.shaders.switch.fall_through_uniform_vertex
index 1ee0d46..3eb1b0c 100644 (file)
@@ -153,13 +153,16 @@ static tcu::TestCase* makeSwitchCase (Context& context, const char* name, const
                                                                type == SWITCHTYPE_DYNAMIC      ? evalSwitchDynamic     : (ShaderEvalFunc)DE_NULL);
 }
 
-static void makeSwitchCases (TestCaseGroup* group, const char* name, const char* desc, const LineStream& switchBody)
+static void makeSwitchCases (TestCaseGroup* group, const char* name, const char* desc, const LineStream& switchBody, const bool skipDynamicType = false)
 {
        static const char* switchTypeNames[] = { "static", "uniform", "dynamic" };
        DE_STATIC_ASSERT(DE_LENGTH_OF_ARRAY(switchTypeNames) == SWITCHTYPE_LAST);
 
        for (int type = 0; type < SWITCHTYPE_LAST; type++)
        {
+               if (skipDynamicType && (type == SWITCHTYPE_DYNAMIC))
+                       continue;
+
                group->addChild(makeSwitchCase(group->getContext(), (string(name) + "_" + switchTypeNames[type] + "_vertex").c_str(),   desc, (SwitchType)type, true,   switchBody));
                group->addChild(makeSwitchCase(group->getContext(), (string(name) + "_" + switchTypeNames[type] + "_fragment").c_str(), desc, (SwitchType)type, false,  switchBody));
        }
@@ -233,6 +236,23 @@ void ShaderSwitchTests::init (void)
                << "    case 3:         res = coords.zyx;       break;"
                << "}");
 
+       makeSwitchCases(this, "default_only", "Default case only",
+               LineStream(1)
+               << "switch (${CONDITION})"
+               << "{"
+               << "    default:"
+               << "            res = coords.yzw;"
+               << "}", true);
+
+       makeSwitchCases(this, "empty_case_default", "Empty case and default",
+               LineStream(1)
+               << "switch (${CONDITION})"
+               << "{"
+               << "    case 2:"
+               << "    default:"
+               << "            res = coords.yzw;"
+               << "}", true);
+
        makeSwitchCases(this, "fall_through", "Fall-through",
                LineStream(1)
                << "switch (${CONDITION})"