summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/RenderBase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/VideoCommon/RenderBase.cpp')
-rw-r--r--Source/Core/VideoCommon/RenderBase.cpp35
1 files changed, 14 insertions, 21 deletions
diff --git a/Source/Core/VideoCommon/RenderBase.cpp b/Source/Core/VideoCommon/RenderBase.cpp
index 63e3f5f5ed..2af607dd64 100644
--- a/Source/Core/VideoCommon/RenderBase.cpp
+++ b/Source/Core/VideoCommon/RenderBase.cpp
@@ -84,9 +84,6 @@ static float AspectToWidescreen(float aspect)
Renderer::Renderer(int backbuffer_width, int backbuffer_height)
: m_backbuffer_width(backbuffer_width), m_backbuffer_height(backbuffer_height)
{
- FramebufferManagerBase::SetLastXfbWidth(MAX_XFB_WIDTH);
- FramebufferManagerBase::SetLastXfbHeight(MAX_XFB_HEIGHT);
-
UpdateActiveConfig();
UpdateDrawRectangle();
CalculateTargetSize();
@@ -116,19 +113,6 @@ void Renderer::RenderToXFB(u32 xfbAddr, const EFBRectangle& sourceRc, u32 fbStri
return;
m_xfb_written = true;
-
- if (g_ActiveConfig.bUseXFB)
- {
- FramebufferManagerBase::CopyToXFB(xfbAddr, fbStride, fbHeight, sourceRc, Gamma);
- }
- else
- {
- // The timing is not predictable here. So try to use the XFB path to dump frames.
- u64 ticks = CoreTiming::GetTicks();
-
- // below div two to convert from bytes to pixels - it expects width, not stride
- Swap(xfbAddr, fbStride / 2, fbStride / 2, fbHeight, sourceRc, ticks, Gamma);
- }
}
unsigned int Renderer::GetEFBScale() const
@@ -433,9 +417,7 @@ TargetRectangle Renderer::CalculateFrameDumpDrawRectangle() const
rc.top = 0;
// If full-resolution frame dumping is disabled, just use the window draw rectangle.
- // Also do this if RealXFB is enabled, since the image has been downscaled for the XFB copy
- // anyway, and there's no point writing an upscaled frame with no filtering.
- if (!g_ActiveConfig.bInternalResolutionFrameDumps || g_ActiveConfig.RealXFBEnabled())
+ if (!g_ActiveConfig.bInternalResolutionFrameDumps)
{
// But still remove the borders, since the caller expects this.
rc.right = m_target_rectangle.GetWidth();
@@ -663,8 +645,19 @@ void Renderer::Swap(u32 xfbAddr, u32 fbWidth, u32 fbStride, u32 fbHeight, const
m_aspect_wide = flush_count_anamorphic > 0.75 * flush_total;
}
- // TODO: merge more generic parts into VideoCommon
- SwapImpl(xfbAddr, fbWidth, fbStride, fbHeight, rc, ticks, Gamma);
+ if (xfbAddr && fbWidth && fbStride && fbHeight)
+ {
+ constexpr int force_safe_texture_cache_hash = 0;
+ // Get the current XFB from texture cache
+ auto* xfb_entry = g_texture_cache->GetTexture(xfbAddr, fbWidth, fbHeight, TextureFormat::XFB,
+ force_safe_texture_cache_hash);
+
+ // TODO, check if xfb_entry is a duplicate of the previous frame and skip SwapImpl
+
+
+ // TODO: merge more generic parts into VideoCommon
+ g_renderer->SwapImpl(xfb_entry->texture.get(), rc, ticks, Gamma);
+ }
if (m_xfb_written)
m_fps_counter.Update();