From 8e7df318786e79473246efde3a230436510c013f Mon Sep 17 00:00:00 2001 From: Joshua Ashton Date: Fri, 22 May 2020 04:04:52 +0100 Subject: [PATCH] [d3d9] Correct resolve offset regions for intermediate StretchRect resolves We don't want to use the dst info for these, given the blit will do that. Partially fixes #1637 --- src/d3d9/d3d9_device.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/d3d9/d3d9_device.cpp b/src/d3d9/d3d9_device.cpp index fffbab17..1fd7bf48 100644 --- a/src/d3d9/d3d9_device.cpp +++ b/src/d3d9/d3d9_device.cpp @@ -943,12 +943,12 @@ namespace dxvk { return D3DERR_INVALIDCALL; } - auto EmitResolveCS = [&](const Rc& resolveDst) { + auto EmitResolveCS = [&](const Rc& resolveDst, bool intermediate) { VkImageResolve region; region.srcSubresource = blitInfo.srcSubresource; region.srcOffset = blitInfo.srcOffsets[0]; - region.dstSubresource = blitInfo.dstSubresource; - region.dstOffset = blitInfo.dstOffsets[0]; + region.dstSubresource = intermediate ? blitInfo.srcSubresource : blitInfo.dstSubresource; + region.dstOffset = intermediate ? blitInfo.srcOffsets[0] : blitInfo.dstOffsets[0]; region.extent = srcCopyExtent; EmitCs([ @@ -972,7 +972,7 @@ namespace dxvk { if (fastPath) { if (needsResolve) { - EmitResolveCS(dstImage); + EmitResolveCS(dstImage, false); } else { EmitCs([ cDstImage = dstImage, @@ -994,7 +994,7 @@ namespace dxvk { if (needsResolve) { auto resolveSrc = srcTextureInfo->GetResolveImage(); - EmitResolveCS(resolveSrc); + EmitResolveCS(resolveSrc, true); srcImage = resolveSrc; }