summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_opengl/gl_shader_cache.cpp
diff options
context:
space:
mode:
authorReinUsesLisp <reinuseslisp@airmail.cc>2019-09-26 02:46:34 +0200
committerFernandoS27 <fsahmkow27@gmail.com>2019-10-25 15:01:31 +0200
commitec85648af3316d5e43c7b57fca55d0dad3d03f96 (patch)
treeb5cc21e8b027a27e69c8197202f98d0c36706978 /src/video_core/renderer_opengl/gl_shader_cache.cpp
parentconst_buffer_locker: Minor style changes (diff)
downloadyuzu-ec85648af3316d5e43c7b57fca55d0dad3d03f96.tar
yuzu-ec85648af3316d5e43c7b57fca55d0dad3d03f96.tar.gz
yuzu-ec85648af3316d5e43c7b57fca55d0dad3d03f96.tar.bz2
yuzu-ec85648af3316d5e43c7b57fca55d0dad3d03f96.tar.lz
yuzu-ec85648af3316d5e43c7b57fca55d0dad3d03f96.tar.xz
yuzu-ec85648af3316d5e43c7b57fca55d0dad3d03f96.tar.zst
yuzu-ec85648af3316d5e43c7b57fca55d0dad3d03f96.zip
Diffstat (limited to '')
-rw-r--r--src/video_core/renderer_opengl/gl_shader_cache.cpp19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/video_core/renderer_opengl/gl_shader_cache.cpp b/src/video_core/renderer_opengl/gl_shader_cache.cpp
index 6402d6763..7e7aea15f 100644
--- a/src/video_core/renderer_opengl/gl_shader_cache.cpp
+++ b/src/video_core/renderer_opengl/gl_shader_cache.cpp
@@ -392,7 +392,7 @@ std::tuple<GLuint, BaseBindings> CachedShader::GetProgramHandle(const ProgramVar
ConstBufferLocker locker(GetEnginesShaderType(program_type), *engine);
program = BuildShader(device, unique_identifier, program_type, program_code, program_code_b,
variant, locker);
- disk_cache.SaveUsage(GetUsage(variant));
+ disk_cache.SaveUsage(GetUsage(variant, locker));
LabelGLObject(GL_PROGRAM, program->handle, cpu_addr);
}
@@ -408,10 +408,14 @@ std::tuple<GLuint, BaseBindings> CachedShader::GetProgramHandle(const ProgramVar
return {program->handle, base_bindings};
}
-ShaderDiskCacheUsage CachedShader::GetUsage(const ProgramVariant& variant) const {
+ShaderDiskCacheUsage CachedShader::GetUsage(const ProgramVariant& variant,
+ const ConstBufferLocker& locker) const {
ShaderDiskCacheUsage usage;
usage.unique_identifier = unique_identifier;
usage.variant = variant;
+ usage.keys = locker.GetKeys();
+ usage.bound_samplers = locker.GetBoundSamplers();
+ usage.bindless_samplers = locker.GetBindlessSamplers();
return usage;
}
@@ -472,6 +476,17 @@ void ShaderCacheOpenGL::LoadDiskCache(const std::atomic_bool& stop_loading,
}
if (!shader) {
ConstBufferLocker locker(GetEnginesShaderType(unspecialized.program_type));
+ for (const auto& key : usage.keys) {
+ const auto [buffer, offset] = key.first;
+ locker.InsertKey(buffer, offset, key.second);
+ }
+ for (const auto& [offset, sampler] : usage.bound_samplers) {
+ locker.InsertBoundSampler(offset, sampler);
+ }
+ for (const auto& [key, sampler] : usage.bindless_samplers) {
+ const auto [buffer, offset] = key;
+ locker.InsertBindlessSampler(buffer, offset, sampler);
+ }
shader = BuildShader(device, usage.unique_identifier, unspecialized.program_type,
unspecialized.code, unspecialized.code_b, usage.variant,
locker, true);