summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/angle/src/compiler/translator/OutputGLSLBase.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/angle/src/compiler/translator/OutputGLSLBase.h')
-rw-r--r--src/3rdparty/angle/src/compiler/translator/OutputGLSLBase.h76
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_