blob: 867b3a7e81c75981b4f5eca4cf5c96f9a73c4364 [file] [log] [blame]
//
// 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