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