Permalink
Browse files

Correctly adjust the rendered XFB region at non-native internal resol…

…utions 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.
  • Loading branch information...
AdmiralCurtiss committed Sep 9, 2018
1 parent 5f0d825 commit d97bc0d35917d81a8958e15c4a20e9be3502fa6c
Showing with 10 additions and 1 deletion.
  1. +10 −1 Source/Core/VideoCommon/RenderBase.cpp
@@ -676,7 +676,16 @@ void Renderer::Swap(u32 xfbAddr, u32 fbWidth, u32 fbStride, u32 fbHeight, const
m_last_xfb_ticks = ticks;
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;

0 comments on commit d97bc0d

Please sign in to comment.