writed ProcSubpassInput,ProcStruct,ProcUBO,ProcConst,ProcSampler at ShaderCreater
This commit is contained in:
parent
68b24903bb
commit
ece7fa5f32
@ -32,6 +32,7 @@ protected:
|
|||||||
virtual bool ProcUBO();
|
virtual bool ProcUBO();
|
||||||
virtual bool ProcSSBO();
|
virtual bool ProcSSBO();
|
||||||
virtual bool ProcConst();
|
virtual bool ProcConst();
|
||||||
|
virtual bool ProcSampler();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
SHADERGEN_NAMESPACE_BEGIN
|
SHADERGEN_NAMESPACE_BEGIN
|
||||||
class ShaderCreaterVertex:public ShaderCreater
|
class ShaderCreaterVertex:public ShaderCreater
|
||||||
{
|
{
|
||||||
virtual void ProcInput() override;
|
bool ProcInput(ShaderCreater *) override;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -28,22 +28,46 @@ int ShaderCreater::AddOutput(const AnsiString &type,const AnsiString &name)
|
|||||||
|
|
||||||
bool ShaderCreater::ProcSubpassInput()
|
bool ShaderCreater::ProcSubpassInput()
|
||||||
{
|
{
|
||||||
|
auto sil=sdm.GetSubpassInputList();
|
||||||
|
|
||||||
|
if(sil.IsEmpty())
|
||||||
|
return(true);
|
||||||
|
|
||||||
|
const auto si=sil.GetData();
|
||||||
|
const int si_count=sil.GetCount();
|
||||||
|
|
||||||
|
for(int i=0;i<si_count;i++)
|
||||||
|
{
|
||||||
|
final_shader+="layout(input_attachment_index=";
|
||||||
|
final_shader+=AnsiString::numberOf((*si)->input_attachment_index);
|
||||||
|
final_shader+=", binding=";
|
||||||
|
final_shader+=AnsiString::numberOf((*si)->binding);
|
||||||
|
final_shader+=") uniform subpassInput ";
|
||||||
|
final_shader+=(*si)->name;
|
||||||
|
final_shader+=";\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
final_shader+="\n";
|
||||||
|
|
||||||
|
return(true);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ShaderCreater::ProcInput(ShaderCreater *last_sc)
|
bool ShaderCreater::ProcInput(ShaderCreater *last_sc)
|
||||||
{
|
{
|
||||||
if(!last_sc)
|
if(!last_sc)
|
||||||
return;
|
return(false);
|
||||||
|
|
||||||
AnsiString last_output=last_sc->GetOutputStruct();
|
AnsiString last_output=last_sc->GetOutputStruct();
|
||||||
|
|
||||||
if(last_output.IsEmpty())
|
if(last_output.IsEmpty())
|
||||||
return;
|
return(true);
|
||||||
|
|
||||||
final_shader+="layout(location=0) in ";
|
final_shader+="layout(location=0) in ";
|
||||||
final_shader+=last_output;
|
final_shader+=last_output;
|
||||||
final_shader+="Input;\n\n";
|
final_shader+="Input;\n\n";
|
||||||
|
|
||||||
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ShaderCreater::ProcOutput()
|
bool ShaderCreater::ProcOutput()
|
||||||
@ -68,6 +92,8 @@ bool ShaderCreater::ProcOutput()
|
|||||||
|
|
||||||
final_shader+=output_struct;
|
final_shader+=output_struct;
|
||||||
final_shader+="Output;\n\n";
|
final_shader+="Output;\n\n";
|
||||||
|
|
||||||
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ShaderCreater::ProcStruct()
|
bool ShaderCreater::ProcStruct()
|
||||||
@ -76,11 +102,16 @@ bool ShaderCreater::ProcStruct()
|
|||||||
|
|
||||||
AnsiString codes;
|
AnsiString codes;
|
||||||
|
|
||||||
for(const AnsiString &str:struct_list)
|
for(auto &str:struct_list)
|
||||||
{
|
{
|
||||||
if(!mdm->GetStruct(str,codes))
|
if(!mdm->GetStruct(*str,codes))
|
||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
|
final_shader+="struct ";
|
||||||
|
final_shader+=*str;
|
||||||
|
final_shader+="\n{\n";
|
||||||
|
final_shader+=codes;
|
||||||
|
final_shader+="};\n\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
return(true);
|
return(true);
|
||||||
@ -88,23 +119,120 @@ bool ShaderCreater::ProcStruct()
|
|||||||
|
|
||||||
bool ShaderCreater::ProcUBO()
|
bool ShaderCreater::ProcUBO()
|
||||||
{
|
{
|
||||||
|
auto ubo_list=sdm.GetUBOList();
|
||||||
|
|
||||||
|
const int count=ubo_list.GetCount();
|
||||||
|
|
||||||
|
if(count<=0)return(true);
|
||||||
|
|
||||||
|
auto ubo=ubo_list.GetData();
|
||||||
|
|
||||||
|
for(int i=0;i<count;i++)
|
||||||
|
{
|
||||||
|
final_shader+="layout(set=";
|
||||||
|
final_shader+=AnsiString::numberOf((*ubo)->set);
|
||||||
|
final_shader+=",binding=";
|
||||||
|
final_shader+=AnsiString::numberOf((*ubo)->binding);
|
||||||
|
final_shader+=") uniform ";
|
||||||
|
final_shader+=(*ubo)->type;
|
||||||
|
final_shader+=" ";
|
||||||
|
final_shader+=(*ubo)->name;
|
||||||
|
final_shader+="\n";
|
||||||
|
|
||||||
|
++ubo;
|
||||||
|
}
|
||||||
|
|
||||||
|
final_shader+="\n";
|
||||||
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ShaderCreater::ProcSSBO()
|
bool ShaderCreater::ProcSSBO()
|
||||||
{
|
{
|
||||||
|
return(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ShaderCreater::ProcConst()
|
bool ShaderCreater::ProcConst()
|
||||||
|
{auto const_list=sdm.GetConstList();
|
||||||
|
|
||||||
|
const int count=const_list.GetCount();
|
||||||
|
|
||||||
|
if(count<=0)return(true);
|
||||||
|
|
||||||
|
auto const_data=const_list.GetData();
|
||||||
|
|
||||||
|
for(int i=0;i<count;i++)
|
||||||
|
{
|
||||||
|
final_shader+="layout(constant_id=";
|
||||||
|
final_shader+=AnsiString::numberOf((*const_data)->constant_id);
|
||||||
|
final_shader+=") const ";
|
||||||
|
final_shader+=(*const_data)->type;
|
||||||
|
final_shader+=" ";
|
||||||
|
final_shader+=(*const_data)->name;
|
||||||
|
final_shader+="=";
|
||||||
|
final_shader+=(*const_data)->value;
|
||||||
|
final_shader+=";\n";
|
||||||
|
|
||||||
|
++const_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
final_shader+="\n";
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ShaderCreater::ProcSampler()
|
||||||
{
|
{
|
||||||
|
auto sampler_list=sdm.GetSamplerList();
|
||||||
|
|
||||||
|
const int count=sampler_list.GetCount();
|
||||||
|
|
||||||
|
if(count<=0)return(true);
|
||||||
|
|
||||||
|
auto sampler=sampler_list.GetData();
|
||||||
|
|
||||||
|
for(int i=0;i<count;i++)
|
||||||
|
{
|
||||||
|
final_shader+="layout(set=";
|
||||||
|
final_shader+=AnsiString::numberOf((*sampler)->set);
|
||||||
|
final_shader+=",binding=";
|
||||||
|
final_shader+=AnsiString::numberOf((*sampler)->binding);
|
||||||
|
final_shader+=") uniform ";
|
||||||
|
final_shader+=(*sampler)->type;
|
||||||
|
final_shader+=" ";
|
||||||
|
final_shader+=(*sampler)->name;
|
||||||
|
final_shader+="\n";
|
||||||
|
|
||||||
|
++sampler;
|
||||||
|
}
|
||||||
|
|
||||||
|
final_shader+="\n";
|
||||||
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ShaderCreater::CreateShader(ShaderCreater *last_sc)
|
bool ShaderCreater::CreateShader(ShaderCreater *last_sc)
|
||||||
{
|
{
|
||||||
final_shader="#version 460 core\n";
|
final_shader="#version 460 core\n";
|
||||||
|
|
||||||
ProcInput(last_sc);
|
if(!ProcSubpassInput())
|
||||||
|
return(false);
|
||||||
|
if(!ProcInput(last_sc))
|
||||||
|
return(false);
|
||||||
|
if(!ProcStruct())
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
if(!ProcUBO())
|
||||||
|
return(false);
|
||||||
|
//if(!ProcSSBO())
|
||||||
|
//return(false);
|
||||||
|
if(!ProcConst())
|
||||||
|
return(false);
|
||||||
|
if(!ProcSampler())
|
||||||
|
return(false);
|
||||||
|
|
||||||
ProcOutput();
|
ProcOutput();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ShaderCreater::CompileToSPV()
|
bool ShaderCreater::CompileToSPV()
|
||||||
|
@ -23,11 +23,17 @@ int ShaderCreaterVertex::AddInput(const AnsiString &type,const AnsiString &name)
|
|||||||
return AddInput(vat,name);
|
return AddInput(vat,name);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShaderCreaterVertex::ProcInput()
|
bool ShaderCreaterVertex::ProcInput(ShaderCreater *)
|
||||||
{
|
{
|
||||||
const auto &io=sdm.GetShaderStageIO();
|
const auto &io=sdm.GetShaderStageIO();
|
||||||
|
|
||||||
if(!io.input.IsEmpty())
|
if(io.input.IsEmpty())
|
||||||
|
{
|
||||||
|
//no input ? this isn't a bug.
|
||||||
|
//maybe position info from UBO/SBBO/Texture.
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
for(auto *ss:io.input)
|
for(auto *ss:io.input)
|
||||||
{
|
{
|
||||||
@ -41,5 +47,7 @@ void ShaderCreaterVertex::ProcInput()
|
|||||||
|
|
||||||
final_shader+="\n";
|
final_shader+="\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return(true);
|
||||||
}
|
}
|
||||||
SHADERGEN_NAMESPACE_END
|
SHADERGEN_NAMESPACE_END
|
||||||
|
Loading…
x
Reference in New Issue
Block a user