For non-DRM environments, the screen pixmap will be GART allocated memory
and not a libdrm buffer object and so uxa will only use devPrivate.ptr to
find the associated memory. Make sure devPrivate.ptr is set each time the
framebuffer is allocated so that uxa will be able to draw to it.

Signed-off-by: Keith Packard <kei...@keithp.com>
---
 src/i830_driver.c |   15 ++++++++++-----
 1 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/src/i830_driver.c b/src/i830_driver.c
index ee39a1b..e5e5fd7 100644
--- a/src/i830_driver.c
+++ b/src/i830_driver.c
@@ -880,7 +880,6 @@ i830_xf86crtc_resize (ScrnInfoPtr scrn, int width, int 
height)
        i830_memory *new_front, *old_front;
        Bool        tiled;
        ScreenPtr   screen = screenInfo.screens[scrn->scrnIndex];
-       pointer     data = NULL;
 
        scrn->displayWidth = i830_pad_drawable_width(width, i830->cpp);
        tiled = i830_tiled_width(i830, &scrn->displayWidth, i830->cpp);
@@ -900,15 +899,15 @@ i830_xf86crtc_resize (ScrnInfoPtr scrn, int width, int 
height)
        i830_set_pixmap_bo(screen->GetScreenPixmap(screen),
                           new_front->bo);
        scrn->fbOffset = i830->front_buffer->offset;
-       if (!new_front->bo)
-           data = i830->FbBase + scrn->fbOffset;
+
        screen->ModifyPixmapHeader(screen->GetScreenPixmap(screen),
                                   width, height, -1, -1, scrn->displayWidth * 
i830->cpp,
-                                  data);
+                                  i830->FbBase + scrn->fbOffset);
+
        /* ick. xf86EnableDisableFBAccess smashes the screen pixmap devPrivate,
         * so update the value it uses
         */
-       scrn->pixmapPrivate.ptr = data;
+       scrn->pixmapPrivate.ptr = i830->FbBase + scrn->fbOffset;
        xf86DrvMsg(scrn->scrnIndex, X_INFO, "New front buffer at 0x%lx\n",
                   i830->front_buffer->offset);
        i830_set_new_crtc_bo(scrn);
@@ -2719,6 +2718,12 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int 
argc, char **argv)
     if (pScrn->virtualX > pScrn->displayWidth)
        pScrn->displayWidth = pScrn->virtualX;
 
+   /* If the front buffer is not a BO, we need to
+    * set the initial framebuffer pixmap to point at
+    * it
+    */
+   pScrn->fbOffset = pI830->front_buffer->offset;
+
    DPRINTF(PFX, "assert( if(!fbScreenInit(pScreen, ...) )\n");
    if (!fbScreenInit(pScreen, pI830->FbBase + pScrn->fbOffset, 
                      pScrn->virtualX, pScrn->virtualY,
-- 
1.6.3.3


------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge  
This is your chance to win up to $100,000 in prizes! For a limited time, 
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize  
details at: http://p.sf.net/sfu/Challenge
--
_______________________________________________
Dri-devel mailing list
Dri-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to