st/xorg: fix and enable by default xrender acceleration
authorZack Rusin <zackr@vmware.com>
Sat, 10 Oct 2009 08:45:41 +0000 (04:45 -0400)
committerZack Rusin <zackr@vmware.com>
Tue, 13 Oct 2009 16:25:13 +0000 (12:25 -0400)
src in mask was broken

src/gallium/state_trackers/xorg/xorg_composite.c
src/gallium/state_trackers/xorg/xorg_exa.c
src/gallium/state_trackers/xorg/xorg_exa_tgsi.c

index 54b9ecaba1a640126d8016256005357f6bb9823f..90283fe6af527de13ed9dfbd6f1f86b40d704461 100644 (file)
@@ -320,7 +320,7 @@ boolean xorg_composite_bind_state(struct exa_context *exa,
                  pDstPicture, pSrc, pMask, pDst);
    setup_constant_buffers(exa, pDst);
 
-   return FALSE;
+   return TRUE;
 }
 
 void xorg_composite(struct exa_context *exa,
index 29785c0040c158a4ffd5272c8c56ff781fa7b75a..af76d6690f5e49a978436b95c340d10be5b3a81b 100644 (file)
@@ -506,7 +506,7 @@ ExaComposite(PixmapPtr pDst, int srcX, int srcY, int maskX, int maskY,
    struct exa_pixmap_priv *priv = exaGetPixmapDriverPrivate(pDst);
 
 #if DEBUG_PRINT
-   debug_printf("\tExaComposite\n");
+   debug_printf("\tExaComposite(src[%d,%d], mask=[%d, %d], dst=[%d, %d], dim=[%d, %d])\n", srcX, srcY, maskX, maskY, dstX, dstY, width, height);
 #endif
 
    xorg_composite(exa, priv, srcX, srcY, maskX, maskY,
@@ -525,6 +525,9 @@ ExaCheckComposite(int op,
 #if DEBUG_PRINT
    debug_printf("ExaCheckComposite(%d, %p, %p, %p) = %d\n",
                 op, pSrcPicture, pMaskPicture, pDstPicture, accelerated);
+#endif
+#if DISABLE_ACCEL
+   accelerated = FALSE;
 #endif
    return accelerated;
 }
index 8ce06e374a95a4905c02b77226234602e5323429..8c9b674b4b6bebf972fa838dbdb5b0189666dc94 100644 (file)
@@ -67,9 +67,19 @@ src_in_mask(struct ureg_program *ureg,
             struct ureg_src src,
             struct ureg_src mask)
 {
-   /* MUL dst, src, mask.wwww */
+#if 0
+   /* MUL dst, src, mask.a */
    ureg_MUL(ureg, dst, src,
             ureg_scalar(mask, TGSI_SWIZZLE_W));
+#else
+   /* MOV dst, src */
+   /* MUL dst.a, src.a, mask.a */
+   ureg_MOV(ureg, dst, src);
+   ureg_MUL(ureg,
+            ureg_writemask(dst, TGSI_WRITEMASK_W),
+            ureg_scalar(src, TGSI_SWIZZLE_W),
+            ureg_scalar(mask, TGSI_SWIZZLE_W));
+#endif
 }
 
 static struct ureg_src
@@ -271,7 +281,7 @@ create_vs(struct pipe_context *pipe,
 
    if (has_mask) {
       src = ureg_DECL_vs_input(ureg, input_slot++);
-      dst = ureg_DECL_output(ureg, TGSI_SEMANTIC_GENERIC, 2);
+      dst = ureg_DECL_output(ureg, TGSI_SEMANTIC_GENERIC, 1);
       ureg_MOV(ureg, dst, src);
    }