summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaciej Cencora <[email protected]>2009-07-11 15:09:20 +0200
committerMaciej Cencora <[email protected]>2009-07-13 19:28:13 +0200
commit4eff323731b0d65e1f2817e96435807418d833cc (patch)
tree751c6d0402adaa8104a11e9769ddd26a1592d534
parent4efb9f053c84fbdced373cc62fe06b3158b59015 (diff)
r300: hw can handle per component negations in vertex shaders
Reported-by: Nicolai Haehnle <[email protected]>
-rw-r--r--src/mesa/drivers/dri/r300/r300_vertprog.c27
1 files changed, 2 insertions, 25 deletions
diff --git a/src/mesa/drivers/dri/r300/r300_vertprog.c b/src/mesa/drivers/dri/r300/r300_vertprog.c
index fb94eea07ae..ea8d25d5a94 100644
--- a/src/mesa/drivers/dri/r300/r300_vertprog.c
+++ b/src/mesa/drivers/dri/r300/r300_vertprog.c
@@ -1388,32 +1388,9 @@ static int translateSUB(struct gl_program *prog, int pos)
static int translateSWZ(struct gl_program *prog, int pos)
{
- struct prog_instruction *inst;
- GLuint orig_negate, orig_writemask;
-
- inst = &prog->Instructions[pos];
- orig_negate = inst->SrcReg[0].Negate;
- orig_writemask = inst->DstReg.WriteMask;
-
- inst->Opcode = OPCODE_MOV;
+ prog->Instructions[pos].Opcode = OPCODE_MOV;
- /* If all relevant components are either negated or not negated at the same time, we are ok.
- */
- if ((orig_negate & orig_writemask) == 0 || (orig_negate & orig_writemask) == (NEGATE_XYZW & orig_writemask))
- return 0;
-
- _mesa_insert_instructions(prog, pos + 1, 1);
-
- inst = &prog->Instructions[pos];
- inst->DstReg.WriteMask = orig_writemask & (orig_negate ^ NEGATE_XYZW);
- inst->SrcReg[0].Negate = NEGATE_NONE;
- ++inst;
-
- *inst = *(inst-1);
- inst->DstReg.WriteMask = orig_writemask & orig_negate;
- inst->SrcReg[0].Negate = NEGATE_XYZW;
-
- return 1;
+ return 0;
}
static int translateXPD(struct gl_program *prog, int pos)