Mesa (master): pipebuffer: Handle PIPE_BUFFER_USAGE_DONTBLOCK flag.

Keith Whitwell keithw at kemper.freedesktop.org
Tue Mar 3 11:55:34 UTC 2009


Module: Mesa
Branch: master
Commit: fe64aa0c8eb71e708a3530f8fec2c7df94d90e36
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=fe64aa0c8eb71e708a3530f8fec2c7df94d90e36

Author: José Fonseca <jfonseca at vmware.com>
Date:   Mon Mar  2 17:35:28 2009 +0000

pipebuffer: Handle PIPE_BUFFER_USAGE_DONTBLOCK flag.

Conflicts:

	src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c

---

 .../auxiliary/pipebuffer/pb_buffer_fenced.c        |   20 +++++++++++++++-----
 1 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c b/src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c
index ede2af4..788bf90 100644
--- a/src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c
+++ b/src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c
@@ -291,16 +291,26 @@ fenced_buffer_map(struct pb_buffer *buf,
                   unsigned flags)
 {
    struct fenced_buffer *fenced_buf = fenced_buffer(buf);
+   struct fenced_buffer_list *fenced_list = fenced_buf->list;
+   struct pipe_winsys *winsys = fenced_list->winsys;
    void *map;
 
-   assert(!(flags & ~PIPE_BUFFER_USAGE_CPU_READ_WRITE));
-   flags &= PIPE_BUFFER_USAGE_CPU_READ_WRITE;
+   assert(!(flags & PIPE_BUFFER_USAGE_GPU_READ_WRITE));
    
    /* Serialize writes */
    if((fenced_buf->flags & PIPE_BUFFER_USAGE_GPU_WRITE) ||
       ((fenced_buf->flags & PIPE_BUFFER_USAGE_GPU_READ) && (flags & PIPE_BUFFER_USAGE_CPU_WRITE))) {
-      /* Wait for the GPU to finish */
-      _fenced_buffer_finish(fenced_buf);
+      if(flags & PIPE_BUFFER_USAGE_DONTBLOCK) {
+         /* Don't wait for the GPU to finish writing */
+         if(winsys->fence_finish(winsys, fenced_buf->fence, 0) == 0)
+            _fenced_buffer_remove(fenced_list, fenced_buf);
+         else
+            return NULL;
+      }
+      else {
+         /* Wait for the GPU to finish writing */
+         _fenced_buffer_finish(fenced_buf);
+      }
    }
 
 #if 0
@@ -314,7 +324,7 @@ fenced_buffer_map(struct pb_buffer *buf,
    map = pb_map(fenced_buf->buffer, flags);
    if(map) {
       ++fenced_buf->mapcount;
-      fenced_buf->flags |= flags;
+      fenced_buf->flags |= flags & PIPE_BUFFER_USAGE_CPU_READ_WRITE;
    }
 
    return map;




More information about the mesa-commit mailing list