Subject: [PATCH 3/5] Add the maskrepeat to record Mask'srepeat parameter which is same as Src's repeat

From: "Huang, FrankR" <[email-masked]>
Date: Fri, 2 Jul 2010 16:46:34 +0800

From: Frank Huang <[email-masked]>

*Add the maskrepeat variable to record mask picture's repeat attribute
*If the mask is not zero and the maskrepeat equals 0, stop rendering

Signed-off-by: Frank Huang <[email-masked]>
---
 src/lx_exa.c |   12 ++++++++----
 1 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/src/lx_exa.c b/src/lx_exa.c
index fbb62a0..9631a8d 100644
--- a/src/lx_exa.c
+++ b/src/lx_exa.c
@@ -88,6 +88,7 @@ static struct
     unsigned int srcColor;
     int op;
     int repeat;
+    int maskrepeat;
     unsigned int fourBpp;
     unsigned int bufferOffset;
     struct exa_format_t *srcFormat;
@@ -686,6 +687,7 @@ lx_prepare_composite(int op, PicturePtr pSrc, PicturePtr pMsk,
 	/* Save off the info we need (reuse the source values to save space) */
 
 	exaScratch.type = COMP_TYPE_MASK;
+	exaScratch.maskrepeat = pMsk->repeat;
 
 	exaScratch.srcOffset = exaGetPixmapOffset(pxMsk);
 	exaScratch.srcPitch = exaGetPixmapPitch(pxMsk);
@@ -1025,7 +1027,8 @@ lx_do_composite(PixmapPtr pxDst, int srcX, int srcY, int maskX,
     /* When mask exists, exaScratch.srcWidth and exaScratch.srcHeight are
      * the source width and source height; Otherwise, they are mask width
      * and mask height */
-    /* exaScratch.repeat is the source repeat attribute */
+    /* exaScratch.repeat is the source repeat attribute
+     * exaScratch.maskrepeat is the mask repeat attribute */
     /* If type is COMP_TYPE_MASK, maskX and maskY are not zero, we should
      * minus them to do the opeartion in the correct region */
 
@@ -1079,9 +1082,6 @@ lx_do_composite(PixmapPtr pxDst, int srcX, int srcY, int maskX,
 	    break;
 	}
 
-	if (!exaScratch.repeat)
-	    break;
-
 	opX += opWidth;
 
 	if (opX >= dstX + width) {
@@ -1097,11 +1097,15 @@ lx_do_composite(PixmapPtr pxDst, int srcX, int srcY, int maskX,
 		? (exaScratch.srcWidth - maskX) : (dstX + width) - opX;
 	    opHeight = ((dstY + height) - opY) > (exaScratch.srcHeight - maskY)
 		? (exaScratch.srcHeight - maskY) : (dstY + height) - opY;
+	    if (!exaScratch.maskrepeat)
+		break;
 	} else {
 	    opWidth = ((dstX + width) - opX) > exaScratch.srcWidth ?
 		exaScratch.srcWidth : (dstX + width) - opX;
 	    opHeight = ((dstY + height) - opY) > exaScratch.srcHeight ?
 		exaScratch.srcHeight : (dstY + height) - opY;
+	    if (!exaScratch.repeat)
+		break;
 	}
     }
 }
-- 
1.7.1

_______________________________________________
Xorg-driver-geode mailing list
[email-masked]
http://lists.x.org/mailman/listinfo/xorg-driver-geode