Maarten Maathuis
2009-Feb-26 20:55 UTC
[Nouveau] [PATCH 1/2] exa: turn WaitMarker into a NOP.
- map should handle this. --- src/nouveau_exa.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/src/nouveau_exa.c b/src/nouveau_exa.c index b656ca7..20ad380 100644 --- a/src/nouveau_exa.c +++ b/src/nouveau_exa.c @@ -259,7 +259,7 @@ nouveau_exa_mark_sync(ScreenPtr pScreen) static void nouveau_exa_wait_marker(ScreenPtr pScreen, int marker) { - NVSync(xf86Screens[pScreen->myNum]); + return; } static Bool -- 1.6.1.3
Maarten Maathuis
2009-Feb-26 20:55 UTC
[Nouveau] [PATCH 2/2] exa: do PrepareAccess for classic too, since we do need to map the frontbuffer.
- 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
On Thu, 2009-02-26 at 21:55 +0100, Maarten Maathuis wrote:> - map should handle this.It does, but we don't use prepare/finish_access() hooks to do map() on the buffer in the non-driver-pixmaps case. I guess we could use prepare/finish_access() there too, it probably wouldn't hurt any. Ben.> --- > src/nouveau_exa.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/src/nouveau_exa.c b/src/nouveau_exa.c > index b656ca7..20ad380 100644 > --- a/src/nouveau_exa.c > +++ b/src/nouveau_exa.c > @@ -259,7 +259,7 @@ nouveau_exa_mark_sync(ScreenPtr pScreen) > static void > nouveau_exa_wait_marker(ScreenPtr pScreen, int marker) > { > - NVSync(xf86Screens[pScreen->myNum]); > + return; > } > > static Bool