1 // 2 // Copyright 2002 The ANGLE Project Authors. All rights reserved. 3 // Use of this source code is governed by a BSD-style license that can be 4 // found in the LICENSE file. 5 // 6 7 #ifndef COMPILER_TRANSLATOR_CONSTANTUNION_H_ 8 #define COMPILER_TRANSLATOR_CONSTANTUNION_H_ 9 10 #include <assert.h> 11 12 #include "compiler/translator/BaseTypes.h" 13 #include "compiler/translator/Common.h" 14 15 namespace sh 16 { 17 18 class TDiagnostics; 19 20 class TConstantUnion 21 { 22 public: 23 POOL_ALLOCATOR_NEW_DELETE 24 TConstantUnion(); 25 26 bool cast(TBasicType newType, const TConstantUnion &constant); 27 setIConst(int i)28 void setIConst(int i) 29 { 30 iConst = i; 31 type = EbtInt; 32 } setUConst(unsigned int u)33 void setUConst(unsigned int u) 34 { 35 uConst = u; 36 type = EbtUInt; 37 } setFConst(float f)38 void setFConst(float f) 39 { 40 fConst = f; 41 type = EbtFloat; 42 } setBConst(bool b)43 void setBConst(bool b) 44 { 45 bConst = b; 46 type = EbtBool; 47 } 48 setYuvCscStandardEXTConst(TYuvCscStandardEXT s)49 void setYuvCscStandardEXTConst(TYuvCscStandardEXT s) 50 { 51 yuvCscStandardEXTConst = s; 52 type = EbtYuvCscStandardEXT; 53 } 54 55 int getIConst() const; 56 unsigned int getUConst() const; 57 float getFConst() const; 58 bool getBConst() const; 59 bool isZero() const; 60 TYuvCscStandardEXT getYuvCscStandardEXTConst() const; 61 62 bool operator==(const int i) const; 63 bool operator==(const unsigned int u) const; 64 bool operator==(const float f) const; 65 bool operator==(const bool b) const; 66 bool operator==(const TYuvCscStandardEXT s) const; 67 bool operator==(const TConstantUnion &constant) const; 68 bool operator!=(const int i) const; 69 bool operator!=(const unsigned int u) const; 70 bool operator!=(const float f) const; 71 bool operator!=(const bool b) const; 72 bool operator!=(const TYuvCscStandardEXT s) const; 73 bool operator!=(const TConstantUnion &constant) const; 74 bool operator>(const TConstantUnion &constant) const; 75 bool operator<(const TConstantUnion &constant) const; 76 static TConstantUnion add(const TConstantUnion &lhs, 77 const TConstantUnion &rhs, 78 TDiagnostics *diag, 79 const TSourceLoc &line); 80 static TConstantUnion sub(const TConstantUnion &lhs, 81 const TConstantUnion &rhs, 82 TDiagnostics *diag, 83 const TSourceLoc &line); 84 static TConstantUnion mul(const TConstantUnion &lhs, 85 const TConstantUnion &rhs, 86 TDiagnostics *diag, 87 const TSourceLoc &line); 88 TConstantUnion operator%(const TConstantUnion &constant) const; 89 static TConstantUnion rshift(const TConstantUnion &lhs, 90 const TConstantUnion &rhs, 91 TDiagnostics *diag, 92 const TSourceLoc &line); 93 static TConstantUnion lshift(const TConstantUnion &lhs, 94 const TConstantUnion &rhs, 95 TDiagnostics *diag, 96 const TSourceLoc &line); 97 TConstantUnion operator&(const TConstantUnion &constant) const; 98 TConstantUnion operator|(const TConstantUnion &constant) const; 99 TConstantUnion operator^(const TConstantUnion &constant) const; 100 TConstantUnion operator&&(const TConstantUnion &constant) const; 101 TConstantUnion operator||(const TConstantUnion &constant) const; 102 getType()103 TBasicType getType() const { return type; } 104 105 private: 106 union 107 { 108 int iConst; // used for ivec, scalar ints 109 unsigned int uConst; // used for uvec, scalar uints 110 bool bConst; // used for bvec, scalar bools 111 float fConst; // used for vec, mat, scalar floats 112 TYuvCscStandardEXT yuvCscStandardEXTConst; 113 }; 114 115 TBasicType type; 116 }; 117 118 } // namespace sh 119 120 #endif // COMPILER_TRANSLATOR_CONSTANTUNION_H_ 121