diff --git a/exa/exa_render.c b/exa/exa_render.c index b21c5d724..2187af810 100644 --- a/exa/exa_render.c +++ b/exa/exa_render.c @@ -535,7 +535,8 @@ exaComposite(CARD8 op, if (op == PictOpSrc) { if (pSrc->pDrawable->width == 1 && - pSrc->pDrawable->height == 1 && pSrc->repeat) + pSrc->pDrawable->height == 1 && pSrc->repeat && + pSrc->repeatType == RepeatNormal) { ret = exaTryDriverSolidFill(pSrc, pDst, xSrc, ySrc, xDst, yDst, width, height); @@ -575,6 +576,8 @@ exaComposite(CARD8 op, pMask->repeat = 0; if (pExaScr->info->PrepareComposite && + (!pSrc->repeat || pSrc->repeat == RepeatNormal) && + (!pMask || !pMask->repeat || pMask->repeat == RepeatNormal) && !pSrc->alphaMap && (!pMask || !pMask->alphaMap) && !pDst->alphaMap) { ret = exaTryDriverComposite(op, pSrc, pMask, pDst, xSrc, ySrc, xMask, diff --git a/hw/xfree86/xaa/xaaPict.c b/hw/xfree86/xaa/xaaPict.c index a1ff51087..a7acf450a 100644 --- a/hw/xfree86/xaa/xaaPict.c +++ b/hw/xfree86/xaa/xaaPict.c @@ -218,7 +218,13 @@ XAADoComposite ( if (pDst->alphaMap || pSrc->alphaMap || (pMask && pMask->alphaMap)) return FALSE; - + + if ((pSrc->repeat && pSrc->repeatType != RepeatNormal) || + (pMask && pMask->repeat && pMask->repeatType != RepeatNormal)) + { + return FALSE; + } + xDst += pDst->pDrawable->x; yDst += pDst->pDrawable->y; xSrc += pSrc->pDrawable->x;