Merge branch 'gallium-tex-surfaces' into gallium-0.1
authorKeith Whitwell <keith@tungstengraphics.com>
Tue, 3 Jun 2008 14:32:45 +0000 (15:32 +0100)
committerKeith Whitwell <keith@tungstengraphics.com>
Tue, 3 Jun 2008 14:32:45 +0000 (15:32 +0100)
1  2 
src/gallium/auxiliary/draw/draw_vs_aos.c

@@@ -492,7 -492,7 +492,7 @@@ static struct x86_reg fetch_src( struc
                                              src->SrcRegister.File, 
                                              src->SrcRegister.Index);
     unsigned i;
 -   unsigned swz = 0;
 +   ubyte swz = 0;
     unsigned negs = 0;
     unsigned abs = 0;
  
     if (swz != SSE_SWIZZLE_NOOP || negs != 0 || abs != 0) {
        struct x86_reg dst = aos_get_xmm_reg(cp);
  
-       if (swz != SSE_SWIZZLE_NOOP) {
+       if (swz != SSE_SWIZZLE_NOOP)
           emit_pshufd(cp, dst, arg0, swz);
-          arg0 = dst;
-       }
+       else
+          sse_movaps(cp->func, dst, arg0);
  
        if (negs && negs != 0xf) {
           struct x86_reg imm_swz = aos_get_internal_xmm(cp, IMM_SWZ);
                            (negs & 2) ? 1 : 0,
                            (negs & 4) ? 1 : 0,
                            (negs & 8) ? 1 : 0));
-          sse_mulps(cp->func, dst, arg0);
+          sse_mulps(cp->func, dst, tmp);
  
           aos_release_xmm_reg(cp, tmp.idx);
-          arg0 = dst;
        }
        else if (negs) {
           struct x86_reg imm_negs = aos_get_internal_xmm(cp, IMM_NEGS);
           sse_mulps(cp->func, dst, imm_negs);
-          arg0 = dst;
        }
  
  
           struct x86_reg neg = aos_get_internal(cp, IMM_NEGS);
           struct x86_reg tmp = aos_get_xmm_reg(cp);
  
-          sse_movaps(cp->func, tmp, arg0);
+          sse_movaps(cp->func, tmp, dst);
           sse_mulps(cp->func, tmp, neg);
-          sse_maxps(cp->func, dst, arg0);
+          sse_maxps(cp->func, dst, tmp);
  
           aos_release_xmm_reg(cp, tmp.idx);
-          arg0 = dst;
        }
+       return dst;
     }
        
     return arg0;
@@@ -704,7 -703,7 +703,7 @@@ static void store_dest( struct aos_comp
  static void inject_scalar( struct aos_compilation *cp,
                             struct x86_reg dst,
                             struct x86_reg result,
 -                           unsigned swizzle )
 +                           ubyte swizzle )
  {
     sse_shufps(cp->func, dst, dst, swizzle);
     sse_movss(cp->func, dst, result);
@@@ -962,8 -961,8 +961,8 @@@ static boolean emit_COS( struct aos_com
     return TRUE;
  }
  
  /* The dotproduct instructions don't really do that well in sse:
+  * XXX: produces wrong results -- disabled.
   */
  static boolean emit_DP3( struct aos_compilation *cp, const struct tgsi_full_instruction *op )
  {
     return TRUE;
  }
  
  static boolean emit_DP4( struct aos_compilation *cp, const struct tgsi_full_instruction *op )
  {
     struct x86_reg arg0 = fetch_src(cp, &op->FullSrcRegisters[0]);