From d6d33411834df82dea8e7c250925ccfe595e0cc2 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Sat, 19 Nov 2016 18:54:05 +1000 Subject: [PATCH] D3D: Fix strided XFB copies --- Source/Core/VideoBackends/D3D/FramebufferManager.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Source/Core/VideoBackends/D3D/FramebufferManager.cpp b/Source/Core/VideoBackends/D3D/FramebufferManager.cpp index 3f7ab4c528..e95b2ab70e 100644 --- a/Source/Core/VideoBackends/D3D/FramebufferManager.cpp +++ b/Source/Core/VideoBackends/D3D/FramebufferManager.cpp @@ -275,8 +275,10 @@ void FramebufferManager::CopyToRealXFB(u32 xfbAddr, u32 fbStride, u32 fbHeight, const EFBRectangle& sourceRc, float Gamma) { u8* dst = Memory::GetPointer(xfbAddr); - // below div2 due to dx using pixel width - s_xfbEncoder.Encode(dst, fbStride / 2, fbHeight, sourceRc, Gamma); + + // The destination stride can differ from the copy region width, in which case the pixels + // outside the copy region should not be written to. + s_xfbEncoder.Encode(dst, static_cast(sourceRc.GetWidth()), fbHeight, sourceRc, Gamma); } std::unique_ptr FramebufferManager::CreateXFBSource(unsigned int target_width,