1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-01-31 23:52:20 +01:00

[dxvk] Fix broken sync in injectCsChunk

This commit is contained in:
Philip Rebohle 2024-11-02 20:11:28 +01:00
parent b38c6b4dc2
commit f3c320b490

View File

@ -120,22 +120,27 @@ namespace dxvk {
{ std::unique_lock<dxvk::mutex> lock(m_mutex);
seq = ++m_chunksDispatched;
m_chunksQueued.push_back(std::move(chunk));
m_condOnAdd.notify_one();
}
m_condOnAdd.notify_one();
return seq;
}
void DxvkCsThread::injectChunk(DxvkCsChunkRef&& chunk, bool synchronize) {
std::unique_lock<dxvk::mutex> lock(m_mutex);
uint64_t timeline;
uint64_t timeline = ++m_chunksInjectedCount;
m_chunksInjected.push_back(std::move(chunk));
{ std::unique_lock<dxvk::mutex> lock(m_mutex);
m_condOnAdd.notify_one();
timeline = ++m_chunksInjectedCount;
m_chunksInjected.push_back(std::move(chunk));
m_condOnAdd.notify_one();
}
if (synchronize) {
std::unique_lock<dxvk::mutex> lock(m_counterMutex);
m_condOnSync.wait(lock, [this, timeline] {
return m_chunksInjectedComplete.load() >= timeline;
});