From c3ace64205a80e6af7f0781b7c910bdee20a9233 Mon Sep 17 00:00:00 2001 From: TJnotJT Date: Sun, 21 Jun 2026 15:23:02 -0400 Subject: [PATCH] GS/HW: Change prefer_unused_texture parameter to prefer_reuse in GSDevice::FetchSurface(). prefer_reuse is the opposite of prefer_unused_texture, so all corresponding arguments are inverted. --- pcsx2/GS/Renderers/Common/GSDevice.cpp | 30 ++++++++++++------------ pcsx2/GS/Renderers/Common/GSDevice.h | 4 ++-- pcsx2/GS/Renderers/HW/GSRendererHW.cpp | 4 ++-- pcsx2/GS/Renderers/HW/GSTextureCache.cpp | 8 +++---- 4 files changed, 23 insertions(+), 23 deletions(-) diff --git a/pcsx2/GS/Renderers/Common/GSDevice.cpp b/pcsx2/GS/Renderers/Common/GSDevice.cpp index c8fc427e27..e8d6367262 100644 --- a/pcsx2/GS/Renderers/Common/GSDevice.cpp +++ b/pcsx2/GS/Renderers/Common/GSDevice.cpp @@ -600,12 +600,12 @@ void GSDevice::TextureRecycleDeleter::operator()(GSTexture* const tex) g_gs_device->Recycle(tex); } -GSTexture* GSDevice::FetchSurface(GSTexture::Usage usage, const GSVector2i& size, int levels, GSTexture::Format format, bool clear, bool prefer_unused_texture) +GSTexture* GSDevice::FetchSurface(GSTexture::Usage usage, const GSVector2i& size, int levels, GSTexture::Format format, bool clear, bool prefer_reuse) { - return FetchSurface(usage, size.x, size.y, levels, format, clear, prefer_unused_texture); + return FetchSurface(usage, size.x, size.y, levels, format, clear, prefer_reuse); } -GSTexture* GSDevice::FetchSurface(GSTexture::Usage usage, int width, int height, int levels, GSTexture::Format format, bool clear, bool prefer_unused_texture) +GSTexture* GSDevice::FetchSurface(GSTexture::Usage usage, int width, int height, int levels, GSTexture::Format format, bool clear, bool prefer_reuse) { const GSVector2i size(std::clamp(width, 1, static_cast(g_gs_device->GetMaxTextureSize())), std::clamp(height, 1, static_cast(g_gs_device->GetMaxTextureSize()))); @@ -622,7 +622,7 @@ GSTexture* GSDevice::FetchSurface(GSTexture::Usage usage, int width, int height, if (t->GetUsage() == usage && t->GetFormat() == format && t->GetSize() == size && t->GetMipmapLevels() == levels) { - if (!prefer_unused_texture || t->GetLastFrameUsed() != m_frame) + if (prefer_reuse || t->GetLastFrameUsed() != m_frame) { m_pool_memory_usage -= t->GetMemUsage(); pool.erase(i); @@ -764,49 +764,49 @@ void GSDevice::PurgePool() GSTexture* GSDevice::CreateRenderTarget(int w, int h, GSTexture::Format format, bool clear, bool prefer_reuse) { - return FetchSurface(GSTexture::RenderTarget, w, h, 1, format, clear, !prefer_reuse); + return FetchSurface(GSTexture::RenderTarget, w, h, 1, format, clear, prefer_reuse); } GSTexture* GSDevice::CreateRenderTarget(const GSVector2i& size, GSTexture::Format format, bool clear, bool prefer_reuse) { - return FetchSurface(GSTexture::RenderTarget, size.x, size.y, 1, format, clear, !prefer_reuse); + return FetchSurface(GSTexture::RenderTarget, size.x, size.y, 1, format, clear, prefer_reuse); } GSTexture* GSDevice::CreateFeedbackTarget(int w, int h, GSTexture::Format format, bool clear, bool prefer_reuse) { - return FetchSurface(GSTexture::FeedbackTarget, w, h, 1, format, clear, !prefer_reuse); + return FetchSurface(GSTexture::FeedbackTarget, w, h, 1, format, clear, prefer_reuse); } GSTexture* GSDevice::CreateFeedbackTarget(const GSVector2i& size, GSTexture::Format format, bool clear, bool prefer_reuse) { - return FetchSurface(GSTexture::FeedbackTarget, size.x, size.y, 1, format, clear, !prefer_reuse); + return FetchSurface(GSTexture::FeedbackTarget, size.x, size.y, 1, format, clear, prefer_reuse); } GSTexture* GSDevice::CreateShaderWriteTarget(int w, int h, GSTexture::Format format, bool clear, bool prefer_reuse) { - return FetchSurface(GSTexture::ShaderWriteTarget, w, h, 1, format, clear, !prefer_reuse); + return FetchSurface(GSTexture::ShaderWriteTarget, w, h, 1, format, clear, prefer_reuse); } GSTexture* GSDevice::CreateShaderWriteTarget(const GSVector2i& size, GSTexture::Format format, bool clear, bool prefer_reuse) { - return FetchSurface(GSTexture::ShaderWriteTarget, size.x, size.y, 1, format, clear, !prefer_reuse); + return FetchSurface(GSTexture::ShaderWriteTarget, size.x, size.y, 1, format, clear, prefer_reuse); } GSTexture* GSDevice::CreateDepthStencil(int w, int h, bool clear, bool prefer_reuse) { - return FetchSurface(GSTexture::DepthStencil, w, h, 1, GSTexture::Format::DepthStencil, clear, !prefer_reuse); + return FetchSurface(GSTexture::DepthStencil, w, h, 1, GSTexture::Format::DepthStencil, clear, prefer_reuse); } GSTexture* GSDevice::CreateDepthStencil(const GSVector2i& size, bool clear, bool prefer_reuse) { - return FetchSurface(GSTexture::DepthStencil, size.x, size.y, 1, GSTexture::Format::DepthStencil, clear, !prefer_reuse); + return FetchSurface(GSTexture::DepthStencil, size.x, size.y, 1, GSTexture::Format::DepthStencil, clear, prefer_reuse); } GSTexture* GSDevice::CreateTexture(int w, int h, int mipmap_levels, GSTexture::Format format, bool prefer_reuse) { pxAssert(mipmap_levels != 0 && (mipmap_levels < 0 || mipmap_levels <= GetMipmapLevelsForSize(w, h))); const int levels = mipmap_levels < 0 ? GetMipmapLevelsForSize(w, h) : mipmap_levels; - return FetchSurface(GSTexture::Texture, w, h, levels, format, false, m_features.prefer_new_textures && !prefer_reuse); + return FetchSurface(GSTexture::Texture, w, h, levels, format, false, m_features.prefer_new_textures && prefer_reuse); } GSTexture* GSDevice::CreateTexture(const GSVector2i& size, int mipmap_levels, GSTexture::Format format, bool prefer_reuse) @@ -826,7 +826,7 @@ GSTexture* GSDevice::CreateCompatible(GSTexture* tex, const GSVector2i& size, bo GSTexture* GSDevice::CreateCompatible(GSTexture* tex, int w, int h, bool clear, bool prefer_reuse) { - return FetchSurface(tex->GetUsage(), w, h, 1, tex->GetFormat(), clear, !prefer_reuse); + return FetchSurface(tex->GetUsage(), w, h, 1, tex->GetFormat(), clear, prefer_reuse); } void GSDevice::DoStretchRectWithAssertions(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, @@ -1080,7 +1080,7 @@ bool GSDevice::ResizeRenderTarget(GSTexture** t, int w, int h, bool preserve_con const GSTexture::Format fmt = orig_tex ? orig_tex->GetFormat() : GSTexture::Format::Color; const GSTexture::Usage usage = orig_tex ? orig_tex->GetUsage() : GSTexture::RenderTarget; const bool really_preserve_contents = (preserve_contents && orig_tex); - GSTexture* new_tex = FetchSurface(usage, w, h, 1, fmt, !really_preserve_contents, true); + GSTexture* new_tex = FetchSurface(usage, w, h, 1, fmt, !really_preserve_contents, false); if (!new_tex) { Console.WriteLn("%dx%d texture allocation failed in ResizeTexture()", w, h); diff --git a/pcsx2/GS/Renderers/Common/GSDevice.h b/pcsx2/GS/Renderers/Common/GSDevice.h index 4970cc67a7..6dfb6ab287 100644 --- a/pcsx2/GS/Renderers/Common/GSDevice.h +++ b/pcsx2/GS/Renderers/Common/GSDevice.h @@ -1625,8 +1625,8 @@ public: virtual void PopDebugGroup() = 0; virtual void InsertDebugMessage(DebugMessageCategory category, const char* fmt, ...) = 0; - GSTexture* FetchSurface(GSTexture::Usage usage, int width, int height, int levels, GSTexture::Format format, bool clear, bool prefer_unused_texture); - GSTexture* FetchSurface(GSTexture::Usage usage, const GSVector2i& size, int levels, GSTexture::Format format, bool clear, bool prefer_unused_texture); + GSTexture* FetchSurface(GSTexture::Usage usage, int width, int height, int levels, GSTexture::Format format, bool clear, bool prefer_reuse); + GSTexture* FetchSurface(GSTexture::Usage usage, const GSVector2i& size, int levels, GSTexture::Format format, bool clear, bool prefer_reuse); GSTexture* CreateRenderTarget(int w, int h, GSTexture::Format format, bool clear = true, bool prefer_reuse = true); GSTexture* CreateRenderTarget(const GSVector2i& size, GSTexture::Format format, bool clear = true, bool prefer_reuse = true); GSTexture* CreateFeedbackTarget(int w, int h, GSTexture::Format format, bool clear = true, bool prefer_reuse = true); diff --git a/pcsx2/GS/Renderers/HW/GSRendererHW.cpp b/pcsx2/GS/Renderers/HW/GSRendererHW.cpp index c2c08c8d01..02eb203edd 100644 --- a/pcsx2/GS/Renderers/HW/GSRendererHW.cpp +++ b/pcsx2/GS/Renderers/HW/GSRendererHW.cpp @@ -7801,9 +7801,9 @@ void GSRendererHW::ConvertTextureTypeROVSingle(GSTextureCache::Target* tgt, bool GSTexture::Usage usage = shader_write ? GSTexture::ShaderWriteTarget : GSTexture::FeedbackTarget; GSTexture* new_tex = depth ? (shader_write ? - g_gs_device->FetchSurface(usage, old_tex->GetSize(), 1, GSTexture::Format::DepthColor, false, false) : + g_gs_device->FetchSurface(usage, old_tex->GetSize(), 1, GSTexture::Format::DepthColor, false, true) : g_gs_device->CreateDepthStencil(old_tex->GetSize(), false, true)) : - g_gs_device->FetchSurface(usage, old_tex->GetSize(), 1, GSTexture::Format::Color, false, false); + g_gs_device->FetchSurface(usage, old_tex->GetSize(), 1, GSTexture::Format::Color, false, true); switch (old_tex->GetState()) { diff --git a/pcsx2/GS/Renderers/HW/GSTextureCache.cpp b/pcsx2/GS/Renderers/HW/GSTextureCache.cpp index f863e3939b..1949f867c8 100644 --- a/pcsx2/GS/Renderers/HW/GSTextureCache.cpp +++ b/pcsx2/GS/Renderers/HW/GSTextureCache.cpp @@ -6069,7 +6069,7 @@ GSTextureCache::Source* GSTextureCache::CreateSource(const GIFRegTEX0& TEX0, con const bool outside_target = ((x + w) > dst->m_texture->GetWidth() || (y + h) > dst->m_texture->GetHeight()); GSTexture::Usage usage = outside_target ? dst->m_texture->GetUsage() : GSTexture::Texture; GSTexture* sTex = dst->m_texture; - GSTexture* dTex = g_gs_device->FetchSurface(usage, w, h, outside_target ? 1 : tlevels, sTex->GetFormat(), true, !PreferReusedLabelledTexture()); + GSTexture* dTex = g_gs_device->FetchSurface(usage, w, h, outside_target ? 1 : tlevels, sTex->GetFormat(), true, PreferReusedLabelledTexture()); if (!dTex) [[unlikely]] { Console.Error("Failed to allocate %dx%d texture for offset source", w, h); @@ -6379,7 +6379,7 @@ GSTextureCache::Source* GSTextureCache::CreateSource(const GIFRegTEX0& TEX0, con // 'src' is the new texture cache entry (hence the output) GSTexture::Usage usage = use_texture ? GSTexture::Texture : dst->m_texture->GetUsage(); GSTexture* sTex = dst->m_texture; - GSTexture* dTex = g_gs_device->FetchSurface(usage, new_size, 1, sTex->GetFormat(), source_rect_empty || destX != 0 || destY != 0, !PreferReusedLabelledTexture()); + GSTexture* dTex = g_gs_device->FetchSurface(usage, new_size, 1, sTex->GetFormat(), source_rect_empty || destX != 0 || destY != 0, PreferReusedLabelledTexture()); if (!dTex) [[unlikely]] { Console.Error("Failed to allocate %dx%d texture for target copy to source", new_size.x, new_size.y); @@ -6425,7 +6425,7 @@ GSTextureCache::Source* GSTextureCache::CreateSource(const GIFRegTEX0& TEX0, con if (!GSConfig.UserHacks_NativePaletteDraw && dst->GetScale() > 1.0f) { GSTexture::Usage usage = use_texture ? GSTexture::Texture : dst->m_texture->GetUsage(); - GSTexture* tmpTex = g_gs_device->FetchSurface(usage, dst->m_unscaled_size, 1, dst->m_texture->GetFormat(), false, !PreferReusedLabelledTexture()); + GSTexture* tmpTex = g_gs_device->FetchSurface(usage, dst->m_unscaled_size, 1, dst->m_texture->GetFormat(), false, PreferReusedLabelledTexture()); const GSVector4 dRect = GSVector4(GSVector4i::loadh(dst->m_unscaled_size)); @@ -7167,7 +7167,7 @@ GSTextureCache::Target* GSTextureCache::Target::Create(GIFRegTEX0 TEX0, int w, i GSTexture::Usage usage = type == RenderTarget ? GSTexture::FeedbackTarget : (g_gs_device->Features().depth_feedback ? GSTexture::FeedbackDepth : GSTexture::DepthStencil); GSTexture::Format format = type == RenderTarget ? GSTexture::Format::Color : GSTexture::Format::DepthStencil; - GSTexture* texture = g_gs_device->FetchSurface(usage, scaled_w, scaled_h, 1, format, clear, !PreferReusedLabelledTexture()); + GSTexture* texture = g_gs_device->FetchSurface(usage, scaled_w, scaled_h, 1, format, clear, PreferReusedLabelledTexture()); if (!texture) return nullptr;