diff options
Diffstat (limited to 'src/3rdparty/angle/src/compiler/translator/OutputGLSLBase.h')
-rw-r--r-- | src/3rdparty/angle/src/compiler/translator/OutputGLSLBase.h | 76 |
1 files changed, 50 insertions, 26 deletions
diff --git a/src/3rdparty/angle/src/compiler/translator/OutputGLSLBase.h b/src/3rdparty/angle/src/compiler/translator/OutputGLSLBase.h index 2ae82d15b2..592a310be4 100644 --- a/src/3rdparty/angle/src/compiler/translator/OutputGLSLBase.h +++ b/src/3rdparty/angle/src/compiler/translator/OutputGLSLBase.h @@ -9,9 +9,12 @@ #include <set> -#include "compiler/translator/IntermNode.h" -#include "compiler/translator/LoopInfo.h" -#include "compiler/translator/ParseContext.h" +#include "compiler/translator/HashNames.h" +#include "compiler/translator/InfoSink.h" +#include "compiler/translator/IntermTraverse.h" + +namespace sh +{ class TOutputGLSLBase : public TIntermTraverser { @@ -20,48 +23,58 @@ class TOutputGLSLBase : public TIntermTraverser ShArrayIndexClampingStrategy clampingStrategy, ShHashFunction64 hashFunction, NameMap &nameMap, - TSymbolTable& symbolTable, + TSymbolTable *symbolTable, + sh::GLenum shaderType, int shaderVersion, - ShShaderOutput output); + ShShaderOutput output, + ShCompileOptions compileOptions); + + ShShaderOutput getShaderOutput() const { return mOutput; } - ShShaderOutput getShaderOutput() const - { - return mOutput; - } + // Return the original name if hash function pointer is NULL; + // otherwise return the hashed name. Has special handling for internal names, which are not + // hashed. + TString hashName(const TName &name); protected: TInfoSinkBase &objSink() { return mObjSink; } + void writeFloat(TInfoSinkBase &out, float f); void writeTriplet(Visit visit, const char *preStr, const char *inStr, const char *postStr); - void writeLayoutQualifier(const TType &type); + virtual void writeLayoutQualifier(TIntermTyped *variable); + void writeInvariantQualifier(const TType &type); void writeVariableType(const TType &type); virtual bool writeVariablePrecision(TPrecision precision) = 0; void writeFunctionParameters(const TIntermSequence &args); const TConstantUnion *writeConstantUnion(const TType &type, const TConstantUnion *pConstUnion); - void writeConstructorTriplet(Visit visit, const TType &type, const char *constructorBaseType); + void writeConstructorTriplet(Visit visit, const TType &type); TString getTypeName(const TType &type); void visitSymbol(TIntermSymbol *node) override; void visitConstantUnion(TIntermConstantUnion *node) override; + bool visitSwizzle(Visit visit, TIntermSwizzle *node) override; bool visitBinary(Visit visit, TIntermBinary *node) override; bool visitUnary(Visit visit, TIntermUnary *node) override; - bool visitSelection(Visit visit, TIntermSelection *node) override; + bool visitTernary(Visit visit, TIntermTernary *node) override; + bool visitIfElse(Visit visit, TIntermIfElse *node) override; bool visitSwitch(Visit visit, TIntermSwitch *node) override; bool visitCase(Visit visit, TIntermCase *node) override; + bool visitFunctionPrototype(Visit visit, TIntermFunctionPrototype *node) override; + bool visitFunctionDefinition(Visit visit, TIntermFunctionDefinition *node) override; bool visitAggregate(Visit visit, TIntermAggregate *node) override; + bool visitBlock(Visit visit, TIntermBlock *node) override; + bool visitInvariantDeclaration(Visit visit, TIntermInvariantDeclaration *node) override; + bool visitDeclaration(Visit visit, TIntermDeclaration *node) override; bool visitLoop(Visit visit, TIntermLoop *node) override; bool visitBranch(Visit visit, TIntermBranch *node) override; - void visitCodeBlock(TIntermNode *node); + void visitCodeBlock(TIntermBlock *node); - // Return the original name if hash function pointer is NULL; - // otherwise return the hashed name. - TString hashName(const TString &name); // Same as hashName(), but without hashing built-in variables. - TString hashVariableName(const TString &name); - // Same as hashName(), but without hashing built-in functions and with unmangling. - TString hashFunctionNameIfNeeded(const TName &mangledName); + TString hashVariableName(const TName &name); + // Same as hashName(), but without hashing internal functions or "main". + TString hashFunctionNameIfNeeded(const TFunctionSymbolInfo &info); // Used to translate function names for differences between ESSL and GLSL - virtual TString translateTextureFunction(TString &name) { return name; } + virtual TString translateTextureFunction(const TString &name) { return name; } private: bool structDeclared(const TStructure *structure) const; @@ -70,17 +83,16 @@ class TOutputGLSLBase : public TIntermTraverser void declareInterfaceBlockLayout(const TInterfaceBlock *interfaceBlock); void declareInterfaceBlock(const TInterfaceBlock *interfaceBlock); - void writeBuiltInFunctionTriplet(Visit visit, const char *preStr, bool useEmulatedFunction); + void writeBuiltInFunctionTriplet(Visit visit, TOperator op, bool useEmulatedFunction); + + const char *mapQualifierToString(TQualifier qialifier); TInfoSinkBase &mObjSink; - bool mDeclaringVariables; + bool mDeclaringVariable; // This set contains all the ids of the structs from every scope. std::set<int> mDeclaredStructs; - // Stack of loops that need to be unrolled. - TLoopStack mLoopUnrollStack; - ShArrayIndexClampingStrategy mClampingStrategy; // name hashing. @@ -88,11 +100,23 @@ class TOutputGLSLBase : public TIntermTraverser NameMap &mNameMap; - TSymbolTable &mSymbolTable; + sh::GLenum mShaderType; const int mShaderVersion; ShShaderOutput mOutput; + + ShCompileOptions mCompileOptions; }; +void WriteGeometryShaderLayoutQualifiers(TInfoSinkBase &out, + sh::TLayoutPrimitiveType inputPrimitive, + int invocations, + sh::TLayoutPrimitiveType outputPrimitive, + int maxVertices); + +bool NeedsToWriteLayoutQualifier(const TType &type); + +} // namespace sh + #endif // COMPILER_TRANSLATOR_OUTPUTGLSLBASE_H_ |