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()
{
MaterialCreater mc(1); //一个新材质1个RT输出默认使用Vertex/Fragment shader
MaterialCreater mc(1,false); //一个新材质1个RT输出默认使用Vertex/Fragment shader
//vertex部分
{
@@ -14,7 +14,7 @@ bool PureColor2DMaterial()
//以下代码会被展开为
/*
layout(location=?) in vec3 Position; //位置属性
layout(location=?) in vec3 Position; //位置属性
*/
vsc->AddInput("vec2","Position"); //添加一个vec3类型的position属性输入
@@ -61,12 +61,14 @@ void main()
})");
}
mc.CompileShader();
mc.CreateShader();
return(false);
}
int MaterialCreaterTest()
int main()
{
PureColor2DMaterial();
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 AddSampler(const VkShaderStageFlagBits flag_bits,const DescriptorSetType set_type,const SamplerType &st,const AnsiString &name);
bool CompileShader();
bool CreateShader();
};//class MaterialCreater
SHADERGEN_NAMESPACE_END

View File

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

View File

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

View File

@@ -51,7 +51,7 @@ public:
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:

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())
return(false);
//mdm.Resort();
ShaderCreater *sc,*last=nullptr;
for(int i=0;i<shader_map.GetCount();i++)
{
if(!shader_map.GetValue(i,sc))
return(false);
//for(int i=0;i<shader_map.GetCount();i++)
//{
// if(!shader_map.GetValue(i,sc))
// return(false);
sc->CreateShader(last);
// sc->CreateShader(last);
//if(!sc->CompileToSPV())
//return(false);
// last=sc;
//}
last=sc;
}
//vert->CreateShader(nullptr);
frag->CreateShader(vert);
return(true);
}

View File

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

View File

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

View File

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