将PipelineLayout的创建从Material创建移到DescriptorSets创建,并且PipelineLayout属性也从Material移到DescriptorSets
This commit is contained in:
parent
29252ca0b1
commit
14fe3c7629
@ -14,17 +14,20 @@ class DescriptorSetLayout
|
||||
VkDescriptorSet *desc_set_list;
|
||||
Map<uint32_t,int> index_by_binding;
|
||||
|
||||
VkPipelineLayout pipeline_layout;
|
||||
|
||||
private:
|
||||
|
||||
friend class DescriptorSetLayoutCreater;
|
||||
|
||||
DescriptorSetLayout(Device *dev,const int c,VkDescriptorSetLayout *dsl_list,VkDescriptorSet *desc_set,Map<uint32_t,int> &bi)
|
||||
DescriptorSetLayout(Device *dev,const int c,VkDescriptorSetLayout *dsl_list,VkPipelineLayout pl,VkDescriptorSet *desc_set,Map<uint32_t,int> &bi)
|
||||
{
|
||||
device=dev;
|
||||
count=c;
|
||||
desc_set_layout_list=dsl_list;
|
||||
desc_set_list=desc_set;
|
||||
index_by_binding=bi;
|
||||
pipeline_layout=pl;
|
||||
}
|
||||
|
||||
public:
|
||||
@ -35,6 +38,7 @@ public:
|
||||
const VkDescriptorSetLayout * GetLayouts ()const{return desc_set_layout_list;}
|
||||
const VkDescriptorSet * GetDescriptorSets ()const{return desc_set_list;}
|
||||
VkDescriptorSet GetDescriptorSet (const uint32_t binding);
|
||||
const VkPipelineLayout GetPipelineLayout ()const{return pipeline_layout;}
|
||||
};//class DescriptorSetLayout
|
||||
|
||||
/**
|
||||
|
@ -29,21 +29,20 @@ class Material
|
||||
List<VkPipelineShaderStageCreateInfo> *shader_stage_list;
|
||||
DescriptorSetLayoutCreater *dsl_creater;
|
||||
DescriptorSetLayout *desc_set_layout;
|
||||
VkPipelineLayout pipeline_layout;
|
||||
VertexAttributeBinding *vab;
|
||||
|
||||
public:
|
||||
|
||||
Material(Device *dev,ShaderModuleMap *smm,VertexShaderModule *vsm,List<VkPipelineShaderStageCreateInfo> *,DescriptorSetLayoutCreater *dslc,DescriptorSetLayout *dsl,VkPipelineLayout pl,VertexAttributeBinding *v);
|
||||
Material(Device *dev,ShaderModuleMap *smm,VertexShaderModule *vsm,List<VkPipelineShaderStageCreateInfo> *,DescriptorSetLayoutCreater *dslc,DescriptorSetLayout *dsl,VertexAttributeBinding *v);
|
||||
~Material();
|
||||
|
||||
const int GetUBOBinding(const UTF8String &)const;
|
||||
const int GetVBOBinding(const UTF8String &)const;
|
||||
|
||||
const VkPipelineLayout GetPipelineLayout ()const{return pipeline_layout;}
|
||||
const uint32_t GetStageCount ()const{return shader_stage_list->GetCount();}
|
||||
const VkPipelineShaderStageCreateInfo * GetStages ()const{return shader_stage_list->GetData();}
|
||||
|
||||
const VkPipelineLayout GetPipelineLayout ()const;
|
||||
const uint32_t GetDescriptorSetCount ()const;
|
||||
const VkDescriptorSet * GetDescriptorSets ()const;
|
||||
|
||||
|
@ -32,6 +32,9 @@ DescriptorSetLayout::~DescriptorSetLayout()
|
||||
//if(count>0)
|
||||
// vkFreeDescriptorSets(device->GetDevice(),device->GetDescriptorPool(),count,desc_set_list);
|
||||
|
||||
if(pipeline_layout)
|
||||
vkDestroyPipelineLayout(*device,pipeline_layout,nullptr);
|
||||
|
||||
delete[] desc_set_list;
|
||||
DestroyDescriptorSetLayout(*device,count,desc_set_layout_list);
|
||||
delete[] desc_set_layout_list;
|
||||
@ -89,7 +92,23 @@ DescriptorSetLayout *DescriptorSetLayoutCreater::Create()
|
||||
|
||||
VkDescriptorSetLayout *dsl_list=new VkDescriptorSetLayout[count];
|
||||
|
||||
if(vkCreateDescriptorSetLayout(device->GetDevice(),&descriptor_layout, nullptr, dsl_list)!=VK_SUCCESS)
|
||||
if(vkCreateDescriptorSetLayout(*device,&descriptor_layout, nullptr, dsl_list)!=VK_SUCCESS)
|
||||
{
|
||||
delete[] dsl_list;
|
||||
return(nullptr);
|
||||
}
|
||||
|
||||
VkPipelineLayoutCreateInfo pPipelineLayoutCreateInfo = {};
|
||||
pPipelineLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
|
||||
pPipelineLayoutCreateInfo.pNext = nullptr;
|
||||
pPipelineLayoutCreateInfo.pushConstantRangeCount = 0;
|
||||
pPipelineLayoutCreateInfo.pPushConstantRanges = nullptr;
|
||||
pPipelineLayoutCreateInfo.setLayoutCount = count;
|
||||
pPipelineLayoutCreateInfo.pSetLayouts = dsl_list;
|
||||
|
||||
VkPipelineLayout pipeline_layout;
|
||||
|
||||
if(vkCreatePipelineLayout(*device, &pPipelineLayoutCreateInfo, nullptr, &pipeline_layout)!=VK_SUCCESS)
|
||||
{
|
||||
delete[] dsl_list;
|
||||
return(nullptr);
|
||||
@ -104,14 +123,15 @@ DescriptorSetLayout *DescriptorSetLayoutCreater::Create()
|
||||
|
||||
VkDescriptorSet *desc_set=new VkDescriptorSet[count];
|
||||
|
||||
if(vkAllocateDescriptorSets(device->GetDevice(),&alloc_info,desc_set)!=VK_SUCCESS)
|
||||
if(vkAllocateDescriptorSets(*device,&alloc_info,desc_set)!=VK_SUCCESS)
|
||||
{
|
||||
vkDestroyPipelineLayout(*device,pipeline_layout,nullptr);
|
||||
delete[] desc_set;
|
||||
DestroyDescriptorSetLayout(*device,count,dsl_list);
|
||||
delete[] dsl_list;
|
||||
return(nullptr);
|
||||
}
|
||||
|
||||
return(new DescriptorSetLayout(device,count,dsl_list,desc_set,index_by_binding));
|
||||
return(new DescriptorSetLayout(device,count,dsl_list,pipeline_layout,desc_set,index_by_binding));
|
||||
}
|
||||
VK_NAMESPACE_END
|
||||
|
@ -45,29 +45,13 @@ Material *CreateMaterial(Device *dev,ShaderModuleMap *shader_maps)
|
||||
|
||||
if(dsl)
|
||||
{
|
||||
const uint32_t layout_count=dsl->GetCount();
|
||||
const VkDescriptorSetLayout *layouts=(layout_count>0?dsl->GetLayouts():nullptr);
|
||||
|
||||
VkPipelineLayoutCreateInfo pPipelineLayoutCreateInfo = {};
|
||||
pPipelineLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
|
||||
pPipelineLayoutCreateInfo.pNext = nullptr;
|
||||
pPipelineLayoutCreateInfo.pushConstantRangeCount = 0;
|
||||
pPipelineLayoutCreateInfo.pPushConstantRanges = nullptr;
|
||||
pPipelineLayoutCreateInfo.setLayoutCount = layout_count;
|
||||
pPipelineLayoutCreateInfo.pSetLayouts = layouts;
|
||||
|
||||
VkPipelineLayout pipeline_layout;
|
||||
|
||||
if(vkCreatePipelineLayout(dev->GetDevice(), &pPipelineLayoutCreateInfo, nullptr, &pipeline_layout)==VK_SUCCESS)
|
||||
{
|
||||
return(new Material(dev,shader_maps,vertex_sm,shader_stage_list,dsl_creater,dsl,pipeline_layout,vab));
|
||||
}
|
||||
return(new Material(dev,shader_maps,vertex_sm,shader_stage_list,dsl_creater,dsl,vab));
|
||||
}
|
||||
|
||||
return(nullptr);
|
||||
}
|
||||
|
||||
Material::Material(Device *dev,ShaderModuleMap *smm,VertexShaderModule *vsm,List<VkPipelineShaderStageCreateInfo> *psci_list,DescriptorSetLayoutCreater *dslc,DescriptorSetLayout *dsl,VkPipelineLayout pl,VertexAttributeBinding *v)
|
||||
Material::Material(Device *dev,ShaderModuleMap *smm,VertexShaderModule *vsm,List<VkPipelineShaderStageCreateInfo> *psci_list,DescriptorSetLayoutCreater *dslc,DescriptorSetLayout *dsl,VertexAttributeBinding *v)
|
||||
{
|
||||
device=*dev;
|
||||
shader_maps=smm;
|
||||
@ -75,17 +59,13 @@ Material::Material(Device *dev,ShaderModuleMap *smm,VertexShaderModule *vsm,List
|
||||
shader_stage_list=psci_list;
|
||||
dsl_creater=dslc;
|
||||
desc_set_layout=dsl;
|
||||
pipeline_layout=pl;
|
||||
vab=v;
|
||||
}
|
||||
|
||||
Material::~Material()
|
||||
{
|
||||
delete vab;
|
||||
|
||||
if(pipeline_layout)
|
||||
vkDestroyPipelineLayout(device,pipeline_layout,nullptr);
|
||||
|
||||
|
||||
delete desc_set_layout;
|
||||
delete dsl_creater;
|
||||
|
||||
@ -132,6 +112,11 @@ const int Material::GetVBOBinding(const UTF8String &name)const
|
||||
return vertex_sm->GetBinding(name);
|
||||
}
|
||||
|
||||
const VkPipelineLayout Material::GetPipelineLayout()const
|
||||
{
|
||||
return desc_set_layout->GetPipelineLayout();
|
||||
}
|
||||
|
||||
const uint32_t Material::GetDescriptorSetCount()const
|
||||
{
|
||||
return desc_set_layout->GetCount();
|
||||
|
Loading…
x
Reference in New Issue
Block a user