From 9f8e63788d0f216016caa38b768d20aab18519a7 Mon Sep 17 00:00:00 2001 From: "HuYingzhuo(hugo/hyzboy)" Date: Tue, 21 Mar 2023 22:28:01 +0800 Subject: [PATCH] used 2d array at binding_map of MaterialDescriptorManager --- inc/hgl/graph/VKMaterialDescriptorManager.h | 12 ++++++------ .../Vulkan/VKMaterialDescriptorManager.cpp | 10 ++++++---- src/SceneGraph/Vulkan/VKMaterialParameters.cpp | 8 ++++---- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/inc/hgl/graph/VKMaterialDescriptorManager.h b/inc/hgl/graph/VKMaterialDescriptorManager.h index 25d08114..6e3f3644 100644 --- a/inc/hgl/graph/VKMaterialDescriptorManager.h +++ b/inc/hgl/graph/VKMaterialDescriptorManager.h @@ -9,7 +9,7 @@ class MaterialDescriptorManager { UTF8String mtl_name; - Map binding_map[VK_DESCRIPTOR_TYPE_RANGE_SIZE]; + Map binding_map[DESCRIPTOR_SET_TYPE_COUNT][VK_DESCRIPTOR_TYPE_RANGE_SIZE]; private: @@ -25,12 +25,12 @@ public: const UTF8String &GetMaterialName()const{return mtl_name;} - const int GetBinding(const VkDescriptorType &desc_type,const AnsiString &name)const; + const int GetBinding(const DescriptorSetType &set_type,const VkDescriptorType &desc_type,const AnsiString &name)const; - const int GetUBO (const AnsiString &name,bool dynamic)const{return GetBinding(dynamic?VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,name);} - const int GetSSBO (const AnsiString &name,bool dynamic)const{return GetBinding(dynamic?VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,name);} - const int GetImageSampler (const AnsiString &name )const{return GetBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,name);} - const int GetInputAttachment(const AnsiString &name )const{return GetBinding(VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT,name);} + const int GetUBO (const DescriptorSetType &set_type,const AnsiString &name,bool dynamic)const{return GetBinding(set_type,dynamic?VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,name);} + const int GetSSBO (const DescriptorSetType &set_type,const AnsiString &name,bool dynamic)const{return GetBinding(set_type,dynamic?VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,name);} + const int GetImageSampler (const DescriptorSetType &set_type,const AnsiString &name )const{return GetBinding(set_type,VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,name);} + const int GetInputAttachment(const DescriptorSetType &set_type,const AnsiString &name )const{return GetBinding(set_type,VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT,name);} const DescriptorSetLayoutCreateInfo *GetDSLCI(const DescriptorSetType &type)const{return dsl_ci+size_t(type);} diff --git a/src/SceneGraph/Vulkan/VKMaterialDescriptorManager.cpp b/src/SceneGraph/Vulkan/VKMaterialDescriptorManager.cpp index 97bf574e..d62cf0c6 100644 --- a/src/SceneGraph/Vulkan/VKMaterialDescriptorManager.cpp +++ b/src/SceneGraph/Vulkan/VKMaterialDescriptorManager.cpp @@ -29,7 +29,7 @@ MaterialDescriptorManager::MaterialDescriptorManager(const UTF8String &name,Shad for(uint i=0;idesc_type)].Add(sp->name,sp->binding); + binding_map[size_t(sp->set_type)][size_t(sp->desc_type)].Add(sp->name,sp->binding); ++dsl_ci[size_t(sp->set_type)].bindingCount; @@ -110,7 +110,7 @@ MaterialDescriptorManager::MaterialDescriptorManager(const UTF8String &name,cons { sd=(*sp)->right; - binding_map[size_t(sd->desc_type)].Add(sd->name,sd->binding); + binding_map[size_t(sd->set_type)][size_t(sd->desc_type)].Add(sd->name,sd->binding); WriteDescriptorSetLayoutBinding(dsl_bind[i],sd); @@ -127,8 +127,10 @@ MaterialDescriptorManager::~MaterialDescriptorManager() delete[] all_dslb; } -const int MaterialDescriptorManager::GetBinding(const VkDescriptorType &desc_type,const AnsiString &name)const +const int MaterialDescriptorManager::GetBinding(const DescriptorSetType &set_type,const VkDescriptorType &desc_type,const AnsiString &name)const { + RANGE_CHECK_RETURN(set_type,-1) + if(desc_typeVK_DESCRIPTOR_TYPE_END_RANGE) return -1; @@ -137,6 +139,6 @@ const int MaterialDescriptorManager::GetBinding(const VkDescriptorType &desc_typ int result; - return(binding_map[size_t(desc_type)].Get(name,result)?result:-1); + return(binding_map[size_t(set_type)][size_t(desc_type)].Get(name,result)?result:-1); } VK_NAMESPACE_END \ No newline at end of file diff --git a/src/SceneGraph/Vulkan/VKMaterialParameters.cpp b/src/SceneGraph/Vulkan/VKMaterialParameters.cpp index acd50ed4..316312e9 100644 --- a/src/SceneGraph/Vulkan/VKMaterialParameters.cpp +++ b/src/SceneGraph/Vulkan/VKMaterialParameters.cpp @@ -21,7 +21,7 @@ bool MaterialParameters::BindUBO(const AnsiString &name,DeviceBuffer *ubo,bool d if(name.IsEmpty()||!ubo) return(false); - const int index=desc_manager->GetUBO(name,dynamic); + const int index=desc_manager->GetUBO(set_type,name,dynamic); if(index<0) return(false); @@ -37,7 +37,7 @@ bool MaterialParameters::BindSSBO(const AnsiString &name,DeviceBuffer *ssbo,bool if(name.IsEmpty()||!ssbo) return(false); - const int index=desc_manager->GetSSBO(name,dynamic); + const int index=desc_manager->GetSSBO(set_type,name,dynamic); if(index<0) return(false); @@ -53,7 +53,7 @@ bool MaterialParameters::BindImageSampler(const AnsiString &name,Texture *tex,Sa if(name.IsEmpty()||!tex||!sampler) return(false); - const int index=desc_manager->GetImageSampler(name); + const int index=desc_manager->GetImageSampler(set_type,name); if(index<0) return(false); @@ -69,7 +69,7 @@ bool MaterialParameters::BindInputAttachment(const AnsiString &name,ImageView *i if(name.IsEmpty()||!iv) return(false); - const int index=desc_manager->GetInputAttachment(name); + const int index=desc_manager->GetInputAttachment(set_type,name); if(index<0) return(false);