summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/RenderBase.cpp
diff options
context:
space:
mode:
authorStenzek <stenzek@users.noreply.github.com>2018-09-14 14:59:50 +1000
committerGitHub <noreply@github.com>2018-09-14 14:59:50 +1000
commitce9e9186f715408af8d9abb60b73ccb1e4d3c474 (patch)
tree9c10af066e0a450906a236873135f395f73123ee /Source/Core/VideoCommon/RenderBase.cpp
parent0fbe1a233049aecb8ea518aee9eef00f6e64dfc7 (diff)
parentd97bc0d35917d81a8958e15c4a20e9be3502fa6c (diff)
Merge pull request #7406 from AdmiralCurtiss/xfb_rect_scale_from_ram
Correctly adjust the rendered XFB region at non-native internal resolutions when XFB was loaded from console RAM.
Diffstat (limited to 'Source/Core/VideoCommon/RenderBase.cpp')
-rw-r--r--Source/Core/VideoCommon/RenderBase.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/Source/Core/VideoCommon/RenderBase.cpp b/Source/Core/VideoCommon/RenderBase.cpp
index 25730f98f4..317f876aa7 100644
--- a/Source/Core/VideoCommon/RenderBase.cpp
+++ b/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;