added block repeat bind at DescriptorSets

This commit is contained in:
2021-09-27 21:09:04 +08:00
parent 68a1561f5a
commit b9f0632d7f
2 changed files with 40 additions and 0 deletions

View File

@@ -65,6 +65,8 @@ void DescriptorSets::Clear()
buffer_list.ClearData();
image_list.ClearData();
wds_list.ClearData();
binded_sets.ClearData();
is_dirty=true;
}
bool DescriptorSets::BindUBO(const int binding,const GPUBuffer *buf,bool dynamic)
@@ -72,10 +74,14 @@ bool DescriptorSets::BindUBO(const int binding,const GPUBuffer *buf,bool dynamic
if(binding<0||!buf)
return(false);
if(binded_sets.IsMember(binding))return(false);
const VkDescriptorType desc_type=dynamic?VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
wds_list.Add(WriteDescriptorSet(desc_set,binding,buf->GetBufferInfo(),desc_type));
binded_sets.Add(binding);
is_dirty=true;
return(true);
}
@@ -84,6 +90,8 @@ bool DescriptorSets::BindUBO(const int binding,const GPUBuffer *buf,const VkDevi
if(binding<0||!buf)
return(false);
if(binded_sets.IsMember(binding))return(false);
DescriptorBufferInfo *buf_info=new DescriptorBufferInfo(buf,offset,range);
buffer_list.Add(buf_info);
@@ -91,6 +99,9 @@ bool DescriptorSets::BindUBO(const int binding,const GPUBuffer *buf,const VkDevi
const VkDescriptorType desc_type=dynamic?VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
wds_list.Add(WriteDescriptorSet(desc_set,binding,buf_info,desc_type));
binded_sets.Add(binding);
is_dirty=true;
return(true);
}
@@ -99,10 +110,14 @@ bool DescriptorSets::BindSSBO(const int binding,const GPUBuffer *buf,bool dynami
if(binding<0||!buf)
return(false);
if(binded_sets.IsMember(binding))return(false);
const VkDescriptorType desc_type=dynamic?VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
wds_list.Add(WriteDescriptorSet(desc_set,binding,buf->GetBufferInfo(),desc_type));
binded_sets.Add(binding);
is_dirty=true;
return(true);
}
@@ -111,6 +126,8 @@ bool DescriptorSets::BindSSBO(const int binding,const GPUBuffer *buf,const VkDev
if(binding<0||!buf)
return(false);
if(binded_sets.IsMember(binding))return(false);
DescriptorBufferInfo *buf_info=new DescriptorBufferInfo(buf,offset,range);
buffer_list.Add(buf_info);
@@ -118,6 +135,9 @@ bool DescriptorSets::BindSSBO(const int binding,const GPUBuffer *buf,const VkDev
const VkDescriptorType desc_type=dynamic?VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
wds_list.Add(WriteDescriptorSet(desc_set,binding,buf_info,desc_type));
binded_sets.Add(binding);
is_dirty=true;
return(true);
}
@@ -126,11 +146,16 @@ bool DescriptorSets::BindSampler(const int binding,Texture *tex,Sampler *sampler
if(binding<0||!tex||!sampler)
return(false);
if(binded_sets.IsMember(binding))return(false);
DescriptorImageInfo *image_info=new DescriptorImageInfo(tex,sampler);
image_list.Add(image_info);
wds_list.Add(WriteDescriptorSet(desc_set,binding,image_info));
binded_sets.Add(binding);
is_dirty=true;
return(true);
}
@@ -139,16 +164,24 @@ bool DescriptorSets::BindInputAttachment(const int binding,Texture *tex)
if(binding<0||!tex)
return(false);
if(binded_sets.IsMember(binding))return(false);
DescriptorImageInfo *image_info=new DescriptorImageInfo(tex,nullptr);
image_list.Add(image_info);
wds_list.Add(WriteDescriptorSet(desc_set,binding,image_info,VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT));
binded_sets.Add(binding);
is_dirty=true;
return(true);
}
void DescriptorSets::Update()
{
if(!is_dirty)return;
vkUpdateDescriptorSets(device,wds_list.GetCount(),wds_list.GetData(),0,nullptr);
is_dirty=false;
}
VK_NAMESPACE_END