From 5e803c3db3fa27b943d3d7789086789946eed6a7 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Sat, 28 Nov 2015 20:04:36 +1000 Subject: [PATCH] D3D: Fix EFB->XFB copies incorrectly scaling, match GL behavior --- Source/Core/VideoBackends/D3D/FramebufferManager.cpp | 5 +++-- Source/Core/VideoBackends/D3D/Render.cpp | 8 ++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/Source/Core/VideoBackends/D3D/FramebufferManager.cpp b/Source/Core/VideoBackends/D3D/FramebufferManager.cpp index f9f798f262..8ba8074d40 100644 --- a/Source/Core/VideoBackends/D3D/FramebufferManager.cpp +++ b/Source/Core/VideoBackends/D3D/FramebufferManager.cpp @@ -199,12 +199,13 @@ void XFBSource::CopyEFB(float Gamma) // Copy EFB data to XFB and restore render target again const D3D11_VIEWPORT vp = CD3D11_VIEWPORT(0.f, 0.f, (float)texWidth, (float)texHeight); + const D3D11_RECT rect = CD3D11_RECT(0, 0, texWidth, texHeight); D3D::context->RSSetViewports(1, &vp); D3D::context->OMSetRenderTargets(1, &tex->GetRTV(), nullptr); - D3D::SetLinearCopySampler(); + D3D::SetPointCopySampler(); - D3D::drawShadedTexQuad(FramebufferManager::GetEFBColorTexture()->GetSRV(), sourceRc.AsRECT(), + D3D::drawShadedTexQuad(FramebufferManager::GetEFBColorTexture()->GetSRV(), &rect, Renderer::GetTargetWidth(), Renderer::GetTargetHeight(), PixelShaderCache::GetColorCopyProgram(true), VertexShaderCache::GetSimpleVertexShader(), VertexShaderCache::GetSimpleInputLayout(), GeometryShaderCache::GetCopyGeometryShader(), Gamma); diff --git a/Source/Core/VideoBackends/D3D/Render.cpp b/Source/Core/VideoBackends/D3D/Render.cpp index a984ff6304..e159925d8f 100644 --- a/Source/Core/VideoBackends/D3D/Render.cpp +++ b/Source/Core/VideoBackends/D3D/Render.cpp @@ -783,10 +783,10 @@ void Renderer::SwapImpl(u32 xfbAddr, u32 fbWidth, u32 fbStride, u32 fbHeight, co //drawRc.right *= hScale; TargetRectangle sourceRc; - sourceRc.left = 0; - sourceRc.top = 0; - sourceRc.right = (int)xfbSource->texWidth; - sourceRc.bottom = (int)xfbSource->texHeight; + sourceRc.left = xfbSource->sourceRc.left; + sourceRc.top = xfbSource->sourceRc.top; + sourceRc.right = xfbSource->sourceRc.right; + sourceRc.bottom = xfbSource->sourceRc.bottom; sourceRc.right -= Renderer::EFBToScaledX(fbStride - fbWidth);