support MI_MAX_COUNT in ShaderGen

This commit is contained in:
2023-06-02 20:45:19 +08:00
parent 22bc5f6653
commit f4a8406ad8
27 changed files with 318 additions and 189 deletions

View File

@@ -23,9 +23,7 @@ class DescriptorSet
bool is_dirty;
private:
friend class GPUDevice;
public:
DescriptorSet(VkDevice dev,const int bc,VkPipelineLayout pl,VkDescriptorSet ds)
{
@@ -37,8 +35,6 @@ private:
is_dirty=true;
}
public:
~DescriptorSet()=default;
const uint32_t GetCount ()const{return binding_count;}

View File

@@ -209,10 +209,6 @@ public: //
public: //shader & material
PipelineLayoutData *CreatePipelineLayoutData(const MaterialDescriptorManager *);
void Destroy(PipelineLayoutData *);
DescriptorSet * CreateDS(const PipelineLayoutData *,const DescriptorSetType &type)const;
MaterialParameters *CreateMP(const MaterialDescriptorManager *,const PipelineLayoutData *,const DescriptorSetType &);
MaterialParameters *CreateMP(Material *,const DescriptorSetType &);

View File

@@ -1,11 +1,11 @@
#ifndef HGL_GRAPH_MTL_2D_CONFIG_INCLUDE
#define HGL_GRAPH_MTL_2D_CONFIG_INCLUDE
#ifndef HGL_GRAPH_MTL_2D_CREATE_CONFIG_INCLUDE
#define HGL_GRAPH_MTL_2D_CREATE_CONFIG_INCLUDE
#include<hgl/graph/mtl/MaterialConfig.h>
#include<hgl/graph/CoordinateSystem.h>
STD_MTL_NAMESPACE_BEGIN
struct Material2DConfig:public MaterialConfig
struct Material2DCreateConfig:public MaterialCreateConfig
{
CoordinateSystem2D coordinate_system; ///<使用的坐标系
@@ -13,7 +13,7 @@ struct Material2DConfig:public MaterialConfig
public:
Material2DConfig(const AnsiString &name):MaterialConfig(name)
Material2DCreateConfig(const GPUDeviceAttribute *da,const AnsiString &name):MaterialCreateConfig(da,name)
{
rt_output.color=1; //输出一个颜色
rt_output.depth=false; //不输出深度
@@ -22,9 +22,9 @@ public:
coordinate_system=CoordinateSystem2D::NDC;
local_to_world=false;
}
};//struct Material2DConfig:public MaterialConfig
};//struct Material2DCreateConfig:public MaterialCreateConfig
MaterialCreateInfo *CreateVertexColor2D(const Material2DConfig *);
MaterialCreateInfo *CreatePureColor2D(const Material2DConfig *);
MaterialCreateInfo *CreateVertexColor2D(const Material2DCreateConfig *);
MaterialCreateInfo *CreatePureColor2D(const Material2DCreateConfig *);
STD_MTL_NAMESPACE_END
#endif//HGL_GRAPH_MTL_2D_CONFIG_INCLUDE
#endif//HGL_GRAPH_MTL_2D_CREATE_CONFIG_INCLUDE

View File

@@ -12,8 +12,10 @@ class MaterialCreateInfo;
/**
* 材质配置结构
*/
struct MaterialConfig
struct MaterialCreateConfig
{
const GPUDeviceAttribute *dev_attr;
AnsiString mtl_name; ///<材质名称
RenderTargetOutputConfig rt_output; ///<渲染目标输出配置
@@ -22,12 +24,14 @@ struct MaterialConfig
public:
MaterialConfig(const AnsiString &name)
MaterialCreateConfig(const GPUDeviceAttribute *da,const AnsiString &name)
{
dev_attr=da;
mtl_name=name;
shader_stage=VK_SHADER_STAGE_VERTEX_BIT|VK_SHADER_STAGE_FRAGMENT_BIT;
}
};//struct MaterialConfig
};//struct MaterialCreateConfig
STD_MTL_NAMESPACE_END
#endif//HGL_GRAPH_MTL_CONFIG_INCLUDE

View File

@@ -4,3 +4,13 @@
#define STD_MTL_NAMESPACE_END }}}
#define STD_MTL_NAMESPACE_USING using namespace hgl::graph::mtl;
namespace hgl
{
namespace graph
{
namespace mtl
{
}//namespace mtl
}//namespace graph
}//namespace hgl

View File

@@ -50,7 +50,7 @@ constexpr const ShaderBufferSource SBS_MaterialInstanceData=
"mtl",
R"(
MaterialInstance mi[256];)"
MaterialInstance mi[MI_MAX_COUNT];)"
};
constexpr const ShaderBufferSource SBS_JointInfo=

View File

@@ -10,64 +10,72 @@
#include<hgl/graph/mtl/ShaderBuffer.h>
#include<hgl/graph/VKSamplerType.h>
STD_MTL_NAMESPACE_BEGIN
class MaterialCreateInfo
namespace hgl{namespace graph
{
protected:
struct GPUDeviceAttribute;
const MaterialConfig *config;
namespace mtl
{
class MaterialCreateInfo
{
protected:
MaterialDescriptorInfo mdi; ///<材质描述符管理器
const MaterialCreateConfig *config;
AnsiString mi_codes; ///<MaterialInstance代码
uint32_t mi_data_bytes; ///<MaterialInstance数据长度
uint32_t mi_shader_stage; ///<MaterialInstance着色器阶段
MaterialDescriptorInfo mdi; ///<材质描述符管理器
ShaderCreateInfoMap shader_map; ///<着色器列表
AnsiString mi_codes; ///<MaterialInstance代码
uint32_t mi_data_bytes; ///<MaterialInstance数据长度
uint32_t mi_shader_stage; ///<MaterialInstance着色器阶段
ShaderCreateInfoVertex *vert;
ShaderCreateInfoGeometry *geom;
ShaderCreateInfoFragment *frag;
ShaderCreateInfoMap shader_map; ///<着色器列表
public:
ShaderCreateInfoVertex *vert;
ShaderCreateInfoGeometry *geom;
ShaderCreateInfoFragment *frag;
const AnsiString &GetName ()const{return config->mtl_name;}
public:
const uint32 GetShaderStage ()const{return config->shader_stage;}
const AnsiString &GetName ()const{return config->mtl_name;}
bool hasShader (const VkShaderStageFlagBits ss)const{return config->shader_stage&ss;}
const uint32 GetShaderStage ()const{return config->shader_stage;}
bool hasVertex ()const{return hasShader(VK_SHADER_STAGE_VERTEX_BIT);}
// bool hasTessCtrl ()const{return hasShader(VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT);}
// bool hasTessEval ()const{return hasShader(VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT);}
bool hasGeometry ()const{return hasShader(VK_SHADER_STAGE_GEOMETRY_BIT);}
bool hasFragment ()const{return hasShader(VK_SHADER_STAGE_FRAGMENT_BIT);}
// bool hasCompute ()const{return hasShader(VK_SHADER_STAGE_COMPUTE_BIT);}
bool hasShader (const VkShaderStageFlagBits ss)const{return config->shader_stage&ss;}
ShaderCreateInfoVertex * GetVS()const{return vert;}
ShaderCreateInfoGeometry * GetGS()const{return geom;}
ShaderCreateInfoFragment * GetFS()const{return frag;}
bool hasVertex ()const{return hasShader(VK_SHADER_STAGE_VERTEX_BIT);}
// bool hasTessCtrl ()const{return hasShader(VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT);}
// bool hasTessEval ()const{return hasShader(VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT);}
bool hasGeometry ()const{return hasShader(VK_SHADER_STAGE_GEOMETRY_BIT);}
bool hasFragment ()const{return hasShader(VK_SHADER_STAGE_FRAGMENT_BIT);}
// bool hasCompute ()const{return hasShader(VK_SHADER_STAGE_COMPUTE_BIT);}
public:
ShaderCreateInfoVertex * GetVS()const{return vert;}
ShaderCreateInfoGeometry * GetGS()const{return geom;}
ShaderCreateInfoFragment * GetFS()const{return frag;}
const MaterialDescriptorInfo &GetMDI()const{return mdi;}
const uint32_t GetMIDataBytes()const{return mi_data_bytes;}
public:
public:
const MaterialDescriptorInfo &GetMDI()const{return mdi;}
const uint32_t GetMIDataBytes()const{return mi_data_bytes;}
MaterialCreateInfo(const MaterialConfig *);
~MaterialCreateInfo()=default;
public:
bool SetMaterialInstance(const AnsiString &mi_glsl_codes,const uint32_t mi_struct_bytes,const uint32_t shader_stage);
MaterialCreateInfo(const MaterialCreateConfig *);
~MaterialCreateInfo()=default;
bool AddStruct(const AnsiString &ubo_typename,const AnsiString &codes);
bool AddStruct(const ShaderBufferSource &ss){return AddStruct(ss.struct_name,ss.codes);}
bool SetMaterialInstance(const AnsiString &mi_glsl_codes,const uint32_t mi_struct_bytes,const uint32_t shader_stage);
bool AddUBO(const VkShaderStageFlagBits flag_bits,const DescriptorSetType set_type,const AnsiString &type_name,const AnsiString &name);
bool AddSampler(const VkShaderStageFlagBits flag_bits,const DescriptorSetType set_type,const SamplerType &st,const AnsiString &name);
bool AddStruct(const AnsiString &ubo_typename,const AnsiString &codes);
bool AddStruct(const ShaderBufferSource &ss){return AddStruct(ss.struct_name,ss.codes);}
bool AddUBO(const uint32_t flag_bits,const DescriptorSetType &set_type,const ShaderBufferSource &ss);
bool AddUBO(const VkShaderStageFlagBits flag_bits,const DescriptorSetType set_type,const AnsiString &type_name,const AnsiString &name);
bool AddSampler(const VkShaderStageFlagBits flag_bits,const DescriptorSetType set_type,const SamplerType &st,const AnsiString &name);
bool AddUBO(const uint32_t flag_bits,const DescriptorSetType &set_type,const ShaderBufferSource &ss);
bool CreateShader(const GPUDeviceAttribute *);
};//class MaterialCreateInfo
}//namespace mtl
}//namespace graph
}//namespace hgl
bool CreateShader();
};//class MaterialCreateInfo
STD_MTL_NAMESPACE_END

View File

@@ -1,6 +1,7 @@
#pragma once
#include<hgl/graph/VKShaderDescriptorSet.h>
#include<hgl/graph/mtl/ShaderBuffer.h>
#include<hgl/type/Map.h>
namespace hgl{namespace graph{
@@ -28,6 +29,11 @@ public:
return(true);
}
bool AddStruct(const ShaderBufferSource &ss)
{
return(AddStruct(ss.struct_name,ss.codes));
}
bool GetStruct(const AnsiString &name,AnsiString &code)
{
return(struct_map.Get(name,code));

View File

@@ -25,6 +25,11 @@ protected:
protected:
AnsiStringList define_macro_list;
AnsiStringList define_value_list;
uint32_t define_macro_max_length;
uint32_t define_value_max_length;
AnsiString output_struct;
AnsiString mi_codes;
@@ -39,6 +44,9 @@ protected:
protected:
virtual bool ProcHeader(){return(true);}
virtual bool ProcDefine();
virtual bool ProcSubpassInput();
virtual bool ProcInput(ShaderCreateInfo *);
virtual bool ProcOutput();
@@ -65,6 +73,8 @@ public:
ShaderCreateInfo(VkShaderStageFlagBits ss,MaterialDescriptorInfo *m);
virtual ~ShaderCreateInfo();
bool AddDefine(const AnsiString &m,const AnsiString &v);
int AddOutput(const graph::VAT &type,const AnsiString &name,Interpolation inter=Interpolation::Smooth);
int AddOutput(const AnsiString &type,const AnsiString &name,Interpolation inter=Interpolation::Smooth);