no need to handle ARL in a special way, it's a generic scalar operation. only tested...
authorTilman Sauerbeck <tilman@freedesktop.org>
Sun, 18 Jun 2006 14:07:10 +0000 (14:07 +0000)
committerTilman Sauerbeck <tilman@freedesktop.org>
Sun, 18 Jun 2006 14:07:10 +0000 (14:07 +0000)
src/mesa/drivers/dri/r200/r200_vertprog.c
src/mesa/drivers/dri/r300/r300_vertexprog.c

index 615953b6100bb7d00e0861ae3c03f0d4fbcb27a6..9e651aa7d10cd9734c5415d7f325f05223d8ec80 100644 (file)
@@ -311,6 +311,10 @@ static unsigned long t_opcode(enum prog_opcode opcode)
 
    switch(opcode){
    case OPCODE_ADD: return R200_VPI_OUT_OP_ADD;
+   /* FIXME: ARL works fine, but negative offsets won't work - fglrx just
+    * seems to ignore neg offsets which isn't quite correct...
+    */
+   case OPCODE_ARL: return R200_VPI_OUT_OP_ARL;
    case OPCODE_DP4: return R200_VPI_OUT_OP_DOT;
    case OPCODE_DST: return R200_VPI_OUT_OP_DST;
    case OPCODE_EX2: return R200_VPI_OUT_OP_EX2;
@@ -652,16 +656,6 @@ static GLboolean r200_translate_vertex_program(struct r200_vertex_program *vp)
 
       /* These ops need special handling. */
       switch(vpi->Opcode){
-      /* FIXME: ARL works fine, but negative offsets won't work - fglrx just sems to ignore neg offsets
-        which isn't quite correct... */
-      case OPCODE_ARL:
-        o_inst->op = MAKE_VSF_OP(R200_VPI_OUT_OP_ARL, t_dst(&vpi->DstReg),
-               t_dst_mask(vpi->DstReg.WriteMask));
-        o_inst->src0 = t_src_scalar(vp, &src[0]);
-        o_inst->src1 = UNUSED_SRC_0;
-        o_inst->src2 = UNUSED_SRC_1;
-        goto next;
-
       case OPCODE_POW:
 /* pow takes only one argument, first scalar is in slot x, 2nd in slot z (other slots don't matter).
    So may need to insert additional instruction */
index 602a3ba32a700884ff494865f2da1d16c14b087e..ee9c327cb76df062efb0fd6cbf61fbd602dbb5b7 100644 (file)
@@ -300,6 +300,7 @@ static unsigned long t_opcode(enum prog_opcode opcode)
 {
 
        switch(opcode){
+               case OPCODE_ARL: return R300_VPI_OUT_OP_ARL;
                case OPCODE_DST: return R300_VPI_OUT_OP_DST;
                case OPCODE_EX2: return R300_VPI_OUT_OP_EX2;
                case OPCODE_EXP: return R300_VPI_OUT_OP_EXP;
@@ -618,14 +619,6 @@ void r300_translate_vertex_shader(struct r300_vertex_program *vp)
                
                /* These ops need special handling. */
                switch(vpi->Opcode){
-               case OPCODE_ARL:
-                       o_inst->op=MAKE_VSF_OP(R300_VPI_OUT_OP_ARL, t_dst_index(vp, &vpi->DstReg),
-                                       t_dst_mask(vpi->DstReg.WriteMask), t_dst_class(vpi->DstReg.File));
-                       o_inst->src1=t_src_scalar(vp, &src[0]);
-                       o_inst->src2=ZERO_SRC_0;
-                       o_inst->src3=ZERO_SRC_0;
-                       goto next;
-                       
                case OPCODE_POW:
                        o_inst->op=MAKE_VSF_OP(R300_VPI_OUT_OP_POW, t_dst_index(vp, &vpi->DstReg),
                                        t_dst_mask(vpi->DstReg.WriteMask), t_dst_class(vpi->DstReg.File));