Matrix layout qualifiers are valid for non-matrices
Uniform block members may be structs containing matrices, and there's
no explicit mention in the spec that the matrix qualifiers would only
be valid for matrix fields. Only generate a warning when an extraneous
matrix layout qualifier is used.
TEST=dEQP-GLES3.functional.shaders.*layout* (all pass with this patch)
BUG=angleproject:1058
Change-Id: Ifb2f2392d84100d997cc2d68fd55e9ad17a17cea
Reviewed-on: https://chromium-review.googlesource.com/284112
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Tested-by: Olli Etuaho <oetuaho@nvidia.com>
diff --git a/src/compiler/translator/ParseContext.cpp b/src/compiler/translator/ParseContext.cpp
index 6f4bba4..4091a39 100644
--- a/src/compiler/translator/ParseContext.cpp
+++ b/src/compiler/translator/ParseContext.cpp
@@ -2235,11 +2235,10 @@
{
fieldLayoutQualifier.matrixPacking = blockLayoutQualifier.matrixPacking;
}
- else if (!fieldType->isMatrix())
+ else if (!fieldType->isMatrix() && fieldType->getBasicType() != EbtStruct)
{
- error(field->line(), "invalid layout qualifier:",
- getMatrixPackingString(fieldLayoutQualifier.matrixPacking), "can only be used on matrix types");
- recover();
+ warning(field->line(), "extraneous layout qualifier:",
+ getMatrixPackingString(fieldLayoutQualifier.matrixPacking), "only has an effect on matrix types");
}
fieldType->setLayoutQualifier(fieldLayoutQualifier);