summaryrefslogtreecommitdiff
path: root/exa/exa_driver.c
diff options
context:
space:
mode:
authorMaarten Maathuis <madman2003@gmail.com>2009-11-28 10:34:43 +0100
committerKeith Packard <keithp@keithp.com>2009-11-28 12:44:21 -0800
commit342f3689d17256c92cbfee079d24501d27aa1153 (patch)
treeb017a035edf544e97788f552d68ccfd066328ef3 /exa/exa_driver.c
parentb54bc14ce0ae38c4863794bc3096ca86cdb23908 (diff)
exa: handle pixmap create/destroy in lower layers
- Pixmaps that are created during a fallback are automatically prepared access. - During the fallback accelerated ops are blocked to prevent new/scratch gc's from triggering accelerated ops on mapped pixmaps. - A few cases of incorrect wrapping (on the top level pointer instead of between damage and (w)fb) have been removed. Signed-off-by: Maarten Maathuis <madman2003@gmail.com> Acked-by: Michel Dänzer <michel@daenzer.net> Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'exa/exa_driver.c')
-rw-r--r--exa/exa_driver.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/exa/exa_driver.c b/exa/exa_driver.c
index a9165a158..f55c300b1 100644
--- a/exa/exa_driver.c
+++ b/exa/exa_driver.c
@@ -115,6 +115,10 @@ exaCreatePixmap_driver(ScreenPtr pScreen, int w, int h, int depth,
exaSetAccelBlock(pExaScr, pExaPixmap,
w, h, bpp);
+ /* During a fallback we must prepare access. */
+ if (pExaScr->fallback_counter)
+ exaPrepareAccess(&pPixmap->drawable, EXA_PREPARE_AUX_DEST);
+
return pPixmap;
}
@@ -187,6 +191,10 @@ exaDestroyPixmap_driver (PixmapPtr pPixmap)
{
ExaPixmapPriv (pPixmap);
+ /* During a fallback we must finish access, but we don't know the index. */
+ if (pExaScr->fallback_counter)
+ exaFinishAccess(&pPixmap->drawable, -1);
+
if (pExaPixmap->driverPriv)
pExaScr->info->DestroyPixmap(pScreen, pExaPixmap->driverPriv);
pExaPixmap->driverPriv = NULL;