diff options
| author | JMC47 <JMC4789@gmail.com> | 2021-06-20 04:01:19 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-06-20 04:01:19 -0400 |
| commit | c788beecfc2946260e87ae11718608ad4e10d898 (patch) | |
| tree | 4bfea3bb81c50cacc72f38efc6f81b26702cde51 /Source/Core | |
| parent | 3e1a25ead050554add154efcc236e1f7a9d427e9 (diff) | |
| parent | df53a5f8809d1f9c21a2975a2fd6e98e9c7a8424 (diff) | |
Merge pull request #9711 from iwubcode/enhance-wildcard-support
VideoCommon: enhance wildcard support in hi res texture lookup
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/VideoCommon/HiresTextures.cpp | 29 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/TextureInfo.cpp | 13 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/TextureInfo.h | 3 |
3 files changed, 31 insertions, 14 deletions
diff --git a/Source/Core/VideoCommon/HiresTextures.cpp b/Source/Core/VideoCommon/HiresTextures.cpp index 96c9ccbf10..20a394586b 100644 --- a/Source/Core/VideoCommon/HiresTextures.cpp +++ b/Source/Core/VideoCommon/HiresTextures.cpp @@ -221,20 +221,29 @@ std::string HiresTexture::GenBaseName(TextureInfo& texture_info, bool dump) const auto texture_name_details = texture_info.CalculateTextureName(); - // try to match a wildcard template - if (!dump) - { - const std::string texture_name = - fmt::format("{}_${}", texture_name_details.base_name, texture_name_details.format_name); - if (s_textureMap.find(texture_name) != s_textureMap.end()) - return texture_name; - } - - // else generate the complete texture + // look for an exact match first const std::string full_name = texture_name_details.GetFullName(); if (dump || s_textureMap.find(full_name) != s_textureMap.end()) return full_name; + // else try and find a wildcard + if (!dump) + { + // Single wildcard ignoring the tlut hash + const std::string texture_name_single_wildcard_tlut = + fmt::format("{}_{}_$_{}", texture_name_details.base_name, texture_name_details.texture_name, + texture_name_details.format_name); + if (s_textureMap.find(texture_name_single_wildcard_tlut) != s_textureMap.end()) + return texture_name_single_wildcard_tlut; + + // Single wildcard ignoring the texture hash + const std::string texture_name_single_wildcard_tex = + fmt::format("{}_${}_{}", texture_name_details.base_name, texture_name_details.tlut_name, + texture_name_details.format_name); + if (s_textureMap.find(texture_name_single_wildcard_tex) != s_textureMap.end()) + return texture_name_single_wildcard_tex; + } + return ""; } diff --git a/Source/Core/VideoCommon/TextureInfo.cpp b/Source/Core/VideoCommon/TextureInfo.cpp index 09c5dee375..166b58497e 100644 --- a/Source/Core/VideoCommon/TextureInfo.cpp +++ b/Source/Core/VideoCommon/TextureInfo.cpp @@ -4,6 +4,7 @@ #include "VideoCommon/TextureInfo.h" +#include <fmt/format.h> #include <xxhash.h> #include "Common/Align.h" @@ -95,6 +96,11 @@ TextureInfo::TextureInfo(const u8* ptr, const u8* tlut_ptr, u32 address, } } +std::string TextureInfo::NameDetails::GetFullName() const +{ + return fmt::format("{}_{}{}_{}", base_name, texture_name, tlut_name, format_name); +} + TextureInfo::NameDetails TextureInfo::CalculateTextureName() { if (!m_ptr) @@ -151,10 +157,11 @@ TextureInfo::NameDetails TextureInfo::CalculateTextureName() const u64 tlut_hash = tlut_size ? XXH64(tlut, tlut_size, 0) : 0; NameDetails result; - result.base_name = fmt::format("{}{}x{}{}_{:016x}", format_prefix, m_raw_width, m_raw_height, - m_mipmaps_enabled ? "_m" : "", tex_hash); + result.base_name = fmt::format("{}{}x{}{}", format_prefix, m_raw_width, m_raw_height, + m_mipmaps_enabled ? "_m" : ""); + result.texture_name = fmt::format("{:016x}", tex_hash); result.tlut_name = tlut_size ? fmt::format("_{:016x}", tlut_hash) : ""; - result.format_name = fmt::format("_{}", static_cast<int>(m_texture_format)); + result.format_name = fmt::to_string(static_cast<int>(m_texture_format)); return result; } diff --git a/Source/Core/VideoCommon/TextureInfo.h b/Source/Core/VideoCommon/TextureInfo.h index d48e63706f..55e705bab7 100644 --- a/Source/Core/VideoCommon/TextureInfo.h +++ b/Source/Core/VideoCommon/TextureInfo.h @@ -25,10 +25,11 @@ public: struct NameDetails { std::string base_name; + std::string texture_name; std::string tlut_name; std::string format_name; - std::string GetFullName() const { return base_name + tlut_name + format_name; } + std::string GetFullName() const; }; NameDetails CalculateTextureName(); |
