| // | |
| // Copyright 2024 The ANGLE Project Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| // | |
| // PruneNoOps_test.cpp: | |
| // Tests for pruning no-op statements. | |
| // | |
| #include "GLSLANG/ShaderLang.h" | |
| #include "angle_gl.h" | |
| #include "gtest/gtest.h" | |
| #include "tests/test_utils/compiler_test.h" | |
| using namespace sh; | |
| namespace | |
| { | |
| class PruneNoOpsTest : public MatchOutputCodeTest | |
| { | |
| public: | |
| PruneNoOpsTest() : MatchOutputCodeTest(GL_FRAGMENT_SHADER, SH_GLSL_COMPATIBILITY_OUTPUT) {} | |
| }; | |
| // Test that a switch statement with a constant expression without a matching case is pruned. | |
| TEST_F(PruneNoOpsTest, SwitchStatementWithConstantExpressionNoMatchingCase) | |
| { | |
| const std::string shaderString = R"(#version 300 es | |
| precision mediump float; | |
| out vec4 color; | |
| void main(void) | |
| { | |
| switch (10) | |
| { | |
| case 0: | |
| color = vec4(0); | |
| break; | |
| case 1: | |
| color = vec4(1); | |
| break; | |
| } | |
| })"; | |
| compile(shaderString); | |
| ASSERT_TRUE(notFoundInCode("switch")); | |
| ASSERT_TRUE(notFoundInCode("case")); | |
| } | |
| // Test that a switch statement with a constant expression with a default is not pruned. | |
| TEST_F(PruneNoOpsTest, SwitchStatementWithConstantExpressionWithDefault) | |
| { | |
| const std::string shaderString = R"(#version 300 es | |
| precision mediump float; | |
| out vec4 color; | |
| void main(void) | |
| { | |
| switch (10) | |
| { | |
| case 0: | |
| color = vec4(0); | |
| break; | |
| case 1: | |
| color = vec4(1); | |
| break; | |
| default: | |
| color = vec4(0.5); | |
| break; | |
| } | |
| })"; | |
| compile(shaderString); | |
| ASSERT_TRUE(foundInCode("switch")); | |
| ASSERT_TRUE(foundInCode("case")); | |
| } | |
| // Test that a switch statement with a constant expression with a matching case is not pruned. | |
| TEST_F(PruneNoOpsTest, SwitchStatementWithConstantExpressionWithMatchingCase) | |
| { | |
| const std::string shaderString = R"(#version 300 es | |
| precision mediump float; | |
| out vec4 color; | |
| void main(void) | |
| { | |
| switch (10) | |
| { | |
| case 0: | |
| color = vec4(0); | |
| break; | |
| case 10: | |
| color = vec4(1); | |
| break; | |
| } | |
| })"; | |
| compile(shaderString); | |
| ASSERT_TRUE(foundInCode("switch")); | |
| ASSERT_TRUE(foundInCode("case")); | |
| } | |
| } // namespace |