diff options
| author | Stenzek <stenzek@users.noreply.github.com> | 2017-07-27 13:30:38 +1000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-07-27 13:30:38 +1000 |
| commit | a11bde7d167c65bb693e5138e47dd4586683c092 (patch) | |
| tree | 84f9128b0478b0b18e271e0426fceb499c9e72e3 /Source/Core/VideoBackends/D3D/GeometryShaderCache.cpp | |
| parent | 10db1bcbca947a56e872ed4b6625d9d3de31b298 (diff) | |
| parent | 3ea9d86faa2544b8c1c235db9456f271baf42fec (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/GeometryShaderCache.cpp')
| -rw-r--r-- | Source/Core/VideoBackends/D3D/GeometryShaderCache.cpp | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/Source/Core/VideoBackends/D3D/GeometryShaderCache.cpp b/Source/Core/VideoBackends/D3D/GeometryShaderCache.cpp index 6dbd3d3dde..f6fd869b8c 100644 --- a/Source/Core/VideoBackends/D3D/GeometryShaderCache.cpp +++ b/Source/Core/VideoBackends/D3D/GeometryShaderCache.cpp @@ -158,18 +158,23 @@ 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() +{ + GeometryShaderCacheInserter inserter; + g_gs_disk_cache.OpenAndRead(GetDiskShaderCacheFileName(APIType::D3D, "GS", true, true), 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 +185,7 @@ void GeometryShaderCache::Clear() GeometryShaders.clear(); last_entry = nullptr; + last_uid = {}; } void GeometryShaderCache::Shutdown() @@ -230,7 +236,8 @@ bool GeometryShaderCache::SetShader(u32 primitive_type) } // Need to compile a new shader - ShaderCode code = GenerateGeometryShaderCode(APIType::D3D, uid.GetUidData()); + ShaderCode code = + GenerateGeometryShaderCode(APIType::D3D, ShaderHostConfig::GetCurrent(), uid.GetUidData()); D3DBlob* pbytecode; if (!D3D::CompileGeometryShader(code.GetBuffer(), &pbytecode)) |
