xref: /aosp_15_r20/external/angle/src/compiler/translator/ConstantUnion.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
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