diff --git a/exa/exa_accel.c b/exa/exa_accel.c index 6fa481ad0..e633d80a5 100644 --- a/exa/exa_accel.c +++ b/exa/exa_accel.c @@ -648,6 +648,14 @@ exaPolyFillRect(DrawablePtr pDrawable, { exaDoMigration (pixmaps, 1, FALSE); ExaCheckPolyFillRect (pDrawable, pGC, nrect, prect); + while (nrect-- >= 0) { + exaDrawableDirty(pDrawable, + pDrawable->x + prect->x, + pDrawable->y + prect->y, + pDrawable->x + prect->x + prect->width, + pDrawable->y + prect->y + prect->height); + prect++; + } return; } else { exaDoMigration (pixmaps, 1, TRUE); diff --git a/exa/exa_render.c b/exa/exa_render.c index a442987fe..b78d7282c 100644 --- a/exa/exa_render.c +++ b/exa/exa_render.c @@ -572,9 +572,7 @@ exaComposite(CARD8 op, if (pExaScr->swappedOut || pSrc->pDrawable == NULL || (pMask != NULL && pMask->pDrawable == NULL)) { - ExaCheckComposite (op, pSrc, pMask, pDst, xSrc, ySrc, - xMask, yMask, xDst, yDst, width, height); - return; + goto fallback; } /* Remove repeat in source if useless */ @@ -683,12 +681,18 @@ exaComposite(CARD8 op, } } +fallback: #if DEBUG_TRACE_FALL exaPrintCompositeFallback (op, pSrc, pMask, pDst); #endif ExaCheckComposite (op, pSrc, pMask, pDst, xSrc, ySrc, xMask, yMask, xDst, yDst, width, height); + exaDrawableDirty(pDst->pDrawable, + pDst->pDrawable->x + xDst, + pDst->pDrawable->y + yDst, + pDst->pDrawable->x + xDst + width, + pDst->pDrawable->y + yDst + height); done: pSrc->repeat = saveSrcRepeat;