mesa: no longer need Writemask field in GLSL IR nodes
The Swizzle and Size fields carry all the info we need now.
This commit is contained in:
parent
3a7ed9779b
commit
80d6379722
|
@ -480,7 +480,6 @@ new_node3(slang_ir_opcode op,
|
|||
n->Children[0] = c0;
|
||||
n->Children[1] = c1;
|
||||
n->Children[2] = c2;
|
||||
n->Writemask = WRITEMASK_XYZW;
|
||||
n->InstLocation = -1;
|
||||
}
|
||||
return n;
|
||||
|
@ -3048,7 +3047,6 @@ _slang_gen_assignment(slang_assemble_ctx * A, slang_operation *oper)
|
|||
rhs = _slang_gen_swizzle(rhs, newSwizzle);
|
||||
}
|
||||
n = new_node2(IR_COPY, lhs, rhs);
|
||||
n->Writemask = writemask;
|
||||
return n;
|
||||
}
|
||||
else {
|
||||
|
@ -3205,8 +3203,6 @@ _slang_gen_array_element(slang_assemble_ctx * A, slang_operation *oper)
|
|||
SWIZZLE_NIL,
|
||||
SWIZZLE_NIL);
|
||||
n = _slang_gen_swizzle(n, swizzle);
|
||||
/*n->Store = _slang_clone_ir_storage_swz(n->Store, */
|
||||
n->Writemask = WRITEMASK_X << index;
|
||||
}
|
||||
assert(n->Store);
|
||||
return n;
|
||||
|
|
|
@ -257,8 +257,7 @@ fix_swizzle(GLuint swizzle)
|
|||
* Convert IR storage to an instruction dst register.
|
||||
*/
|
||||
static void
|
||||
storage_to_dst_reg(struct prog_dst_register *dst, const slang_ir_storage *st,
|
||||
GLuint writemask)
|
||||
storage_to_dst_reg(struct prog_dst_register *dst, const slang_ir_storage *st)
|
||||
{
|
||||
const GLint size = st->Size;
|
||||
GLint index = st->Index;
|
||||
|
@ -280,23 +279,29 @@ storage_to_dst_reg(struct prog_dst_register *dst, const slang_ir_storage *st,
|
|||
assert(size >= 1);
|
||||
assert(size <= 4);
|
||||
|
||||
#if 0
|
||||
if (size == 1) {
|
||||
GLuint comp = GET_SWZ(swizzle, 0);
|
||||
assert(comp < 4);
|
||||
dst->WriteMask = WRITEMASK_X << comp;
|
||||
}
|
||||
else {
|
||||
dst->WriteMask = writemask;
|
||||
}
|
||||
#elif 1
|
||||
if (swizzle != SWIZZLE_XYZW) {
|
||||
dst->WriteMask = swizzle_to_writemask(swizzle);
|
||||
}
|
||||
else {
|
||||
GLuint writemask;
|
||||
switch (size) {
|
||||
case 1:
|
||||
writemask = WRITEMASK_X << GET_SWZ(st->Swizzle, 0);
|
||||
break;
|
||||
case 2:
|
||||
writemask = WRITEMASK_XY;
|
||||
break;
|
||||
case 3:
|
||||
writemask = WRITEMASK_XYZ;
|
||||
break;
|
||||
case 4:
|
||||
writemask = WRITEMASK_XYZW;
|
||||
break;
|
||||
default:
|
||||
; /* error would have been caught above */
|
||||
}
|
||||
dst->WriteMask = writemask;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -422,27 +427,8 @@ emit_instruction(slang_emit_info *emitInfo,
|
|||
inst->Opcode = opcode;
|
||||
inst->BranchTarget = -1; /* invalid */
|
||||
|
||||
if (dst) {
|
||||
GLuint writemask;
|
||||
switch (dst->Size) {
|
||||
case 4:
|
||||
writemask = WRITEMASK_XYZW;
|
||||
break;
|
||||
case 3:
|
||||
writemask = WRITEMASK_XYZ;
|
||||
break;
|
||||
case 2:
|
||||
writemask = WRITEMASK_XY;
|
||||
break;
|
||||
case 1:
|
||||
writemask = WRITEMASK_X << GET_SWZ(dst->Swizzle, 0);
|
||||
break;
|
||||
default:
|
||||
writemask = WRITEMASK_XYZW;
|
||||
assert(0);
|
||||
}
|
||||
storage_to_dst_reg(&inst->DstReg, dst, writemask);
|
||||
}
|
||||
if (dst)
|
||||
storage_to_dst_reg(&inst->DstReg, dst);
|
||||
|
||||
if (src1)
|
||||
storage_to_src_reg(&inst->SrcReg[0], src1);
|
||||
|
@ -1245,14 +1231,7 @@ emit_copy(slang_emit_info *emitInfo, slang_ir_node *n)
|
|||
/* fixup the previous instruction (which stored the RHS result) */
|
||||
assert(n->Children[0]->Store->Index >= 0);
|
||||
|
||||
/* use tighter writemask when possible */
|
||||
#if 0
|
||||
if (n->Writemask == WRITEMASK_XYZW) {
|
||||
n->Writemask = inst->DstReg.WriteMask;
|
||||
printf("Narrow writemask to 0x%x\n", n->Writemask);
|
||||
}
|
||||
#endif
|
||||
storage_to_dst_reg(&inst->DstReg, n->Children[0]->Store, n->Writemask);
|
||||
storage_to_dst_reg(&inst->DstReg, n->Children[0]->Store);
|
||||
return inst;
|
||||
}
|
||||
else
|
||||
|
@ -1263,7 +1242,6 @@ emit_copy(slang_emit_info *emitInfo, slang_ir_node *n)
|
|||
slang_ir_storage dstStore = *n->Children[0]->Store;
|
||||
slang_ir_storage srcStore = *n->Children[1]->Store;
|
||||
GLint size = srcStore.Size;
|
||||
ASSERT(n->Children[0]->Writemask == WRITEMASK_XYZW);
|
||||
ASSERT(n->Children[1]->Store->Swizzle == SWIZZLE_NOOP);
|
||||
dstStore.Size = 4;
|
||||
srcStore.Size = 4;
|
||||
|
@ -1718,10 +1696,7 @@ move_block(slang_emit_info *emitInfo,
|
|||
/* move matrix/struct etc (block of registers) */
|
||||
slang_ir_storage dstStore = *dst;
|
||||
slang_ir_storage srcStore = *src;
|
||||
//GLint size = srcStore.Size;
|
||||
/*ASSERT(n->Children[0]->Writemask == WRITEMASK_XYZW);
|
||||
ASSERT(n->Children[1]->Store->Swizzle == SWIZZLE_NOOP);
|
||||
*/
|
||||
|
||||
dstStore.Size = 4;
|
||||
srcStore.Size = 4;
|
||||
while (size >= 4) {
|
||||
|
|
|
@ -243,22 +243,6 @@ _slang_free_ir_tree(slang_ir_node *n)
|
|||
}
|
||||
|
||||
|
||||
|
||||
static const char *
|
||||
writemask_string(GLuint writemask)
|
||||
{
|
||||
static char s[6];
|
||||
GLuint i, j = 0;
|
||||
s[j++] = '.';
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (writemask & (1 << i))
|
||||
s[j++] = "xyzw"[i];
|
||||
}
|
||||
s[j] = 0;
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
static const char *
|
||||
storage_string(const slang_ir_storage *st)
|
||||
{
|
||||
|
@ -332,7 +316,7 @@ _slang_print_ir_tree(const slang_ir_node *n, int indent)
|
|||
_slang_print_ir_tree(n->Children[0], indent + 3);
|
||||
break;
|
||||
case IR_COPY:
|
||||
printf("COPY (writemask = %s)\n", writemask_string(n->Writemask));
|
||||
printf("COPY\n");
|
||||
_slang_print_ir_tree(n->Children[0], indent+3);
|
||||
_slang_print_ir_tree(n->Children[1], indent+3);
|
||||
break;
|
||||
|
|
|
@ -173,7 +173,6 @@ typedef struct slang_ir_node_
|
|||
|
||||
/** special fields depending on Opcode: */
|
||||
const char *Field; /**< If Opcode == IR_FIELD */
|
||||
GLuint Writemask; /**< If Opcode == IR_MOVE */
|
||||
GLfloat Value[4]; /**< If Opcode == IR_FLOAT */
|
||||
slang_variable *Var; /**< If Opcode == IR_VAR or IR_VAR_DECL */
|
||||
struct slang_ir_node_ *List; /**< For various linked lists */
|
||||
|
|
Loading…
Reference in New Issue