diff options
Diffstat (limited to 'src/3rdparty/angle/src/compiler/translator/ValidateLimitations.h')
-rw-r--r-- | src/3rdparty/angle/src/compiler/translator/ValidateLimitations.h | 58 |
1 files changed, 11 insertions, 47 deletions
diff --git a/src/3rdparty/angle/src/compiler/translator/ValidateLimitations.h b/src/3rdparty/angle/src/compiler/translator/ValidateLimitations.h index 666e38ff5c..9149b8c216 100644 --- a/src/3rdparty/angle/src/compiler/translator/ValidateLimitations.h +++ b/src/3rdparty/angle/src/compiler/translator/ValidateLimitations.h @@ -8,56 +8,20 @@ #define COMPILER_TRANSLATOR_VALIDATELIMITATIONS_H_ #include "compiler/translator/IntermNode.h" -#include "compiler/translator/LoopInfo.h" -class TInfoSinkBase; - -// Traverses intermediate tree to ensure that the shader does not exceed the -// minimum functionality mandated in GLSL 1.0 spec, Appendix A. -class ValidateLimitations : public TIntermTraverser +namespace sh { - public: - ValidateLimitations(sh::GLenum shaderType, TInfoSinkBase *sink); - - int numErrors() const { return mNumErrors; } - - bool visitBinary(Visit, TIntermBinary *) override; - bool visitUnary(Visit, TIntermUnary *) override; - bool visitAggregate(Visit, TIntermAggregate *) override; - bool visitLoop(Visit, TIntermLoop *) override; - - static bool IsLimitedForLoop(TIntermLoop *node); - - private: - void error(TSourceLoc loc, const char *reason, const char *token); - - bool withinLoopBody() const; - bool isLoopIndex(TIntermSymbol *symbol); - bool validateLoopType(TIntermLoop *node); - - bool validateForLoopHeader(TIntermLoop *node); - // If valid, return the index symbol id; Otherwise, return -1. - int validateForLoopInit(TIntermLoop *node); - bool validateForLoopCond(TIntermLoop *node, int indexSymbolId); - bool validateForLoopExpr(TIntermLoop *node, int indexSymbolId); - // Returns true if none of the loop indices is used as the argument to - // the given function out or inout parameter. - bool validateFunctionCall(TIntermAggregate *node); - bool validateOperation(TIntermOperator *node, TIntermNode *operand); +class TDiagnostics; - // Returns true if indexing does not exceed the minimum functionality - // mandated in GLSL 1.0 spec, Appendix A, Section 5. - bool isConstExpr(TIntermNode *node); - bool isConstIndexExpr(TIntermNode *node); - bool validateIndexing(TIntermBinary *node); +// Returns true if the given shader does not exceed the minimum functionality mandated in GLSL ES +// 1.00 spec Appendix A. +bool ValidateLimitations(TIntermNode *root, + GLenum shaderType, + TSymbolTable *symbolTable, + int shaderVersion, + TDiagnostics *diagnostics); - sh::GLenum mShaderType; - TInfoSinkBase *mSink; - int mNumErrors; - TLoopStack mLoopStack; - bool mValidateIndexing; - bool mValidateInnerLoops; -}; +} // namespace sh -#endif // COMPILER_TRANSLATOR_VALIDATELIMITATIONS_H_ +#endif // COMPILER_TRANSLATOR_VALIDATELIMITATIONS_H_ |