Fix shaders with invariant keyword.
We would trigger assertion failures in Debug mode, and fail to
parse and translate correctly in Release.
BUG=angle:711
Change-Id: Ibb7f33b288376617598578f48c7bbdbdec044279
Reviewed-on: https://chromium-review.googlesource.com/210822
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Nicolas Capens <capn@chromium.org>
diff --git a/src/compiler/translator/VariableInfo.cpp b/src/compiler/translator/VariableInfo.cpp
index 153455c..0bd95cb 100644
--- a/src/compiler/translator/VariableInfo.cpp
+++ b/src/compiler/translator/VariableInfo.cpp
@@ -320,6 +320,8 @@
case EOpDeclaration:
{
const TIntermSequence &sequence = *(node->getSequence());
+ ASSERT(!sequence.empty());
+
const TIntermTyped &typedNode = *(sequence.front()->getAsTyped());
TQualifier qualifier = typedNode.getQualifier();
@@ -344,14 +346,16 @@
visitInfoList(sequence, mUniforms);
break;
default:
- visitInfoList(sequence, mVaryings);
+ // do not traverse invariant declarations such as
+ // "invariant gl_Position;"
+ if (typedNode.getBasicType() != EbtInvariant)
+ {
+ visitInfoList(sequence, mVaryings);
+ }
break;
}
- if (!sequence.empty())
- {
- visitChildren = false;
- }
+ visitChildren = false;
}
break;
}