From f1e79bffd3f9fdedbccd0bf4d5afe70c6393ddc8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 20 Jan 2026 03:46:54 +0000 Subject: [PATCH 1/8] Initial plan From de35c06ddbb9dc8529ee79aa2f74f026a9df5546 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 20 Jan 2026 03:49:34 +0000 Subject: [PATCH 2/8] Add plugin version check to shader cache validation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Store Plugin::VERSION in cache Info.ini - Validate plugin version on startup - Clear cache automatically when version changes (e.g., 1.4.6 → 1.4.7) - Improve logging with specific reason for cache invalidation Co-authored-by: alandtse <7086117+alandtse@users.noreply.github.com> --- src/ShaderCache.cpp | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/src/ShaderCache.cpp b/src/ShaderCache.cpp index 39ddc25a61..18a0b72d64 100644 --- a/src/ShaderCache.cpp +++ b/src/ShaderCache.cpp @@ -7,6 +7,8 @@ #include "Features/DynamicCubemaps.h" +#include "Plugin.h" + namespace SIE { namespace SShaderCache @@ -2190,13 +2192,35 @@ namespace SIE ini.LoadFile(L"Data\\ShaderCache\\Info.ini"); bool valid = true; + // Check shader cache version if (auto version = ini.GetValue("Cache", "Version")) { - if (strcmp(SHADER_CACHE_VERSION.string().c_str(), version) != 0 || !(globals::state->ValidateCache(ini))) { - logger::info("Disk cache outdated or invalid"); + if (strcmp(SHADER_CACHE_VERSION.string().c_str(), version) != 0) { + logger::info("Disk cache outdated: cache version mismatch (current: {}, cached: {})", + SHADER_CACHE_VERSION.string(), version); valid = false; } } else { - logger::info("Disk cache outdated or invalid"); + logger::info("Disk cache outdated: no cache version found"); + valid = false; + } + + // Check plugin version + if (valid) { + if (auto pluginVersion = ini.GetValue("Cache", "PluginVersion")) { + if (strcmp(Plugin::VERSION.string().c_str(), pluginVersion) != 0) { + logger::info("Disk cache outdated: plugin version changed (current: {}, cached: {})", + Plugin::VERSION.string(), pluginVersion); + valid = false; + } + } else { + logger::info("Disk cache outdated: no plugin version found"); + valid = false; + } + } + + // Check feature validation + if (valid && !(globals::state->ValidateCache(ini))) { + logger::info("Disk cache outdated: feature validation failed"); valid = false; } @@ -2212,9 +2236,11 @@ namespace SIE CSimpleIniA ini; ini.SetUnicode(); ini.SetValue("Cache", "Version", SHADER_CACHE_VERSION.string().c_str()); + ini.SetValue("Cache", "PluginVersion", Plugin::VERSION.string().c_str()); globals::state->WriteDiskCacheInfo(ini); ini.SaveFile(L"Data\\ShaderCache\\Info.ini"); - logger::info("Saved disk cache info"); + logger::info("Saved disk cache info (Cache: {}, Plugin: {})", + SHADER_CACHE_VERSION.string(), Plugin::VERSION.string()); } ShaderCache::ShaderCache() From 8c0a25296ec59ac65e9fe3904334ae1892f7a370 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 20 Jan 2026 03:51:53 +0000 Subject: [PATCH 3/8] Address code review feedback - Remove conditional check for plugin version validation for consistency - Update log message format to match validation messages - Ensure all validation checks run independently Co-authored-by: alandtse <7086117+alandtse@users.noreply.github.com> --- src/ShaderCache.cpp | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/ShaderCache.cpp b/src/ShaderCache.cpp index 18a0b72d64..b99b59f586 100644 --- a/src/ShaderCache.cpp +++ b/src/ShaderCache.cpp @@ -2205,17 +2205,15 @@ namespace SIE } // Check plugin version - if (valid) { - if (auto pluginVersion = ini.GetValue("Cache", "PluginVersion")) { - if (strcmp(Plugin::VERSION.string().c_str(), pluginVersion) != 0) { - logger::info("Disk cache outdated: plugin version changed (current: {}, cached: {})", - Plugin::VERSION.string(), pluginVersion); - valid = false; - } - } else { - logger::info("Disk cache outdated: no plugin version found"); + if (auto pluginVersion = ini.GetValue("Cache", "PluginVersion")) { + if (strcmp(Plugin::VERSION.string().c_str(), pluginVersion) != 0) { + logger::info("Disk cache outdated: plugin version changed (current: {}, cached: {})", + Plugin::VERSION.string(), pluginVersion); valid = false; } + } else { + logger::info("Disk cache outdated: no plugin version found"); + valid = false; } // Check feature validation @@ -2239,7 +2237,7 @@ namespace SIE ini.SetValue("Cache", "PluginVersion", Plugin::VERSION.string().c_str()); globals::state->WriteDiskCacheInfo(ini); ini.SaveFile(L"Data\\ShaderCache\\Info.ini"); - logger::info("Saved disk cache info (Cache: {}, Plugin: {})", + logger::info("Saved disk cache info (cache version: {}, plugin version: {})", SHADER_CACHE_VERSION.string(), Plugin::VERSION.string()); } From 6d9f538f1c8ed72da57cdea347984c8714b05924 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 20 Jan 2026 03:53:15 +0000 Subject: [PATCH 4/8] Make feature validation unconditional for consistency - Remove conditional check before feature validation - All three validation checks now run independently - Ensures complete validation even if earlier checks fail Co-authored-by: alandtse <7086117+alandtse@users.noreply.github.com> --- src/ShaderCache.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ShaderCache.cpp b/src/ShaderCache.cpp index b99b59f586..9f4619bff9 100644 --- a/src/ShaderCache.cpp +++ b/src/ShaderCache.cpp @@ -2217,7 +2217,7 @@ namespace SIE } // Check feature validation - if (valid && !(globals::state->ValidateCache(ini))) { + if (!(globals::state->ValidateCache(ini))) { logger::info("Disk cache outdated: feature validation failed"); valid = false; } From 181aa03907f28fdf3193afd6dd6dd111e14a5556 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 20 Jan 2026 03:55:49 +0000 Subject: [PATCH 5/8] Final implementation complete Co-authored-by: alandtse <7086117+alandtse@users.noreply.github.com> --- _codeql_detected_source_root | 1 + 1 file changed, 1 insertion(+) create mode 120000 _codeql_detected_source_root diff --git a/_codeql_detected_source_root b/_codeql_detected_source_root new file mode 120000 index 0000000000..945c9b46d6 --- /dev/null +++ b/_codeql_detected_source_root @@ -0,0 +1 @@ +. \ No newline at end of file From e11b9436fbcbb49da521de16572ee0fcb2de783f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 20 Jan 2026 04:14:35 +0000 Subject: [PATCH 6/8] Remove accidentally committed CodeQL artifact file Remove _codeql_detected_source_root symlink that was accidentally added during security check Co-authored-by: alandtse <7086117+alandtse@users.noreply.github.com> --- _codeql_detected_source_root | 1 - 1 file changed, 1 deletion(-) delete mode 120000 _codeql_detected_source_root diff --git a/_codeql_detected_source_root b/_codeql_detected_source_root deleted file mode 120000 index 945c9b46d6..0000000000 --- a/_codeql_detected_source_root +++ /dev/null @@ -1 +0,0 @@ -. \ No newline at end of file From 774b8e17f00d38af5b2ac4e7ab9496f6ab51ab4d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 22 Jan 2026 06:42:04 +0000 Subject: [PATCH 7/8] Format log statement on single line for readability Address code review feedback - put entire log call on one line Co-authored-by: alandtse <7086117+alandtse@users.noreply.github.com> --- src/ShaderCache.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/ShaderCache.cpp b/src/ShaderCache.cpp index 9f4619bff9..a9e435ecf5 100644 --- a/src/ShaderCache.cpp +++ b/src/ShaderCache.cpp @@ -2237,8 +2237,7 @@ namespace SIE ini.SetValue("Cache", "PluginVersion", Plugin::VERSION.string().c_str()); globals::state->WriteDiskCacheInfo(ini); ini.SaveFile(L"Data\\ShaderCache\\Info.ini"); - logger::info("Saved disk cache info (cache version: {}, plugin version: {})", - SHADER_CACHE_VERSION.string(), Plugin::VERSION.string()); + logger::info("Saved disk cache info (cache version: {}, plugin version: {})", SHADER_CACHE_VERSION.string(), Plugin::VERSION.string()); } ShaderCache::ShaderCache() From 0bafaf49534c2b1f7e4c8d1c11a2be99bb8447c3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 22 Jan 2026 06:55:18 +0000 Subject: [PATCH 8/8] Remove SHADER_CACHE_VERSION and rely solely on Plugin::VERSION Simplified cache validation to use only Plugin::VERSION for automatic invalidation on every release. This addresses the original issue where users experienced stale cache after updates. Changes: - Removed SHADER_CACHE_VERSION constant from ShaderCache.h - Removed cache version check from ValidateDiskCache() - Updated WriteDiskCacheInfo() to only store plugin version - Simplified logging to reflect plugin version only Rationale: - SHADER_CACHE_VERSION was not actively maintained (stayed at 0.0.0.42) - Plugin::VERSION automatically tracks with releases - Feature validation provides granular per-feature control - Simpler code with less maintenance burden Co-authored-by: alandtse <7086117+alandtse@users.noreply.github.com> --- src/ShaderCache.cpp | 15 +-------------- src/ShaderCache.h | 2 -- 2 files changed, 1 insertion(+), 16 deletions(-) diff --git a/src/ShaderCache.cpp b/src/ShaderCache.cpp index a9e435ecf5..48b24a6e7b 100644 --- a/src/ShaderCache.cpp +++ b/src/ShaderCache.cpp @@ -2192,18 +2192,6 @@ namespace SIE ini.LoadFile(L"Data\\ShaderCache\\Info.ini"); bool valid = true; - // Check shader cache version - if (auto version = ini.GetValue("Cache", "Version")) { - if (strcmp(SHADER_CACHE_VERSION.string().c_str(), version) != 0) { - logger::info("Disk cache outdated: cache version mismatch (current: {}, cached: {})", - SHADER_CACHE_VERSION.string(), version); - valid = false; - } - } else { - logger::info("Disk cache outdated: no cache version found"); - valid = false; - } - // Check plugin version if (auto pluginVersion = ini.GetValue("Cache", "PluginVersion")) { if (strcmp(Plugin::VERSION.string().c_str(), pluginVersion) != 0) { @@ -2233,11 +2221,10 @@ namespace SIE { CSimpleIniA ini; ini.SetUnicode(); - ini.SetValue("Cache", "Version", SHADER_CACHE_VERSION.string().c_str()); ini.SetValue("Cache", "PluginVersion", Plugin::VERSION.string().c_str()); globals::state->WriteDiskCacheInfo(ini); ini.SaveFile(L"Data\\ShaderCache\\Info.ini"); - logger::info("Saved disk cache info (cache version: {}, plugin version: {})", SHADER_CACHE_VERSION.string(), Plugin::VERSION.string()); + logger::info("Saved disk cache info (plugin version: {})", Plugin::VERSION.string()); } ShaderCache::ShaderCache() diff --git a/src/ShaderCache.h b/src/ShaderCache.h index ca2090ec98..c390f91b91 100644 --- a/src/ShaderCache.h +++ b/src/ShaderCache.h @@ -3,8 +3,6 @@ #include #include -static constexpr REL::Version SHADER_CACHE_VERSION = { 0, 0, 0, 42 }; - using namespace std::chrono; namespace ShaderConstants