summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/D3D/PixelShaderCache.cpp
diff options
context:
space:
mode:
authorStenzek <stenzek@users.noreply.github.com>2017-07-27 13:30:38 +1000
committerGitHub <noreply@github.com>2017-07-27 13:30:38 +1000
commita11bde7d167c65bb693e5138e47dd4586683c092 (patch)
tree84f9128b0478b0b18e271e0426fceb499c9e72e3 /Source/Core/VideoBackends/D3D/PixelShaderCache.cpp
parent10db1bcbca947a56e872ed4b6625d9d3de31b298 (diff)
parent3ea9d86faa2544b8c1c235db9456f271baf42fec (diff)
Merge pull request #5679 from stenzek/no-host-state-in-uids
ShaderGen: Decouple host state from shader UIDs
Diffstat (limited to 'Source/Core/VideoBackends/D3D/PixelShaderCache.cpp')
-rw-r--r--Source/Core/VideoBackends/D3D/PixelShaderCache.cpp31
1 files changed, 19 insertions, 12 deletions
diff --git a/Source/Core/VideoBackends/D3D/PixelShaderCache.cpp b/Source/Core/VideoBackends/D3D/PixelShaderCache.cpp
index 289e9a32f9..6bb02b890a 100644
--- a/Source/Core/VideoBackends/D3D/PixelShaderCache.cpp
+++ b/Source/Core/VideoBackends/D3D/PixelShaderCache.cpp
@@ -498,18 +498,23 @@ void PixelShaderCache::Init()
SETSTAT(stats.numPixelShadersAlive, 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-ps.cache", File::GetUserPath(D_SHADERCACHE_IDX).c_str(),
- SConfig::GetInstance().GetGameID().c_str());
- PixelShaderCacheInserter inserter;
- g_ps_disk_cache.OpenAndRead(cache_filename, inserter);
- }
+ LoadShaderCache();
+}
- last_entry = nullptr;
+void PixelShaderCache::LoadShaderCache()
+{
+ PixelShaderCacheInserter inserter;
+ g_ps_disk_cache.OpenAndRead(GetDiskShaderCacheFileName(APIType::D3D, "PS", true, true), inserter);
+}
+
+void PixelShaderCache::Reload()
+{
+ g_ps_disk_cache.Sync();
+ g_ps_disk_cache.Close();
+ Clear();
+
+ if (g_ActiveConfig.bShaderCache)
+ LoadShaderCache();
}
// ONLY to be used during shutdown.
@@ -520,6 +525,7 @@ void PixelShaderCache::Clear()
PixelShaders.clear();
last_entry = nullptr;
+ last_uid = {};
}
// Used in Swap() when AA mode has changed
@@ -583,7 +589,8 @@ bool PixelShaderCache::SetShader()
}
// Need to compile a new shader
- ShaderCode code = GeneratePixelShaderCode(APIType::D3D, uid.GetUidData());
+ ShaderCode code =
+ GeneratePixelShaderCode(APIType::D3D, ShaderHostConfig::GetCurrent(), uid.GetUidData());
D3DBlob* pbytecode;
if (!D3D::CompilePixelShader(code.GetBuffer(), &pbytecode))