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);
     }
 }
 

_______________________________________________
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to