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