diff options
author | Jamie Madill <jmadill@transgaming.com> | 2013-07-12 16:06:38 -0400 |
---|---|---|
committer | Shannon Woods <shannonwoods@chromium.org> | 2013-07-19 16:41:51 -0400 |
commit | 1bc1b6a3cc5b3234927181514e1e2ba57423ee5c (patch) | |
tree | f8a4313877e28d8f645ece5b4980a1c9c646ae44 | |
parent | 57a045443cebf1bb035bfa9cc63d392d875136ed (diff) | |
download | angle_dx11-1bc1b6a3cc5b3234927181514e1e2ba57423ee5c.tar.gz |
Only allow zero indexes for gl_FragData when the draw buffers extension is disabled.
TRAC #23509
Signed-off-by: Shannon Woods
Signed-off-by: Nicolas Capens
Authored-by: Jamie Madill
-rw-r--r-- | src/compiler/ParseHelper.cpp | 19 | ||||
-rw-r--r-- | src/compiler/ParseHelper.h | 1 |
2 files changed, 20 insertions, 0 deletions
diff --git a/src/compiler/ParseHelper.cpp b/src/compiler/ParseHelper.cpp index b84a1755..850cc7ac 100644 --- a/src/compiler/ParseHelper.cpp +++ b/src/compiler/ParseHelper.cpp @@ -892,6 +892,19 @@ bool TParseContext::supportsExtension(const char* extension) return (iter != extbehavior.end()); } +bool TParseContext::isExtensionEnabled(const char* extension) const +{ + const TExtensionBehavior& extbehavior = extensionBehavior(); + auto iter = extbehavior.find(extension); + + if (iter == extbehavior.end()) + { + return false; + } + + return (iter->second == EBhEnable || iter->second == EBhRequire); +} + ///////////////////////////////////////////////////////////////////////////////// // // Non-Errors. @@ -1513,6 +1526,12 @@ TIntermTyped* TParseContext::addIndexExpression(TIntermTyped *baseExpression, co recover(); index = baseExpression->getType().getArraySize() - 1; } + else if (baseExpression->getQualifier() == EvqFragData && index > 0 && !isExtensionEnabled("GL_EXT_draw_buffers")) + { + error(location, "", "[", "array indexes for gl_FragData must be zero when GL_EXT_draw_buffers is disabled"); + recover(); + index = 0; + } } else if ((baseExpression->isVector() || baseExpression->isMatrix()) && baseExpression->getType().getNominalSize() <= index) { diff --git a/src/compiler/ParseHelper.h b/src/compiler/ParseHelper.h index 4b2f6c34..dfffdca7 100644 --- a/src/compiler/ParseHelper.h +++ b/src/compiler/ParseHelper.h @@ -101,6 +101,7 @@ struct TParseContext { const TPragma& pragma() const { return directiveHandler.pragma(); } const TExtensionBehavior& extensionBehavior() const { return directiveHandler.extensionBehavior(); } bool supportsExtension(const char* extension); + bool isExtensionEnabled(const char* extension) const; bool containsSampler(TType& type); bool areAllChildConst(TIntermAggregate* aggrNode); |