comment sd_list_by_set_type array and GetDescriptorList function at MaterialDescriptorSets

This commit is contained in:
HuYingzhuo(hugo/hyzboy) 2023-03-19 20:18:56 +08:00
parent c4a4ec5ebc
commit 09277924f1
4 changed files with 62 additions and 13 deletions

View File

@ -12,8 +12,8 @@ class MaterialDescriptorSets
ShaderDescriptor *sd_list; ShaderDescriptor *sd_list;
uint sd_count; uint sd_count;
ShaderDescriptorList sd_list_by_desc_type[VK_DESCRIPTOR_TYPE_RANGE_SIZE]; //ShaderDescriptorList sd_list_by_set_type[size_t(DescriptorSetType::RANGE_SIZE)];
ShaderDescriptorList sd_list_by_set_type[size_t(DescriptorSetType::RANGE_SIZE)]; bool set_has_desc[size_t(DescriptorSetType::RANGE_SIZE)];
// Map<AnsiString,ShaderDescriptor *> sd_by_name; // Map<AnsiString,ShaderDescriptor *> sd_by_name;
Map<AnsiString,int> binding_map[VK_DESCRIPTOR_TYPE_RANGE_SIZE]; Map<AnsiString,int> binding_map[VK_DESCRIPTOR_TYPE_RANGE_SIZE];
@ -40,9 +40,10 @@ public:
const DescriptorSetLayoutCreateInfo *GetDSLCI(const DescriptorSetType &type)const{return dsl_ci+size_t(type);} const DescriptorSetLayoutCreateInfo *GetDSLCI(const DescriptorSetType &type)const{return dsl_ci+size_t(type);}
const ShaderDescriptorList &GetDescriptorList(const DescriptorSetType &type)const{return sd_list_by_set_type[size_t(type)];} //const ShaderDescriptorList &GetDescriptorList(const DescriptorSetType &type)const{return sd_list_by_set_type[size_t(type)];}
const bool hasSet(const DescriptorSetType &type)const{return !sd_list_by_set_type[size_t(type)].IsEmpty();} const bool hasSet(const DescriptorSetType &type)const{return set_has_desc[size_t(type)];}
//!sd_list_by_set_type[size_t(type)].IsEmpty();}
};//class MaterialDescriptorSets };//class MaterialDescriptorSets
VK_NAMESPACE_END VK_NAMESPACE_END
#endif//HGL_GRAPH_VULKAN_MATERIAL_DESCRIPTOR_SETS_INCLUDE #endif//HGL_GRAPH_VULKAN_MATERIAL_DESCRIPTOR_SETS_INCLUDE

View File

@ -42,9 +42,9 @@ public:
bool hasFragment()const{return hasShader(VK_SHADER_STAGE_FRAGMENT_BIT);} bool hasFragment()const{return hasShader(VK_SHADER_STAGE_FRAGMENT_BIT);}
// bool hasCompute ()const{return hasShader(VK_SHADER_STAGE_COMPUTE_BIT);} // bool hasCompute ()const{return hasShader(VK_SHADER_STAGE_COMPUTE_BIT);}
ShaderCreateInfoVertex * GetVS(){return vert;} const ShaderCreateInfoVertex * GetVS()const{return vert;}
ShaderCreateInfoGeometry * GetGS(){return geom;} const ShaderCreateInfoGeometry * GetGS()const{return geom;}
ShaderCreateInfoFragment * GetFS(){return frag;} const ShaderCreateInfoFragment * GetFS()const{return frag;}
public: public:

View File

@ -21,6 +21,10 @@ MaterialDescriptorSets::MaterialDescriptorSets(const UTF8String &name,ShaderDesc
if(sd_count<=0)return; if(sd_count<=0)return;
ShaderDescriptorList sd_list_by_desc_type[VK_DESCRIPTOR_TYPE_RANGE_SIZE];
hgl_zero(set_has_desc);
{ {
ENUM_CLASS_FOR(DescriptorSetType,int,i) ENUM_CLASS_FOR(DescriptorSetType,int,i)
{ {
@ -42,7 +46,8 @@ MaterialDescriptorSets::MaterialDescriptorSets(const UTF8String &name,ShaderDesc
++dsl_ci[size_t(sp->set_type)].bindingCount; ++dsl_ci[size_t(sp->set_type)].bindingCount;
sd_list_by_set_type[size_t(sp->set_type)].Add(sp); //sd_list_by_set_type[size_t(sp->set_type)].Add(sp);
set_has_desc[size_t(sp->set_type)]=true;
++sp; ++sp;
} }

View File

@ -12,7 +12,7 @@
VK_NAMESPACE_BEGIN VK_NAMESPACE_BEGIN
const ShaderModule *RenderResource::CreateShaderModule(const OSString &filename,VkShaderStageFlagBits shader_stage,const void *spv_data,const size_t spv_size) const ShaderModule *RenderResource::CreateShaderModule(const OSString &filename,VkShaderStageFlagBits shader_stage,const uint32_t *spv_data,const size_t spv_size)
{ {
if(!device)return(nullptr); if(!device)return(nullptr);
if(filename.IsEmpty())return(nullptr); if(filename.IsEmpty())return(nullptr);
@ -198,14 +198,57 @@ Material *RenderResource::CreateMaterial(const OSString &filename)
Material *RenderResource::CreateMaterial(const hgl::shadergen::MaterialCreateInfo *mci) Material *RenderResource::CreateMaterial(const hgl::shadergen::MaterialCreateInfo *mci)
{ {
SHADERGEN_NAMESPACE_USING
if(!mci) if(!mci)
return(nullptr); return(nullptr);
const uint count=GetShaderCountByBits(mci->GetShaderStage()); SHADERGEN_NAMESPACE_USING
ShaderModuleMap *smm=new ShaderModuleMap;
const uint count=GetShaderCountByBits(mci->GetShaderStage());
const ShaderModule *sm;
ShaderModuleMap *smm=new ShaderModuleMap;
VertexInput *vertex_input=nullptr;
const OSString mtl_name=ToOSString(mci->GetName());
const ShaderCreateInfoVertex *vert=mci->GetVS();
if(vert)
{
sm=CreateShaderModule( mtl_name+OS_TEXT("?Vertex"),
VK_SHADER_STAGE_VERTEX_BIT,
vert->GetCode(),vert->GetCodeSize());
if(sm)
{
if(smm->Add(sm))
vertex_input=new VertexInput(vert->GetInput());
}
smm->Add(sm);
}
const ShaderCreateInfoGeometry *geom=mci->GetGS();
if(geom)
{
sm=CreateShaderModule( mtl_name+OS_TEXT("?Geometry"),
VK_SHADER_STAGE_GEOMETRY_BIT,
geom->GetCode(),geom->GetCodeSize());
smm->Add(sm);
}
const ShaderCreateInfoFragment *frag=mci->GetFS();
if(frag)
{
sm=CreateShaderModule( mtl_name+OS_TEXT("?Fragment"),
VK_SHADER_STAGE_FRAGMENT_BIT,
frag->GetCode(),frag->GetCodeSize());
smm->Add(sm);
}
} }