RenderCmdBuffer中记录的DescriptorBinding改为按SetType分类为多个

This commit is contained in:
hyzboy 2025-06-06 23:39:20 +08:00
parent 5e541e2f46
commit 55204779ba
3 changed files with 26 additions and 5 deletions

View File

@ -50,6 +50,8 @@ public:
};//class VulkanCmdBuffer };//class VulkanCmdBuffer
class DescriptorBinding; class DescriptorBinding;
using DescriptorBindingPtr=DescriptorBinding *;
using DescriptorBindingArray=DescriptorBindingPtr[size_t(DescriptorSetType::RANGE_SIZE)];
class RenderCmdBuffer:public VulkanCmdBuffer class RenderCmdBuffer:public VulkanCmdBuffer
{ {
@ -61,7 +63,7 @@ class RenderCmdBuffer:public VulkanCmdBuffer
RenderPassBeginInfo rp_begin; RenderPassBeginInfo rp_begin;
VkPipelineLayout pipeline_layout; VkPipelineLayout pipeline_layout;
DescriptorBinding *desc_binding=nullptr; DescriptorBindingArray desc_binding{};
private: private:
@ -72,11 +74,11 @@ public:
RenderCmdBuffer(const VulkanDevAttr *attr,VkCommandBuffer cb); RenderCmdBuffer(const VulkanDevAttr *attr,VkCommandBuffer cb);
~RenderCmdBuffer(); ~RenderCmdBuffer();
void SetDescriptorBinding(DescriptorBinding *db) { desc_binding=db; } bool SetDescriptorBinding(DescriptorBinding *);
bool End() override bool End() override
{ {
desc_binding=nullptr; hgl_zero(desc_binding);
return VulkanCmdBuffer::End(); return VulkanCmdBuffer::End();
} }

View File

@ -24,6 +24,10 @@ class DescriptorBinding
Map<AnsiString,DeviceBuffer *> ssbo_map; Map<AnsiString,DeviceBuffer *> ssbo_map;
Map<AnsiString,Texture *> texture_map; Map<AnsiString,Texture *> texture_map;
public:
const DescriptorSetType GetType()const{return set_type;}
public: public:
DescriptorBinding(const DescriptorSetType &dst) DescriptorBinding(const DescriptorSetType &dst)

View File

@ -25,6 +25,18 @@ RenderCmdBuffer::~RenderCmdBuffer()
hgl_free(clear_values); hgl_free(clear_values);
} }
bool RenderCmdBuffer::SetDescriptorBinding(DescriptorBinding *db)
{
if(!db)
return(false);
const int index=int(db->GetType())-int(DescriptorSetType::BEGIN_RANGE);
desc_binding[index]=db;
return(true);
}
void RenderCmdBuffer::SetClear() void RenderCmdBuffer::SetClear()
{ {
if(cv_count>0) if(cv_count>0)
@ -91,8 +103,11 @@ bool RenderCmdBuffer::BindDescriptorSets(Material *mtl)
{ {
if(!mtl)return(false); if(!mtl)return(false);
if(desc_binding) ENUM_CLASS_FOR(DescriptorSetType,int,i)
desc_binding->Bind(mtl); {
if(desc_binding[i])
desc_binding[i]->Bind(mtl);
}
{ {
uint32_t count=0; uint32_t count=0;