From 0825ca736f4f4177101947751e2cff84f72cecc0 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Thu, 6 Apr 2023 20:19:46 +1000 Subject: [PATCH] GS/HW: Add other StretchRect() calls to texture copies counter Better reflects GPU work. --- pcsx2/GS/Renderers/HW/GSRendererHW.cpp | 5 +++++ pcsx2/GS/Renderers/HW/GSTextureCache.cpp | 9 +++++++++ 2 files changed, 14 insertions(+) diff --git a/pcsx2/GS/Renderers/HW/GSRendererHW.cpp b/pcsx2/GS/Renderers/HW/GSRendererHW.cpp index cdc7db11fc..0940a99339 100644 --- a/pcsx2/GS/Renderers/HW/GSRendererHW.cpp +++ b/pcsx2/GS/Renderers/HW/GSRendererHW.cpp @@ -5022,6 +5022,7 @@ void GSRendererHW::OI_DoubleHalfClear(GSTextureCache::Target*& rt, GSTextureCach // Copy channels being masked. g_gs_device->StretchRect(target->m_texture, GSVector4(0.0f,0.0f,1.0f,1.0f), tex, drect, keep_r, keep_g, keep_b, keep_a); + g_perfmon.Put(GSPerfMon::TextureCopies, 1); delete target->m_texture; target->m_texture = tex; @@ -5084,6 +5085,7 @@ void GSRendererHW::OI_DoubleHalfClear(GSTextureCache::Target*& rt, GSTextureCach // Copy channels being masked. g_gs_device->StretchRect(target->m_texture, GSVector4(0, 0, 1, 1), tex, drect, keep_r, keep_g, keep_b, keep_a); + g_perfmon.Put(GSPerfMon::TextureCopies, 1); delete target->m_texture; target->m_texture = tex; @@ -5218,10 +5220,13 @@ bool GSRendererHW::OI_BlitFMV(GSTextureCache::Target* _rt, GSTextureCache::Sourc const GSVector4i r_full(0, 0, tw, th); g_gs_device->CopyRect(tex->m_texture, rt, r_full, 0, 0); + g_perfmon.Put(GSPerfMon::TextureCopies, 1); g_gs_device->StretchRect(tex->m_texture, sRect, rt, dRect); + g_perfmon.Put(GSPerfMon::TextureCopies, 1); g_gs_device->CopyRect(rt, tex->m_texture, r_full, 0, 0); + g_perfmon.Put(GSPerfMon::TextureCopies, 1); g_gs_device->Recycle(rt); } diff --git a/pcsx2/GS/Renderers/HW/GSTextureCache.cpp b/pcsx2/GS/Renderers/HW/GSTextureCache.cpp index bd52457d7a..f450622feb 100644 --- a/pcsx2/GS/Renderers/HW/GSTextureCache.cpp +++ b/pcsx2/GS/Renderers/HW/GSTextureCache.cpp @@ -1212,6 +1212,7 @@ GSTextureCache::Target* GSTextureCache::LookupTarget(GIFRegTEX0 TEX0, const GSVe GSTexture* tex = type == RenderTarget ? g_gs_device->CreateRenderTarget(new_scaled_size.x, new_scaled_size.y, GSTexture::Format::Color, clear) : g_gs_device->CreateDepthStencil(new_scaled_size.x, new_scaled_size.y, GSTexture::Format::DepthStencil, clear); g_gs_device->StretchRect(dst->m_texture, sRect, tex, dRect, (type == RenderTarget) ? ShaderConvert::COPY : ShaderConvert::DEPTH_COPY, false); + g_perfmon.Put(GSPerfMon::TextureCopies, 1); m_target_memory_usage = (m_target_memory_usage - dst->m_texture->GetMemUsage()) + tex->GetMemUsage(); g_gs_device->Recycle(dst->m_texture); dst->m_texture = tex; @@ -1278,6 +1279,7 @@ GSTextureCache::Target* GSTextureCache::LookupTarget(GIFRegTEX0 TEX0, const GSVe !dst->m_dirty.GetDirtyRect(0, TEX0, dst->GetUnscaledRect()).eq(dst->GetUnscaledRect())) { g_gs_device->StretchRect(dst_match->m_texture, sRect, dst->m_texture, dRect, shader, false); + g_perfmon.Put(GSPerfMon::TextureCopies, 1); } // Now pull in any dirty areas in the new format. @@ -1473,6 +1475,7 @@ void GSTextureCache::ScaleTargetForDisplay(Target* t, const GIFRegTEX0& dispfb, // Fill the new texture with the old data, and discard the old texture. g_gs_device->StretchRect(old_texture, new_texture, GSVector4(old_texture->GetSize()).zwxy(), ShaderConvert::COPY, false); + g_perfmon.Put(GSPerfMon::TextureCopies, 1); m_target_memory_usage = (m_target_memory_usage - old_texture->GetMemUsage()) + new_texture->GetMemUsage(); g_gs_device->Recycle(old_texture); t->m_texture = new_texture; @@ -3125,6 +3128,7 @@ GSTextureCache::Source* GSTextureCache::CreateSource(const GIFRegTEX0& TEX0, con if (use_texture) { g_gs_device->CopyRect(sTex, dTex, sRect, destX, destY); + g_perfmon.Put(GSPerfMon::TextureCopies, 1); } else if (!source_rect_empty) { @@ -3140,6 +3144,8 @@ GSTextureCache::Source* GSTextureCache::CreateSource(const GIFRegTEX0& TEX0, con g_gs_device->StretchRect( sTex, sRectF, dTex, GSVector4(destX, destY, new_size.x, new_size.y), shader, false); } + + g_perfmon.Put(GSPerfMon::TextureCopies, 1); } } @@ -3809,6 +3815,7 @@ void GSTextureCache::Read(Target* t, const GSVector4i& r) if (tmp) { g_gs_device->StretchRect(t->m_texture, src, tmp, GSVector4(drc), ps_shader, false); + g_perfmon.Put(GSPerfMon::TextureCopies, 1); dltex->get()->CopyFromTexture(drc, tmp, drc, 0, true); g_gs_device->Recycle(tmp); } @@ -4477,6 +4484,8 @@ bool GSTextureCache::Target::ResizeTexture(int new_unscaled_width, int new_unsca // Fast memcpy()-like path for color targets. g_gs_device->CopyRect(m_texture, tex, rc, 0, 0); } + + g_perfmon.Put(GSPerfMon::TextureCopies, 1); } else if (m_texture->GetState() == GSTexture::State::Cleared) {