Mesa (openchrome-branch): openchrome: Fix synccpu / map ordering.

Thomas Hellstrom thomash at kemper.freedesktop.org
Mon Feb 23 07:34:05 UTC 2009


Module: Mesa
Branch: openchrome-branch
Commit: 07b47095a2ffff53eb021db005a140941de7f453
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=07b47095a2ffff53eb021db005a140941de7f453

Author: Thomas Hellstrom <thomas-at-shipmail-dot-org>
Date:   Sun Feb 22 21:32:40 2009 +0100

openchrome: Fix synccpu / map ordering.

---

 src/mesa/drivers/dri/openchrome/via_depthstencil.c |   38 +++++++++++---------
 1 files changed, 21 insertions(+), 17 deletions(-)

diff --git a/src/mesa/drivers/dri/openchrome/via_depthstencil.c b/src/mesa/drivers/dri/openchrome/via_depthstencil.c
index 8e8637e..13c5501 100644
--- a/src/mesa/drivers/dri/openchrome/via_depthstencil.c
+++ b/src/mesa/drivers/dri/openchrome/via_depthstencil.c
@@ -95,39 +95,43 @@ map_buffers(GLcontext * ctx,
     int ret;
 
     if (depthRb && depthRb->buf) {
-	depthRb->map = wsbmBOMap(depthRb->buf,
-				 WSBM_ACCESS_READ | WSBM_ACCESS_WRITE);
-	if (!depthRb->map)
-	    return -ENOMEM;
 	ret = wsbmBOSyncForCpu(depthRb->buf,
 			       WSBM_SYNCCPU_READ | WSBM_SYNCCPU_WRITE);
 	if (ret)
+	    return ret;
+
+	depthRb->map = wsbmBOMap(depthRb->buf,
+				 WSBM_ACCESS_READ | WSBM_ACCESS_WRITE);
+	if (!depthRb->map) {
+	    ret = -ENOMEM;
 	    goto out_err0;
+	}
     }
 
     if (stencilRb && stencilRb->buf) {
+	ret = wsbmBOSyncForCpu(stencilRb->buf,
+			       WSBM_SYNCCPU_READ | WSBM_SYNCCPU_WRITE);
+	if (ret)
+	    goto out_err1;
+
 	stencilRb->map = wsbmBOMap(stencilRb->buf, WSBM_ACCESS_READ |
 				   WSBM_ACCESS_WRITE);
 	if (!stencilRb->map) {
 	    ret = -ENOMEM;
-	    goto out_err1;
-	}
-
-	ret = wsbmBOSyncForCpu(stencilRb->buf,
-			       WSBM_SYNCCPU_READ | WSBM_SYNCCPU_WRITE);
-	if (ret)
 	    goto out_err2;
+	}
     }
 
     return 0;
 
   out_err2:
-    (void)wsbmBOUnmap(stencilRb->buf);
+    (void)wsbmBOReleaseFromCpu(stencilRb->buf,
+			       WSBM_SYNCCPU_READ | WSBM_SYNCCPU_WRITE);
   out_err1:
+    (void)wsbmBOUnmap(depthRb->buf);
+  out_err0:
     (void)wsbmBOReleaseFromCpu(depthRb->buf,
 			       WSBM_SYNCCPU_READ | WSBM_SYNCCPU_WRITE);
-  out_err0:
-    (void)wsbmBOUnmap(depthRb->buf);
     return ret;
 }
 
@@ -137,17 +141,17 @@ unmap_buffers(GLcontext * ctx,
 	      struct via_renderbuffer *stencilRb)
 {
     if (depthRb && depthRb->buf) {
-	(void)wsbmBOReleaseFromCpu(depthRb->buf,
-				   WSBM_SYNCCPU_READ | WSBM_SYNCCPU_WRITE);
 	wsbmBOUnmap(depthRb->buf);
 	depthRb->map = NULL;
+	(void)wsbmBOReleaseFromCpu(depthRb->buf,
+				   WSBM_SYNCCPU_READ | WSBM_SYNCCPU_WRITE);
     }
 
     if (stencilRb && stencilRb->buf) {
-	(void)wsbmBOReleaseFromCpu(stencilRb->buf,
-				   WSBM_SYNCCPU_READ | WSBM_SYNCCPU_WRITE);
 	wsbmBOUnmap(stencilRb->buf);
 	stencilRb->map = NULL;
+	(void)wsbmBOReleaseFromCpu(stencilRb->buf,
+				   WSBM_SYNCCPU_READ | WSBM_SYNCCPU_WRITE);
     }
 }
 




More information about the mesa-commit mailing list