From 81e2aac321c4f3946d48d4d9c841651e26a0af12 Mon Sep 17 00:00:00 2001 From: "HuYingzhuo(hugo/hyzboy)" Date: Mon, 20 Mar 2023 13:51:25 +0800 Subject: [PATCH] optimized MaterialDescriptorSets --- inc/hgl/graph/VKMaterialDescriptorSets.h | 6 +- .../Vulkan/VKMaterialDescriptorSets.cpp | 55 ++++++------------- 2 files changed, 18 insertions(+), 43 deletions(-) diff --git a/inc/hgl/graph/VKMaterialDescriptorSets.h b/inc/hgl/graph/VKMaterialDescriptorSets.h index 3305ad33..6a7fa677 100644 --- a/inc/hgl/graph/VKMaterialDescriptorSets.h +++ b/inc/hgl/graph/VKMaterialDescriptorSets.h @@ -9,16 +9,14 @@ class MaterialDescriptorSets { UTF8String mtl_name; - //ShaderDescriptorList sd_list_by_set_type[DESCRIPTOR_SET_TYPE_COUNT]; bool set_has_desc[DESCRIPTOR_SET_TYPE_COUNT]; -// Map sd_by_name; Map binding_map[VK_DESCRIPTOR_TYPE_RANGE_SIZE]; -// int *binding_list[VK_DESCRIPTOR_TYPE_RANGE_SIZE]; - private: + VkDescriptorSetLayoutBinding *all_dslb; + DescriptorSetLayoutCreateInfo dsl_ci[DESCRIPTOR_SET_TYPE_COUNT]; public: diff --git a/src/SceneGraph/Vulkan/VKMaterialDescriptorSets.cpp b/src/SceneGraph/Vulkan/VKMaterialDescriptorSets.cpp index 00df32c2..4c59b37f 100644 --- a/src/SceneGraph/Vulkan/VKMaterialDescriptorSets.cpp +++ b/src/SceneGraph/Vulkan/VKMaterialDescriptorSets.cpp @@ -22,6 +22,8 @@ MaterialDescriptorSets::MaterialDescriptorSets(const UTF8String &name,ShaderDesc hgl_zero(set_has_desc); + uint dslb_count=0; + { ENUM_CLASS_FOR(DescriptorSetType,int,i) { @@ -38,59 +40,43 @@ MaterialDescriptorSets::MaterialDescriptorSets(const UTF8String &name,ShaderDesc &&sp->desc_type<=VK_DESCRIPTOR_TYPE_END_RANGE) sd_list_by_desc_type[(size_t)sp->desc_type].Add(sp); -// sd_by_name.Add(sp->name,sp); binding_map[size_t(sp->desc_type)].Add(sp->name,sp->binding); ++dsl_ci[size_t(sp->set_type)].bindingCount; - //sd_list_by_set_type[size_t(sp->set_type)].Add(sp); + ++dslb_count; + set_has_desc[size_t(sp->set_type)]=true; ++sp; } } + all_dslb=new VkDescriptorSetLayoutBinding[dslb_count]; + VkDescriptorSetLayoutBinding *dsl_bind[DESCRIPTOR_SET_TYPE_COUNT]; + VkDescriptorSetLayoutBinding *dslp=all_dslb; { ENUM_CLASS_FOR(DescriptorSetType,int,i) if(dsl_ci[i].bindingCount>0) { - dsl_ci[i].pBindings=new VkDescriptorSetLayoutBinding[dsl_ci[i].bindingCount]; - dsl_bind[i]=(VkDescriptorSetLayoutBinding *)dsl_ci[i].pBindings; + dsl_ci[i].pBindings=dslp; + dsl_bind[i]=dslp; + dslp+=dsl_ci[i].bindingCount; } } { - ShaderDescriptorList *sdl=sd_list_by_desc_type; - ShaderDescriptor **sdp; + ShaderDescriptor *sp=sd_list; - for(uint i=VK_DESCRIPTOR_TYPE_BEGIN_RANGE; - i<=VK_DESCRIPTOR_TYPE_END_RANGE;i++) + for(uint i=0;iGetCount()>0) - { -// binding_list[i]=new int[sdl->GetCount()]; + WriteDescriptorSetLayoutBinding(dsl_bind[size_t(sp->set_type)],sp); - sdp=sdl->GetData(); - for(int j=0;jGetCount();j++) - { -// binding_list[i][j]=(*sdp)->binding; + ++dsl_bind[size_t(sp->set_type)]; - WriteDescriptorSetLayoutBinding(dsl_bind[size_t((*sdp)->set_type)], - *sdp); - - ++dsl_bind[size_t((*sdp)->set_type)]; - - ++sdp; - } - } - //else - //{ - // binding_list[i]=nullptr; - //} - - ++sdl; + ++sp; } } } @@ -98,16 +84,7 @@ MaterialDescriptorSets::MaterialDescriptorSets(const UTF8String &name,ShaderDesc MaterialDescriptorSets::~MaterialDescriptorSets() { - ENUM_CLASS_FOR(DescriptorSetType,int,i) - if(dsl_ci[i].bindingCount) - delete[] dsl_ci[i].pBindings; - - //for(uint i=VK_DESCRIPTOR_TYPE_BEGIN_RANGE; - // i<=VK_DESCRIPTOR_TYPE_END_RANGE;i++) - //{ - // if(binding_list[i]) - // delete[] binding_list[i]; - //} + delete[] all_dslb; } const int MaterialDescriptorSets::GetBinding(const VkDescriptorType &desc_type,const AnsiString &name)const