aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/gpu_thread.cpp
diff options
context:
space:
mode:
authorMarkus Wick <markus@selfnet.de>2021-04-07 13:57:49 +0200
committerMarkus Wick <markus@selfnet.de>2021-04-07 22:38:52 +0200
commit48492bbb9b850055c029d82459bb7b140b244831 (patch)
tree6cad1f7c35b6f9c539fbb9ad0fa2a1359a543a97 /src/video_core/gpu_thread.cpp
parent37ae463f9e87ace555354857a59bbb9e5c3906cb (diff)
video_core/gpu_thread: Keep the write lock for allocating the fence.
Else the fence might get submited out-of-order into the queue, which makes testing them pointless. Overhead should be tiny as the mutex is just moved from the queue to the writing code.
Diffstat (limited to 'src/video_core/gpu_thread.cpp')
-rw-r--r--src/video_core/gpu_thread.cpp2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/video_core/gpu_thread.cpp b/src/video_core/gpu_thread.cpp
index 6b8f06f780..9488bf5444 100644
--- a/src/video_core/gpu_thread.cpp
+++ b/src/video_core/gpu_thread.cpp
@@ -151,11 +151,13 @@ void ThreadManager::OnCommandListEnd() {
}
u64 ThreadManager::PushCommand(CommandData&& command_data) {
+ std::unique_lock lk(state.write_lock);
const u64 fence{++state.last_fence};
state.queue.Push(CommandDataContainer(std::move(command_data), fence));
if (!is_async) {
// In synchronous GPU mode, block the caller until the command has executed
+ lk.unlock();
WaitIdle();
}