xserver: Branch 'master'

Adam Jackson ajax at kemper.freedesktop.org
Tue Jun 24 09:46:31 PDT 2008


 render/picture.c |   16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

New commits:
commit 574c62e305e5380bb1b0f4bfec4f7cc3e3f03ada
Author: Owen Taylor <otaylor at fishsoup.net>
Date:   Tue Jun 24 12:40:47 2008 -0400

    Bug #15369: Don't reduce Over to Src for transform + RepeatNone.
    
    Only do no-src-alpha optimizations for a RepeatNone source if we can
    easily probe that we won't sample outside the edges of the source.

diff --git a/render/picture.c b/render/picture.c
index 2fbd09e..b7874bb 100644
--- a/render/picture.c
+++ b/render/picture.c
@@ -1548,12 +1548,24 @@ FreePictFormat (pointer	pPictFormat,
  * being careful to avoid these cases.
  */
 static CARD8
-ReduceCompositeOp (CARD8 op, PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst)
+ReduceCompositeOp (CARD8 op, PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst,
+		   INT16 xSrc, INT16 ySrc, CARD16 width, CARD16 height)
 {
     Bool no_src_alpha, no_dst_alpha;
 
+    /* Sampling off the edge of a RepeatNone picture introduces alpha
+     * even if the picture itself doesn't have alpha. We don't try to
+     * detect every case where we don't sample off the edge, just the
+     * simplest case where there is no transform on the source
+     * picture.
+     */
     no_src_alpha = PICT_FORMAT_COLOR(pSrc->format) &&
                    PICT_FORMAT_A(pSrc->format) == 0 &&
+                   (pSrc->repeatType != RepeatNone ||
+		    (!pSrc->transform &&
+		     xSrc >= 0 && ySrc >= 0 &&
+		     xSrc + width <= pSrc->pDrawable->width &&
+		     ySrc + height <= pSrc->pDrawable->height)) &&
                    pSrc->alphaMap == NULL &&
                    pMask == NULL;
     no_dst_alpha = PICT_FORMAT_COLOR(pDst->format) &&
@@ -1655,7 +1667,7 @@ CompositePicture (CARD8		op,
 	ValidatePicture (pMask);
     ValidatePicture (pDst);
 
-    op = ReduceCompositeOp (op, pSrc, pMask, pDst);
+    op = ReduceCompositeOp (op, pSrc, pMask, pDst, xSrc, ySrc, width, height);
     if (op == PictOpDst)
 	return;
 


More information about the xorg-commit mailing list