---
 src/nouveau_exa.c |   19 +++++++++++++++----
 src/nv50_exa.c    |    6 +++---
 src/nv50_xv.c     |    5 +----
 src/nv_proto.h    |    1 +
 4 files changed, 20 insertions(+), 11 deletions(-)

diff --git a/src/nouveau_exa.c b/src/nouveau_exa.c
index a947a31..3babfd7 100644
--- a/src/nouveau_exa.c
+++ b/src/nouveau_exa.c
@@ -52,8 +52,7 @@ NVAccelDownloadM2MF(PixmapPtr pspix, int x, int y, int w, int 
h,
        unsigned line_len = w * cpp;
        unsigned src_pitch = 0, src_offset = 0, linear = 0;
 
-       if (pNv->Architecture < NV_ARCH_50 ||
-           exaGetPixmapOffset(pspix) < pNv->EXADriverPtr->offScreenBase) {
+       if (!nouveau_exa_pixmap_is_tiled(pspix)) {
                linear     = 1;
                src_pitch  = exaGetPixmapPitch(pspix);
                src_offset = (y * src_pitch) + (x * cpp);
@@ -162,8 +161,7 @@ NVAccelUploadM2MF(PixmapPtr pdpix, int x, int y, int w, int 
h,
        unsigned line_len = w * cpp;
        unsigned dst_pitch = 0, dst_offset = 0, linear = 0;
 
-       if (pNv->Architecture < NV_ARCH_50 ||
-           exaGetPixmapOffset(pdpix) < pNv->EXADriverPtr->offScreenBase) {
+       if (!nouveau_exa_pixmap_is_tiled(pdpix)) {
                linear     = 1;
                dst_pitch  = exaGetPixmapPitch(pdpix);
                dst_offset = (y * dst_pitch) + (x * cpp);
@@ -275,6 +273,19 @@ nouveau_exa_wait_marker(ScreenPtr pScreen, int marker)
        NVSync(xf86Screens[pScreen->myNum]);
 }
 
+bool
+nouveau_exa_pixmap_is_tiled(PixmapPtr ppix)
+{
+       ScrnInfoPtr pScrn = xf86Screens[ppix->drawable.pScreen->myNum];
+       NVPtr pNv = NVPTR(pScrn);
+
+       if (pNv->Architecture < NV_ARCH_50 ||
+               exaGetPixmapOffset(ppix) < pNv->EXADriverPtr->offScreenBase)
+               return false;
+
+       return true;
+}
+
 static void *
 nouveau_exa_pixmap_map(PixmapPtr ppix)
 {
diff --git a/src/nv50_exa.c b/src/nv50_exa.c
index 9030d22..96c0aa3 100644
--- a/src/nv50_exa.c
+++ b/src/nv50_exa.c
@@ -117,7 +117,7 @@ NV50EXAAcquireSurface2D(PixmapPtr ppix, int is_src)
        bo_flags  = NOUVEAU_BO_VRAM;
        bo_flags |= is_src ? NOUVEAU_BO_RD : NOUVEAU_BO_WR;
 
-       if (exaGetPixmapOffset(ppix) < pNv->EXADriverPtr->offScreenBase) {
+       if (!nouveau_exa_pixmap_is_tiled(ppix)) {
                BEGIN_RING(chan, eng2d, mthd, 2);
                OUT_RING  (chan, fmt);
                OUT_RING  (chan, 1);
@@ -438,7 +438,7 @@ NV50EXARenderTarget(PixmapPtr ppix, PicturePtr ppict)
        unsigned format;
 
        /*XXX: Scanout buffer not tiled, someone needs to figure it out */
-       if (exaGetPixmapOffset(ppix) < pNv->EXADriverPtr->offScreenBase)
+       if (!nouveau_exa_pixmap_is_tiled(ppix))
                NOUVEAU_FALLBACK("pixmap is scanout buffer\n");
 
        switch (ppict->format) {
@@ -511,7 +511,7 @@ NV50EXATexture(PixmapPtr ppix, PicturePtr ppict, unsigned 
unit)
        const unsigned tcb_flags = NOUVEAU_BO_RDWR | NOUVEAU_BO_VRAM;
 
        /*XXX: Scanout buffer not tiled, someone needs to figure it out */
-       if (exaGetPixmapOffset(ppix) < pNv->EXADriverPtr->offScreenBase)
+       if (!nouveau_exa_pixmap_is_tiled(ppix))
                NOUVEAU_FALLBACK("pixmap is scanout buffer\n");
 
        BEGIN_RING(chan, tesla, NV50TCL_TIC_ADDRESS_HIGH, 3);
diff --git a/src/nv50_xv.c b/src/nv50_xv.c
index 0e7d2c4..1ddfeee 100644
--- a/src/nv50_xv.c
+++ b/src/nv50_xv.c
@@ -39,9 +39,6 @@
 static Bool
 nv50_xv_check_image_put(PixmapPtr ppix)
 {
-       ScrnInfoPtr pScrn = xf86Screens[ppix->drawable.pScreen->myNum];
-       NVPtr pNv = NVPTR(pScrn);
-
        switch (ppix->drawable.depth) {
        case 32:
        case 24:
@@ -51,7 +48,7 @@ nv50_xv_check_image_put(PixmapPtr ppix)
                return FALSE;
        }
 
-       if (exaGetPixmapOffset(ppix) < pNv->EXADriverPtr->offScreenBase)
+       if (!nouveau_exa_pixmap_is_tiled(ppix))
                return FALSE;
 
        return TRUE;
diff --git a/src/nv_proto.h b/src/nv_proto.h
index 3cb54ef..cc0d2cc 100644
--- a/src/nv_proto.h
+++ b/src/nv_proto.h
@@ -64,6 +64,7 @@ void  NVTakedownDma(ScrnInfoPtr pScrn);
 /* in nouveau_exa.c */
 Bool nouveau_exa_init(ScreenPtr pScreen);
 Bool nouveau_exa_pixmap_is_onscreen(PixmapPtr pPixmap);
+bool nouveau_exa_pixmap_is_tiled(PixmapPtr ppix);
 
 /* in nv_hw.c */
 void NVCalcStateExt(ScrnInfoPtr,struct _riva_hw_state 
*,int,int,int,int,int,int);
-- 
1.6.1.2

_______________________________________________
Nouveau mailing list
Nouveau@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/nouveau

Reply via email to