Commit e8ef2bc4 by Jiawei Shao Committed by Commit Bot

Add compile error on using inputs with interpolation qualifier as l-value

This patch intends to fix a compile error in ANGLE GLSL compiler when parsing an expression with inputs which has interpolation qualifiers ('flat', 'smooth' and 'centroid'). The compiler should report a compile error when a shader input with interpolation qualifier is used as a l-value. BUG=angleproject:2140 TEST=angle_unittests Change-Id: I7c059d53bf001ac31d34519a98e5289797833ce7 Reviewed-on: https://chromium-review.googlesource.com/640075 Commit-Queue: Olli Etuaho <oetuaho@nvidia.com> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
parent 7c2e6a96
...@@ -474,9 +474,10 @@ bool TParseContext::checkCanBeLValue(const TSourceLoc &line, const char *op, TIn ...@@ -474,9 +474,10 @@ bool TParseContext::checkCanBeLValue(const TSourceLoc &line, const char *op, TIn
message = "can't modify an attribute"; message = "can't modify an attribute";
break; break;
case EvqFragmentIn: case EvqFragmentIn:
message = "can't modify an input";
break;
case EvqVertexIn: case EvqVertexIn:
case EvqFlatIn:
case EvqSmoothIn:
case EvqCentroidIn:
message = "can't modify an input"; message = "can't modify an input";
break; break;
case EvqUniform: case EvqUniform:
......
...@@ -4691,3 +4691,63 @@ TEST_F(FragmentShaderValidationTest, IOBlockWithoutExtension) ...@@ -4691,3 +4691,63 @@ TEST_F(FragmentShaderValidationTest, IOBlockWithoutExtension)
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog; FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
} }
} }
// Test that a shader input with 'flat' qualifier cannot be used as l-value.
TEST_F(FragmentShaderValidationTest, AssignValueToFlatIn)
{
const std::string &shaderString =
"#version 310 es\n"
"precision mediump float;\n"
"flat in float value;\n"
"out vec4 o_color;\n"
"void main()\n"
"{\n"
" value = 1.0;\n"
" o_color = vec4(1.0, 0.0, 0.0, 1.0);"
"}\n";
if (compile(shaderString))
{
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
}
}
// Test that a shader input with 'smooth' qualifier cannot be used as l-value.
TEST_F(FragmentShaderValidationTest, AssignValueToSmoothIn)
{
const std::string &shaderString =
"#version 310 es\n"
"precision mediump float;\n"
"smooth in float value;\n"
"out vec4 o_color;\n"
"void main()\n"
"{\n"
" value = 1.0;\n"
" o_color = vec4(1.0, 0.0, 0.0, 1.0);"
"}\n";
if (compile(shaderString))
{
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
}
}
// Test that a shader input with 'centroid' qualifier cannot be used as l-value.
TEST_F(FragmentShaderValidationTest, AssignValueToCentroidIn)
{
const std::string &shaderString =
"#version 310 es\n"
"precision mediump float;\n"
"centroid in float value;\n"
"out vec4 o_color;\n"
"void main()\n"
"{\n"
" value = 1.0;\n"
" o_color = vec4(1.0, 0.0, 0.0, 1.0);"
"}\n";
if (compile(shaderString))
{
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment