From 0fc67aa2f60b7448c8d8681bb876e43dfdfad101 Mon Sep 17 00:00:00 2001 From: kd-11 Date: Thu, 24 May 2018 09:20:15 +0300 Subject: [PATCH] gl: fix wcb regression - Partial framebuffers and blit targets are possible! --- rpcs3/Emu/RSX/GL/GLTextureCache.h | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/RSX/GL/GLTextureCache.h b/rpcs3/Emu/RSX/GL/GLTextureCache.h index d8a8e2c84d..7562b83ead 100644 --- a/rpcs3/Emu/RSX/GL/GLTextureCache.h +++ b/rpcs3/Emu/RSX/GL/GLTextureCache.h @@ -493,13 +493,26 @@ namespace gl require_manual_shuffle = true; } - if (real_pitch >= rsx_pitch || scaled_texture != 0) + if (real_pitch >= rsx_pitch || scaled_texture != 0 || valid_range.second <= rsx_pitch) { memcpy(dst, src, valid_range.second); } else { - fmt::throw_exception("Unreachable"); + if (valid_range.second % rsx_pitch) + { + fmt::throw_exception("Unreachable" HERE); + } + + u8 *_src = (u8*)src; + u8 *_dst = (u8*)dst; + const auto num_rows = valid_range.second / rsx_pitch; + for (u32 row = 0; row < num_rows; ++row) + { + memcpy(_dst, _src, real_pitch); + _src += real_pitch; + _dst += rsx_pitch; + } } if (require_manual_shuffle)