[Nouveau] [PATCH 2/2] exa: do PrepareAccess for classic too, since we do need to map the frontbuffer.
Maarten Maathuis
madman2003 at gmail.com
Thu Feb 26 12:55:23 PST 2009
- I'm surprised we didn't get serious complaints about not being able to render to the frontbuffer.
---
src/nouveau_exa.c | 16 ++++++++++------
1 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/src/nouveau_exa.c b/src/nouveau_exa.c
index 20ad380..4b21e80 100644
--- a/src/nouveau_exa.c
+++ b/src/nouveau_exa.c
@@ -265,12 +265,14 @@ nouveau_exa_wait_marker(ScreenPtr pScreen, int marker)
static Bool
nouveau_exa_prepare_access(PixmapPtr ppix, int index)
{
- ScrnInfoPtr pScrn = xf86Screens[ppix->drawable.pScreen->myNum];
+ ScreenPtr pScreen = ppix->drawable.pScreen;
+ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
NVPtr pNv = NVPTR(pScrn);
- if (pNv->exa_driver_pixmaps) {
+ if (pNv->exa_driver_pixmaps || pScreen->GetScreenPixmap(pScreen) == ppix) {
void *map = nouveau_exa_pixmap_map(ppix);
+ /* Really bad if this is the frontbuffer. */
if (!map)
return FALSE;
@@ -284,10 +286,11 @@ nouveau_exa_prepare_access(PixmapPtr ppix, int index)
static void
nouveau_exa_finish_access(PixmapPtr ppix, int index)
{
- ScrnInfoPtr pScrn = xf86Screens[ppix->drawable.pScreen->myNum];
+ ScreenPtr pScreen = ppix->drawable.pScreen;
+ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
NVPtr pNv = NVPTR(pScrn);
- if (pNv->exa_driver_pixmaps)
+ if (pNv->exa_driver_pixmaps || pScreen->GetScreenPixmap(pScreen) == ppix)
nouveau_exa_pixmap_unmap(ppix);
}
@@ -553,8 +556,6 @@ nouveau_exa_init(ScreenPtr pScreen)
exa->pixmapPitchAlign = 64;
exa->PixmapIsOffscreen = nouveau_exa_pixmap_is_offscreen;
- exa->PrepareAccess = nouveau_exa_prepare_access;
- exa->FinishAccess = nouveau_exa_finish_access;
exa->CreatePixmap = nouveau_exa_create_pixmap;
exa->DestroyPixmap = nouveau_exa_destroy_pixmap;
exa->ModifyPixmapHeader = nouveau_exa_modify_pixmap_header;
@@ -604,6 +605,9 @@ nouveau_exa_init(ScreenPtr pScreen)
exa->maxY = 2048;
}
+ exa->PrepareAccess = nouveau_exa_prepare_access;
+ exa->FinishAccess = nouveau_exa_finish_access;
+
exa->MarkSync = nouveau_exa_mark_sync;
exa->WaitMarker = nouveau_exa_wait_marker;
--
1.6.1.3
More information about the Nouveau
mailing list