Mesa (mesa_7_7_branch): vmware/xorg: Fix failure paths and add some debug printing

Jakob Bornecrantz wallbraker at kemper.freedesktop.org
Mon Dec 14 06:12:44 PST 2009


Module: Mesa
Branch: mesa_7_7_branch
Commit: 48888b918b9c09a14056f925c2af60ea16dcc88d
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=48888b918b9c09a14056f925c2af60ea16dcc88d

Author: Jakob Bornecrantz <jakob at vmware.com>
Date:   Sat Dec 12 20:02:34 2009 +0100

vmware/xorg: Fix failure paths and add some debug printing

---

 src/gallium/state_trackers/xorg/xorg_driver.c |   66 +++++++++++++++++--------
 1 files changed, 46 insertions(+), 20 deletions(-)

diff --git a/src/gallium/state_trackers/xorg/xorg_driver.c b/src/gallium/state_trackers/xorg/xorg_driver.c
index 5391595..8a24aa1 100644
--- a/src/gallium/state_trackers/xorg/xorg_driver.c
+++ b/src/gallium/state_trackers/xorg/xorg_driver.c
@@ -480,7 +480,7 @@ static void drv_block_handler(int i, pointer blockData, pointer pTimeout,
 	if (num_cliprects) {
 	    drmModeClip *clip = alloca(num_cliprects * sizeof(drmModeClip));
 	    BoxPtr rect = REGION_RECTS(dirty);
-	    int i;
+	    int i, ret;
 
 	    /* XXX no need for copy? */
 	    for (i = 0; i < num_cliprects; i++, rect++) {
@@ -491,7 +491,11 @@ static void drv_block_handler(int i, pointer blockData, pointer pTimeout,
 	    }
 
 	    /* TODO query connector property to see if this is needed */
-	    drmModeDirtyFB(ms->fd, ms->fb_id, clip, num_cliprects);
+	    ret = drmModeDirtyFB(ms->fd, ms->fb_id, clip, num_cliprects);
+	    if (ret) {
+		debug_printf("%s: failed to send dirty (%i, %s)\n",
+			     __func__, ret, strerror(-ret));
+	    }
 
 	    DamageEmpty(ms->damage);
 	}
@@ -837,6 +841,7 @@ drv_create_front_buffer_ga3d(ScrnInfoPtr pScrn)
     modesettingPtr ms = modesettingPTR(pScrn);
     unsigned handle, stride;
     struct pipe_texture *tex;
+    int ret;
 
     ms->noEvict = TRUE;
 
@@ -850,16 +855,21 @@ drv_create_front_buffer_ga3d(ScrnInfoPtr pScrn)
 					    tex,
 					    &stride,
 					    &handle))
-	return FALSE;
+	goto err_destroy;
 
-    drmModeAddFB(ms->fd,
-		 pScrn->virtualX,
-		 pScrn->virtualY,
-		 pScrn->depth,
-		 pScrn->bitsPerPixel,
-		 stride,
-		 handle,
-                 &ms->fb_id);
+    ret = drmModeAddFB(ms->fd,
+		       pScrn->virtualX,
+		       pScrn->virtualY,
+		       pScrn->depth,
+		       pScrn->bitsPerPixel,
+		       stride,
+		       handle,
+		       &ms->fb_id);
+    if (ret) {
+	debug_printf("%s: failed to create framebuffer (%i, %s)",
+		     __func__, ret, strerror(-ret));
+	goto err_destroy;
+    }
 
     pScrn->frameX0 = 0;
     pScrn->frameY0 = 0;
@@ -869,6 +879,10 @@ drv_create_front_buffer_ga3d(ScrnInfoPtr pScrn)
     pipe_texture_reference(&tex, NULL);
 
     return TRUE;
+
+err_destroy:
+    pipe_texture_reference(&tex, NULL);
+    return FALSE;
 }
 
 static Bool
@@ -898,6 +912,8 @@ static Bool
 drv_destroy_front_buffer_kms(ScrnInfoPtr pScrn)
 {
     modesettingPtr ms = modesettingPTR(pScrn);
+    ScreenPtr pScreen = pScrn->pScreen;
+    PixmapPtr rootPixmap = pScreen->GetScreenPixmap(pScreen);
 
     if (!ms->root_bo)
 	return TRUE;
@@ -914,6 +930,7 @@ drv_create_front_buffer_kms(ScrnInfoPtr pScrn)
     unsigned handle, stride;
     struct kms_bo *bo;
     unsigned attr[8];
+    int ret;
 
     attr[0] = KMS_BO_TYPE;
     attr[1] = KMS_BO_TYPE_SCANOUT;
@@ -932,14 +949,19 @@ drv_create_front_buffer_kms(ScrnInfoPtr pScrn)
     if (kms_bo_get_prop(bo, KMS_HANDLE, &handle))
 	goto err_destroy;
 
-    drmModeAddFB(ms->fd,
-		 pScrn->virtualX,
-		 pScrn->virtualY,
-		 pScrn->depth,
-		 pScrn->bitsPerPixel,
-		 stride,
-		 handle,
-                 &ms->fb_id);
+    ret = drmModeAddFB(ms->fd,
+		       pScrn->virtualX,
+		       pScrn->virtualY,
+		       pScrn->depth,
+		       pScrn->bitsPerPixel,
+		       stride,
+		       handle,
+		       &ms->fb_id);
+    if (ret) {
+	debug_printf("%s: failed to create framebuffer (%i, %s)",
+		     __func__, ret, strerror(-ret));
+	goto err_destroy;
+    }
 
     pScrn->frameX0 = 0;
     pScrn->frameY0 = 0;
@@ -966,7 +988,7 @@ drv_bind_front_buffer_kms(ScrnInfoPtr pScrn)
 	return FALSE;
 
     if (kms_bo_map(ms->root_bo, &ptr))
-	return FALSE;
+	goto err_destroy;
 
     pScreen->ModifyPixmapHeader(rootPixmap,
 				pScreen->width,
@@ -976,6 +998,10 @@ drv_bind_front_buffer_kms(ScrnInfoPtr pScrn)
 				stride,
 				ptr);
     return TRUE;
+
+err_destroy:
+    kms_bo_destroy(&ms->root_bo);
+    return FALSE;
 }
 #endif /* HAVE_LIBKMS */
 



More information about the mesa-commit mailing list