From aa9ce8ab343d51a67924757c5a43c9572248bb24 Mon Sep 17 00:00:00 2001 From: Michel Dänzer Date: Tue, 29 Dec 2009 09:34:43 +0100 Subject: EXA: Use relevant source region to minimize migration on CopyWindow fallbacks. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michel Dänzer Acked-by: Maarten Maathuis Signed-off-by: Keith Packard --- exa/exa_unaccel.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/exa/exa_unaccel.c b/exa/exa_unaccel.c index 0dbcd53b2..f077fc893 100644 --- a/exa/exa_unaccel.c +++ b/exa/exa_unaccel.c @@ -313,8 +313,18 @@ ExaCheckCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc) EXA_PRE_FALLBACK(pScreen); EXA_FALLBACK(("from %p\n", pWin)); - /* being both src and dest, src is safest. */ - exaPrepareAccess(pDrawable, EXA_PREPARE_SRC); + /* Only need the source bits, the destination region will be overwritten */ + if (pExaScr->prepare_access_reg) { + PixmapPtr pPixmap = pScreen->GetWindowPixmap(pWin); + int xoff, yoff; + + exaGetDrawableDeltas(&pWin->drawable, pPixmap, &xoff, &yoff); + REGION_TRANSLATE(pScreen, prgnSrc, xoff, yoff); + pExaScr->prepare_access_reg(pPixmap, EXA_PREPARE_SRC, prgnSrc); + REGION_TRANSLATE(pScreen, prgnSrc, -xoff, -yoff); + } else + exaPrepareAccess(pDrawable, EXA_PREPARE_SRC); + swap(pExaScr, pScreen, CopyWindow); pScreen->CopyWindow (pWin, ptOldOrg, prgnSrc); swap(pExaScr, pScreen, CopyWindow); -- cgit v1.2.3