From 2f1a7cbee1ffecdd25ebc206ceab55ef934b7256 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Fri, 16 Mar 2018 23:10:22 +1000 Subject: Implement "Skip" ubershader mode Skip ubershader mode works the same as hybrid ubershaders in that the shaders are compiled asynchronously. However, instead of using the ubershader to draw the object, it skips it entirely until the specialized shader is made available. This mode will likely result in broken effects where a game creates an EFB copy, and does not redraw it every frame. Therefore, it is not a recommended option, however, it may result in better performance on low-end systems. --- Source/Core/VideoBackends/Vulkan/VertexManager.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'Source/Core/VideoBackends/Vulkan/VertexManager.cpp') diff --git a/Source/Core/VideoBackends/Vulkan/VertexManager.cpp b/Source/Core/VideoBackends/Vulkan/VertexManager.cpp index 1e97cf6308..ea9b27351b 100644 --- a/Source/Core/VideoBackends/Vulkan/VertexManager.cpp +++ b/Source/Core/VideoBackends/Vulkan/VertexManager.cpp @@ -166,16 +166,19 @@ void VertexManager::vFlush() } // Bind all pending state to the command buffer - g_renderer->SetPipeline(m_current_pipeline_object); - if (!StateTracker::GetInstance()->Bind()) + if (m_current_pipeline_object) { - WARN_LOG(VIDEO, "Skipped draw of %u indices", index_count); - return; - } + g_renderer->SetPipeline(m_current_pipeline_object); + if (!StateTracker::GetInstance()->Bind()) + { + WARN_LOG(VIDEO, "Skipped draw of %u indices", index_count); + return; + } - // Execute the draw - vkCmdDrawIndexed(g_command_buffer_mgr->GetCurrentCommandBuffer(), index_count, 1, - m_current_draw_base_index, m_current_draw_base_vertex, 0); + // Execute the draw + vkCmdDrawIndexed(g_command_buffer_mgr->GetCurrentCommandBuffer(), index_count, 1, + m_current_draw_base_index, m_current_draw_base_vertex, 0); + } StateTracker::GetInstance()->OnDraw(); } -- cgit v1.2.3