diff options
| author | Egor Yusov <egor.yusov@gmail.com> | 2018-05-07 15:22:59 +0000 |
|---|---|---|
| committer | Egor Yusov <egor.yusov@gmail.com> | 2018-05-07 15:22:59 +0000 |
| commit | f87c62800ea13334bb73297bf36dfb686684aa8d (patch) | |
| tree | b21867acdbc13baa43744dc231594c4bd8d0968c /Graphics/GraphicsEngineVulkan | |
| parent | First working implementation of pipeline layout initialization in Vulkan (diff) | |
| download | DiligentCore-f87c62800ea13334bb73297bf36dfb686684aa8d.tar.gz DiligentCore-f87c62800ea13334bb73297bf36dfb686684aa8d.zip | |
Fixed pipeline layout initialization when not all set layouts are active
Diffstat (limited to 'Graphics/GraphicsEngineVulkan')
| -rw-r--r-- | Graphics/GraphicsEngineVulkan/src/PipelineLayout.cpp | 24 |
1 files changed, 12 insertions, 12 deletions
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<VkDescriptorSetLayout, 2> 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<uint32_t>(m_DescriptorSetLayouts.size()); - - std::vector<VkDescriptorSetLayout, STDAllocatorRawMem<VkDescriptorSetLayout> > - VkDescrSetLayout(m_DescriptorSetLayouts.size(), - VK_NULL_HANDLE, - STD_ALLOCATOR_RAW_MEM(VkDescriptorSetLayout, m_MemAllocator, "Allocator for vector<VkDescriptorSetLayout>")); - 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); |
