summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/D3D/VertexShaderCache.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/VideoBackends/D3D/VertexShaderCache.cpp')
-rw-r--r--Source/Core/VideoBackends/D3D/VertexShaderCache.cpp31
1 files changed, 19 insertions, 12 deletions
diff --git a/Source/Core/VideoBackends/D3D/VertexShaderCache.cpp b/Source/Core/VideoBackends/D3D/VertexShaderCache.cpp
index 1ca0982e6f..023caedba0 100644
--- a/Source/Core/VideoBackends/D3D/VertexShaderCache.cpp
+++ b/Source/Core/VideoBackends/D3D/VertexShaderCache.cpp
@@ -159,18 +159,23 @@ void VertexShaderCache::Init()
SETSTAT(stats.numVertexShadersAlive, 0);
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-vs.cache", File::GetUserPath(D_SHADERCACHE_IDX).c_str(),
- SConfig::GetInstance().GetGameID().c_str());
- VertexShaderCacheInserter inserter;
- g_vs_disk_cache.OpenAndRead(cache_filename, inserter);
- }
+ LoadShaderCache();
+}
- last_entry = nullptr;
+void VertexShaderCache::LoadShaderCache()
+{
+ VertexShaderCacheInserter inserter;
+ g_vs_disk_cache.OpenAndRead(GetDiskShaderCacheFileName(APIType::D3D, "VS", true, true), inserter);
+}
+
+void VertexShaderCache::Reload()
+{
+ g_vs_disk_cache.Sync();
+ g_vs_disk_cache.Close();
+ Clear();
+
+ if (g_ActiveConfig.bShaderCache)
+ LoadShaderCache();
}
void VertexShaderCache::Clear()
@@ -180,6 +185,7 @@ void VertexShaderCache::Clear()
vshaders.clear();
last_entry = nullptr;
+ last_uid = {};
}
void VertexShaderCache::Shutdown()
@@ -222,7 +228,8 @@ bool VertexShaderCache::SetShader()
return (entry.shader != nullptr);
}
- ShaderCode code = GenerateVertexShaderCode(APIType::D3D, uid.GetUidData());
+ ShaderCode code =
+ GenerateVertexShaderCode(APIType::D3D, ShaderHostConfig::GetCurrent(), uid.GetUidData());
D3DBlob* pbytecode = nullptr;
D3D::CompileVertexShader(code.GetBuffer(), &pbytecode);