Edit

kc3-lang/angle/src/tests/compiler_tests/AppendixALimitations_test.cpp

Branch :

  • Show log

    Commit

  • Author : Jamie Madill
    Date : 2018-11-27 11:34:27
    Hash : b980c563
    Message : Reformat all cpp and h files. This applies git cl format --full to all ANGLE sources. Bug: angleproject:2986 Change-Id: Ib504e618c1589332a37e97696cdc3515d739308f Reviewed-on: https://chromium-review.googlesource.com/c/1351367 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>

  • src/tests/compiler_tests/AppendixALimitations_test.cpp
  • //
    // Copyright (c) 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.
    //
    // AppendixALimitations_test.cpp:
    //   Tests for validating ESSL 1.00 Appendix A limitations.
    //
    
    #include "gtest/gtest.h"
    
    #include "GLSLANG/ShaderLang.h"
    #include "angle_gl.h"
    #include "gtest/gtest.h"
    #include "tests/test_utils/ShaderCompileTreeTest.h"
    
    using namespace sh;
    
    class AppendixALimitationsTest : public ShaderCompileTreeTest
    {
      public:
        AppendixALimitationsTest() {}
    
      protected:
        ::GLenum getShaderType() const override { return GL_FRAGMENT_SHADER; }
        ShShaderSpec getShaderSpec() const override { return SH_WEBGL_SPEC; }
    };
    
    // Test an invalid shader where a for loop index is used as an out parameter.
    TEST_F(AppendixALimitationsTest, IndexAsFunctionOutParameter)
    {
        const std::string &shaderString =
            "precision mediump float;\n"
            "void fun(out int a)\n"
            "{\n"
            "   a = 2;\n"
            "}\n"
            "void main()\n"
            "{\n"
            "    for (int i = 0; i < 2; ++i)\n"
            "    {\n"
            "        fun(i);\n"
            "    }\n"
            "    gl_FragColor = vec4(0.0);\n"
            "}\n";
        if (compile(shaderString))
        {
            FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
        }
    }
    
    // Test an invalid shader where a for loop index is used as an inout parameter.
    TEST_F(AppendixALimitationsTest, IndexAsFunctionInOutParameter)
    {
        const std::string &shaderString =
            "precision mediump float;\n"
            "void fun(int b, inout int a)\n"
            "{\n"
            "   a += b;\n"
            "}\n"
            "void main()\n"
            "{\n"
            "    for (int i = 0; i < 2; ++i)\n"
            "    {\n"
            "        fun(2, i);\n"
            "    }\n"
            "    gl_FragColor = vec4(0.0);\n"
            "}\n";
        if (compile(shaderString))
        {
            FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
        }
    }
    
    // Test a valid shader where a for loop index is used as an in parameter in a function that also has
    // an out parameter.
    TEST_F(AppendixALimitationsTest, IndexAsFunctionInParameter)
    {
        const std::string &shaderString =
            "precision mediump float;\n"
            "void fun(int b, inout int a)\n"
            "{\n"
            "   a += b;\n"
            "}\n"
            "void main()\n"
            "{\n"
            "    for (int i = 0; i < 2; ++i)\n"
            "    {\n"
            "        int a = 1;"
            "        fun(i, a);\n"
            "    }\n"
            "    gl_FragColor = vec4(0.0);\n"
            "}\n";
        if (!compile(shaderString))
        {
            FAIL() << "Shader compilation failed, expecting success:\n" << mInfoLog;
        }
    }
    
    // Test an invalid shader where a for loop index is used as a target of assignment.
    TEST_F(AppendixALimitationsTest, IndexAsTargetOfAssignment)
    {
        const std::string &shaderString =
            "precision mediump float;\n"
            "void main()\n"
            "{\n"
            "    for (int i = 0; i < 2; ++i)\n"
            "    {\n"
            "        i = 2;\n"
            "    }\n"
            "    gl_FragColor = vec4(0.0);\n"
            "}\n";
        if (compile(shaderString))
        {
            FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
        }
    }
    
    // Test an invalid shader where a for loop index is incremented inside the loop.
    TEST_F(AppendixALimitationsTest, IndexIncrementedInLoopBody)
    {
        const std::string &shaderString =
            "precision mediump float;\n"
            "void main()\n"
            "{\n"
            "    for (int i = 0; i < 2; ++i)\n"
            "    {\n"
            "        ++i;\n"
            "    }\n"
            "    gl_FragColor = vec4(0.0);\n"
            "}\n";
        if (compile(shaderString))
        {
            FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
        }
    }