summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/ShaderCache.cpp
diff options
context:
space:
mode:
authorStenzek <stenzek@gmail.com>2019-10-01 11:42:59 +1000
committerStenzek <stenzek@gmail.com>2019-10-01 11:43:02 +1000
commitc989e5c50c432b7df78a8e6e1dc92cca1057767b (patch)
treef13f4ff5efcdfed5d1c743ef8d6fe81e22c2cae3 /Source/Core/VideoCommon/ShaderCache.cpp
parentee30fc9ad53742edbf4e5cdf6fa1c35cc15a359d (diff)
ShaderCache: Recompile shared pipelines on shader cache reload
Fixes broken stereoscopy when switching on/off at runtime.
Diffstat (limited to 'Source/Core/VideoCommon/ShaderCache.cpp')
-rw-r--r--Source/Core/VideoCommon/ShaderCache.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/Source/Core/VideoCommon/ShaderCache.cpp b/Source/Core/VideoCommon/ShaderCache.cpp
index e3066520fb..3900aaea42 100644
--- a/Source/Core/VideoCommon/ShaderCache.cpp
+++ b/Source/Core/VideoCommon/ShaderCache.cpp
@@ -70,6 +70,9 @@ void ShaderCache::Reload()
ClosePipelineUIDCache();
ClearCaches();
+ if (!CompileSharedPipelines())
+ PanicAlert("Failed to compile shared pipelines after reload.");
+
if (g_ActiveConfig.bShaderCache)
LoadCaches();
@@ -369,6 +372,23 @@ void ShaderCache::ClearCaches()
ClearShaderCache(m_uber_vs_cache);
ClearShaderCache(m_uber_ps_cache);
+ m_screen_quad_vertex_shader.reset();
+ m_texture_copy_vertex_shader.reset();
+ m_efb_copy_vertex_shader.reset();
+ m_texcoord_geometry_shader.reset();
+ m_color_geometry_shader.reset();
+ m_texture_copy_pixel_shader.reset();
+ m_color_pixel_shader.reset();
+
+ m_efb_copy_to_vram_pipelines.clear();
+ m_efb_copy_to_ram_pipelines.clear();
+ m_copy_rgba8_pipeline.reset();
+ m_rgba8_stereo_copy_pipeline.reset();
+ for (auto& pipeline : m_palette_conversion_pipelines)
+ pipeline.reset();
+ m_texture_reinterpret_pipelines.clear();
+ m_texture_decoding_shaders.clear();
+
SETSTAT(g_stats.num_pixel_shaders_created, 0);
SETSTAT(g_stats.num_pixel_shaders_alive, 0);
SETSTAT(g_stats.num_vertex_shaders_created, 0);