Mesa (gallium-mesa-7.4): pipebuffer: Handle PIPE_BUFFER_USAGE_DONTBLOCK flag.
Keith Whitwell
keithw at kemper.freedesktop.org
Mon Mar 2 20:28:22 UTC 2009
Module: Mesa
Branch: gallium-mesa-7.4
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