Edit

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

Branch :

  • Show log

    Commit

  • Author : Olli Etuaho
    Date : 2017-11-15 16:32:25
    Hash : bb27c3a1
    Message : Fix VectorizeVectorScalarArithmetic statement insertion The traverser must avoid inserting two statements to the same position on a single traversal, so it doesn't trigger an assert. BUG=chromium:784078 TEST=angle_unittests Change-Id: I855054e62cc1b1cf4e6bb02af527954151c7d0e7 Reviewed-on: https://chromium-review.googlesource.com/771611 Commit-Queue: Olli Etuaho <oetuaho@nvidia.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>

  • src/tests/compiler_tests/VectorizeVectorScalarArithmetic_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.
    //
    // VectorizeVectorScalarArithmetic_test.cpp:
    //  Tests shader compilation with SH_REWRITE_VECTOR_SCALAR_ARITHMETIC workaround on.
    
    #include "GLSLANG/ShaderLang.h"
    #include "angle_gl.h"
    #include "gtest/gtest.h"
    #include "tests/test_utils/ShaderCompileTreeTest.h"
    
    using namespace sh;
    
    class VectorizeVectorScalarArithmeticTest : public ShaderCompileTreeTest
    {
      public:
        VectorizeVectorScalarArithmeticTest() : ShaderCompileTreeTest()
        {
            mExtraCompileOptions = SH_REWRITE_VECTOR_SCALAR_ARITHMETIC;
        }
    
      protected:
        ::GLenum getShaderType() const override { return GL_FRAGMENT_SHADER; }
        ShShaderSpec getShaderSpec() const override { return SH_GLES3_1_SPEC; }
    };
    
    // Test that two ops that generate statements in the parent block inside the same statement don't
    // trigger an assert.
    TEST_F(VectorizeVectorScalarArithmeticTest, TwoMutatedOpsWithSideEffectsInsideSameStatement)
    {
        const std::string &shaderString =
            R"(#version 300 es
            precision highp float;
    
            out vec4 res;
            uniform float uf;
    
            void main()
            {
                res = vec4(0.0);
                float f = uf;
                res += f *= f, res += f *= f;
            })";
        if (!compile(shaderString))
        {
            FAIL() << "Shader compilation failed, expecting success:\n" << mInfoLog;
        }
    }