diff options
| author | Jonathan Marek <jonathan@marek.ca> | 2020-10-04 18:09:30 -0400 |
|---|---|---|
| committer | Léo Lam <leo@leolam.fr> | 2020-11-20 12:23:34 +0100 |
| commit | a20e69ff5173ee171b57bcc4dce071cef4459512 (patch) | |
| tree | 57170a99702091bd2b8881fe603a3323ca3515ee /Source/Core/VideoBackends/Vulkan/StateTracker.cpp | |
| parent | c580a70a1245945a47df14b28c7b8741646fddc7 (diff) | |
Vulkan: fix validation error in bSupportsGeometryShaders=false case
In CreateDescriptorSetLayouts(), one less dynamic binding is created when
bSupportsGeometryShaders=false. Reduce the dynamicOffsetCount argument by
one in that case. Avoids this validation error:
Attempting to bind 3 descriptorSets with 2 dynamic descriptors, but
dynamicOffsetCount is 3. It should exactly match the number of dynamic
descriptors. The Vulkan spec states: dynamicOffsetCount must be equal to
the total number of dynamic descriptors in pDescriptorSets
Signed-off-by: Jonathan Marek <jonathan@marek.ca>
[Applied clang-format]
Signed-off-by: Léo Lam <leo@leolam.fr>
Diffstat (limited to 'Source/Core/VideoBackends/Vulkan/StateTracker.cpp')
| -rw-r--r-- | Source/Core/VideoBackends/Vulkan/StateTracker.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/Source/Core/VideoBackends/Vulkan/StateTracker.cpp b/Source/Core/VideoBackends/Vulkan/StateTracker.cpp index 50ea9d61d6..53081c4be2 100644 --- a/Source/Core/VideoBackends/Vulkan/StateTracker.cpp +++ b/Source/Core/VideoBackends/Vulkan/StateTracker.cpp @@ -542,7 +542,10 @@ bool StateTracker::UpdateGXDescriptorSet() g_ActiveConfig.backend_info.bSupportsBBox ? NUM_GX_DESCRIPTOR_SETS : (NUM_GX_DESCRIPTOR_SETS - 1), - m_gx_descriptor_sets.data(), NUM_UBO_DESCRIPTOR_SET_BINDINGS, + m_gx_descriptor_sets.data(), + g_ActiveConfig.backend_info.bSupportsGeometryShaders ? + NUM_UBO_DESCRIPTOR_SET_BINDINGS : + (NUM_UBO_DESCRIPTOR_SET_BINDINGS - 1), m_bindings.gx_ubo_offsets.data()); m_dirty_flags &= ~(DIRTY_FLAG_DESCRIPTOR_SETS | DIRTY_FLAG_GX_UBO_OFFSETS); } @@ -550,7 +553,10 @@ bool StateTracker::UpdateGXDescriptorSet() { vkCmdBindDescriptorSets(g_command_buffer_mgr->GetCurrentCommandBuffer(), VK_PIPELINE_BIND_POINT_GRAPHICS, m_pipeline->GetVkPipelineLayout(), 0, - 1, m_gx_descriptor_sets.data(), NUM_UBO_DESCRIPTOR_SET_BINDINGS, + 1, m_gx_descriptor_sets.data(), + g_ActiveConfig.backend_info.bSupportsGeometryShaders ? + NUM_UBO_DESCRIPTOR_SET_BINDINGS : + (NUM_UBO_DESCRIPTOR_SET_BINDINGS - 1), m_bindings.gx_ubo_offsets.data()); m_dirty_flags &= ~DIRTY_FLAG_GX_UBO_OFFSETS; } |
