Commit c1ac41bb by Olli Etuaho

Apply array restriction on qualified types only on ESSL1.00

Add a test that checks that uniforms with an array type are allowed in ESSL3.00. TEST=angle_unittests BUG=angleproject:1061 Change-Id: I6c9e8eeb3e8a6b81522c87039b93bcc0008ae317 Reviewed-on: https://chromium-review.googlesource.com/285481Tested-by: 's avatarOlli Etuaho <oetuaho@nvidia.com> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarZhenyao Mo <zmo@chromium.org>
parent 8442a612
...@@ -1352,15 +1352,15 @@ TPublicType TParseContext::addFullySpecifiedType(TQualifier qualifier, bool inva ...@@ -1352,15 +1352,15 @@ TPublicType TParseContext::addFullySpecifiedType(TQualifier qualifier, bool inva
returnType.invariant = invariant; returnType.invariant = invariant;
returnType.layoutQualifier = layoutQualifier; returnType.layoutQualifier = layoutQualifier;
if (typeSpecifier.array)
{
error(typeSpecifier.line, "not supported", "first-class array");
recover();
returnType.clearArrayness();
}
if (mShaderVersion < 300) if (mShaderVersion < 300)
{ {
if (typeSpecifier.array)
{
error(typeSpecifier.line, "not supported", "first-class array");
recover();
returnType.clearArrayness();
}
if (qualifier == EvqAttribute && (typeSpecifier.type == EbtBool || typeSpecifier.type == EbtInt)) if (qualifier == EvqAttribute && (typeSpecifier.type == EbtBool || typeSpecifier.type == EbtInt))
{ {
error(typeSpecifier.line, "cannot be bool or int", getQualifierString(qualifier)); error(typeSpecifier.line, "cannot be bool or int", getQualifierString(qualifier));
......
...@@ -688,3 +688,20 @@ TEST_F(MalformedShaderTest, LayoutQualifierInFunctionReturnType) ...@@ -688,3 +688,20 @@ TEST_F(MalformedShaderTest, LayoutQualifierInFunctionReturnType)
FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog; FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
} }
} }
// Uniforms can be arrays (ESSL 3.00 section 4.3.5)
TEST_F(MalformedShaderTest, UniformArray)
{
const std::string &shaderString =
"#version 300 es\n"
"precision mediump float;\n"
"uniform vec4[2] u;\n"
"out vec4 my_FragColor;\n"
"void main() {\n"
" my_FragColor = u[0];\n"
"}\n";
if (!compile(shaderString))
{
FAIL() << "Shader compilation failed, expecting success " << 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