diff --git a/example/Vulkan/VKDescriptorSets.cpp b/example/Vulkan/VKDescriptorSets.cpp index 2bbe471e..c454218f 100644 --- a/example/Vulkan/VKDescriptorSets.cpp +++ b/example/Vulkan/VKDescriptorSets.cpp @@ -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 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); diff --git a/example/Vulkan/VKPipelineLayout.cpp b/example/Vulkan/VKPipelineLayout.cpp index 115deb20..524390bf 100644 --- a/example/Vulkan/VKPipelineLayout.cpp +++ b/example/Vulkan/VKPipelineLayout.cpp @@ -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)); } diff --git a/example/Vulkan/VKPipelineLayout.h b/example/Vulkan/VKPipelineLayout.h index eaeb38c6..785a415f 100644 --- a/example/Vulkan/VKPipelineLayout.h +++ b/example/Vulkan/VKPipelineLayout.h @@ -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);