moved GetBinding functions to ShaderModuleMap from Material.
This commit is contained in:
parent
3658171954
commit
cbbc0641ef
@ -36,28 +36,6 @@ public:
|
|||||||
|
|
||||||
const VertexShaderModule * GetVertexShaderModule ()const{return vertex_sm;}
|
const VertexShaderModule * GetVertexShaderModule ()const{return vertex_sm;}
|
||||||
|
|
||||||
const int GetBinding(VkDescriptorType,const AnsiString &)const;
|
|
||||||
|
|
||||||
#define GET_BO_BINDING(name,vk_name) const int Get##name(const AnsiString &obj_name)const{return GetBinding(VK_DESCRIPTOR_TYPE_##vk_name,obj_name);}
|
|
||||||
// GET_BO_BINDING(Sampler, SAMPLER)
|
|
||||||
|
|
||||||
GET_BO_BINDING(Sampler, COMBINED_IMAGE_SAMPLER)
|
|
||||||
// GET_BO_BINDING(SampledImage, SAMPLED_IMAGE)
|
|
||||||
GET_BO_BINDING(StorageImage, STORAGE_IMAGE)
|
|
||||||
|
|
||||||
GET_BO_BINDING(UTBO, UNIFORM_TEXEL_BUFFER)
|
|
||||||
GET_BO_BINDING(SSTBO, STORAGE_TEXEL_BUFFER)
|
|
||||||
GET_BO_BINDING(UBO, UNIFORM_BUFFER)
|
|
||||||
GET_BO_BINDING(SSBO, STORAGE_BUFFER)
|
|
||||||
|
|
||||||
//shader中并不区分普通UBO和动态UBO,所以Material/ShaderResource中的数据,只有UBO
|
|
||||||
|
|
||||||
// GET_BO_BINDING(UBODynamic, UNIFORM_BUFFER_DYNAMIC)
|
|
||||||
// GET_BO_BINDING(SSBODynamic, STORAGE_BUFFER_DYNAMIC)
|
|
||||||
|
|
||||||
GET_BO_BINDING(InputAttachment, INPUT_ATTACHMENT)
|
|
||||||
#undef GET_BO_BINDING
|
|
||||||
|
|
||||||
const uint32_t GetStageCount ()const{return shader_stage_list->GetCount();}
|
const uint32_t GetStageCount ()const{return shader_stage_list->GetCount();}
|
||||||
const VkPipelineShaderStageCreateInfo * GetStages ()const{return shader_stage_list->GetData();}
|
const VkPipelineShaderStageCreateInfo * GetStages ()const{return shader_stage_list->GetData();}
|
||||||
|
|
||||||
@ -70,7 +48,7 @@ public:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
MaterialParameters * CreateMP (const DescriptorSetsType &type=DescriptorSetsType::Values);
|
MaterialParameters * CreateMP (const DescriptorSetsType &type)const;
|
||||||
MaterialParameters * GetMP (const DescriptorSetsType &type)
|
MaterialParameters * GetMP (const DescriptorSetsType &type)
|
||||||
{
|
{
|
||||||
if(type==DescriptorSetsType::Material )return mp_m;else
|
if(type==DescriptorSetsType::Material )return mp_m;else
|
||||||
@ -78,6 +56,8 @@ public:
|
|||||||
if(type==DescriptorSetsType::Global )return mp_g;else
|
if(type==DescriptorSetsType::Global )return mp_g;else
|
||||||
return(nullptr);
|
return(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MaterialInstance * CreateInstance();
|
||||||
};//class Material
|
};//class Material
|
||||||
VK_NAMESPACE_END
|
VK_NAMESPACE_END
|
||||||
#endif//HGL_GRAPH_VULKAN_MATERIAL_INCLUDE
|
#endif//HGL_GRAPH_VULKAN_MATERIAL_INCLUDE
|
||||||
|
@ -3,10 +3,11 @@
|
|||||||
|
|
||||||
#include<hgl/graph/VK.h>
|
#include<hgl/graph/VK.h>
|
||||||
#include<hgl/type/String.h>
|
#include<hgl/type/String.h>
|
||||||
|
#include<hgl/graph/VKDescriptorSets.h>
|
||||||
VK_NAMESPACE_BEGIN
|
VK_NAMESPACE_BEGIN
|
||||||
class MaterialParameters
|
class MaterialParameters
|
||||||
{
|
{
|
||||||
Material *material;
|
const ShaderModuleMap *shader_map;
|
||||||
|
|
||||||
DescriptorSetsType ds_type;
|
DescriptorSetsType ds_type;
|
||||||
|
|
||||||
@ -16,20 +17,20 @@ private:
|
|||||||
|
|
||||||
friend class Material;
|
friend class Material;
|
||||||
|
|
||||||
MaterialParameters(Material *,const DescriptorSetsType &type,DescriptorSets *);
|
MaterialParameters(const ShaderModuleMap *,const DescriptorSetsType &type,DescriptorSets *);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
Material * GetMaterial (){return material;}
|
|
||||||
const DescriptorSetsType GetType (){return ds_type;}
|
const DescriptorSetsType GetType (){return ds_type;}
|
||||||
DescriptorSets * GetDescriptorSets(){return descriptor_sets;}
|
DescriptorSets * GetDescriptorSet (){return descriptor_sets;}
|
||||||
|
const VkDescriptorSet GetVkDescriptorSet ()const{return descriptor_sets->GetDescriptorSet();}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
#define MP_TYPE_IS(name) const bool is##name()const{return ds_type==DescriptorSetsType::name;}
|
#define MP_TYPE_IS(name) const bool is##name()const{return ds_type==DescriptorSetsType::name;}
|
||||||
MP_TYPE_IS(Material)
|
MP_TYPE_IS(Material)
|
||||||
// MP_TYPE_IS(Texture)
|
// MP_TYPE_IS(Texture)
|
||||||
MP_TYPE_IS(Values)
|
MP_TYPE_IS(Value)
|
||||||
MP_TYPE_IS(Renderable)
|
MP_TYPE_IS(Renderable)
|
||||||
MP_TYPE_IS(Global)
|
MP_TYPE_IS(Global)
|
||||||
#undef MP_TYPE_IS
|
#undef MP_TYPE_IS
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#ifndef HGL_GRAPH_VULKAN_SHADER_MODULE_MAP_INCLUDE
|
#ifndef HGL_GRAPH_VULKAN_SHADER_MODULE_MAP_INCLUDE
|
||||||
#define HGL_GRAPH_VULKAN_SHADER_MODULE_MAP_INCLUDE
|
#define HGL_GRAPH_VULKAN_SHADER_MODULE_MAP_INCLUDE
|
||||||
|
|
||||||
#include<hgl/type/Map.h>
|
#include<hgl/type/Map.h>
|
||||||
@ -17,6 +17,30 @@ public:
|
|||||||
~ShaderModuleMap()=default;
|
~ShaderModuleMap()=default;
|
||||||
|
|
||||||
bool Add(const ShaderModule *sm);
|
bool Add(const ShaderModule *sm);
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
const int GetBinding(VkDescriptorType,const AnsiString &)const;
|
||||||
|
|
||||||
|
#define GET_BO_BINDING(name,vk_name) const int Get##name(const AnsiString &obj_name)const{return GetBinding(VK_DESCRIPTOR_TYPE_##vk_name,obj_name);}
|
||||||
|
// GET_BO_BINDING(Sampler, SAMPLER)
|
||||||
|
|
||||||
|
GET_BO_BINDING(Sampler, COMBINED_IMAGE_SAMPLER)
|
||||||
|
// GET_BO_BINDING(SampledImage, SAMPLED_IMAGE)
|
||||||
|
GET_BO_BINDING(StorageImage, STORAGE_IMAGE)
|
||||||
|
|
||||||
|
GET_BO_BINDING(UTBO, UNIFORM_TEXEL_BUFFER)
|
||||||
|
GET_BO_BINDING(SSTBO, STORAGE_TEXEL_BUFFER)
|
||||||
|
GET_BO_BINDING(UBO, UNIFORM_BUFFER)
|
||||||
|
GET_BO_BINDING(SSBO, STORAGE_BUFFER)
|
||||||
|
|
||||||
|
//shader中并不区分普通UBO和动态UBO,所以Material/ShaderResource中的数据,只有UBO
|
||||||
|
|
||||||
|
// GET_BO_BINDING(UBODynamic, UNIFORM_BUFFER_DYNAMIC)
|
||||||
|
// GET_BO_BINDING(SSBODynamic, STORAGE_BUFFER_DYNAMIC)
|
||||||
|
|
||||||
|
GET_BO_BINDING(InputAttachment, INPUT_ATTACHMENT)
|
||||||
|
#undef GET_BO_BINDING
|
||||||
};//class ShaderModuleMap:public Map<VkShaderStageFlagBits,const ShaderModule *>
|
};//class ShaderModuleMap:public Map<VkShaderStageFlagBits,const ShaderModule *>
|
||||||
VK_NAMESPACE_END
|
VK_NAMESPACE_END
|
||||||
#endif//HGL_GRAPH_VULKAN_SHADER_MODULE_MAP_INCLUDE
|
#endif//HGL_GRAPH_VULKAN_SHADER_MODULE_MAP_INCLUDE
|
||||||
|
@ -45,42 +45,17 @@ Material::~Material()
|
|||||||
delete shader_maps;
|
delete shader_maps;
|
||||||
}
|
}
|
||||||
|
|
||||||
const int Material::GetBinding(VkDescriptorType desc_type,const AnsiString &name)const
|
|
||||||
{
|
|
||||||
if(desc_type<VK_DESCRIPTOR_TYPE_BEGIN_RANGE
|
|
||||||
||desc_type>VK_DESCRIPTOR_TYPE_END_RANGE
|
|
||||||
||name.IsEmpty())
|
|
||||||
return(-1);
|
|
||||||
|
|
||||||
int binding;
|
|
||||||
const int shader_count=shader_maps->GetCount();
|
|
||||||
|
|
||||||
const ShaderModule *sm;
|
|
||||||
auto **itp=shader_maps->GetDataList();
|
|
||||||
for(int i=0;i<shader_count;i++)
|
|
||||||
{
|
|
||||||
sm=(*itp)->right;
|
|
||||||
binding=sm->GetBinding(desc_type,name);
|
|
||||||
if(binding!=-1)
|
|
||||||
return binding;
|
|
||||||
|
|
||||||
++itp;
|
|
||||||
}
|
|
||||||
|
|
||||||
return(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
const VkPipelineLayout Material::GetPipelineLayout()const
|
const VkPipelineLayout Material::GetPipelineLayout()const
|
||||||
{
|
{
|
||||||
return dsl_creater->GetPipelineLayout();
|
return dsl_creater->GetPipelineLayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
MaterialParameters *Material::CreateMP(const DescriptorSetsType &type)
|
MaterialParameters *Material::CreateMP(const DescriptorSetsType &type)const
|
||||||
{
|
{
|
||||||
DescriptorSets *ds=dsl_creater->Create(type);
|
DescriptorSets *ds=dsl_creater->Create(type);
|
||||||
|
|
||||||
if(!ds)return(nullptr);
|
if(!ds)return(nullptr);
|
||||||
|
|
||||||
return(new MaterialParameters(this,type,ds));
|
return(new MaterialParameters(shader_maps,type,ds));
|
||||||
}
|
}
|
||||||
VK_NAMESPACE_END
|
VK_NAMESPACE_END
|
||||||
|
@ -12,4 +12,29 @@ bool ShaderModuleMap::Add(const ShaderModule *sm)
|
|||||||
|
|
||||||
return this->Map::Add(stage,sm);
|
return this->Map::Add(stage,sm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const int ShaderModuleMap::GetBinding(VkDescriptorType desc_type,const AnsiString &name)const
|
||||||
|
{
|
||||||
|
if(desc_type<VK_DESCRIPTOR_TYPE_BEGIN_RANGE
|
||||||
|
||desc_type>VK_DESCRIPTOR_TYPE_END_RANGE
|
||||||
|
||name.IsEmpty())
|
||||||
|
return(-1);
|
||||||
|
|
||||||
|
int binding;
|
||||||
|
const int shader_count=GetCount();
|
||||||
|
|
||||||
|
const ShaderModule *sm;
|
||||||
|
auto **itp=GetDataList();
|
||||||
|
for(int i=0;i<shader_count;i++)
|
||||||
|
{
|
||||||
|
sm=(*itp)->right;
|
||||||
|
binding=sm->GetBinding(desc_type,name);
|
||||||
|
if(binding!=-1)
|
||||||
|
return binding;
|
||||||
|
|
||||||
|
++itp;
|
||||||
|
}
|
||||||
|
|
||||||
|
return(-1);
|
||||||
|
}
|
||||||
VK_NAMESPACE_END
|
VK_NAMESPACE_END
|
Loading…
x
Reference in New Issue
Block a user