Generate code for unmangled name lookup
Instead of using an std::map at each symbol table level, use the
gen_builtin_symbols.py script to build a function to query unmangled
names.
BUG=angleproject:2267
TEST=angle_unittests
Change-Id: I4f1cf1df1f50fe9d909f3249150ee002ee6efb61
Reviewed-on: https://chromium-review.googlesource.com/931885
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/compiler/translator/SymbolTable.cpp b/src/compiler/translator/SymbolTable.cpp
index aecc95b..e8d0a8f 100644
--- a/src/compiler/translator/SymbolTable.cpp
+++ b/src/compiler/translator/SymbolTable.cpp
@@ -63,23 +63,15 @@
public:
TSymbolTableBuiltInLevel() = default;
- bool insert(const TSymbol *symbol);
-
+ void insert(const TSymbol *symbol);
const TSymbol *find(const ImmutableString &name) const;
- void insertUnmangledBuiltIn(const ImmutableString &name, TExtension ext);
- const UnmangledBuiltIn *getUnmangledBuiltIn(const ImmutableString &name) const;
-
private:
using tLevel = TUnorderedMap<ImmutableString,
const TSymbol *,
ImmutableString::FowlerNollVoHash<sizeof(size_t)>>;
using tLevelPair = const tLevel::value_type;
- using tInsertResult = std::pair<tLevel::iterator, bool>;
-
tLevel mLevel;
-
- std::map<ImmutableString, UnmangledBuiltIn> mUnmangledBuiltIns;
};
bool TSymbolTable::TSymbolTableLevel::insert(TSymbol *symbol)
@@ -103,11 +95,9 @@
return (*it).second;
}
-bool TSymbolTable::TSymbolTableBuiltInLevel::insert(const TSymbol *symbol)
+void TSymbolTable::TSymbolTableBuiltInLevel::insert(const TSymbol *symbol)
{
- // returning true means symbol was added to the table
- tInsertResult result = mLevel.insert(tLevelPair(symbol->getMangledName(), symbol));
- return result.second;
+ mLevel.insert(tLevelPair(symbol->getMangledName(), symbol));
}
const TSymbol *TSymbolTable::TSymbolTableBuiltInLevel::find(const ImmutableString &name) const
@@ -119,27 +109,8 @@
return (*it).second;
}
-void TSymbolTable::TSymbolTableBuiltInLevel::insertUnmangledBuiltIn(const ImmutableString &name,
- TExtension ext)
-{
- if (ext == TExtension::UNDEFINED || mUnmangledBuiltIns.find(name) == mUnmangledBuiltIns.end())
- {
- mUnmangledBuiltIns[name] = UnmangledBuiltIn(ext);
- }
-}
-
-const UnmangledBuiltIn *TSymbolTable::TSymbolTableBuiltInLevel::getUnmangledBuiltIn(
- const ImmutableString &name) const
-{
- auto it = mUnmangledBuiltIns.find(ImmutableString(name));
- if (it == mUnmangledBuiltIns.end())
- {
- return nullptr;
- }
- return &(it->second);
-}
-
-TSymbolTable::TSymbolTable() : mUniqueIdCounter(0), mUserDefinedUniqueIdsStart(-1)
+TSymbolTable::TSymbolTable()
+ : mUniqueIdCounter(0), mUserDefinedUniqueIdsStart(-1), mShaderType(GL_FRAGMENT_SHADER)
{
}
@@ -401,49 +372,6 @@
mTable.back()->setGlobalInvariant(invariant);
}
-void TSymbolTable::insertUnmangledBuiltIn(const ImmutableString &name,
- TExtension ext,
- ESymbolLevel level)
-{
- ASSERT(level >= 0 && level <= LAST_BUILTIN_LEVEL);
- ASSERT(mUserDefinedUniqueIdsStart == -1);
- mBuiltInTable[level]->insertUnmangledBuiltIn(name, ext);
-}
-
-bool TSymbolTable::hasUnmangledBuiltInAtLevel(const char *name, ESymbolLevel level)
-{
- ASSERT(level >= 0 && level <= LAST_BUILTIN_LEVEL);
- return mBuiltInTable[level]->getUnmangledBuiltIn(ImmutableString(name)) != nullptr;
-}
-
-const UnmangledBuiltIn *TSymbolTable::getUnmangledBuiltInForShaderVersion(
- const ImmutableString &name,
- int shaderVersion)
-{
- for (int level = LAST_BUILTIN_LEVEL; level >= 0; --level)
- {
- if (level == ESSL3_1_BUILTINS && shaderVersion != 310)
- {
- --level;
- }
- if (level == ESSL3_BUILTINS && shaderVersion < 300)
- {
- --level;
- }
- if (level == ESSL1_BUILTINS && shaderVersion != 100)
- {
- --level;
- }
-
- const UnmangledBuiltIn *builtIn = mBuiltInTable[level]->getUnmangledBuiltIn(name);
- if (builtIn != nullptr)
- {
- return builtIn;
- }
- }
- return nullptr;
-}
-
void TSymbolTable::markBuiltInInitializationFinished()
{
mUserDefinedUniqueIdsStart = mUniqueIdCounter;
@@ -467,6 +395,8 @@
ShShaderSpec spec,
const ShBuiltInResources &resources)
{
+ mShaderType = type;
+
ASSERT(isEmpty());
pushBuiltInLevel(); // COMMON_BUILTINS
pushBuiltInLevel(); // ESSL1_BUILTINS
@@ -506,7 +436,6 @@
setDefaultPrecision(EbtAtomicCounter, EbpHigh);
insertBuiltInFunctions(type);
- insertBuiltInFunctionUnmangledNames(type);
mUniqueIdCounter = kLastStaticBuiltInId + 1;
initializeBuiltInVariables(type, spec, resources);