mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-10 19:00:13 +01:00
pipebuffer: Handle PIPE_BUFFER_USAGE_DONTBLOCK flag.
Conflicts: src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c
This commit is contained in:
parent
cfc3d5c219
commit
fe64aa0c8e
1 changed files with 15 additions and 5 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue