const TType &leftType = left->getType();\r
const TType &rightType = right->getType();\r
const TType &resultType = node->getType();\r
- \r
+\r
switch(node->getOp())\r
{\r
case EOpAssign:\r
{\r
TIntermTyped *argument = arguments[i]->getAsTyped();\r
TIntermTyped *out = arg[i]->getAsTyped();\r
- \r
+\r
if(argument->getQualifier() == EvqOut ||\r
argument->getQualifier() == EvqInOut)\r
{\r
Instruction *bias = emit(sw::Shader::OPCODE_MOV, &proj, arg[textureFunction.offset ? 3 : 2]);\r
bias->dst.mask = 0x8;\r
\r
- Instruction *tex = emit(textureFunction.offset ? sw::Shader::OPCODE_TEXOFFSET : sw::Shader::OPCODE_TEX, \r
+ Instruction *tex = emit(textureFunction.offset ? sw::Shader::OPCODE_TEXOFFSET : sw::Shader::OPCODE_TEX,\r
result, &proj, arg[0], offset); // FIXME: Implement an efficient TEXLDB instruction\r
tex->bias = true;\r
}\r
TIntermTyped *condition = node->getCondition();\r
TIntermTyped *expression = node->getExpression();\r
TIntermNode *body = node->getBody();\r
- \r
+\r
if(node->getType() == ELoopDoWhile)\r
{\r
Temporary iterate(this);\r
{\r
return registers * type.registerSize();\r
}\r
- \r
+\r
UNREACHABLE(0);\r
return 0;\r
}\r
for(TFieldList::const_iterator field = fields.begin(); field != fields.end(); field++)\r
{\r
const TType &fieldType = *((*field)->type());\r
- \r
+\r
if(fieldType.totalRegisterCount() <= registers)\r
{\r
registers -= fieldType.totalRegisterCount();\r
{\r
return registerSize(type, 0);\r
}\r
- \r
+\r
UNREACHABLE(0);\r
return 0;\r
}\r
if(binary && binary->getOp() == EOpIndexIndirect && dst->isScalar())\r
{\r
Instruction *insert = new Instruction(sw::Shader::OPCODE_INSERT);\r
- \r
+\r
Temporary address(this);\r
lvalue(insert->dst, address, dst);\r
\r
for(int offset = 0; offset < dst->totalRegisterCount(); offset++)\r
{\r
Instruction *mov = new Instruction(sw::Shader::OPCODE_MOV);\r
- \r
+\r
Temporary address(this);\r
int swizzle = lvalue(mov->dst, address, dst);\r
mov->dst.index += offset;\r
if(left->isRegister())\r
{\r
int leftMask = dst.mask;\r
- \r
+\r
dst.mask = 1;\r
while((leftMask & dst.mask) == 0)\r
{\r
\r
int element = swizzleElement(leftSwizzle, rightIndex);\r
dst.mask = 1 << element;\r
- \r
+\r
return element;\r
}\r
else if(left->isArray() || left->isMatrix())\r
rightMask = rightMask | (1 << element);\r
swizzle = swizzle | swizzleElement(leftSwizzle, i) << (element * 2);\r
}\r
- \r
+\r
dst.mask = leftMask & rightMask;\r
\r
return swizzle;\r
case EvqVertexOut: return sw::Shader::PARAMETER_OUTPUT;\r
case EvqFragmentIn: return sw::Shader::PARAMETER_INPUT;\r
case EvqInvariantVaryingIn: return sw::Shader::PARAMETER_INPUT; // FIXME: Guarantee invariance at the backend\r
- case EvqInvariantVaryingOut: return sw::Shader::PARAMETER_OUTPUT; // FIXME: Guarantee invariance at the backend \r
+ case EvqInvariantVaryingOut: return sw::Shader::PARAMETER_OUTPUT; // FIXME: Guarantee invariance at the backend\r
case EvqSmooth: return sw::Shader::PARAMETER_OUTPUT;\r
case EvqFlat: return sw::Shader::PARAMETER_OUTPUT;\r
case EvqCentroidOut: return sw::Shader::PARAMETER_OUTPUT;\r
\r
return 0;\r
}\r
- \r
+\r
int OutputASM::temporaryRegister(TIntermTyped *temporary)\r
{\r
return allocate(temporaries, temporary);\r
const TType &type = varying->getType();\r
const char *name = varying->getAsSymbolNode()->getSymbol().c_str();\r
VaryingList &activeVaryings = shaderObject->varyings;\r
- \r
+\r
// Check if this varying has been declared before without having a register assigned\r
for(VaryingList::iterator v = activeVaryings.begin(); v != activeVaryings.end(); v++)\r
{\r
return;\r
}\r
}\r
- \r
+\r
activeVaryings.push_back(glsl::Varying(glVariableType(type), name, varying->getArraySize(), reg, 0));\r
}\r
}\r
return matrix->getSecondarySize();\r
}\r
\r
- // Returns ~0 if no loop count could be determined\r
+ // Returns ~0u if no loop count could be determined\r
unsigned int OutputASM::loopCount(TIntermLoop *node)\r
{\r
// Parse loops of the form:\r
else UNIMPLEMENTED(); // Falls through\r
}\r
\r
- return ~0;\r
+ return ~0u;\r
}\r
\r
bool DetectLoopDiscontinuity::traverse(TIntermNode *node)\r
{\r
loopDepth = 0;\r
loopDiscontinuity = false;\r
- \r
+\r
node->traverse(this);\r
- \r
+\r
return loopDiscontinuity;\r
}\r
\r
{\r
return true;\r
}\r
- \r
+\r
switch(node->getFlowOp())\r
{\r
case EOpKill:\r
unsigned int streamOffset = 0;\r
\r
char *output = nullptr;\r
- \r
+\r
if(vertexBuffer)\r
{\r
output = (char*)vertexBuffer->map(attribute, attribute.typeSize() * count, &streamOffset);\r
if(!output)\r
{\r
ERR("Failed to map vertex buffer.");\r
- return UINT_MAX;\r
+ return ~0u;\r
}\r
\r
const char *input = nullptr;\r
}\r
\r
mStreamingBuffer->reserveRequiredSpace();\r
- \r
+\r
// Perform the vertex data translations\r
for(int i = 0; i < MAX_VERTEX_ATTRIBS; i++)\r
{\r
{\r
unsigned int streamOffset = writeAttributeData(mStreamingBuffer, start, count, attribs[i]);\r
\r
- if(streamOffset == UINT_MAX)\r
+ if(streamOffset == ~0u)\r
{\r
return GL_OUT_OF_MEMORY;\r
}\r
if(mVertexBuffer)\r
{\r
float *vector = (float*)mVertexBuffer->lock(sw::PUBLIC);\r
- \r
+\r
vector[0] = x;\r
vector[1] = y;\r
vector[2] = z;\r
{\r
// We can use a private lock because we never overwrite the content\r
mapPtr = (char*)mVertexBuffer->lock(sw::PRIVATE) + mWritePosition;\r
- \r
+\r
*offset = mWritePosition;\r
mWritePosition += requiredSpace;\r
}\r
unsigned int streamOffset = 0;\r
\r
char *output = nullptr;\r
- \r
+\r
if(vertexBuffer)\r
{\r
output = (char*)vertexBuffer->map(attribute, attribute.typeSize() * count, &streamOffset);\r
if(!output)\r
{\r
ERR("Failed to map vertex buffer.");\r
- return UINT_MAX;\r
+ return ~0u;\r
}\r
\r
const char *input = nullptr;\r
}\r
\r
mStreamingBuffer->reserveRequiredSpace();\r
- \r
+\r
// Perform the vertex data translations\r
for(int i = 0; i < MAX_VERTEX_ATTRIBS; i++)\r
{\r
{\r
unsigned int streamOffset = writeAttributeData(mStreamingBuffer, start, count, attribs[i]);\r
\r
- if(streamOffset == UINT_MAX)\r
+ if(streamOffset == ~0u)\r
{\r
return GL_OUT_OF_MEMORY;\r
}\r
if(mVertexBuffer)\r
{\r
float *vector = (float*)mVertexBuffer->lock(sw::PUBLIC);\r
- \r
+\r
vector[0] = x;\r
vector[1] = y;\r
vector[2] = z;\r
unsigned int streamOffset = 0;\r
\r
char *output = nullptr;\r
- \r
+\r
if(vertexBuffer)\r
{\r
output = (char*)vertexBuffer->map(attribute, attribute.typeSize() * count, &streamOffset);\r
if(!output)\r
{\r
ERR("Failed to map vertex buffer.");\r
- return UINT_MAX;\r
+ return ~0u;\r
}\r
\r
const char *input = nullptr;\r
}\r
\r
mStreamingBuffer->reserveRequiredSpace();\r
- \r
+\r
// Perform the vertex data translations\r
for(int i = 0; i < MAX_VERTEX_ATTRIBS; i++)\r
{\r
{\r
unsigned int streamOffset = writeAttributeData(mStreamingBuffer, firstVertexIndex, isInstanced ? 1 : count, attrib);\r
\r
- if(streamOffset == UINT_MAX)\r
+ if(streamOffset == ~0u)\r
{\r
return GL_OUT_OF_MEMORY;\r
}\r
if(mVertexBuffer)\r
{\r
float *vector = (float*)mVertexBuffer->lock(sw::PUBLIC);\r
- \r
+\r
vector[0] = x;\r
vector[1] = y;\r
vector[2] = z;\r