ULRE/inc/hgl/shadergen/ShaderCreateInfo.h

112 lines
2.6 KiB
C
Raw Normal View History

#ifndef HGL_SHADER_CREATE_INFO_INCLUDE
2023-03-17 10:08:41 +08:00
#define HGL_SHADER_CREATE_INFO_INCLUDE
2023-03-06 14:06:20 +08:00
#include<hgl/graph/VertexAttrib.h>
2023-03-21 18:05:48 +08:00
#include<hgl/graph/VK.h>
#include<hgl/graph/VKInterpolation.h>
#include<hgl/graph/VKDescriptorSetType.h>
2024-06-18 02:04:11 +08:00
#include<hgl/graph/mtl/ShaderVariableType.h>
#include<hgl/type/StringList.h>
2023-03-21 18:05:48 +08:00
namespace hgl{namespace graph
{
2023-03-21 18:05:48 +08:00
struct SPVData;
2023-03-17 10:14:07 +08:00
class MaterialDescriptorInfo;
class ShaderDescriptorInfo;
struct UBODescriptor;
struct SamplerDescriptor;
2023-03-17 10:08:41 +08:00
class ShaderCreateInfo
2023-03-06 14:06:20 +08:00
{
2023-03-09 23:21:52 +08:00
protected:
2023-03-06 14:06:20 +08:00
VkShaderStageFlagBits shader_stage; ///<着色器阶段
2023-03-22 15:58:59 +08:00
MaterialDescriptorInfo *mdi;
2023-03-09 23:21:52 +08:00
2023-03-06 14:06:20 +08:00
protected:
2023-06-02 20:45:19 +08:00
AnsiStringList define_macro_list;
AnsiStringList define_value_list;
int define_macro_max_length;
int define_value_max_length;
2023-06-02 20:45:19 +08:00
2023-03-08 21:41:57 +08:00
AnsiString output_struct;
AnsiString mi_codes;
List<const char *> function_list;
AnsiString main_function;
2023-03-08 21:41:57 +08:00
AnsiString final_shader;
2023-03-21 18:05:48 +08:00
SPVData *spv_data;
2023-03-08 21:41:57 +08:00
protected:
2023-03-09 23:21:52 +08:00
virtual bool ProcHeader(){return(true);}
2023-06-02 20:45:19 +08:00
virtual bool ProcDefine();
2023-09-21 22:11:20 +08:00
virtual bool ProcLayout(){return(true);}
2023-06-02 20:45:19 +08:00
2023-03-17 10:08:41 +08:00
virtual bool ProcInput(ShaderCreateInfo *);
2024-06-19 14:03:46 +08:00
virtual bool IsEmptyOutput()const=0;
virtual void GetOutputStrcutString(AnsiString &){}
2023-03-09 23:21:52 +08:00
virtual bool ProcOutput();
virtual bool ProcStruct();
virtual bool ProcMI();
2023-03-09 23:21:52 +08:00
virtual bool ProcUBO();
virtual bool ProcSSBO();
2023-09-21 22:11:20 +08:00
virtual bool ProcConstantID();
virtual bool ProcSampler();
2023-03-08 21:41:57 +08:00
bool CompileToSPV();
2023-03-06 14:06:20 +08:00
public:
virtual ShaderDescriptorInfo *GetSDI()=0;
2024-06-18 02:04:11 +08:00
const VkShaderStageFlagBits GetShaderStage()const{return shader_stage;}
2023-03-06 14:06:20 +08:00
protected:
void Init(ShaderDescriptorInfo *sdi,MaterialDescriptorInfo *m);
2023-03-06 14:06:20 +08:00
public:
ShaderCreateInfo();
2023-03-17 10:08:41 +08:00
virtual ~ShaderCreateInfo();
2023-03-06 14:06:20 +08:00
2023-06-02 20:45:19 +08:00
bool AddDefine(const AnsiString &m,const AnsiString &v);
void AddStruct(const AnsiString &);
bool AddUBO(DescriptorSetType type,const UBODescriptor *sd);
bool AddSampler(DescriptorSetType type,const SamplerDescriptor *sd);
2023-03-06 14:06:20 +08:00
void AddFunction(const char *str){function_list.Add(str);}
2023-03-06 21:30:32 +08:00
void SetMaterialInstance(UBODescriptor *,const AnsiString &);
virtual void AddMaterialInstanceOutput()=0;
void SetMain(const AnsiString &str){main_function=str;}
void SetMain(const char *str,const int len)
{
main_function.SetString(str,len);
}
2023-03-08 21:41:57 +08:00
const AnsiString &GetOutputStruct()const{return output_struct;}
2023-03-14 22:22:35 +08:00
const AnsiString &GetShaderSource()const{return final_shader;}
2023-03-17 10:08:41 +08:00
bool CreateShader(ShaderCreateInfo *);
2023-03-21 18:05:48 +08:00
const uint32 *GetSPVData()const;
const size_t GetSPVSize()const;
2023-03-17 10:08:41 +08:00
};//class ShaderCreateInfo
2023-03-21 18:05:48 +08:00
}}//namespace hgl::graph
2023-03-17 10:08:41 +08:00
#endif//HGL_SHADER_CREATE_INFO_INCLUDE