Skip to content
22 changes: 16 additions & 6 deletions src/ShaderCache.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@

#include "Features/DynamicCubemaps.h"

#include "Plugin.h"

namespace SIE
{
namespace SShaderCache
Expand Down Expand Up @@ -2190,13 +2192,21 @@ namespace SIE
ini.LoadFile(L"Data\\ShaderCache\\Info.ini");
bool valid = true;

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");
// Check plugin version
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 or invalid");
logger::info("Disk cache outdated: no plugin version found");
valid = false;
}

// Check feature validation
if (!(globals::state->ValidateCache(ini))) {
logger::info("Disk cache outdated: feature validation failed");
valid = false;
}

Expand All @@ -2211,10 +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");
logger::info("Saved disk cache info (plugin version: {})", Plugin::VERSION.string());
}

ShaderCache::ShaderCache()
Expand Down
2 changes: 0 additions & 2 deletions src/ShaderCache.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@
#include <BS_thread_pool.hpp>
#include <efsw/efsw.hpp>

static constexpr REL::Version SHADER_CACHE_VERSION = { 0, 0, 0, 42 };

using namespace std::chrono;

namespace ShaderConstants
Expand Down