Split builtin symbols over multiple levels.
Bug 19331817
Change-Id: Ia1ab8f4da90c62ca846961c97691aacdbdf62a6a
Reviewed-on: https://swiftshader-review.googlesource.com/2361
Tested-by: Nicolas Capens <capn@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
diff --git a/src/OpenGL/compiler/SymbolTable.cpp b/src/OpenGL/compiler/SymbolTable.cpp
index d0cd43d..350c184 100644
--- a/src/OpenGL/compiler/SymbolTable.cpp
+++ b/src/OpenGL/compiler/SymbolTable.cpp
@@ -181,6 +181,38 @@
}
}
+TSymbol *TSymbolTable::find(const TString &name, int shaderVersion, bool *builtIn, bool *sameScope) const
+{
+ int level = currentLevel();
+ TSymbol *symbol = nullptr;
+
+ do
+ {
+ symbol = table[level]->find(name);
+ --level;
+ }
+ while(!symbol && level >= 0);
+
+ level++;
+
+ if(builtIn)
+ {
+ *builtIn = (level == 0);
+ }
+
+ if(sameScope)
+ {
+ *sameScope = (level == currentLevel());
+ }
+
+ return symbol;
+}
+
+TSymbol *TSymbolTable::findBuiltIn(const TString &name, int shaderVersion) const
+{
+ return table[0]->find(name);
+}
+
TSymbol::TSymbol(const TSymbol& copyOf)
{
name = NewPoolTString(copyOf.name->c_str());