summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/D3D/GeometryShaderCache.cpp
diff options
context:
space:
mode:
authorStenzek <stenzek@gmail.com>2017-06-24 19:29:03 +1000
committerStenzek <stenzek@gmail.com>2017-07-20 17:46:59 +1000
commit228ddb8abab02105e02233647834bde2528d9ba9 (patch)
tree8dc8f33d450c8b0773aff2d0b51e0bae8811a211 /Source/Core/VideoBackends/D3D/GeometryShaderCache.cpp
parent62a901508b1fd23eb386a3d108950ab061bbc19a (diff)
D3D11: Reload shader cache when relevant config changes
Diffstat (limited to 'Source/Core/VideoBackends/D3D/GeometryShaderCache.cpp')
-rw-r--r--Source/Core/VideoBackends/D3D/GeometryShaderCache.cpp34
1 files changed, 23 insertions, 11 deletions
diff --git a/Source/Core/VideoBackends/D3D/GeometryShaderCache.cpp b/Source/Core/VideoBackends/D3D/GeometryShaderCache.cpp
index 6dbd3d3dde..951b4287da 100644
--- a/Source/Core/VideoBackends/D3D/GeometryShaderCache.cpp
+++ b/Source/Core/VideoBackends/D3D/GeometryShaderCache.cpp
@@ -158,18 +158,29 @@ void GeometryShaderCache::Init()
Clear();
if (g_ActiveConfig.bShaderCache)
- {
- if (!File::Exists(File::GetUserPath(D_SHADERCACHE_IDX)))
- File::CreateDir(File::GetUserPath(D_SHADERCACHE_IDX));
-
- std::string cache_filename =
- StringFromFormat("%sdx11-%s-gs.cache", File::GetUserPath(D_SHADERCACHE_IDX).c_str(),
- SConfig::GetInstance().GetGameID().c_str());
- GeometryShaderCacheInserter inserter;
- g_gs_disk_cache.OpenAndRead(cache_filename, inserter);
- }
+ LoadShaderCache();
+}
- last_entry = nullptr;
+void GeometryShaderCache::LoadShaderCache()
+{
+ if (!File::Exists(File::GetUserPath(D_SHADERCACHE_IDX)))
+ File::CreateDir(File::GetUserPath(D_SHADERCACHE_IDX));
+
+ std::string cache_filename = StringFromFormat(
+ "%sdx11-%s-%s-gs.cache", File::GetUserPath(D_SHADERCACHE_IDX).c_str(),
+ SConfig::GetInstance().GetGameID().c_str(), g_ActiveConfig.GetHostConfigFilename().c_str());
+ GeometryShaderCacheInserter inserter;
+ g_gs_disk_cache.OpenAndRead(cache_filename, inserter);
+}
+
+void GeometryShaderCache::Reload()
+{
+ g_gs_disk_cache.Sync();
+ g_gs_disk_cache.Close();
+ Clear();
+
+ if (g_ActiveConfig.bShaderCache)
+ LoadShaderCache();
}
// ONLY to be used during shutdown.
@@ -180,6 +191,7 @@ void GeometryShaderCache::Clear()
GeometryShaders.clear();
last_entry = nullptr;
+ last_uid = {};
}
void GeometryShaderCache::Shutdown()