diff options
| author | JMC47 <JMC4789@gmail.com> | 2026-01-18 13:33:14 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-01-18 13:33:14 -0500 |
| commit | f8b47c031fc7dc506fe1d0f7fed21a2cd2f8000f (patch) | |
| tree | 5743cfa77eca4f06d57289393b0f4d30df6cfe58 /Source | |
| parent | d8e123a70cefa176febba1f4e720ba276ba81a92 (diff) | |
| parent | fb07406f102eaa2d237c95c35e8853680d902b6a (diff) | |
Merge pull request #14291 from JosJuice/defer-textureinfo
VideoCommon: Defer creating TextureInfo
Diffstat (limited to 'Source')
| -rw-r--r-- | Source/Core/VideoCommon/TextureCacheBase.cpp | 16 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/TextureCacheBase.h | 4 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/VertexManagerBase.cpp | 5 |
3 files changed, 12 insertions, 13 deletions
diff --git a/Source/Core/VideoCommon/TextureCacheBase.cpp b/Source/Core/VideoCommon/TextureCacheBase.cpp index d27234dee9..4b048ef2ac 100644 --- a/Source/Core/VideoCommon/TextureCacheBase.cpp +++ b/Source/Core/VideoCommon/TextureCacheBase.cpp @@ -1231,9 +1231,9 @@ private: std::vector<Level> levels; }; -TCacheEntry* TextureCacheBase::Load(const TextureInfo& texture_info) +TCacheEntry* TextureCacheBase::Load(u32 stage) { - if (auto entry = LoadImpl(texture_info, false)) + if (auto entry = LoadImpl(stage, false)) { if (!DidLinkedAssetsChange(*entry)) { @@ -1241,19 +1241,18 @@ TCacheEntry* TextureCacheBase::Load(const TextureInfo& texture_info) } InvalidateTexture(GetTexCacheIter(entry)); - return LoadImpl(texture_info, true); + return LoadImpl(stage, true); } return nullptr; } -TCacheEntry* TextureCacheBase::LoadImpl(const TextureInfo& texture_info, bool force_reload) +TCacheEntry* TextureCacheBase::LoadImpl(u32 stage, bool force_reload) { // if this stage was not invalidated by changes to texture registers, keep the current texture - if (!force_reload && TMEM::IsValid(texture_info.GetStage()) && - m_bound_textures[texture_info.GetStage()]) + if (!force_reload && TMEM::IsValid(stage) && m_bound_textures[stage]) { - TCacheEntry* entry = m_bound_textures[texture_info.GetStage()].get(); + TCacheEntry* entry = m_bound_textures[stage].get(); // If the TMEM configuration is such that this texture is more or less guaranteed to still // be in TMEM, then we know we can reuse the old entry without even hashing the memory // @@ -1263,7 +1262,7 @@ TCacheEntry* TextureCacheBase::LoadImpl(const TextureInfo& texture_info, bool fo // // Spyro: A Hero's Tail is known for (deliberately?) using such overwritten textures // in it's bloom effect, which breaks without giving it the invalidated texture. - if (TMEM::IsCached(texture_info.GetStage())) + if (TMEM::IsCached(stage)) { return entry; } @@ -1276,6 +1275,7 @@ TCacheEntry* TextureCacheBase::LoadImpl(const TextureInfo& texture_info, bool fo } } + const TextureInfo texture_info = TextureInfo::FromStage(stage); auto entry = GetTexture(g_ActiveConfig.iSafeTextureCache_ColorSamples, texture_info); if (!entry) diff --git a/Source/Core/VideoCommon/TextureCacheBase.h b/Source/Core/VideoCommon/TextureCacheBase.h index 9a95400679..1aa67dede5 100644 --- a/Source/Core/VideoCommon/TextureCacheBase.h +++ b/Source/Core/VideoCommon/TextureCacheBase.h @@ -277,7 +277,7 @@ public: void Invalidate(); void ReleaseToPool(TCacheEntry* entry); - TCacheEntry* Load(const TextureInfo& texture_info); + TCacheEntry* Load(u32 stage); RcTcacheEntry GetTexture(const int textureCacheSafetyColorSampleSize, const TextureInfo& texture_info); RcTcacheEntry GetXFBTexture(u32 address, u32 width, u32 height, u32 stride, @@ -346,7 +346,7 @@ private: static bool DidLinkedAssetsChange(const TCacheEntry& entry); - TCacheEntry* LoadImpl(const TextureInfo& texture_info, bool force_reload); + TCacheEntry* LoadImpl(u32 stage, bool force_reload); bool CreateUtilityTextures(); diff --git a/Source/Core/VideoCommon/VertexManagerBase.cpp b/Source/Core/VideoCommon/VertexManagerBase.cpp index 312b8cb005..2bc6d586d7 100644 --- a/Source/Core/VideoCommon/VertexManagerBase.cpp +++ b/Source/Core/VideoCommon/VertexManagerBase.cpp @@ -36,7 +36,6 @@ #include "VideoCommon/PixelShaderManager.h" #include "VideoCommon/Statistics.h" #include "VideoCommon/TextureCacheBase.h" -#include "VideoCommon/TextureInfo.h" #include "VideoCommon/VertexLoaderManager.h" #include "VideoCommon/VertexShaderManager.h" #include "VideoCommon/VideoBackendBase.h" @@ -569,7 +568,7 @@ void VertexManagerBase::Flush() { for (const u32 i : used_textures) { - const auto cache_entry = g_texture_cache->Load(TextureInfo::FromStage(i)); + const auto cache_entry = g_texture_cache->Load(i); if (!cache_entry) continue; const float custom_tex_scale = cache_entry->GetWidth() / float(cache_entry->native_width); @@ -581,7 +580,7 @@ void VertexManagerBase::Flush() { for (const u32 i : used_textures) { - const auto cache_entry = g_texture_cache->Load(TextureInfo::FromStage(i)); + const auto cache_entry = g_texture_cache->Load(i); if (cache_entry) { if (!Common::Contains(texture_names, cache_entry->texture_info_name)) |
