// // Copyright 2018 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. // // GlFragDataNotModified_test.cpp: // Test that the properties of built-in gl_FragData are not modified when a shader is compiled // multiple times. // #include "tests/test_utils/ShaderCompileTreeTest.h" namespace { class GlFragDataNotModifiedTest : public sh::ShaderCompileTreeTest { public: GlFragDataNotModifiedTest() {} protected: void initResources(ShBuiltInResources *resources) override { resources->MaxDrawBuffers = 4; resources->EXT_draw_buffers = 1; } ::GLenum getShaderType() const override { return GL_FRAGMENT_SHADER; } ShShaderSpec getShaderSpec() const override { return SH_GLES2_SPEC; } }; // Test a bug where we could modify the value of a builtin variable. TEST_F(GlFragDataNotModifiedTest, BuiltinRewritingBug) { const std::string &shaderString = "#extension GL_EXT_draw_buffers : require\n" "precision mediump float;\n" "void main() {\n" " gl_FragData[gl_MaxDrawBuffers] = vec4(0.0);\n" "}"; if (compile(shaderString)) { FAIL() << "Shader compilation succeeded, expecting failure\n"; } if (compile(shaderString)) { FAIL() << "Shader compilation succeeded, expecting failure\n"; } } } // anonymous namespace