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
