summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAxel Davy <axel.davy@ens.fr>2016-02-27 11:02:21 +0100
committerEmil Velikov <emil.l.velikov@gmail.com>2016-03-04 11:52:58 +0000
commitd956cfebd5391e23b5ffdaf07b59f312acabe8d4 (patch)
tree5da4c3a4415800b99f812907238363accf1b091d
parentd29f41e1ba4414f4d3ed324ec44e389f6fceb51a (diff)
st/nine: Fix second Multithreading issue with MANAGED buffers
Here is another threading issue with MANAGED buffers: Thread 1: buffer creation Thread 1: buffer lock Thread 2: Draw call Thread 1: writes data Thread 1: Unlock Without this patch, the buffer is initially dirty and in the list of things to upload after its creation. The draw call will then upload the data and unset the dirty flag, and the Unlock won't trigger a second upload. Fixes regression introduced by cc0114f30b587a10766ec212afb3ad356099ef23: "st/nine: Implement Managed vertex/index buffers" Cc: "11.2" <mesa-stable@lists.freedesktop.org> Signed-off-by: Axel Davy <axel.davy@ens.fr> (cherry picked from commit 83bc2acfe90fd2e503bab4b5a586c1e2822863f5)
-rw-r--r--src/gallium/state_trackers/nine/buffer9.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/gallium/state_trackers/nine/buffer9.c b/src/gallium/state_trackers/nine/buffer9.c
index 6d5d9d691f..1103741f7e 100644
--- a/src/gallium/state_trackers/nine/buffer9.c
+++ b/src/gallium/state_trackers/nine/buffer9.c
@@ -182,6 +182,9 @@ NineBuffer9_Lock( struct NineBuffer9 *This,
This->managed.dirty_box = box;
} else {
u_box_union_2d(&This->managed.dirty_box, &This->managed.dirty_box, &box);
+ /* Do not upload while we are locking, we'll add it back later */
+ if (!LIST_IS_EMPTY(&This->managed.list))
+ list_delinit(&This->managed.list);
}
}
*ppbData = (char *)This->managed.data + OffsetToLock;