修正重复UBO被重复绑定的问题

This commit is contained in:
hyzboy 2019-07-17 12:00:43 +08:00
parent 0c20f52eb8
commit 8abe9c3d9d

View File

@ -14,6 +14,12 @@ DescriptorSetLayoutCreater::~DescriptorSetLayoutCreater()
void DescriptorSetLayoutCreater::Bind(const uint32_t binding,VkDescriptorType desc_type,VkShaderStageFlagBits stageFlags)
{
if(index_by_binding.KeyExist(binding))
{
//重复的绑定点有可能存在的比如WorldMatrix在vs/fs中同时存在
return;
}
VkDescriptorSetLayoutBinding layout_binding;
layout_binding.binding = binding;
@ -33,23 +39,32 @@ void DescriptorSetLayoutCreater::Bind(const uint32_t *binding,const uint32_t cou
const uint old_count=layout_binding_list.GetCount();
layout_binding_list.SetCount(old_count+count);
layout_binding_list.PreMalloc(old_count+count);
VkDescriptorSetLayoutBinding *p=layout_binding_list.GetData()+old_count;
uint fin_count=0;
for(uint i=old_count;i<old_count+count;i++)
{
p->binding = *binding;
p->descriptorType = desc_type;
p->descriptorCount = 1;
p->stageFlags = stageFlags;
p->pImmutableSamplers = nullptr;
if(!index_by_binding.KeyExist(*binding))
{
p->binding = *binding;
p->descriptorType = desc_type;
p->descriptorCount = 1;
p->stageFlags = stageFlags;
p->pImmutableSamplers = nullptr;
index_by_binding.Add(*binding,i);
index_by_binding.Add(*binding,i);
++p;
++fin_count;
}
++binding;
++p;
}
layout_binding_list.SetCount(old_count+fin_count);
}
bool DescriptorSetLayoutCreater::CreatePipelineLayout()