diff --git a/src/dxvk/dxvk_cs.cpp b/src/dxvk/dxvk_cs.cpp index cefae9c6..ee6e17dc 100644 --- a/src/dxvk/dxvk_cs.cpp +++ b/src/dxvk/dxvk_cs.cpp @@ -33,14 +33,17 @@ namespace dxvk { DxvkCsThread::~DxvkCsThread() { - m_stopped.store(true); + { std::unique_lock lock(m_mutex); + m_stopped.store(true); + } + m_condOnAdd.notify_one(); m_thread.join(); } void DxvkCsThread::dispatchChunk(Rc&& chunk) { - { std::lock_guard lock(m_mutex); + { std::unique_lock lock(m_mutex); m_chunks.push(std::move(m_curChunk)); } diff --git a/src/dxvk/dxvk_queue.cpp b/src/dxvk/dxvk_queue.cpp index e7d71b94..6bf91965 100644 --- a/src/dxvk/dxvk_queue.cpp +++ b/src/dxvk/dxvk_queue.cpp @@ -1,17 +1,22 @@ #include "dxvk_device.h" #include "dxvk_queue.h" +using namespace std::chrono_literals; + namespace dxvk { DxvkSubmissionQueue::DxvkSubmissionQueue(DxvkDevice* device) : m_device(device), - m_thread([this] () { this->threadFunc(); }) { + m_thread([this] () { threadFunc(); }) { } DxvkSubmissionQueue::~DxvkSubmissionQueue() { - m_stopped.store(true); + { std::unique_lock lock(m_mutex); + m_stopped.store(true); + } + m_condOnAdd.notify_one(); m_thread.join(); }