merged GetUBO/GetUBODynamic and GetSSBO/GetSSBODynamic at MaterialDescriptorSets

This commit is contained in:
hyzboy 2021-09-22 18:08:46 +08:00
parent 3117b9673e
commit d3afabc170
6 changed files with 27 additions and 22 deletions

2
CMCore

@ -1 +1 @@
Subproject commit 7cdc507194cdbb90aeda83948a712af7c767fd3e Subproject commit 2493989c5e830bd954c326772b4410580e975c8d

View File

@ -125,8 +125,15 @@ private:
material_instance=db->CreateMaterialInstance(material); material_instance=db->CreateMaterialInstance(material);
if(!material_instance)return(false); if(!material_instance)return(false);
material_instance->BindSampler("TexColor" ,texture.color, texture.sampler); {
material_instance->BindSampler("TexNormal" ,texture.normal, texture.sampler); MaterialParameters *mp_texture=material_instance->GetMP(DescriptorSetType::Value);
if(!mp_texture)
return(false);
mp_texture->BindSampler("TexColor" ,texture.color, texture.sampler);
mp_texture->BindSampler("TexNormal" ,texture.normal, texture.sampler);
}
} }
pipeline_data=GetPipelineData(InlinePipeline::Solid3D); pipeline_data=GetPipelineData(InlinePipeline::Solid3D);
@ -200,15 +207,13 @@ private:
{ {
ubo_light=db->CreateUBO(sizeof(PhongLight),&light); ubo_light=db->CreateUBO(sizeof(PhongLight),&light);
ubo_phong=db->CreateUBO(sizeof(PhongMaterial),&phong); ubo_phong=db->CreateUBO(sizeof(PhongMaterial),&phong);
material_instance->BindUBO("light",ubo_light); material_instance->BindUBO("light",ubo_light);
material_instance->BindUBO("phong",ubo_phong); material_instance->BindUBO("phong",ubo_phong);
if(!material_instance->BindUBO("camera",GetCameraInfoBuffer())) if(!material_instance->BindUBO("camera",GetCameraInfoBuffer()))
return(false); return(false);
material_instance->BindUBO("fs_light",ubo_light);
material_instance->Update(); material_instance->Update();
if(!axis_mi->BindUBO("camera",GetCameraInfoBuffer())) if(!axis_mi->BindUBO("camera",GetCameraInfoBuffer()))
@ -222,19 +227,20 @@ private:
{ {
auto ri=db->CreateRenderableInstance(r,material_instance,pl); auto ri=db->CreateRenderableInstance(r,material_instance,pl);
render_root.Add(ri); render_root.CreateSubNode(ri);
} }
void Add(Renderable *r,Pipeline *pl,const Matrix4f &mat) void Add(Renderable *r,Pipeline *pl,const Matrix4f &mat)
{ {
auto ri=db->CreateRenderableInstance(r,material_instance,pl); auto ri=db->CreateRenderableInstance(r,material_instance,pl);
render_root.Add(ri,mat); render_root.CreateSubNode(mat,ri);
} }
bool InitScene() bool InitScene()
{ {
render_root.Add(db->CreateRenderableInstance(ro_axis,axis_mi,axis_pipeline)); render_root.CreateSubNode(db->CreateRenderableInstance(ro_axis,axis_mi,axis_pipeline));
Add(ro_torus ,pipeline_solid); Add(ro_torus ,pipeline_solid);
Add(ro_cube ,pipeline_solid,translate(-10, 0, 5)*scale(10,10,10)); Add(ro_cube ,pipeline_solid,translate(-10, 0, 5)*scale(10,10,10));
Add(ro_sphere ,pipeline_solid,translate( 10, 0, 5)*scale(10,10,10)); Add(ro_sphere ,pipeline_solid,translate( 10, 0, 5)*scale(10,10,10));
@ -242,7 +248,7 @@ private:
Add(ro_cone ,pipeline_solid,translate( 0,-16, 0)); Add(ro_cone ,pipeline_solid,translate( 0,-16, 0));
render_root.RefreshMatrix(); render_root.RefreshMatrix();
render_root.ExpendToList(&render_list); render_list.Expend(GetCameraInfo(),&render_root);
return(true); return(true);
} }

View File

@ -357,6 +357,11 @@ public:
ubo_camera_info->Write(&camera->info); ubo_camera_info->Write(&camera->info);
} }
const CameraInfo &GetCameraInfo()
{
return camera->info;
}
GPUBuffer *GetCameraInfoBuffer() GPUBuffer *GetCameraInfoBuffer()
{ {
return ubo_camera_info; return ubo_camera_info;

View File

@ -35,11 +35,7 @@ namespace hgl
{ {
ubo_offset_alignment=device->GetUBOAlign(); ubo_offset_alignment=device->GetUBOAlign();
uint32_t unit_size=sizeof(T); const uint32_t unit_size=hgl_align<uint32_t>(sizeof(T),ubo_offset_alignment);
const uint32_t align_size=ubo_offset_alignment-1;
unit_size=(unit_size+align_size)&(~align_size);
vk_ma=new VKMemoryAllocator(device,buffer_usage_flags,unit_size); // construct function is going to set AllocUnitSize by minUniformOffsetAlignment vk_ma=new VKMemoryAllocator(device,buffer_usage_flags,unit_size); // construct function is going to set AllocUnitSize by minUniformOffsetAlignment
MemoryBlock *mb=new MemoryBlock(vk_ma); MemoryBlock *mb=new MemoryBlock(vk_ma);

View File

@ -41,11 +41,9 @@ public:
const int GetBinding(const VkDescriptorType &desc_type,const AnsiString &name)const; const int GetBinding(const VkDescriptorType &desc_type,const AnsiString &name)const;
const int GetUBO (const AnsiString &name)const{return GetBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, name);} 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)const{return GetBinding(VK_DESCRIPTOR_TYPE_STORAGE_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 GetUBODynamic (const AnsiString &name)const{return GetBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, name);} const int GetSampler (const AnsiString &name )const{return GetBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, name);}
const int GetSSBODynamic(const AnsiString &name)const{return GetBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, name);}
const int GetSampler (const AnsiString &name)const{return GetBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, name);}
const DescriptorSetLayoutCreateInfo *GetBinding(const DescriptorSetType &type)const{return sds+size_t(type);} const DescriptorSetLayoutCreateInfo *GetBinding(const DescriptorSetType &type)const{return sds+size_t(type);}
};//class MaterialDescriptorSets };//class MaterialDescriptorSets

View File

@ -21,7 +21,7 @@ bool MaterialParameters::BindUBO(const AnsiString &name,GPUBuffer *ubo,bool dyna
if(name.IsEmpty()||!ubo) if(name.IsEmpty()||!ubo)
return(false); return(false);
const int index=dynamic?mds->GetUBODynamic(name):mds->GetUBO(name); const int index=mds->GetUBO(name,dynamic);
if(index<0) if(index<0)
return(false); return(false);
@ -37,7 +37,7 @@ bool MaterialParameters::BindSSBO(const AnsiString &name,GPUBuffer *ssbo,bool dy
if(name.IsEmpty()||!ssbo) if(name.IsEmpty()||!ssbo)
return(false); return(false);
const int index=dynamic?mds->GetSSBODynamic(name):mds->GetSSBO(name); const int index=mds->GetSSBO(name,dynamic);
if(index<0) if(index<0)
return(false); return(false);