| // |
| // 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 |