upgraded to newly DescriptorSetType

This commit is contained in:
2023-02-22 21:50:18 +08:00
parent 95064488db
commit b35ef27610
17 changed files with 106 additions and 106 deletions

View File

@@ -75,19 +75,19 @@ enum class DescriptorSetsType
//设计使其对应shader中的set
Global=0, ///<全局参数(如太阳光等)
Material, ///<材质中永远不变的参数
// Texture, ///<材质中的纹理参数
Value, ///<材质中的变量参数
Primitive, ///<渲染实例参数(如Local2World matrix)
PerFrame, ///<帧参数(如摄像机等)
PerMaterial,///<材质参数(如纹理等)
PerObject, ///<对象参数(如模型矩阵等)
ENUM_CLASS_RANGE(Global,Primitive)
Instance,
Skeleton,
ENUM_CLASS_RANGE(Global,Skeleton)
};//
const DescriptorSetsType CheckDescriptorSetsType(const char *str);
constexpr char *DescriptSetsTypeName[]=
{
"Global","Material","Value","Renderable"
"Global","PerFrame","PerMaterial","PerObject","Instance","Skeleton"
};
inline const char *GetDescriptorSetsTypeName(const enum class DescriptorSetsType &type)

View File

@@ -8,6 +8,8 @@
VK_NAMESPACE_BEGIN
using ShaderStageCreateInfoList=List<VkPipelineShaderStageCreateInfo>;
using MaterialParameterArray=MaterialParameters *[size_t(DescriptorSetsType::RANGE_SIZE)];
struct MaterialData
{
UTF8String name;
@@ -21,10 +23,7 @@ struct MaterialData
PipelineLayoutData *pipeline_layout_data;
struct
{
MaterialParameters *m,*g,*r;
}mp;
MaterialParameterArray mp_array;
private:
@@ -66,11 +65,12 @@ public:
MaterialParameters * GetMP (const DescriptorSetsType &type)
{
if(type==DescriptorSetsType::Material )return data->mp.m;else
if(type==DescriptorSetsType::Primitive )return data->mp.r;else
if(type==DescriptorSetsType::Global )return data->mp.g;else
return(nullptr);
RANGE_CHECK_RETURN_NULLPTR(type)
return data->mp_array[size_t(type)];
}
const bool hasSet (const DescriptorSetsType &type)const;
};//class Material
VK_NAMESPACE_END
#endif//HGL_GRAPH_VULKAN_MATERIAL_INCLUDE

View File

@@ -26,6 +26,7 @@ class MaterialDescriptorSets
uint sd_count;
ShaderDescriptorList descriptor_list[VK_DESCRIPTOR_TYPE_RANGE_SIZE];
ShaderDescriptorList descriptor_list_by_set_type[size_t(DescriptorSetsType::RANGE_SIZE)];
Map<AnsiString,ShaderDescriptor *> sd_by_name;
Map<AnsiString,int> binding_map[VK_DESCRIPTOR_TYPE_RANGE_SIZE];
@@ -34,7 +35,7 @@ class MaterialDescriptorSets
private:
DescriptorSetLayoutCreateInfo sds[size_t(DescriptorSetsType::RANGE_SIZE)];
DescriptorSetLayoutCreateInfo dsl_ci[size_t(DescriptorSetsType::RANGE_SIZE)];
public:
@@ -50,7 +51,11 @@ public:
const int GetSampler (const AnsiString &name )const{return GetBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,name);}
const int GetAttachment (const AnsiString &name )const{return GetBinding(VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT,name);}
const DescriptorSetLayoutCreateInfo *GetBinding(const DescriptorSetsType &type)const{return sds+size_t(type);}
const DescriptorSetLayoutCreateInfo *GetDSLCI(const DescriptorSetsType &type)const{return dsl_ci+size_t(type);}
const ShaderDescriptorList &GetDescriptorList(const DescriptorSetsType &type)const{return descriptor_list_by_set_type[size_t(type)];}
const bool hasSet(const DescriptorSetsType &type)const{return !descriptor_list_by_set_type[size_t(type)].IsEmpty();}
};//class MaterialDescriptorSets
VK_NAMESPACE_END
#endif//HGL_GRAPH_VULKAN_MATERIAL_DESCRIPTOR_SETS_INCLUDE

View File

@@ -1,7 +1,7 @@
#ifndef HGL_GRAPH_VULKAN_MATERIAL_INSTANCE_INCLUDE
#ifndef HGL_GRAPH_VULKAN_MATERIAL_INSTANCE_INCLUDE
#define HGL_GRAPH_VULKAN_MATERIAL_INSTANCE_INCLUDE
#include<hgl/graph/VK.h>
#include<hgl/graph/VKMaterial.h>
VK_NAMESPACE_BEGIN
class MaterialInstance
@@ -10,23 +10,23 @@ class MaterialInstance
VIL *vil;
MaterialParameters *mp_value;
MaterialParameters *mp_per_mi; ///<材质实例独有参数对应PerMaterial合集
private:
friend class GPUDevice;
MaterialInstance(Material *,VIL *,MaterialParameters *);
MaterialInstance(Material *,VIL *);
public:
virtual ~MaterialInstance();
virtual ~MaterialInstance()=default;
Material *GetMaterial(){return material;}
const VIL *GetVIL()const{return vil;}
MaterialParameters *GetMP(){return mp_value;}
MaterialParameters *GetMP(const DescriptorSetsType &type);
MaterialParameters *GetMP(){return mp_per_mi;}
MaterialParameters *GetMP(const DescriptorSetsType &type){return material->GetMP(type);}
bool BindUBO(const DescriptorSetsType &type,const AnsiString &name,DeviceBuffer *ubo,bool dynamic=false);
bool BindSSBO(const DescriptorSetsType &type,const AnsiString &name,DeviceBuffer *ubo,bool dynamic=false);
@@ -34,4 +34,4 @@ public:
};//class MaterialInstance
VK_NAMESPACE_END
#endif//HGL_GRAPH_VULKAN_MATERIAL_INSTANCE_INCLUDE

View File

@@ -22,7 +22,7 @@ private:
public:
const DescriptorSetsType GetType (){return ds_type;}
DescriptorSet * GetDescriptorSet (){return descriptor_sets;}
DescriptorSet * GetDescriptorSet (){return descriptor_sets;}
const VkDescriptorSet GetVkDescriptorSet ()const{return descriptor_sets->GetDescriptorSet();}
const uint32_t GetCount ()const{return descriptor_sets->GetCount();}
@@ -31,10 +31,11 @@ public:
public:
#define MP_TYPE_IS(name) const bool is##name()const{return ds_type==DescriptorSetsType::name;}
MP_TYPE_IS(Material)
// MP_TYPE_IS(Texture)
MP_TYPE_IS(Value)
MP_TYPE_IS(Primitive)
MP_TYPE_IS(Skeleton)
MP_TYPE_IS(Instance)
MP_TYPE_IS(PerObject)
MP_TYPE_IS(PerMaterial)
MP_TYPE_IS(PerFrame)
MP_TYPE_IS(Global)
#undef MP_TYPE_IS

View File

@@ -15,7 +15,6 @@ struct ShaderStage
VertexAttribType type; ///<成份数量(如vec4中的4)
bool global; ///<是否全局数据
bool dynamic; ///<是否动态数据
};//struct ShaderStage