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);