Add unsigned integer types to the compiler ConstantUnion class.

TRAC #23080 Signed-off-by: Nicolas Capens Signed-off-by: Shannon Woods Author: Jamie Madill git-svn-id: https://angleproject.googlecode.com/svn/branches/es3proto@2401 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent 5703d881
...@@ -38,6 +38,7 @@ enum TBasicType ...@@ -38,6 +38,7 @@ enum TBasicType
EbtVoid, EbtVoid,
EbtFloat, EbtFloat,
EbtInt, EbtInt,
EbtUInt,
EbtBool, EbtBool,
EbtGuardSamplerBegin, // non type: see implementation of IsSampler() EbtGuardSamplerBegin, // non type: see implementation of IsSampler()
EbtSampler2D, EbtSampler2D,
...@@ -58,6 +59,7 @@ inline const char* getBasicString(TBasicType t) ...@@ -58,6 +59,7 @@ inline const char* getBasicString(TBasicType t)
case EbtVoid: return "void"; break; case EbtVoid: return "void"; break;
case EbtFloat: return "float"; break; case EbtFloat: return "float"; break;
case EbtInt: return "int"; break; case EbtInt: return "int"; break;
case EbtUInt: return "uint"; break;
case EbtBool: return "bool"; break; case EbtBool: return "bool"; break;
case EbtSampler2D: return "sampler2D"; break; case EbtSampler2D: return "sampler2D"; break;
case EbtSamplerCube: return "samplerCube"; break; case EbtSamplerCube: return "samplerCube"; break;
......
...@@ -17,15 +17,14 @@ public: ...@@ -17,15 +17,14 @@ public:
type = EbtVoid; type = EbtVoid;
} }
POOL_ALLOCATOR_NEW_DELETE(GlobalPoolAllocator) POOL_ALLOCATOR_NEW_DELETE(GlobalPoolAllocator)
void setIConst(int i) {iConst = i; type = EbtInt; } void setIConst(int i) {iConst = i; type = EbtInt; }
void setUConst(unsigned int u) { uConst = u; type = EbtUInt; }
void setFConst(float f) {fConst = f; type = EbtFloat; } void setFConst(float f) {fConst = f; type = EbtFloat; }
void setBConst(bool b) {bConst = b; type = EbtBool; } void setBConst(bool b) {bConst = b; type = EbtBool; }
int getIConst() { return iConst; }
float getFConst() { return fConst; }
bool getBConst() { return bConst; }
int getIConst() const { return iConst; } int getIConst() const { return iConst; }
int getUConst() const { return uConst; }
float getFConst() const { return fConst; } float getFConst() const { return fConst; }
bool getBConst() const { return bConst; } bool getBConst() const { return bConst; }
...@@ -34,6 +33,11 @@ public: ...@@ -34,6 +33,11 @@ public:
return i == iConst; return i == iConst;
} }
bool operator==(const unsigned int u) const
{
return u == uConst;
}
bool operator==(const float f) const bool operator==(const float f) const
{ {
return f == fConst; return f == fConst;
...@@ -52,6 +56,8 @@ public: ...@@ -52,6 +56,8 @@ public:
switch (type) { switch (type) {
case EbtInt: case EbtInt:
return constant.iConst == iConst; return constant.iConst == iConst;
case EbtUInt:
return constant.uConst == uConst;
case EbtFloat: case EbtFloat:
return constant.fConst == fConst; return constant.fConst == fConst;
case EbtBool: case EbtBool:
...@@ -66,6 +72,11 @@ public: ...@@ -66,6 +72,11 @@ public:
return !operator==(i); return !operator==(i);
} }
bool operator!=(const unsigned int u) const
{
return !operator==(u);
}
bool operator!=(const float f) const bool operator!=(const float f) const
{ {
return !operator==(f); return !operator==(f);
...@@ -87,6 +98,8 @@ public: ...@@ -87,6 +98,8 @@ public:
switch (type) { switch (type) {
case EbtInt: case EbtInt:
return iConst > constant.iConst; return iConst > constant.iConst;
case EbtUInt:
return uConst > constant.uConst;
case EbtFloat: case EbtFloat:
return fConst > constant.fConst; return fConst > constant.fConst;
default: default:
...@@ -100,6 +113,8 @@ public: ...@@ -100,6 +113,8 @@ public:
switch (type) { switch (type) {
case EbtInt: case EbtInt:
return iConst < constant.iConst; return iConst < constant.iConst;
case EbtUInt:
return uConst < constant.uConst;
case EbtFloat: case EbtFloat:
return fConst < constant.fConst; return fConst < constant.fConst;
default: default:
...@@ -113,6 +128,7 @@ public: ...@@ -113,6 +128,7 @@ public:
assert(type == constant.type); assert(type == constant.type);
switch (type) { switch (type) {
case EbtInt: returnValue.setIConst(iConst + constant.iConst); break; case EbtInt: returnValue.setIConst(iConst + constant.iConst); break;
case EbtUInt: returnValue.setUConst(uConst + constant.uConst); break;
case EbtFloat: returnValue.setFConst(fConst + constant.fConst); break; case EbtFloat: returnValue.setFConst(fConst + constant.fConst); break;
default: assert(false && "Default missing"); default: assert(false && "Default missing");
} }
...@@ -126,6 +142,7 @@ public: ...@@ -126,6 +142,7 @@ public:
assert(type == constant.type); assert(type == constant.type);
switch (type) { switch (type) {
case EbtInt: returnValue.setIConst(iConst - constant.iConst); break; case EbtInt: returnValue.setIConst(iConst - constant.iConst); break;
case EbtUInt: returnValue.setUConst(uConst - constant.uConst); break;
case EbtFloat: returnValue.setFConst(fConst - constant.fConst); break; case EbtFloat: returnValue.setFConst(fConst - constant.fConst); break;
default: assert(false && "Default missing"); default: assert(false && "Default missing");
} }
...@@ -139,6 +156,7 @@ public: ...@@ -139,6 +156,7 @@ public:
assert(type == constant.type); assert(type == constant.type);
switch (type) { switch (type) {
case EbtInt: returnValue.setIConst(iConst * constant.iConst); break; case EbtInt: returnValue.setIConst(iConst * constant.iConst); break;
case EbtUInt: returnValue.setUConst(uConst * constant.uConst); break;
case EbtFloat: returnValue.setFConst(fConst * constant.fConst); break; case EbtFloat: returnValue.setFConst(fConst * constant.fConst); break;
default: assert(false && "Default missing"); default: assert(false && "Default missing");
} }
...@@ -152,6 +170,7 @@ public: ...@@ -152,6 +170,7 @@ public:
assert(type == constant.type); assert(type == constant.type);
switch (type) { switch (type) {
case EbtInt: returnValue.setIConst(iConst % constant.iConst); break; case EbtInt: returnValue.setIConst(iConst % constant.iConst); break;
case EbtUInt: returnValue.setUConst(uConst % constant.uConst); break;
default: assert(false && "Default missing"); default: assert(false && "Default missing");
} }
...@@ -164,6 +183,7 @@ public: ...@@ -164,6 +183,7 @@ public:
assert(type == constant.type); assert(type == constant.type);
switch (type) { switch (type) {
case EbtInt: returnValue.setIConst(iConst >> constant.iConst); break; case EbtInt: returnValue.setIConst(iConst >> constant.iConst); break;
case EbtUInt: returnValue.setUConst(uConst >> constant.uConst); break;
default: assert(false && "Default missing"); default: assert(false && "Default missing");
} }
...@@ -176,6 +196,7 @@ public: ...@@ -176,6 +196,7 @@ public:
assert(type == constant.type); assert(type == constant.type);
switch (type) { switch (type) {
case EbtInt: returnValue.setIConst(iConst << constant.iConst); break; case EbtInt: returnValue.setIConst(iConst << constant.iConst); break;
case EbtUInt: returnValue.setUConst(uConst << constant.uConst); break;
default: assert(false && "Default missing"); default: assert(false && "Default missing");
} }
...@@ -188,6 +209,7 @@ public: ...@@ -188,6 +209,7 @@ public:
assert(type == constant.type); assert(type == constant.type);
switch (type) { switch (type) {
case EbtInt: returnValue.setIConst(iConst & constant.iConst); break; case EbtInt: returnValue.setIConst(iConst & constant.iConst); break;
case EbtUInt: returnValue.setUConst(uConst & constant.uConst); break;
default: assert(false && "Default missing"); default: assert(false && "Default missing");
} }
...@@ -200,6 +222,7 @@ public: ...@@ -200,6 +222,7 @@ public:
assert(type == constant.type); assert(type == constant.type);
switch (type) { switch (type) {
case EbtInt: returnValue.setIConst(iConst | constant.iConst); break; case EbtInt: returnValue.setIConst(iConst | constant.iConst); break;
case EbtUInt: returnValue.setUConst(uConst | constant.uConst); break;
default: assert(false && "Default missing"); default: assert(false && "Default missing");
} }
...@@ -212,6 +235,7 @@ public: ...@@ -212,6 +235,7 @@ public:
assert(type == constant.type); assert(type == constant.type);
switch (type) { switch (type) {
case EbtInt: returnValue.setIConst(iConst ^ constant.iConst); break; case EbtInt: returnValue.setIConst(iConst ^ constant.iConst); break;
case EbtUInt: returnValue.setUConst(uConst ^ constant.uConst); break;
default: assert(false && "Default missing"); default: assert(false && "Default missing");
} }
...@@ -247,6 +271,7 @@ private: ...@@ -247,6 +271,7 @@ private:
union { union {
int iConst; // used for ivec, scalar ints int iConst; // used for ivec, scalar ints
unsigned int uConst; // used for uvec, scalar uints
bool bConst; // used for bvec, scalar bools bool bConst; // used for bvec, scalar bools
float fConst; // used for vec, mat, scalar floats float fConst; // used for vec, mat, scalar floats
} ; } ;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment