From deaa4158eedcd7f4d86affe3445c47792b2f27d5 Mon Sep 17 00:00:00 2001 From: Toni Merilehti Date: Fri, 6 May 2022 09:23:56 +0300 Subject: [PATCH] Test single-path switch statements 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 | 8 ++++++++ android/cts/main/gles3-master.txt | 8 ++++++++ .../gles/aosp_mustpass/3.2.5.x/gles3-master.txt | 8 ++++++++ .../gles/aosp_mustpass/3.2.6.x/gles3-master.txt | 8 ++++++++ .../gles/aosp_mustpass/main/gles3-master.txt | 8 ++++++++ modules/gles3/functional/es3fShaderSwitchTests.cpp | 22 +++++++++++++++++++++- 6 files changed, 61 insertions(+), 1 deletion(-) diff --git a/android/cts/main/gles3-master-2022-03-01.txt b/android/cts/main/gles3-master-2022-03-01.txt index 12dadf7..ce107c0 100644 --- a/android/cts/main/gles3-master-2022-03-01.txt +++ b/android/cts/main/gles3-master-2022-03-01.txt @@ -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 diff --git a/android/cts/main/gles3-master.txt b/android/cts/main/gles3-master.txt index df0b45a..30d9874 100644 --- a/android/cts/main/gles3-master.txt +++ b/android/cts/main/gles3-master.txt @@ -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 diff --git a/external/openglcts/data/mustpass/gles/aosp_mustpass/3.2.5.x/gles3-master.txt b/external/openglcts/data/mustpass/gles/aosp_mustpass/3.2.5.x/gles3-master.txt index 4fb7c76..72e9da8 100644 --- a/external/openglcts/data/mustpass/gles/aosp_mustpass/3.2.5.x/gles3-master.txt +++ b/external/openglcts/data/mustpass/gles/aosp_mustpass/3.2.5.x/gles3-master.txt @@ -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 diff --git a/external/openglcts/data/mustpass/gles/aosp_mustpass/3.2.6.x/gles3-master.txt b/external/openglcts/data/mustpass/gles/aosp_mustpass/3.2.6.x/gles3-master.txt index 4fb7c76..72e9da8 100644 --- a/external/openglcts/data/mustpass/gles/aosp_mustpass/3.2.6.x/gles3-master.txt +++ b/external/openglcts/data/mustpass/gles/aosp_mustpass/3.2.6.x/gles3-master.txt @@ -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 diff --git a/external/openglcts/data/mustpass/gles/aosp_mustpass/main/gles3-master.txt b/external/openglcts/data/mustpass/gles/aosp_mustpass/main/gles3-master.txt index 4fb7c76..72e9da8 100644 --- a/external/openglcts/data/mustpass/gles/aosp_mustpass/main/gles3-master.txt +++ b/external/openglcts/data/mustpass/gles/aosp_mustpass/main/gles3-master.txt @@ -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 diff --git a/modules/gles3/functional/es3fShaderSwitchTests.cpp b/modules/gles3/functional/es3fShaderSwitchTests.cpp index 1ee0d46..3eb1b0c 100644 --- a/modules/gles3/functional/es3fShaderSwitchTests.cpp +++ b/modules/gles3/functional/es3fShaderSwitchTests.cpp @@ -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})" -- 2.7.4