diff options
author | Ilia Mirkin <[email protected]> | 2017-04-08 18:31:35 -0400 |
---|---|---|
committer | Ilia Mirkin <[email protected]> | 2017-04-11 00:13:55 -0400 |
commit | d9cc58d6ec56e676b1285508a4118a83f5325833 (patch) | |
tree | 39be5fdb78d169fbe28af08db4daea3192013e3e /src/gallium/drivers/nouveau/nouveau_buffer.c | |
parent | 8036809799c453b02f4c8fedbb5faaeb19af90c2 (diff) |
nouveau: when mapping a persistent buffer, synchronize on former xfers
If the buffer is being used, we should wait for those uses to be
complete before returning the map.
Fixes: GL45-CTS.direct_state_access.buffers_functional
Signed-off-by: Ilia Mirkin <[email protected]>
Cc: [email protected]
Diffstat (limited to 'src/gallium/drivers/nouveau/nouveau_buffer.c')
-rw-r--r-- | src/gallium/drivers/nouveau/nouveau_buffer.c | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/src/gallium/drivers/nouveau/nouveau_buffer.c b/src/gallium/drivers/nouveau/nouveau_buffer.c index 17052b26e9c..2c604419ce0 100644 --- a/src/gallium/drivers/nouveau/nouveau_buffer.c +++ b/src/gallium/drivers/nouveau/nouveau_buffer.c @@ -406,9 +406,6 @@ nouveau_buffer_transfer_map(struct pipe_context *pipe, !util_ranges_intersect(&buf->valid_buffer_range, box->x, box->x + box->width)) usage |= PIPE_TRANSFER_DISCARD_RANGE | PIPE_TRANSFER_UNSYNCHRONIZED; - if (usage & PIPE_TRANSFER_PERSISTENT) - usage |= PIPE_TRANSFER_UNSYNCHRONIZED; - if (buf->domain == NOUVEAU_BO_VRAM) { if (usage & NOUVEAU_TRANSFER_DISCARD) { /* Set up a staging area for the user to write to. It will be copied @@ -476,7 +473,8 @@ nouveau_buffer_transfer_map(struct pipe_context *pipe, * complete its operation, or set up a staging area to perform our work in. */ if (nouveau_buffer_busy(buf, usage & PIPE_TRANSFER_READ_WRITE)) { - if (unlikely(usage & PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE)) { + if (unlikely(usage & (PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE | + PIPE_TRANSFER_PERSISTENT))) { /* Discarding was not possible, must sync because * subsequent transfers might use UNSYNCHRONIZED. */ nouveau_buffer_sync(nv, buf, usage & PIPE_TRANSFER_READ_WRITE); |