Correctly adjust the rendered XFB region at non-native internal resolutions when XFB was loaded from console RAM.

If, for whatever reason, the XFB has to be loaded from console memory, it's possible that the texture is returned at native resolution instead of EFB-scaled resolution. In this case, our xfb_rect.right adjustment must also happen at native resolution instead of scaled resolution.
This commit is contained in:
Admiral H. Curtiss 2018-09-10 00:47:05 +02:00
parent 5f0d825f40
commit d97bc0d359
1 changed files with 10 additions and 1 deletions

View File

@ -676,7 +676,16 @@ void Renderer::Swap(u32 xfbAddr, u32 fbWidth, u32 fbStride, u32 fbHeight, const
m_last_xfb_ticks = ticks; m_last_xfb_ticks = ticks;
auto xfb_rect = texture_config.GetRect(); auto xfb_rect = texture_config.GetRect();
xfb_rect.right -= EFBToScaledX(fbStride - fbWidth);
// It's possible that the returned XFB texture is native resolution
// even when we're rendering at higher than native resolution
// if the XFB was was loaded entirely from console memory.
// If so, adjust the rectangle by native resolution instead of scaled resolution.
const u32 native_stride_width_difference = fbStride - fbWidth;
if (texture_config.width == xfb_entry->native_width)
xfb_rect.right -= native_stride_width_difference;
else
xfb_rect.right -= EFBToScaledX(native_stride_width_difference);
m_last_xfb_region = xfb_rect; m_last_xfb_region = xfb_rect;