// // 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. // // 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; } }