Added mechanism to predefine associated macros for extensions. Also refactored the way extension behavior is initialized and updated.
Please note that I still need to add validation that appropriate extensions are enabled before using an extension function.
BUG=25
Review URL: http://codereview.appspot.com/2139042
git-svn-id: https://angleproject.googlecode.com/svn/trunk@413 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/compiler/ShaderLang.cpp b/src/compiler/ShaderLang.cpp
index e0c646a..de213d8 100644
--- a/src/compiler/ShaderLang.cpp
+++ b/src/compiler/ShaderLang.cpp
@@ -23,7 +23,8 @@
TInfoSink& infoSink, TSymbolTable& symbolTable)
{
TIntermediate intermediate(infoSink);
- TParseContext parseContext(symbolTable, intermediate, language, spec, infoSink);
+ TExtensionBehavior extBehavior;
+ TParseContext parseContext(symbolTable, extBehavior, intermediate, language, spec, infoSink);
GlobalParseContext = &parseContext;
@@ -79,6 +80,14 @@
return InitializeSymbolTable(builtIns.getBuiltInStrings(), language, spec, resources, infoSink, symbolTable);
}
+static void DefineExtensionMacros(const TExtensionBehavior& extBehavior)
+{
+ for (TExtensionBehavior::const_iterator iter = extBehavior.begin();
+ iter != extBehavior.end(); ++iter) {
+ PredefineIntMacro(iter->first.c_str(), 1);
+ }
+}
+
//
// This is the platform independent interface between an OGL driver
// and the shading language compiler.
@@ -144,6 +153,7 @@
ShDestruct(base);
return 0;
}
+ InitExtensionBehavior(*resources, compiler->getExtensionBehavior());
return reinterpret_cast<void*>(base);
}
@@ -196,14 +206,16 @@
TIntermediate intermediate(infoSink);
TSymbolTable& symbolTable = compiler->getSymbolTable();
+ const TExtensionBehavior& extBehavior = compiler->getExtensionBehavior();
- TParseContext parseContext(symbolTable, intermediate, compiler->getLanguage(), compiler->getSpec(), infoSink);
- parseContext.initializeExtensionBehavior();
+ TParseContext parseContext(symbolTable, extBehavior, intermediate,
+ compiler->getLanguage(), compiler->getSpec(), infoSink);
GlobalParseContext = &parseContext;
setInitialState();
InitPreprocessor();
+ DefineExtensionMacros(extBehavior);
//
// Parse the application's shaders. All the following symbol table
// work will be throw-away, so push a new allocation scope that can