VideoBackends:Vulkan: Make dynamic vertex loader optional
Makes it easier to disable in the future if support for VK_EXT_vertex_input_dynamic_state is added
This commit is contained in:
parent
dae56a24b8
commit
28b31b8327
|
@ -247,6 +247,10 @@ bool ObjectCache::CreatePipelineLayouts()
|
||||||
// If bounding box is unsupported, don't bother with the SSBO descriptor set.
|
// If bounding box is unsupported, don't bother with the SSBO descriptor set.
|
||||||
if (!g_ActiveConfig.backend_info.bSupportsBBox)
|
if (!g_ActiveConfig.backend_info.bSupportsBBox)
|
||||||
pipeline_layout_info[PIPELINE_LAYOUT_STANDARD].setLayoutCount--;
|
pipeline_layout_info[PIPELINE_LAYOUT_STANDARD].setLayoutCount--;
|
||||||
|
// If neither SSBO-using feature is supported, skip in ubershaders too
|
||||||
|
if (!g_ActiveConfig.backend_info.bSupportsBBox &&
|
||||||
|
!g_ActiveConfig.backend_info.bSupportsDynamicVertexLoader)
|
||||||
|
pipeline_layout_info[PIPELINE_LAYOUT_UBER].setLayoutCount--;
|
||||||
|
|
||||||
for (size_t i = 0; i < pipeline_layout_info.size(); i++)
|
for (size_t i = 0; i < pipeline_layout_info.size(); i++)
|
||||||
{
|
{
|
||||||
|
|
|
@ -375,8 +375,9 @@ bool StateTracker::Bind()
|
||||||
|
|
||||||
// Re-bind parts of the pipeline
|
// Re-bind parts of the pipeline
|
||||||
const VkCommandBuffer command_buffer = g_command_buffer_mgr->GetCurrentCommandBuffer();
|
const VkCommandBuffer command_buffer = g_command_buffer_mgr->GetCurrentCommandBuffer();
|
||||||
if (m_pipeline->GetUsage() != AbstractPipelineUsage::GXUber &&
|
const bool needs_vertex_buffer = !g_ActiveConfig.backend_info.bSupportsDynamicVertexLoader ||
|
||||||
(m_dirty_flags & DIRTY_FLAG_VERTEX_BUFFER))
|
m_pipeline->GetUsage() != AbstractPipelineUsage::GXUber;
|
||||||
|
if (needs_vertex_buffer && (m_dirty_flags & DIRTY_FLAG_VERTEX_BUFFER))
|
||||||
{
|
{
|
||||||
vkCmdBindVertexBuffers(command_buffer, 0, 1, &m_vertex_buffer, &m_vertex_buffer_offset);
|
vkCmdBindVertexBuffers(command_buffer, 0, 1, &m_vertex_buffer, &m_vertex_buffer_offset);
|
||||||
m_dirty_flags &= ~DIRTY_FLAG_VERTEX_BUFFER;
|
m_dirty_flags &= ~DIRTY_FLAG_VERTEX_BUFFER;
|
||||||
|
@ -530,7 +531,8 @@ bool StateTracker::UpdateGXDescriptorSet()
|
||||||
}
|
}
|
||||||
|
|
||||||
const bool needs_bbox_ssbo = g_ActiveConfig.backend_info.bSupportsBBox;
|
const bool needs_bbox_ssbo = g_ActiveConfig.backend_info.bSupportsBBox;
|
||||||
const bool needs_vertex_ssbo = m_pipeline->GetUsage() == AbstractPipelineUsage::GXUber;
|
const bool needs_vertex_ssbo = g_ActiveConfig.backend_info.bSupportsDynamicVertexLoader &&
|
||||||
|
m_pipeline->GetUsage() == AbstractPipelineUsage::GXUber;
|
||||||
const bool needs_ssbo = needs_bbox_ssbo || needs_vertex_ssbo;
|
const bool needs_ssbo = needs_bbox_ssbo || needs_vertex_ssbo;
|
||||||
|
|
||||||
if (needs_ssbo &&
|
if (needs_ssbo &&
|
||||||
|
@ -546,6 +548,8 @@ bool StateTracker::UpdateGXDescriptorSet()
|
||||||
VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, nullptr, m_gx_descriptor_sets[2], 0, 0, 1,
|
VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, nullptr, m_gx_descriptor_sets[2], 0, 0, 1,
|
||||||
VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, nullptr, &m_bindings.ssbo, nullptr};
|
VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, nullptr, &m_bindings.ssbo, nullptr};
|
||||||
|
|
||||||
|
if (g_ActiveConfig.backend_info.bSupportsDynamicVertexLoader)
|
||||||
|
{
|
||||||
writes[num_writes++] = {VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
writes[num_writes++] = {VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
||||||
nullptr,
|
nullptr,
|
||||||
m_gx_descriptor_sets[2],
|
m_gx_descriptor_sets[2],
|
||||||
|
@ -556,6 +560,7 @@ bool StateTracker::UpdateGXDescriptorSet()
|
||||||
nullptr,
|
nullptr,
|
||||||
&m_bindings.gx_uber_vertex_ssbo,
|
&m_bindings.gx_uber_vertex_ssbo,
|
||||||
nullptr};
|
nullptr};
|
||||||
|
}
|
||||||
|
|
||||||
m_dirty_flags = (m_dirty_flags & ~DIRTY_FLAG_GX_SSBO) | DIRTY_FLAG_DESCRIPTOR_SETS;
|
m_dirty_flags = (m_dirty_flags & ~DIRTY_FLAG_GX_SSBO) | DIRTY_FLAG_DESCRIPTOR_SETS;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue