Skip to content
Snippets Groups Projects
Verified Commit fb5d87dc authored by Tobias Frisch's avatar Tobias Frisch
Browse files

[#105] Fixed descriptor binding flags and destruction of descriptorset layouts

parent 8ec8f22a
No related branches found
No related tags found
1 merge request!88Resolve "Indirect Draw"
Pipeline #27033 failed
...@@ -60,35 +60,36 @@ namespace vkcv ...@@ -60,35 +60,36 @@ namespace vkcv
} }
} }
//create the descriptor set's layout by iterating over its bindings //create the descriptor set's layout and binding flags by iterating over its bindings
std::vector<vk::DescriptorSetLayoutBinding> bindingsVector = {}; std::vector<vk::DescriptorSetLayoutBinding> bindingsVector = {};
std::vector<vk::DescriptorBindingFlags> bindingsFlags = {};
for (auto bindingElem : setBindingsMap) for (auto bindingElem : setBindingsMap)
{ {
DescriptorBinding binding = bindingElem.second; DescriptorBinding binding = bindingElem.second;
uint32_t bindingID = bindingElem.first; uint32_t bindingID = bindingElem.first;
vk::DescriptorSetLayoutBinding descriptorSetLayoutBinding( bindingsVector.emplace_back(
bindingID, bindingID,
getVkDescriptorType(binding.descriptorType), getVkDescriptorType(binding.descriptorType),
binding.descriptorCount, binding.descriptorCount,
getShaderStageFlags(binding.shaderStages), getShaderStageFlags(binding.shaderStages),
nullptr nullptr
); );
}
if (binding.variableCount) {
vk::DescriptorBindingFlags bindingFlags = {}; bindingsFlags.push_back(
// create binding flags vk::DescriptorBindingFlagBits::eVariableDescriptorCount |
for (auto bindingElem : setBindingsMap) vk::DescriptorBindingFlagBits::ePartiallyBound
{ );
DescriptorBinding binding = bindingElem.second; } else {
bindingsFlags.push_back(vk::DescriptorBindingFlags());
if (binding.variableCount) }
{
bindingFlags = vk::DescriptorBindingFlagBitsEXT::eVariableDescriptorCount | vk::DescriptorBindingFlagBitsEXT::ePartiallyBound;
break;
}
} }
vk::DescriptorSetLayoutBindingFlagsCreateInfo bindingFlagsInfo(1, &bindingFlags);
vk::DescriptorSetLayoutBindingFlagsCreateInfo bindingFlagsInfo (
bindingsFlags.size(), bindingsFlags.data()
);
//create the descriptor set's layout from the binding data gathered above //create the descriptor set's layout from the binding data gathered above
vk::DescriptorSetLayout vulkanHandle = VK_NULL_HANDLE; vk::DescriptorSetLayout vulkanHandle = VK_NULL_HANDLE;
...@@ -308,6 +309,7 @@ namespace vkcv ...@@ -308,6 +309,7 @@ namespace vkcv
} }
auto& set = m_DescriptorSets[id]; auto& set = m_DescriptorSets[id];
if (set.vulkanHandle) { if (set.vulkanHandle) {
m_Device.freeDescriptorSets(m_Pools[set.poolIndex], 1, &(set.vulkanHandle)); m_Device.freeDescriptorSets(m_Pools[set.poolIndex], 1, &(set.vulkanHandle));
set.setLayoutHandle = DescriptorSetLayoutHandle(); set.setLayoutHandle = DescriptorSetLayoutHandle();
...@@ -316,12 +318,13 @@ namespace vkcv ...@@ -316,12 +318,13 @@ namespace vkcv
} }
void DescriptorManager::destroyDescriptorSetLayoutById(uint64_t id) { void DescriptorManager::destroyDescriptorSetLayoutById(uint64_t id) {
if (id >= m_DescriptorSets.size()) { if (id >= m_DescriptorSetLayouts.size()) {
vkcv_log(LogLevel::ERROR, "Invalid id"); vkcv_log(LogLevel::ERROR, "Invalid id");
return; return;
} }
auto layout = m_DescriptorSetLayouts[id]; auto& layout = m_DescriptorSetLayouts[id];
if (layout.vulkanHandle){ if (layout.vulkanHandle){
m_Device.destroy(layout.vulkanHandle); m_Device.destroy(layout.vulkanHandle);
layout.vulkanHandle = nullptr; layout.vulkanHandle = nullptr;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment