diff options
| author | Stenzek <stenzek@users.noreply.github.com> | 2017-07-27 13:30:38 +1000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-07-27 13:30:38 +1000 |
| commit | a11bde7d167c65bb693e5138e47dd4586683c092 (patch) | |
| tree | 84f9128b0478b0b18e271e0426fceb499c9e72e3 /Source/Core/VideoBackends/Vulkan/Renderer.cpp | |
| parent | 10db1bcbca947a56e872ed4b6625d9d3de31b298 (diff) | |
| parent | 3ea9d86faa2544b8c1c235db9456f271baf42fec (diff) | |
Merge pull request #5679 from stenzek/no-host-state-in-uids
ShaderGen: Decouple host state from shader UIDs
Diffstat (limited to 'Source/Core/VideoBackends/Vulkan/Renderer.cpp')
| -rw-r--r-- | Source/Core/VideoBackends/Vulkan/Renderer.cpp | 23 |
1 files changed, 7 insertions, 16 deletions
diff --git a/Source/Core/VideoBackends/Vulkan/Renderer.cpp b/Source/Core/VideoBackends/Vulkan/Renderer.cpp index 9a26df8548..599792d493 100644 --- a/Source/Core/VideoBackends/Vulkan/Renderer.cpp +++ b/Source/Core/VideoBackends/Vulkan/Renderer.cpp @@ -114,7 +114,7 @@ bool Renderer::Initialize() } // Ensure all pipelines previously used by the game have been created. - StateTracker::GetInstance()->LoadPipelineUIDCache(); + StateTracker::GetInstance()->ReloadPipelineUIDCache(); // Initialize post processing. m_post_processor = std::make_unique<VulkanPostProcessing>(); @@ -1126,13 +1126,10 @@ void Renderer::CheckForSurfaceChange() void Renderer::CheckForConfigChanges() { // Save the video config so we can compare against to determine which settings have changed. - u32 old_multisamples = g_ActiveConfig.iMultisamples; int old_anisotropy = g_ActiveConfig.iMaxAnisotropy; - int old_stereo_mode = g_ActiveConfig.iStereoMode; int old_aspect_ratio = g_ActiveConfig.iAspectRatio; int old_efb_scale = g_ActiveConfig.iEFBScale; bool old_force_filtering = g_ActiveConfig.bForceFiltering; - bool old_ssaa = g_ActiveConfig.bSSAA; bool old_use_xfb = g_ActiveConfig.bUseXFB; bool old_use_realxfb = g_ActiveConfig.bUseRealXFB; @@ -1142,11 +1139,8 @@ void Renderer::CheckForConfigChanges() UpdateActiveConfig(); // Determine which (if any) settings have changed. - bool msaa_changed = old_multisamples != g_ActiveConfig.iMultisamples; - bool ssaa_changed = old_ssaa != g_ActiveConfig.bSSAA; bool anisotropy_changed = old_anisotropy != g_ActiveConfig.iMaxAnisotropy; bool force_texture_filtering_changed = old_force_filtering != g_ActiveConfig.bForceFiltering; - bool stereo_changed = old_stereo_mode != g_ActiveConfig.iStereoMode; bool efb_scale_changed = old_efb_scale != g_ActiveConfig.iEFBScale; bool aspect_changed = old_aspect_ratio != g_ActiveConfig.iAspectRatio; bool use_xfb_changed = old_use_xfb != g_ActiveConfig.bUseXFB; @@ -1164,23 +1158,20 @@ void Renderer::CheckForConfigChanges() // MSAA samples changed, we need to recreate the EFB render pass. // If the stereoscopy mode changed, we need to recreate the buffers as well. - if (msaa_changed || stereo_changed) + // SSAA changed on/off, we have to recompile shaders. + // Changing stereoscopy from off<->on also requires shaders to be recompiled. + if (CheckForHostConfigChanges()) { g_command_buffer_mgr->WaitForGPUIdle(); FramebufferManager::GetInstance()->RecreateRenderPass(); FramebufferManager::GetInstance()->ResizeEFBTextures(); BindEFBToStateTracker(); - } - - // SSAA changed on/off, we can leave the buffers/render pass, but have to recompile shaders. - // Changing stereoscopy from off<->on also requires shaders to be recompiled. - if (msaa_changed || ssaa_changed || stereo_changed) - { - g_command_buffer_mgr->WaitForGPUIdle(); RecompileShaders(); FramebufferManager::GetInstance()->RecompileShaders(); + g_object_cache->ReloadShaderAndPipelineCaches(); g_object_cache->RecompileSharedShaders(); - StateTracker::GetInstance()->LoadPipelineUIDCache(); + StateTracker::GetInstance()->InvalidateShaderPointers(); + StateTracker::GetInstance()->ReloadPipelineUIDCache(); } // For vsync, we need to change the present mode, which means recreating the swap chain. |
