updated shadergen
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
@@ -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
|
||||||
|
@@ -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:
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
@@ -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++;
|
||||||
|
|
||||||
|
@@ -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();
|
||||||
|
|
||||||
|
@@ -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";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user