From f87c62800ea13334bb73297bf36dfb686684aa8d Mon Sep 17 00:00:00 2001 From: Egor Yusov Date: Mon, 7 May 2018 08:22:59 -0700 Subject: Fixed pipeline layout initialization when not all set layouts are active --- .../GraphicsEngineVulkan/src/PipelineLayout.cpp | 24 +++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'Graphics/GraphicsEngineVulkan') diff --git a/Graphics/GraphicsEngineVulkan/src/PipelineLayout.cpp b/Graphics/GraphicsEngineVulkan/src/PipelineLayout.cpp index eb54d855..3fab3341 100644 --- a/Graphics/GraphicsEngineVulkan/src/PipelineLayout.cpp +++ b/Graphics/GraphicsEngineVulkan/src/PipelineLayout.cpp @@ -232,27 +232,27 @@ void PipelineLayout::DescriptorSetLayoutManager::Finalize(const VulkanUtilities: } m_LayoutBindings.resize(TotalBindings); size_t BindingOffset = 0; + std::array ActiveDescrSetLayouts; + int CurrActiveSet = 0; for(size_t i=0; i < m_DescriptorSetLayouts.size(); ++i) { auto &Layout = m_DescriptorSetLayouts[i]; - std::copy(Layout.pBindings, Layout.pBindings + Layout.NumLayoutBindings, m_LayoutBindings.begin() + BindingOffset); - Layout.Finalize(LogicalDevice, m_MemAllocator, &m_LayoutBindings[BindingOffset]); - BindingOffset += Layout.NumLayoutBindings; + if(Layout.SetIndex >= 0) + { + std::copy(Layout.pBindings, Layout.pBindings + Layout.NumLayoutBindings, m_LayoutBindings.begin() + BindingOffset); + Layout.Finalize(LogicalDevice, m_MemAllocator, &m_LayoutBindings[BindingOffset]); + BindingOffset += Layout.NumLayoutBindings; + ActiveDescrSetLayouts[CurrActiveSet++] = Layout.VkLayout; + } } + VERIFY_EXPR(CurrActiveSet == m_ActiveSets); VkPipelineLayoutCreateInfo PipelineLayoutCI = {}; PipelineLayoutCI.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO; PipelineLayoutCI.pNext = nullptr; PipelineLayoutCI.flags = 0; // reserved for future use - PipelineLayoutCI.setLayoutCount = static_cast(m_DescriptorSetLayouts.size()); - - std::vector > - VkDescrSetLayout(m_DescriptorSetLayouts.size(), - VK_NULL_HANDLE, - STD_ALLOCATOR_RAW_MEM(VkDescriptorSetLayout, m_MemAllocator, "Allocator for vector")); - for(size_t i=0; i < m_DescriptorSetLayouts.size(); ++i) - VkDescrSetLayout[i] = m_DescriptorSetLayouts[i].VkLayout; - PipelineLayoutCI.pSetLayouts = !VkDescrSetLayout.empty() ? VkDescrSetLayout.data() : nullptr; + PipelineLayoutCI.setLayoutCount = m_ActiveSets; + PipelineLayoutCI.pSetLayouts = PipelineLayoutCI.setLayoutCount != 0 ? ActiveDescrSetLayouts.data() : nullptr; PipelineLayoutCI.pushConstantRangeCount = 0; PipelineLayoutCI.pPushConstantRanges = nullptr; m_VkPipelineLayout = LogicalDevice.CreatePipelineLayout(PipelineLayoutCI); -- cgit v1.2.3