| // |
| // 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 |