summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorJMC47 <JMC4789@gmail.com>2021-06-20 04:01:19 -0400
committerGitHub <noreply@github.com>2021-06-20 04:01:19 -0400
commitc788beecfc2946260e87ae11718608ad4e10d898 (patch)
tree4bfea3bb81c50cacc72f38efc6f81b26702cde51 /Source/Core
parent3e1a25ead050554add154efcc236e1f7a9d427e9 (diff)
parentdf53a5f8809d1f9c21a2975a2fd6e98e9c7a8424 (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.cpp29
-rw-r--r--Source/Core/VideoCommon/TextureInfo.cpp13
-rw-r--r--Source/Core/VideoCommon/TextureInfo.h3
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();