| // |
| // Copyright 2017 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. |
| // |
| // RewriteDoWhile_test.cpp: |
| // Tests that the RewriteDoWhile AST transform works correctly. |
| // |
| |
| #include "GLSLANG/ShaderLang.h" |
| #include "angle_gl.h" |
| #include "gtest/gtest.h" |
| #include "tests/test_utils/ShaderCompileTreeTest.h" |
| |
| using namespace sh; |
| |
| class RewriteDoWhileCrashTest : public ShaderCompileTreeTest |
| { |
| public: |
| RewriteDoWhileCrashTest() {} |
| |
| protected: |
| ::GLenum getShaderType() const override { return GL_FRAGMENT_SHADER; } |
| ShShaderSpec getShaderSpec() const override { return SH_GLES3_1_SPEC; } |
| |
| void SetUp() override |
| { |
| mExtraCompileOptions |= SH_REWRITE_DO_WHILE_LOOPS; |
| ShaderCompileTreeTest::SetUp(); |
| } |
| }; |
| |
| // Make sure that the RewriteDoWhile step doesn't crash. Regression test. |
| TEST_F(RewriteDoWhileCrashTest, RunsSuccessfully) |
| { |
| const std::string &shaderString = |
| "#version 300 es\n" |
| "precision mediump float;\n" |
| "uniform int u;\n" |
| "out vec4 my_FragColor;\n" |
| "void main()\n" |
| "{\n" |
| " int foo = 1;" |
| " do\n" |
| " {\n" |
| " foo *= u;\n" |
| " } while (foo < 8);\n" |
| " my_FragColor = vec4(foo) * 0.1;" |
| "}\n"; |
| if (!compile(shaderString)) |
| { |
| FAIL() << "Shader compilation failed, expecting success:\n" << mInfoLog; |
| } |
| } |