support MI_MAX_COUNT in ShaderGen
This commit is contained in:
@@ -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;}
|
||||
|
@@ -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 &);
|
||||
|
||||
|
@@ -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
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -50,7 +50,7 @@ constexpr const ShaderBufferSource SBS_MaterialInstanceData=
|
||||
"mtl",
|
||||
|
||||
R"(
|
||||
MaterialInstance mi[256];)"
|
||||
MaterialInstance mi[MI_MAX_COUNT];)"
|
||||
};
|
||||
|
||||
constexpr const ShaderBufferSource SBS_JointInfo=
|
||||
|
@@ -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
|
||||
|
@@ -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));
|
||||
|
@@ -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);
|
||||
|
||||
|
Reference in New Issue
Block a user