From 228ddb8abab02105e02233647834bde2528d9ba9 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Sat, 24 Jun 2017 19:29:03 +1000 Subject: D3D11: Reload shader cache when relevant config changes --- .../Core/VideoBackends/D3D/GeometryShaderCache.cpp | 34 +++++++++++++++------- 1 file changed, 23 insertions(+), 11 deletions(-) (limited to 'Source/Core/VideoBackends/D3D/GeometryShaderCache.cpp') 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() -- cgit v1.2.3 From d01b0bf60fba2101e45cfac1e5747edcdbab5fc1 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Wed, 19 Jul 2017 20:35:17 +1000 Subject: VideoCommon: Move shader cache filename generation to common --- Source/Core/VideoBackends/D3D/GeometryShaderCache.cpp | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) (limited to 'Source/Core/VideoBackends/D3D/GeometryShaderCache.cpp') diff --git a/Source/Core/VideoBackends/D3D/GeometryShaderCache.cpp b/Source/Core/VideoBackends/D3D/GeometryShaderCache.cpp index 951b4287da..90bcca4bb6 100644 --- a/Source/Core/VideoBackends/D3D/GeometryShaderCache.cpp +++ b/Source/Core/VideoBackends/D3D/GeometryShaderCache.cpp @@ -163,14 +163,9 @@ void GeometryShaderCache::Init() 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); + g_gs_disk_cache.OpenAndRead(g_ActiveConfig.GetDiskCacheFileName(APIType::D3D, "GS", true, true), + inserter); } void GeometryShaderCache::Reload() -- cgit v1.2.3 From 3ea9d86faa2544b8c1c235db9456f271baf42fec Mon Sep 17 00:00:00 2001 From: Stenzek Date: Thu, 20 Jul 2017 17:10:02 +1000 Subject: ShaderGen: Pass host config to shader generation functions Also moves the host config checks to common. --- Source/Core/VideoBackends/D3D/GeometryShaderCache.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'Source/Core/VideoBackends/D3D/GeometryShaderCache.cpp') diff --git a/Source/Core/VideoBackends/D3D/GeometryShaderCache.cpp b/Source/Core/VideoBackends/D3D/GeometryShaderCache.cpp index 90bcca4bb6..f6fd869b8c 100644 --- a/Source/Core/VideoBackends/D3D/GeometryShaderCache.cpp +++ b/Source/Core/VideoBackends/D3D/GeometryShaderCache.cpp @@ -164,8 +164,7 @@ void GeometryShaderCache::Init() void GeometryShaderCache::LoadShaderCache() { GeometryShaderCacheInserter inserter; - g_gs_disk_cache.OpenAndRead(g_ActiveConfig.GetDiskCacheFileName(APIType::D3D, "GS", true, true), - inserter); + g_gs_disk_cache.OpenAndRead(GetDiskShaderCacheFileName(APIType::D3D, "GS", true, true), inserter); } void GeometryShaderCache::Reload() @@ -237,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)) -- cgit v1.2.3