r300: Corrected a bug with the MAD instruction.
authorOliver McFadden <z3ro.geek@gmail.com>
Sun, 2 Mar 2008 06:28:53 +0000 (06:28 +0000)
committerOliver McFadden <z3ro.geek@gmail.com>
Sun, 2 Mar 2008 06:35:44 +0000 (06:35 +0000)
The PVS_VECTOR_OPCODE macro should be modified to support macro instructions,
too.

src/mesa/drivers/dri/r300/r300_reg.h
src/mesa/drivers/dri/r300/r300_vertprog.c

index b059c1671dcf5dba77c25df6ddd7b76f8bf37e90..0614c8b2e064f3112c82975effab4d7d35395605 100644 (file)
@@ -2479,6 +2479,12 @@ enum {
        ME_PRED_SET_RESTORE             = 28,
 };
 
+enum {
+       /* R3XX */
+       PVS_MACRO_OP_2CLK_MADD          = 0,
+       PVS_MACRO_OP_2CLK_M2X_ADD       = 1,
+};
+
 enum {
        PVS_SRC_REG_TEMPORARY           = 0,    /* Intermediate Storage */
        PVS_SRC_REG_INPUT               = 1,    /* Input Vertex Storage */
index e0d81d07952c2c72c9f74a1ddcd1bc9dcf0895a6..8aa1a1c8164597bd7145452c1fee7e9b4ae17a0f 100644 (file)
@@ -555,10 +555,12 @@ static GLuint *t_opcode_log(struct r300_vertex_program *vp, struct prog_instruct
 
 static GLuint *t_opcode_mad(struct r300_vertex_program *vp, struct prog_instruction *vpi, GLuint * inst, struct prog_src_register src[3])
 {
-       inst[0] = PVS_VECTOR_OPCODE(VE_MULTIPLY_ADD,
-                                   t_dst_index(vp, &vpi->DstReg),
-                                   t_dst_mask(vpi->DstReg.WriteMask),
-                                   t_dst_class(vpi->DstReg.File));
+       /* FIXME */
+       inst[0] = (((PVS_MACRO_OP_2CLK_MADD & PVS_DST_OPCODE_MASK) << PVS_DST_OPCODE_SHIFT) |
+                  ((1 & PVS_DST_MACRO_INST_MASK) << PVS_DST_MACRO_INST_SHIFT) |
+                  ((t_dst_index(vp, &vpi->DstReg) & PVS_DST_OFFSET_MASK) << PVS_DST_OFFSET_SHIFT) |
+                  ((t_dst_mask(vpi->DstReg.WriteMask) & 0xf) << PVS_DST_WE_X_SHIFT) |
+                  ((t_dst_class(vpi->DstReg.File) & PVS_DST_REG_TYPE_MASK) << PVS_DST_REG_TYPE_SHIFT));
        inst[1] = t_src(vp, &src[0]);
        inst[2] = t_src(vp, &src[1]);
        inst[3] = t_src(vp, &src[2]);