diff --git a/src/d3d11/d3d11_context_imm.cpp b/src/d3d11/d3d11_context_imm.cpp index 6b4e5372..528c7307 100644 --- a/src/d3d11/d3d11_context_imm.cpp +++ b/src/d3d11/d3d11_context_imm.cpp @@ -122,14 +122,13 @@ namespace dxvk { } else if (MapType != D3D11_MAP_WRITE_NO_OVERWRITE) { // Synchronize with CS thread so that we know whether // the buffer is currently in use by the GPU or not + Flush(); SynchronizeCsThread(); - if (buffer->isInUse()) { + while (buffer->isInUse()) { if (MapFlags & D3D11_MAP_FLAG_DO_NOT_WAIT) return DXGI_ERROR_WAS_STILL_DRAWING; - Flush(); - SynchronizeCsThread(); SynchronizeDevice(); } } diff --git a/src/dxvk/dxvk_context.cpp b/src/dxvk/dxvk_context.cpp index dd55780a..35ab9310 100644 --- a/src/dxvk/dxvk_context.cpp +++ b/src/dxvk/dxvk_context.cpp @@ -744,6 +744,8 @@ namespace dxvk { image->info().stages, image->info().access); m_barriers.recordCommands(m_cmd); + + m_cmd->trackResource(image); } @@ -995,6 +997,9 @@ namespace dxvk { m_cmd->trackResource(fb); } + + m_cmd->trackResource(srcImage); + m_cmd->trackResource(dstImage); }