diff options
author | Maarten Maathuis <madman2003@gmail.com> | 2009-11-28 10:34:43 +0100 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2009-11-28 12:44:21 -0800 |
commit | 342f3689d17256c92cbfee079d24501d27aa1153 (patch) | |
tree | b017a035edf544e97788f552d68ccfd066328ef3 /exa/exa_driver.c | |
parent | b54bc14ce0ae38c4863794bc3096ca86cdb23908 (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.c | 8 |
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; |