From 764cb5634f3a3c6e2d0babcf5045d293513665cf Mon Sep 17 00:00:00 2001 From: Joshua Ashton Date: Fri, 24 Jan 2020 05:34:14 +0000 Subject: [PATCH] [d3d9] Unmark resources as dirty if they get discarded --- src/d3d9/d3d9_device.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/d3d9/d3d9_device.cpp b/src/d3d9/d3d9_device.cpp index 202d33415..03d460c09 100644 --- a/src/d3d9/d3d9_device.cpp +++ b/src/d3d9/d3d9_device.cpp @@ -3829,6 +3829,13 @@ namespace dxvk { Flags &= ~D3DLOCK_READONLY; pResource->SetLockFlags(Subresource, Flags); + + bool renderable = desc.Usage & (D3DUSAGE_RENDERTARGET | D3DUSAGE_DEPTHSTENCIL | D3DUSAGE_AUTOGENMIPMAP); + + // If we are dirty, then we need to copy -> buffer + // We are also always dirty if we are a render target, + // a depth stencil, or auto generate mipmaps. + bool dirty = pResource->SetDirty(Subresource, false) || renderable; DxvkBufferSliceHandle physSlice; @@ -3856,7 +3863,6 @@ namespace dxvk { // or is reading. Remember! This will only trigger for MANAGED resources // that cannot get affected by GPU, therefore readonly is A-OK for NOT waiting. const bool readOnly = Flags & D3DLOCK_READONLY; - const bool dirty = pResource->SetDirty(Subresource, false); const bool skipWait = (readOnly && managed) || scratch || (readOnly && systemmem && !dirty); if (alloced) @@ -3867,13 +3873,6 @@ namespace dxvk { } } else { - bool renderable = desc.Usage & (D3DUSAGE_RENDERTARGET | D3DUSAGE_DEPTHSTENCIL | D3DUSAGE_AUTOGENMIPMAP); - - // If we are dirty, then we need to copy -> buffer - // We are also always dirty if we are a render target, - // a depth stencil, or auto generate mipmaps. - bool dirty = pResource->SetDirty(Subresource, false) || renderable; - if (unlikely(dirty)) { Rc resourceImage = pResource->GetImage();