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; }