From b42c07253efecb630d86369efbb4bdf56c5e0b8b Mon Sep 17 00:00:00 2001 From: Robin Kertels Date: Thu, 24 Feb 2022 02:32:50 +0100 Subject: [PATCH] [d3d9] Fix sysmem readback --- src/d3d9/d3d9_common_texture.h | 2 +- src/d3d9/d3d9_device.cpp | 3 ++- src/d3d9/d3d9_swapchain.cpp | 3 +++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/d3d9/d3d9_common_texture.h b/src/d3d9/d3d9_common_texture.h index e981d8fd..57446453 100644 --- a/src/d3d9/d3d9_common_texture.h +++ b/src/d3d9/d3d9_common_texture.h @@ -328,7 +328,7 @@ namespace dxvk { void SetNeedsReadback(UINT Subresource, bool value) { m_needsReadback.set(Subresource, value); } - bool NeedsReachback(UINT Subresource) const { return m_needsReadback.get(Subresource) && m_image != nullptr; } + bool NeedsReachback(UINT Subresource) const { return m_needsReadback.get(Subresource); } void MarkAllNeedReadback() { m_needsReadback.setAll(); } diff --git a/src/d3d9/d3d9_device.cpp b/src/d3d9/d3d9_device.cpp index e85b7a3c..e927ecf8 100644 --- a/src/d3d9/d3d9_device.cpp +++ b/src/d3d9/d3d9_device.cpp @@ -849,6 +849,7 @@ namespace dxvk { cLevelExtent); }); + dstTexInfo->SetNeedsReadback(dst->GetSubresource(), true); TrackTextureMappingBufferSequenceNumber(dstTexInfo, dst->GetSubresource()); return D3D_OK; @@ -4159,7 +4160,7 @@ namespace dxvk { std::memset(physSlice.mapPtr, 0, physSlice.length); } else if (!skipWait) { - if (unlikely(needsReadback)) { + if (unlikely(needsReadback) && pResource->GetImage() != nullptr) { Rc resourceImage = pResource->GetImage(); Rc mappedImage = resourceImage->info().sampleCount != 1 diff --git a/src/d3d9/d3d9_swapchain.cpp b/src/d3d9/d3d9_swapchain.cpp index f8b050cd..606bd192 100644 --- a/src/d3d9/d3d9_swapchain.cpp +++ b/src/d3d9/d3d9_swapchain.cpp @@ -469,6 +469,9 @@ namespace dxvk { cLevelExtent); }); + dstTexInfo->SetNeedsReadback(dst->GetSubresource(), true); + m_parent->TrackTextureMappingBufferSequenceNumber(dstTexInfo, dst->GetSubresource()); + return D3D_OK; }