summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_opengl/gl_shader_cache.cpp
diff options
context:
space:
mode:
authorunknown <FreddyFunk@users.noreply.github.com>2019-02-25 11:47:23 +0100
committerFreddyFunk <FreddyFunk@users.noreply.github.com>2019-04-23 22:24:23 +0200
commit9db2c734c95d1c5c99d6ead95673de72e9389d8d (patch)
tree665e40828ace3a4216be3956cd3ec4d617fed842 /src/video_core/renderer_opengl/gl_shader_cache.cpp
parentgl_shader_disk_cache: Remove per shader compression (diff)
downloadyuzu-9db2c734c95d1c5c99d6ead95673de72e9389d8d.tar
yuzu-9db2c734c95d1c5c99d6ead95673de72e9389d8d.tar.gz
yuzu-9db2c734c95d1c5c99d6ead95673de72e9389d8d.tar.bz2
yuzu-9db2c734c95d1c5c99d6ead95673de72e9389d8d.tar.lz
yuzu-9db2c734c95d1c5c99d6ead95673de72e9389d8d.tar.xz
yuzu-9db2c734c95d1c5c99d6ead95673de72e9389d8d.tar.zst
yuzu-9db2c734c95d1c5c99d6ead95673de72e9389d8d.zip
Diffstat (limited to 'src/video_core/renderer_opengl/gl_shader_cache.cpp')
-rw-r--r--src/video_core/renderer_opengl/gl_shader_cache.cpp12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/video_core/renderer_opengl/gl_shader_cache.cpp b/src/video_core/renderer_opengl/gl_shader_cache.cpp
index 2a81b1169..dd18052db 100644
--- a/src/video_core/renderer_opengl/gl_shader_cache.cpp
+++ b/src/video_core/renderer_opengl/gl_shader_cache.cpp
@@ -363,6 +363,10 @@ void ShaderCacheOpenGL::LoadDiskCache(const std::atomic_bool& stop_loading,
if (stop_loading)
return;
+ // Track if precompiled cache was altered during loading to know if we have to serialize the
+ // virtual precompiled cache file back to the hard drive
+ bool precompiled_cache_altered = false;
+
// Build shaders
if (callback)
callback(VideoCore::LoadCallbackStage::Build, 0, usages.size());
@@ -384,6 +388,7 @@ void ShaderCacheOpenGL::LoadDiskCache(const std::atomic_bool& stop_loading,
if (!shader) {
// Invalidate the precompiled cache if a shader dumped shader was rejected
disk_cache.InvalidatePrecompiled();
+ precompiled_cache_altered = true;
dumps.clear();
}
}
@@ -405,8 +410,13 @@ void ShaderCacheOpenGL::LoadDiskCache(const std::atomic_bool& stop_loading,
if (dumps.find(usage) == dumps.end()) {
const auto& program = precompiled_programs.at(usage);
disk_cache.SaveDump(usage, program->handle);
+ precompiled_cache_altered = true;
}
}
+
+ if (precompiled_cache_altered) {
+ disk_cache.SaveVirtualPrecompiledFile();
+ }
}
CachedProgram ShaderCacheOpenGL::GeneratePrecompiledProgram(
@@ -524,4 +534,4 @@ Shader ShaderCacheOpenGL::GetStageProgram(Maxwell::ShaderProgram program) {
return last_shaders[static_cast<u32>(program)] = shader;
}
-} // namespace OpenGL
+} // namespace OpenGL \ No newline at end of file