支持0个DescriptorSets

This commit is contained in:
HuYingzhuo 2019-04-19 22:27:12 +08:00
parent c6787acf27
commit ed8d4a276c
3 changed files with 15 additions and 17 deletions

View File

@ -67,15 +67,20 @@ void DescriptorSetLayoutCreater::Bind(const int binding,VkDescriptorType desc_ty
DescriptorSetLayout *DescriptorSetLayoutCreater::Create()
{
const int count=layout_binding_list.GetCount();
if(count<=0)
return(nullptr);
VkDescriptorSetLayoutCreateInfo descriptor_layout = {};
descriptor_layout.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
descriptor_layout.pNext = nullptr;
descriptor_layout.bindingCount = layout_binding_list.GetCount();
descriptor_layout.bindingCount = count;
descriptor_layout.pBindings = layout_binding_list.GetData();
List<VkDescriptorSetLayout> dsl_list;
dsl_list.SetCount(layout_binding_list.GetCount());
dsl_list.SetCount(count);
if(vkCreateDescriptorSetLayout(device->GetDevice(),&descriptor_layout, nullptr, dsl_list.GetData())!=VK_SUCCESS)
return(false);

View File

@ -10,30 +10,23 @@ PipelineLayout::~PipelineLayout()
PipelineLayout *CreatePipelineLayout(VkDevice dev,const DescriptorSetLayout *dsl)
{
if(!dsl)return(nullptr);
if(dsl->GetCount()<=0)return(nullptr);
DescriptorSets *desc_sets=dsl->CreateSets();
if(!desc_sets)
return(nullptr);
const uint32_t layout_count=(dsl?dsl->GetCount():0);
const VkDescriptorSetLayout *layouts=(layout_count>0?dsl->GetData():nullptr);
VkPipelineLayoutCreateInfo pPipelineLayoutCreateInfo = {};
pPipelineLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
pPipelineLayoutCreateInfo.pNext = nullptr;
pPipelineLayoutCreateInfo.pushConstantRangeCount = 0;
pPipelineLayoutCreateInfo.pPushConstantRanges = nullptr;
pPipelineLayoutCreateInfo.setLayoutCount = dsl->GetCount();
pPipelineLayoutCreateInfo.pSetLayouts = dsl->GetData();
pPipelineLayoutCreateInfo.setLayoutCount = layout_count;
pPipelineLayoutCreateInfo.pSetLayouts = layouts;
VkPipelineLayout pipeline_layout;
if(vkCreatePipelineLayout(dev, &pPipelineLayoutCreateInfo, nullptr, &pipeline_layout)!=VK_SUCCESS)
{
delete desc_sets;
return(nullptr);
}
DescriptorSets *desc_sets=(layout_count>0?dsl->CreateSets():nullptr);
return(new PipelineLayout(dev,pipeline_layout,desc_sets));
}

View File

@ -23,8 +23,8 @@ public:
operator VkPipelineLayout (){return layout;}
const uint32_t GetDescriptorSetCount ()const{return desc_sets->GetCount();}
const VkDescriptorSet * GetDescriptorSets ()const{return desc_sets->GetData();}
const uint32_t GetDescriptorSetCount ()const{return desc_sets?desc_sets->GetCount():0;}
const VkDescriptorSet * GetDescriptorSets ()const{return desc_sets?desc_sets->GetData():nullptr;}
};//class PipelineLayout
PipelineLayout *CreatePipelineLayout(VkDevice dev,const DescriptorSetLayout *dsl);