diff options
author | John Kessenich <cepheus@frii.com> | 2013-11-11 20:31:45 +0000 |
---|---|---|
committer | John Kessenich <cepheus@frii.com> | 2013-11-11 20:31:45 +0000 |
commit | 06a37c3964f5e0c5da020f9241db05321c990eb9 (patch) | |
tree | 6aac5165e4fe90bc1e63892df7339a2fc0dfdfb0 /glslang/MachineIndependent/SymbolTable.cpp | |
parent | 115a0adc29123aa4b4eae3c31a4e031d4ee919cc (diff) | |
download | glslang-06a37c3964f5e0c5da020f9241db05321c990eb9.tar.gz |
Add GL_OES_standard_derivatives. Also added extension infrastructure that allows built-in symbols to be tagged with extensions and automatically error checked against them.
git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@24002 e7fa87d3-cd2b-0410-9028-fcbf551c1848
Diffstat (limited to 'glslang/MachineIndependent/SymbolTable.cpp')
-rw-r--r-- | glslang/MachineIndependent/SymbolTable.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/glslang/MachineIndependent/SymbolTable.cpp b/glslang/MachineIndependent/SymbolTable.cpp index 4c6cbcde..e801a935 100644 --- a/glslang/MachineIndependent/SymbolTable.cpp +++ b/glslang/MachineIndependent/SymbolTable.cpp @@ -207,6 +207,23 @@ void TSymbolTableLevel::relateToOperator(const char* name, TOperator op) } } +// Make all function overloads of the given name require an extension(s). +// Should only be used for a version/profile that actually needs the extension(s). +void TSymbolTableLevel::setFunctionExtensions(const char* name, int num, const char* const extensions[]) +{ + tLevel::const_iterator candidate = level.lower_bound(name); + while (candidate != level.end()) { + const TString& candidateName = (*candidate).first; + TString::size_type parenAt = candidateName.find_first_of('('); + if (parenAt != candidateName.npos && candidateName.compare(0, parenAt, name) == 0) { + TSymbol* symbol = candidate->second; + symbol->setExtensions(num, extensions); + } else + break; + ++candidate; + } +} + // // Make all symbols in this table level read only. // @@ -230,6 +247,8 @@ TVariable::TVariable(const TVariable& copyOf) : TSymbol(copyOf) { type.deepCopy(copyOf.type); userType = copyOf.userType; + extensions = 0; + setExtensions(copyOf.numExtensions, copyOf.extensions); if (! copyOf.unionArray.empty()) { assert(!copyOf.type.getStruct()); @@ -255,6 +274,8 @@ TFunction::TFunction(const TFunction& copyOf) : TSymbol(copyOf) parameters.back().copyParam(copyOf.parameters[i]); } + extensions = 0; + setExtensions(copyOf.numExtensions, copyOf.extensions); returnType.deepCopy(copyOf.returnType); mangledName = copyOf.mangledName; op = copyOf.op; |