diff options
| author | Stenzek <stenzek@gmail.com> | 2018-03-16 23:10:22 +1000 |
|---|---|---|
| committer | Stenzek <stenzek@gmail.com> | 2018-03-26 01:57:41 +1000 |
| commit | 2f1a7cbee1ffecdd25ebc206ceab55ef934b7256 (patch) | |
| tree | 1cbf78b64fbf293ede3a9bd47e586a0d4bb03a6b /Source/Core/VideoBackends/Vulkan/VertexManager.cpp | |
| parent | 5c83e18fbd3606587e71a7f1cc54e4cf6473609f (diff) | |
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.
Diffstat (limited to 'Source/Core/VideoBackends/Vulkan/VertexManager.cpp')
| -rw-r--r-- | Source/Core/VideoBackends/Vulkan/VertexManager.cpp | 19 |
1 files changed, 11 insertions, 8 deletions
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(); } |
