updated shadergen

This commit is contained in:
2023-03-14 22:22:35 +08:00
parent 2cc0dca050
commit f79599b1d4
9 changed files with 48 additions and 39 deletions

View File

@@ -6,7 +6,7 @@ using namespace hgl::shadergen;
bool PureColor2DMaterial() bool PureColor2DMaterial()
{ {
MaterialCreater mc(1); //一个新材质1个RT输出默认使用Vertex/Fragment shader MaterialCreater mc(1,false); //一个新材质1个RT输出默认使用Vertex/Fragment shader
//vertex部分 //vertex部分
{ {
@@ -61,12 +61,14 @@ void main()
})"); })");
} }
mc.CompileShader(); mc.CreateShader();
return(false); return(false);
} }
int MaterialCreaterTest() int main()
{ {
PureColor2DMaterial();
return 0; return 0;
} }

View File

@@ -50,6 +50,6 @@ public:
bool AddUBO(const VkShaderStageFlagBits flag_bits,const DescriptorSetType set_type,const AnsiString &type_name,const AnsiString &name); 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 AddSampler(const VkShaderStageFlagBits flag_bits,const DescriptorSetType set_type,const SamplerType &st,const AnsiString &name);
bool CompileShader(); bool CreateShader();
};//class MaterialCreater };//class MaterialCreater
SHADERGEN_NAMESPACE_END SHADERGEN_NAMESPACE_END

View File

@@ -44,9 +44,6 @@ public:
bool AddStruct(const AnsiString &name,const AnsiString &code) bool AddStruct(const AnsiString &name,const AnsiString &code)
{ {
if(struct_map.KeyExist(name))
return(false);
struct_map.Add(name,code); struct_map.Add(name,code);
return(true); return(true);
} }

View File

@@ -62,6 +62,8 @@ public:
bool CreateShader(ShaderCreater *); bool CreateShader(ShaderCreater *);
const AnsiString &GetShaderSource()const{return final_shader;}
bool CompileToSPV(); bool CompileToSPV();
};//class ShaderCreater };//class ShaderCreater
SHADERGEN_NAMESPACE_END SHADERGEN_NAMESPACE_END

View File

@@ -51,7 +51,7 @@ public:
const ObjectList<ConstValueDescriptor> & GetConstList()const{return const_value_list;} const ObjectList<ConstValueDescriptor> & GetConstList()const{return const_value_list;}
const ObjectList<SubpassInputDescriptor> & GetSubpassInputList()const { return subpass_input; } const ObjectList<SubpassInputDescriptor> & GetSubpassInputList()const{return subpass_input;}
public: public:

View File

@@ -95,25 +95,27 @@ bool MaterialCreater::AddSampler(const VkShaderStageFlagBits flag_bit,const Desc
} }
} }
bool MaterialCreater::CompileShader() bool MaterialCreater::CreateShader()
{ {
if(shader_map.IsEmpty()) if(shader_map.IsEmpty())
return(false); return(false);
//mdm.Resort();
ShaderCreater *sc,*last=nullptr; ShaderCreater *sc,*last=nullptr;
for(int i=0;i<shader_map.GetCount();i++) //for(int i=0;i<shader_map.GetCount();i++)
{ //{
if(!shader_map.GetValue(i,sc)) // if(!shader_map.GetValue(i,sc))
return(false); // return(false);
sc->CreateShader(last); // sc->CreateShader(last);
//if(!sc->CompileToSPV()) // last=sc;
//return(false); //}
last=sc; //vert->CreateShader(nullptr);
} frag->CreateShader(vert);
return(true); return(true);
} }

View File

@@ -43,7 +43,7 @@ ShaderDescriptor *MaterialDescriptorManager::ShaderDescriptorSet::AddDescriptor(
new_sd->set_type=set_type; new_sd->set_type=set_type;
new_sd->stage_flag=ssb; new_sd->stage_flag=ssb;
descriptor_map.Add(new_sd->name, new_sd); descriptor_map.Add(new_sd->name,new_sd);
count++; count++;

View File

@@ -34,8 +34,8 @@ bool ShaderCreater::ProcSubpassInput()
if(sil.IsEmpty()) if(sil.IsEmpty())
return(true); return(true);
const auto si=sil.GetData(); auto si=sil.GetData();
const int si_count=sil.GetCount(); int si_count=sil.GetCount();
for(int i=0;i<si_count;i++) for(int i=0;i<si_count;i++)
{ {
@@ -46,6 +46,8 @@ bool ShaderCreater::ProcSubpassInput()
final_shader+=") uniform subpassInput "; final_shader+=") uniform subpassInput ";
final_shader+=(*si)->name; final_shader+=(*si)->name;
final_shader+=";\n"; final_shader+=";\n";
++si;
} }
final_shader+="\n"; final_shader+="\n";
@@ -73,14 +75,16 @@ bool ShaderCreater::ProcInput(ShaderCreater *last_sc)
bool ShaderCreater::ProcOutput() bool ShaderCreater::ProcOutput()
{ {
final_shader+="layout(location=0) out ";
output_struct.Clear(); output_struct.Clear();
const ShaderStageList &ssl=sdm.GetShaderStageIO().output;
if(ssl.GetCount()<=0)return(true);
output_struct=GetShaderStageName(shader_stage); output_struct=GetShaderStageName(shader_stage);
output_struct+="_Output\n{\n"; output_struct+="_Output\n{\n";
for(auto *ss:sdm.GetShaderStageIO().output) for(auto *ss:ssl)
{ {
output_struct+="\t"; output_struct+="\t";
output_struct+=GetShaderStageTypeName(ss); output_struct+=GetShaderStageTypeName(ss);
@@ -91,6 +95,7 @@ bool ShaderCreater::ProcOutput()
output_struct+="}"; output_struct+="}";
final_shader+="layout(location=0) out ";
final_shader+=output_struct; final_shader+=output_struct;
final_shader+="Output;\n\n"; final_shader+="Output;\n\n";
@@ -112,7 +117,7 @@ bool ShaderCreater::ProcStruct()
final_shader+=*str; final_shader+=*str;
final_shader+="\n{\n"; final_shader+="\n{\n";
final_shader+=codes; final_shader+=codes;
final_shader+="};\n\n"; final_shader+="\n};\n\n";
} }
return(true); return(true);
@@ -153,7 +158,8 @@ bool ShaderCreater::ProcSSBO()
} }
bool ShaderCreater::ProcConst() bool ShaderCreater::ProcConst()
{auto const_list=sdm.GetConstList(); {
auto const_list=sdm.GetConstList();
const int count=const_list.GetCount(); const int count=const_list.GetCount();
@@ -220,14 +226,14 @@ bool ShaderCreater::CreateShader(ShaderCreater *last_sc)
if(!ProcStruct()) if(!ProcStruct())
return(false); return(false);
if(!ProcUBO()) //if(!ProcUBO())
return(false); // return(false);
//if(!ProcSSBO()) ////if(!ProcSSBO())
//return(false); // //return(false);
if(!ProcConst()) //if(!ProcConst())
return(false); // return(false);
if(!ProcSampler()) //if(!ProcSampler())
return(false); // return(false);
ProcOutput(); ProcOutput();

View File

@@ -41,7 +41,7 @@ bool ShaderCreaterVertex::ProcInput(ShaderCreater *)
final_shader+=UTF8String::numberOf(ss->location); final_shader+=UTF8String::numberOf(ss->location);
final_shader+=") in "; final_shader+=") in ";
final_shader+=UTF8String(GetShaderStageTypeName(ss)); final_shader+=UTF8String(GetShaderStageTypeName(ss));
final_shader+="\t"+UTF8String(ss->name); final_shader+=" "+UTF8String(ss->name);
final_shader+=";\n"; final_shader+=";\n";
} }