EXA: Use relevant source region to minimize migration on CopyWindow fallbacks.
Signed-off-by: Michel Dänzer <daenzer@vmware.com> Acked-by: Maarten Maathuis <madman2003@gmail.com> Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
parent
39cc110caa
commit
aa9ce8ab34
|
@ -313,8 +313,18 @@ ExaCheckCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
|
||||||
EXA_PRE_FALLBACK(pScreen);
|
EXA_PRE_FALLBACK(pScreen);
|
||||||
EXA_FALLBACK(("from %p\n", pWin));
|
EXA_FALLBACK(("from %p\n", pWin));
|
||||||
|
|
||||||
/* being both src and dest, src is safest. */
|
/* Only need the source bits, the destination region will be overwritten */
|
||||||
exaPrepareAccess(pDrawable, EXA_PREPARE_SRC);
|
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);
|
swap(pExaScr, pScreen, CopyWindow);
|
||||||
pScreen->CopyWindow (pWin, ptOldOrg, prgnSrc);
|
pScreen->CopyWindow (pWin, ptOldOrg, prgnSrc);
|
||||||
swap(pExaScr, pScreen, CopyWindow);
|
swap(pExaScr, pScreen, CopyWindow);
|
||||||
|
|
Loading…
Reference in New Issue