mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 08:40:11 +01:00
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 <imirkin@alum.mit.edu> Cc: mesa-stable@lists.freedesktop.org
This commit is contained in:
parent
8036809799
commit
d9cc58d6ec
1 changed files with 2 additions and 4 deletions
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue