Commit 31ad2aa7 by Nicolas Capens

Rename EvqConst to EvqConstExpr

In GLSL ES a variable declared const is a compile-time constant, and thus a constant expression. Parameters declared const are read-only but not compile-time constant. Bug 19511934 Change-Id: I6d02062ca62c4185a3384b31a4d3ce8dfcc86b35 Reviewed-on: https://swiftshader-review.googlesource.com/2441Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <capn@google.com> Tested-by: 's avatarNicolas Capens <capn@google.com>
parent cc1e9962
......@@ -111,7 +111,7 @@ enum TQualifier : unsigned char
{
EvqTemporary, // For temporaries (within a function), read/write
EvqGlobal, // For globals read/write
EvqConst, // User defined constants and non-output parameters in functions
EvqConstExpr, // User defined constants
EvqAttribute, // Readonly
EvqVaryingIn, // readonly, fragment shaders only
EvqVaryingOut, // vertex shaders only read/write
......@@ -174,7 +174,7 @@ inline const char *getQualifierString(TQualifier qualifier)
{
case EvqTemporary: return "Temporary"; break;
case EvqGlobal: return "Global"; break;
case EvqConst: return "const"; break;
case EvqConstExpr: return "const"; break;
case EvqConstReadOnly: return "const"; break;
case EvqAttribute: return "attribute"; break;
case EvqVaryingIn: return "varying"; break;
......
......@@ -425,7 +425,7 @@ TIntermNode* TIntermediate::addSelection(TIntermTyped* cond, TIntermNodePair nod
TIntermTyped* TIntermediate::addComma(TIntermTyped* left, TIntermTyped* right, TSourceLoc line)
{
if (left->getType().getQualifier() == EvqConst && right->getType().getQualifier() == EvqConst) {
if (left->getType().getQualifier() == EvqConstExpr && right->getType().getQualifier() == EvqConstExpr) {
return right;
} else {
TIntermTyped *commaAggregate = growAggregate(left, right, line);
......@@ -498,7 +498,7 @@ TIntermTyped* TIntermediate::addSwizzle(TVectorFields& fields, TSourceLoc line)
for (int i = 0; i < fields.num; i++) {
unionArray = new ConstantUnion[1];
unionArray->setIConst(fields.offsets[i]);
constIntNode = addConstantUnion(unionArray, TType(EbtInt, EbpUndefined, EvqConst), line);
constIntNode = addConstantUnion(unionArray, TType(EbtInt, EbpUndefined, EvqConstExpr), line);
sequenceVector.push_back(constIntNode);
}
......@@ -652,7 +652,7 @@ bool TIntermUnary::promote(TInfoSink&)
setType(operand->getType());
// Unary operations results in temporary variables unless const.
if (operand->getQualifier() != EvqConst) {
if (operand->getQualifier() != EvqConstExpr) {
getTypePointer()->setQualifier(EvqTemporary);
}
......@@ -692,7 +692,7 @@ bool TIntermBinary::promote(TInfoSink& infoSink)
// Binary operations results in temporary variables unless both
// operands are const.
if (left->getQualifier() != EvqConst || right->getQualifier() != EvqConst) {
if (left->getQualifier() != EvqConstExpr || right->getQualifier() != EvqConstExpr) {
getTypePointer()->setQualifier(EvqTemporary);
}
......@@ -1069,13 +1069,13 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, TIntermTyped* constantNod
assert(objectSize == 1);
tempConstArray = new ConstantUnion[1];
tempConstArray->setBConst(*unionArray < *rightUnionArray);
returnType = TType(EbtBool, EbpUndefined, EvqConst);
returnType = TType(EbtBool, EbpUndefined, EvqConstExpr);
break;
case EOpGreaterThan:
assert(objectSize == 1);
tempConstArray = new ConstantUnion[1];
tempConstArray->setBConst(*unionArray > *rightUnionArray);
returnType = TType(EbtBool, EbpUndefined, EvqConst);
returnType = TType(EbtBool, EbpUndefined, EvqConstExpr);
break;
case EOpLessThanEqual:
{
......@@ -1084,7 +1084,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, TIntermTyped* constantNod
constant.setBConst(*unionArray > *rightUnionArray);
tempConstArray = new ConstantUnion[1];
tempConstArray->setBConst(!constant.getBConst());
returnType = TType(EbtBool, EbpUndefined, EvqConst);
returnType = TType(EbtBool, EbpUndefined, EvqConstExpr);
break;
}
case EOpGreaterThanEqual:
......@@ -1094,7 +1094,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, TIntermTyped* constantNod
constant.setBConst(*unionArray < *rightUnionArray);
tempConstArray = new ConstantUnion[1];
tempConstArray->setBConst(!constant.getBConst());
returnType = TType(EbtBool, EbpUndefined, EvqConst);
returnType = TType(EbtBool, EbpUndefined, EvqConstExpr);
break;
}
......@@ -1119,7 +1119,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, TIntermTyped* constantNod
tempConstArray->setBConst(false);
}
tempNode = new TIntermConstantUnion(tempConstArray, TType(EbtBool, EbpUndefined, EvqConst));
tempNode = new TIntermConstantUnion(tempConstArray, TType(EbtBool, EbpUndefined, EvqConstExpr));
tempNode->setLine(getLine());
return tempNode;
......@@ -1145,7 +1145,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, TIntermTyped* constantNod
tempConstArray->setBConst(false);
}
tempNode = new TIntermConstantUnion(tempConstArray, TType(EbtBool, EbpUndefined, EvqConst));
tempNode = new TIntermConstantUnion(tempConstArray, TType(EbtBool, EbpUndefined, EvqConstExpr));
tempNode->setLine(getLine());
return tempNode;
......
......@@ -49,7 +49,7 @@ namespace glsl
class Constant : public TIntermConstantUnion
{
public:
Constant(float x, float y, float z, float w) : TIntermConstantUnion(constants, TType(EbtFloat, EbpHigh, EvqConst, 4, false, false))
Constant(float x, float y, float z, float w) : TIntermConstantUnion(constants, TType(EbtFloat, EbpHigh, EvqConstExpr, 4, false, false))
{
constants[0].setFConst(x);
constants[1].setFConst(y);
......@@ -57,12 +57,12 @@ namespace glsl
constants[3].setFConst(w);
}
Constant(bool b) : TIntermConstantUnion(constants, TType(EbtBool, EbpHigh, EvqConst, 1, false, false))
Constant(bool b) : TIntermConstantUnion(constants, TType(EbtBool, EbpHigh, EvqConstExpr, 1, false, false))
{
constants[0].setBConst(b);
}
Constant(int i) : TIntermConstantUnion(constants, TType(EbtInt, EbpHigh, EvqConst, 1, false, false))
Constant(int i) : TIntermConstantUnion(constants, TType(EbtInt, EbpHigh, EvqConstExpr, 1, false, false))
{
constants[0].setIConst(i);
}
......@@ -1467,7 +1467,7 @@ namespace glsl
parameter.type = registerType(arg);
if(arg->getQualifier() == EvqConst)
if(arg->getQualifier() == EvqConstExpr)
{
int component = componentCount(type, index);
ConstantUnion *constants = arg->getAsConstantUnion()->getUnionArrayPointer();
......@@ -1793,7 +1793,7 @@ namespace glsl
{
case EvqTemporary: return sw::Shader::PARAMETER_TEMP;
case EvqGlobal: return sw::Shader::PARAMETER_TEMP;
case EvqConst: return sw::Shader::PARAMETER_FLOAT4LITERAL; // All converted to float
case EvqConstExpr: return sw::Shader::PARAMETER_FLOAT4LITERAL; // All converted to float
case EvqAttribute: return sw::Shader::PARAMETER_INPUT;
case EvqVaryingIn: return sw::Shader::PARAMETER_INPUT;
case EvqVaryingOut: return sw::Shader::PARAMETER_OUTPUT;
......@@ -1828,7 +1828,7 @@ namespace glsl
{
case EvqTemporary: return temporaryRegister(operand);
case EvqGlobal: return temporaryRegister(operand);
case EvqConst: UNREACHABLE();
case EvqConstExpr: UNREACHABLE();
case EvqAttribute: return attributeRegister(operand);
case EvqVaryingIn: return varyingRegister(operand);
case EvqVaryingOut: return varyingRegister(operand);
......
......@@ -311,7 +311,7 @@ bool TParseContext::lValueErrorCheck(int line, const char* op, TIntermTyped* nod
const char* message = 0;
switch (node->getQualifier()) {
case EvqConst: message = "can't modify a const"; break;
case EvqConstExpr: message = "can't modify a const"; break;
case EvqConstReadOnly: message = "can't modify a const"; break;
case EvqAttribute: message = "can't modify an attribute"; break;
case EvqUniform: message = "can't modify a uniform"; break;
......@@ -375,7 +375,7 @@ bool TParseContext::lValueErrorCheck(int line, const char* op, TIntermTyped* nod
//
bool TParseContext::constErrorCheck(TIntermTyped* node)
{
if (node->getQualifier() == EvqConst)
if (node->getQualifier() == EvqConstExpr)
return false;
error(node->getLine(), "constant expression required", "");
......@@ -485,14 +485,14 @@ bool TParseContext::constructorErrorCheck(int line, TIntermNode* node, TFunction
overFull = true;
if (op != EOpConstructStruct && !type->isArray() && size >= type->getObjectSize())
full = true;
if (param.type->getQualifier() != EvqConst)
if (param.type->getQualifier() != EvqConstExpr)
constType = false;
if (param.type->isArray())
arrayArg = true;
}
if (constType)
type->setQualifier(EvqConst);
type->setQualifier(EvqConstExpr);
if (type->isArray() && type->getArraySize() != function.getParamCount()) {
error(line, "array constructor needs one argument per array element", "constructor");
......@@ -698,7 +698,7 @@ bool TParseContext::arraySizeErrorCheck(int line, TIntermTyped* expr, int& size)
//
bool TParseContext::arrayQualifierErrorCheck(int line, TPublicType type)
{
if ((type.qualifier == EvqAttribute) || (type.qualifier == EvqConst)) {
if ((type.qualifier == EvqAttribute) || (type.qualifier == EvqConstExpr)) {
error(line, "cannot declare arrays of this qualifier", TType(type).getCompleteString().c_str());
return true;
}
......@@ -848,7 +848,7 @@ bool TParseContext::arraySetMaxSize(TIntermSymbol *node, TType* type, int size,
//
bool TParseContext::nonInitConstErrorCheck(int line, TString& identifier, TPublicType& type, bool array)
{
if (type.qualifier == EvqConst)
if (type.qualifier == EvqConstExpr)
{
// Make the qualifier make sense.
type.qualifier = EvqTemporary;
......@@ -900,16 +900,16 @@ bool TParseContext::nonInitErrorCheck(int line, TString& identifier, TPublicType
bool TParseContext::paramErrorCheck(int line, TQualifier qualifier, TQualifier paramQualifier, TType* type)
{
if (qualifier != EvqConst && qualifier != EvqTemporary) {
if (qualifier != EvqConstExpr && qualifier != EvqTemporary) {
error(line, "qualifier not allowed on function parameter", getQualifierString(qualifier));
return true;
}
if (qualifier == EvqConst && paramQualifier != EvqIn) {
if (qualifier == EvqConstExpr && paramQualifier != EvqIn) {
error(line, "qualifier not allowed with ", getQualifierString(qualifier), getQualifierString(paramQualifier));
return true;
}
if (qualifier == EvqConst)
if (qualifier == EvqConstExpr)
type->setQualifier(EvqConstReadOnly);
else
type->setQualifier(paramQualifier);
......@@ -1024,7 +1024,7 @@ bool TParseContext::executeInitializer(TSourceLoc line, TString& identifier, TPu
// identifier must be of type constant, a global, or a temporary
//
TQualifier qualifier = variable->getType().getQualifier();
if ((qualifier != EvqTemporary) && (qualifier != EvqGlobal) && (qualifier != EvqConst)) {
if ((qualifier != EvqTemporary) && (qualifier != EvqGlobal) && (qualifier != EvqConstExpr)) {
error(line, " cannot initialize this type of qualifier ", variable->getType().getQualifierString());
return true;
}
......@@ -1032,7 +1032,7 @@ bool TParseContext::executeInitializer(TSourceLoc line, TString& identifier, TPu
// test for and propagate constant
//
if (qualifier == EvqConst) {
if (qualifier == EvqConstExpr) {
if (qualifier != initializer->getType().getQualifier()) {
std::stringstream extraInfoStream;
extraInfoStream << "'" << variable->getType().getCompleteString() << "'";
......@@ -1071,7 +1071,7 @@ bool TParseContext::executeInitializer(TSourceLoc line, TString& identifier, TPu
}
}
if (qualifier != EvqConst) {
if (qualifier != EvqConstExpr) {
TIntermSymbol* intermSymbol = intermediate.addSymbol(variable->getUniqueId(), variable->getName(), variable->getType(), line);
intermNode = intermediate.addAssign(EOpInitialize, intermSymbol, initializer, line);
if (intermNode == 0) {
......
......@@ -335,7 +335,7 @@ public:
bool insertConstInt(ESymbolLevel level, const char *name, int value)
{
TVariable *constant = new TVariable(NewPoolTString(name), TType(EbtInt, EbpUndefined, EvqConst, 1));
TVariable *constant = new TVariable(NewPoolTString(name), TType(EbtInt, EbpUndefined, EvqConstExpr, 1));
constant->getConstPointer()->setIConst(value);
return insert(level, *constant);
}
......
......@@ -50,7 +50,7 @@ public:
// Only constants and loop indices are allowed in a
// constant index expression.
if (mValid) {
mValid = (symbol->getQualifier() == EvqConst) ||
mValid = (symbol->getQualifier() == EvqConstExpr) ||
IsLoopIndex(symbol, mLoopStack);
}
}
......
......@@ -67,7 +67,7 @@ bool TConstTraverser::visitBinary(Visit visit, TIntermBinary* node)
{
TQualifier qualifier = node->getType().getQualifier();
if (qualifier != EvqConst) {
if (qualifier != EvqConstExpr) {
TString buf;
buf.append("'constructor' : assigning non-constant to ");
buf.append(type.getCompleteString());
......
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