From 69947fb9073420e5f33ea78f66442149bfa4efe1 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Wed, 11 Dec 2024 15:02:51 +1000 Subject: [PATCH] GPU/TextureCache: Look for replacements outside of subdirectory i.e. old setups that do not have the `replacements` subdirectory. --- src/core/gpu_hw_texture_cache.cpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/core/gpu_hw_texture_cache.cpp b/src/core/gpu_hw_texture_cache.cpp index a9b76131a..f70552569 100644 --- a/src/core/gpu_hw_texture_cache.cpp +++ b/src/core/gpu_hw_texture_cache.cpp @@ -2942,6 +2942,9 @@ bool GPUTextureCache::HasValidReplacementExtension(const std::string_view path) void GPUTextureCache::FindTextureReplacements(bool load_vram_write_replacements, bool load_texture_replacements) { + if (s_state.game_id.empty()) + return; + FileSystem::FindResultsArray files; FileSystem::FindFiles(GetTextureReplacementDirectory().c_str(), "*", FILESYSTEM_FIND_FILES | FILESYSTEM_FIND_RECURSIVE, &files); @@ -3028,6 +3031,9 @@ void GPUTextureCache::LoadTextureReplacementAliases(const ryml::ConstNodeRef& ro bool load_vram_write_replacement_aliases, bool load_texture_replacement_aliases) { + if (s_state.game_id.empty()) + return; + const std::string source_dir = GetTextureReplacementDirectory(); for (const ryml::ConstNodeRef& current : root.cchildren()) @@ -3303,8 +3309,18 @@ bool GPUTextureCache::EnsureGameDirectoryExists() std::string GPUTextureCache::GetTextureReplacementDirectory() { - return Path::Combine(EmuFolders::Textures, - SmallString::from_format("{}" FS_OSPATH_SEPARATOR_STR "replacements", s_state.game_id)); + std::string dir = Path::Combine( + EmuFolders::Textures, SmallString::from_format("{}" FS_OSPATH_SEPARATOR_STR "replacements", s_state.game_id)); + if (!FileSystem::DirectoryExists(dir.c_str())) + { + // Check for the old directory structure without a replacements subdirectory. + std::string altdir = Path::Combine(EmuFolders::Textures, s_state.game_id); + if (FileSystem::DirectoryExists(altdir.c_str())) + WARNING_LOG("Using deprecated texture replacement directory {}", altdir); + dir = std::move(altdir); + } + + return dir; } std::string GPUTextureCache::GetTextureDumpDirectory()