From: Frank Huang <[email protected]>

*Use the PictOpClear to make other non-blending region to be black
if the op is PictOpSrc.
*Use exaScratch.repeat and exaScratch.maskrepeat together instead of
exaScratch.repeat when the mask is not zero

Signed-off-by: Frank Huang <[email protected]>
---
 src/lx_exa.c |   14 +++++++++++---
 1 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/lx_exa.c b/src/lx_exa.c
index 9fb92c4..cf80a42 100644
--- a/src/lx_exa.c
+++ b/src/lx_exa.c
@@ -1076,9 +1076,6 @@ lx_do_composite(PixmapPtr pxDst, int srcX, int srcY, int 
maskX,
            break;
        }
 
-       if (!exaScratch.repeat)
-           break;
-
        opX += opWidth;
 
        if (opX >= dstX + width) {
@@ -1094,11 +1091,22 @@ 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;
+           /* For the PictOpSrc operation, we need other region to be black
+            * out of the blend region */
+           if (exaScratch.repeat && (!exaScratch.maskrepeat) &&
+               (exaScratch.op == PictOpSrc)) {
+               exaScratch.type = COMP_TYPE_ONEPASS;
+               exaScratch.op = PictOpClear;
+           }
        } 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) && (exaScratch.op == PictOpSrc)) {
+              exaScratch.type = COMP_TYPE_ONEPASS;
+              exaScratch.op = PictOpClear;
+          }
        }
 
     }
-- 
1.7.1


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

Reply via email to