From 62a901508b1fd23eb386a3d108950ab061bbc19a Mon Sep 17 00:00:00 2001 From: Stenzek Date: Sat, 24 Jun 2017 19:20:34 +1000 Subject: OGL: Reload shader cache when relevant video config changes --- Source/Core/VideoBackends/OGL/Render.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'Source/Core/VideoBackends/OGL/Render.cpp') diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp index 3282489369..50a3d366cc 100644 --- a/Source/Core/VideoBackends/OGL/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Render.cpp @@ -688,6 +688,7 @@ Renderer::Renderer() s_last_stereo_mode = g_ActiveConfig.iStereoMode > 0; s_last_xfb_mode = g_ActiveConfig.bUseRealXFB; + m_last_host_config_bits = g_ActiveConfig.GetHostConfigBits(); // Handle VSync on/off s_vsync = g_ActiveConfig.IsVSync(); @@ -1469,6 +1470,15 @@ void Renderer::SwapImpl(u32 xfbAddr, u32 fbWidth, u32 fbStride, u32 fbHeight, UpdateActiveConfig(); g_texture_cache->OnConfigChanged(g_ActiveConfig); + // Invalidate shader cache when the host config changes. + u32 new_host_config_bits = g_ActiveConfig.GetHostConfigBits(); + if (new_host_config_bits != m_last_host_config_bits) + { + OSD::AddMessage("Video config changed, reloading shaders.", OSD::Duration::NORMAL); + ProgramShaderCache::Reload(); + m_last_host_config_bits = new_host_config_bits; + } + // For testing zbuffer targets. // Renderer::SetZBufferRender(); // SaveTexture("tex.png", GL_TEXTURE_2D, s_FakeZTarget, -- 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/OGL/Render.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) (limited to 'Source/Core/VideoBackends/OGL/Render.cpp') diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp index 50a3d366cc..4392da994c 100644 --- a/Source/Core/VideoBackends/OGL/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Render.cpp @@ -43,6 +43,7 @@ #include "VideoCommon/PixelEngine.h" #include "VideoCommon/PixelShaderManager.h" #include "VideoCommon/RenderState.h" +#include "VideoCommon/ShaderGenCommon.h" #include "VideoCommon/VertexShaderManager.h" #include "VideoCommon/VideoBackendBase.h" #include "VideoCommon/VideoConfig.h" @@ -664,6 +665,9 @@ Renderer::Renderer() g_Config.VerifyValidity(); UpdateActiveConfig(); + // Since we modify the config here, we need to update the last host bits, it may have changed. + m_last_host_config_bits = ShaderHostConfig::GetCurrent().bits; + OSD::AddMessage(StringFromFormat("Video Info: %s, %s, %s", g_ogl_config.gl_vendor, g_ogl_config.gl_renderer, g_ogl_config.gl_version), 5000); @@ -688,7 +692,6 @@ Renderer::Renderer() s_last_stereo_mode = g_ActiveConfig.iStereoMode > 0; s_last_xfb_mode = g_ActiveConfig.bUseRealXFB; - m_last_host_config_bits = g_ActiveConfig.GetHostConfigBits(); // Handle VSync on/off s_vsync = g_ActiveConfig.IsVSync(); @@ -1471,13 +1474,8 @@ void Renderer::SwapImpl(u32 xfbAddr, u32 fbWidth, u32 fbStride, u32 fbHeight, g_texture_cache->OnConfigChanged(g_ActiveConfig); // Invalidate shader cache when the host config changes. - u32 new_host_config_bits = g_ActiveConfig.GetHostConfigBits(); - if (new_host_config_bits != m_last_host_config_bits) - { - OSD::AddMessage("Video config changed, reloading shaders.", OSD::Duration::NORMAL); + if (CheckForHostConfigChanges()) ProgramShaderCache::Reload(); - m_last_host_config_bits = new_host_config_bits; - } // For testing zbuffer targets. // Renderer::SetZBufferRender(); -- cgit v1.2.3