r300: hw can handle per component negations in vertex shaders
authorMaciej Cencora <m.cencora@gmail.com>
Sat, 11 Jul 2009 13:09:20 +0000 (15:09 +0200)
committerMaciej Cencora <m.cencora@gmail.com>
Mon, 13 Jul 2009 17:28:13 +0000 (19:28 +0200)
Reported-by: Nicolai Haehnle <nhaehnle@gmail.com>
src/mesa/drivers/dri/r300/r300_vertprog.c

index fb94eea07ae1cddb9aa9943a601aa12761fd1e26..ea8d25d5a943130ffd71c54cb5fc00dddac3cf28 100644 (file)
@@ -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)