summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJamie Madill <jmadill@transgaming.com>2013-07-12 16:06:38 -0400
committerShannon Woods <shannonwoods@chromium.org>2013-07-19 16:41:51 -0400
commit1bc1b6a3cc5b3234927181514e1e2ba57423ee5c (patch)
treef8a4313877e28d8f645ece5b4980a1c9c646ae44
parent57a045443cebf1bb035bfa9cc63d392d875136ed (diff)
downloadangle_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.cpp19
-rw-r--r--src/compiler/ParseHelper.h1
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);