diff options
| author | Stenzek <stenzek@gmail.com> | 2016-11-19 18:34:41 +1000 |
|---|---|---|
| committer | Stenzek <stenzek@gmail.com> | 2016-11-19 20:29:47 +1000 |
| commit | 6b88a854a791ad94d5b4a31b0dccfba99d514dd3 (patch) | |
| tree | f51bc08bc347d2d2a939e09b4bd2efd8df6c56ec /Source/Core/VideoBackends/Vulkan/FramebufferManager.cpp | |
| parent | 171bb147a8cfe76b3d138eafb8d47a19c4bc32d4 (diff) | |
Vulkan: Handle strided XFB copies
Where src_rect.width * 2 != dst_stride.
Diffstat (limited to 'Source/Core/VideoBackends/Vulkan/FramebufferManager.cpp')
| -rw-r--r-- | Source/Core/VideoBackends/Vulkan/FramebufferManager.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/Source/Core/VideoBackends/Vulkan/FramebufferManager.cpp b/Source/Core/VideoBackends/Vulkan/FramebufferManager.cpp index 17dc9253cd..f01f8ac25b 100644 --- a/Source/Core/VideoBackends/Vulkan/FramebufferManager.cpp +++ b/Source/Core/VideoBackends/Vulkan/FramebufferManager.cpp @@ -1415,9 +1415,11 @@ void FramebufferManager::CopyToRealXFB(u32 xfb_addr, u32 fb_stride, u32 fb_heigh {static_cast<u32>(scaled_rc.GetWidth()), static_cast<u32>(scaled_rc.GetHeight())}}; Texture2D* src_texture = ResolveEFBColorTexture(scaled_rc_vk); - // 2 bytes per pixel, so divide fb_stride by 2 to get the width. - TextureCache::GetInstance()->EncodeYUYVTextureToMemory(xfb_ptr, fb_stride / 2, fb_stride, - fb_height, src_texture, scaled_rc); + // The destination stride can differ from the copy region width, in which case the pixels + // outside the copy region should not be written to. + TextureCache::GetInstance()->EncodeYUYVTextureToMemory( + xfb_ptr, static_cast<u32>(source_rc.GetWidth()), fb_stride, fb_height, src_texture, + scaled_rc); // If we sourced directly from the EFB framebuffer, restore it to a color attachment. if (src_texture == m_efb_color_texture.get()) |
