diff --git a/projects/bindless_textures/src/main.cpp b/projects/bindless_textures/src/main.cpp index 789557bf8cac450d0f000ad9a1ce4ef941e02ab1..457f6f1ced08ff9b3102807c96e0be54092907a3 100644 --- a/projects/bindless_textures/src/main.cpp +++ b/projects/bindless_textures/src/main.cpp @@ -157,7 +157,7 @@ int main(int argc, const char** argv) { const std::unordered_map<uint32_t, vkcv::DescriptorBinding> &descriptorBindings = firstMeshProgram.getReflectedDescriptors().at(0); std::unordered_map<uint32_t, vkcv::DescriptorBinding> adjustedBindings = descriptorBindings; - adjustedBindings[1].descriptorCount = 5; + adjustedBindings[1].descriptorCount = 6; vkcv::DescriptorSetLayoutHandle descriptorSetLayout = core.createDescriptorSetLayout(adjustedBindings); vkcv::DescriptorSetHandle descriptorSet = core.createDescriptorSet(descriptorSetLayout); diff --git a/src/vkcv/DescriptorManager.cpp b/src/vkcv/DescriptorManager.cpp index 2ea408a9a721b141c92740c41ed4155f909646a6..e695d6e35bbe0546dc793e04d85af54e0559b4e9 100644 --- a/src/vkcv/DescriptorManager.cpp +++ b/src/vkcv/DescriptorManager.cpp @@ -113,6 +113,21 @@ namespace vkcv DescriptorSetLayout setLayout = m_DescriptorSetLayouts[setLayoutHandle.getId()]; vk::DescriptorSet vulkanHandle = VK_NULL_HANDLE; vk::DescriptorSetAllocateInfo allocInfo(m_Pools.back(), 1, &setLayout.vulkanHandle); + + uint32_t sumVariableDescriptorCounts = 0; + for (auto bindingElem : setLayout.descriptorBindings) + { + DescriptorBinding binding = bindingElem.second; + uint32_t bindingID = bindingElem.first; + + if(binding.variableCount) + sumVariableDescriptorCounts += binding.descriptorCount; + } + + vk::DescriptorSetVariableDescriptorCountAllocateInfo variableAllocInfo(1, &sumVariableDescriptorCounts); + + allocInfo.setPNext(&variableAllocInfo); + auto result = m_Device.allocateDescriptorSets(&allocInfo, &vulkanHandle); if(result != vk::Result::eSuccess) {