// // Copyright 2020 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // SpecializationConst.h: Add code to generate AST node for specialization constant. // #ifndef COMPILER_TRANSLATOR_TREEUTIL_SPECIALIZATIONCONSTANT_H_ #define COMPILER_TRANSLATOR_TREEUTIL_SPECIALIZATIONCONSTANT_H_ #include "common/angleutils.h" #include "compiler/translator/Compiler.h" #include "compiler/translator/SymbolTable.h" class TIntermBlock; class TIntermTyped; class TIntermSymbol; class TVariable; namespace sh { class SpecConst { public: SpecConst(TSymbolTable *symbolTable, const ShCompileOptions &compileOptions, GLenum shaderType); virtual ~SpecConst(); // Flip/rotation // Returns a boolean: should X and Y be swapped? TIntermTyped *getSwapXY(); // Dither emulation TIntermTyped *getDither(); void declareSpecConsts(TIntermBlock *root); SpecConstUsageBits getSpecConstUsageBits() const { return mUsageBits; } private: TIntermSymbol *getRotation(); // If unsupported, this should be set to null. TSymbolTable *mSymbolTable; const ShCompileOptions &mCompileOptions; TVariable *mSurfaceRotationVar; TVariable *mDitherVar; // Bit is set if YFlip or Rotation has been used SpecConstUsageBits mUsageBits; }; } // namespace sh #endif // COMPILER_TRANSLATOR_TREEUTIL_SPECIALIZATIONCONSTANT_H_