From 56b87981226fa0cba5ea3b74c009511adffe27e0 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Thu, 20 Jun 2024 00:16:29 +0800 Subject: [PATCH] maybe finished, all examples test OK! --- CMSceneGraph | 2 +- inc/hgl/graph/mtl/ShaderVariableType.h | 11 ++- inc/hgl/shadergen/ShaderCreateInfoFragment.h | 1 + inc/hgl/shadergen/ShaderCreateInfoGeometry.h | 1 + inc/hgl/shadergen/ShaderCreateInfoVertex.h | 4 ++ .../Vulkan/VKRenderResourceMaterial.cpp | 2 +- src/ShaderGen/2d/M_PureTexture2D.cpp | 2 +- src/ShaderGen/2d/M_RectTexture2D.cpp | 4 +- src/ShaderGen/2d/M_RectTexture2DArray.cpp | 4 +- src/ShaderGen/2d/M_VertexColor2D.cpp | 2 +- src/ShaderGen/2d/Std2DMaterialLoader.cpp | 17 +++-- src/ShaderGen/3d/M_BillboardDynamicSize.cpp | 4 +- src/ShaderGen/3d/M_BillboardFixedSize.cpp | 4 +- src/ShaderGen/3d/M_VertexColor3D.cpp | 2 +- src/ShaderGen/3d/M_VertexLum3D.cpp | 2 +- src/ShaderGen/3d/Std3DMaterialLoader.cpp | 23 +++--- src/ShaderGen/MaterialFileData.h | 18 ++--- src/ShaderGen/MaterialFileLoader.cpp | 70 ++++++++++++++----- src/ShaderGen/ShaderCreateInfoFragment.cpp | 19 ++++- src/ShaderGen/ShaderCreateInfoGeometry.cpp | 15 ++++ src/ShaderGen/ShaderCreateInfoVertex.cpp | 35 +++++++++- src/ShaderGen/ShaderVariableType.cpp | 2 + 22 files changed, 177 insertions(+), 67 deletions(-) diff --git a/CMSceneGraph b/CMSceneGraph index b0955107..3bc0658d 160000 --- a/CMSceneGraph +++ b/CMSceneGraph @@ -1 +1 @@ -Subproject commit b0955107a7d55ec050cb8cec2378ffbacd228096 +Subproject commit 3bc0658d28e30457907003d85151b3b46083af53 diff --git a/inc/hgl/graph/mtl/ShaderVariableType.h b/inc/hgl/graph/mtl/ShaderVariableType.h index c5eb4f93..99ae5805 100644 --- a/inc/hgl/graph/mtl/ShaderVariableType.h +++ b/inc/hgl/graph/mtl/ShaderVariableType.h @@ -1,6 +1,7 @@ #pragma once #include +#include #include #include #include @@ -380,6 +381,8 @@ namespace hgl Interpolation interpolation; //插值方式 }; + using SVList=List; + struct ShaderVariableArray { uint count; @@ -531,9 +534,11 @@ namespace hgl if(sv->interpolation!=Interpolation::Smooth) { - output_string+=InterpolationName[size_t(sv->interpolation)]; - - output_string+=" "; + if(RangeCheck(sv->interpolation)) + { + output_string+=InterpolationName[size_t(sv->interpolation)]; + output_string+=" "; + } } output_string+=sv->type.GetTypename(); diff --git a/inc/hgl/shadergen/ShaderCreateInfoFragment.h b/inc/hgl/shadergen/ShaderCreateInfoFragment.h index daa9c28c..26a55c25 100644 --- a/inc/hgl/shadergen/ShaderCreateInfoFragment.h +++ b/inc/hgl/shadergen/ShaderCreateInfoFragment.h @@ -25,6 +25,7 @@ public: ShaderCreateInfoFragment(MaterialDescriptorInfo *m):ShaderCreateInfo(){ShaderCreateInfo::Init(&fsdi,m);} ~ShaderCreateInfoFragment()=default; + int AddOutput(VIAList &); int AddOutput(const graph::VAType &type,const AnsiString &name,Interpolation inter=Interpolation::Smooth); int AddOutput(const AnsiString &type,const AnsiString &name,Interpolation inter=Interpolation::Smooth); }; diff --git a/inc/hgl/shadergen/ShaderCreateInfoGeometry.h b/inc/hgl/shadergen/ShaderCreateInfoGeometry.h index 9e556815..e1d2ea57 100644 --- a/inc/hgl/shadergen/ShaderCreateInfoGeometry.h +++ b/inc/hgl/shadergen/ShaderCreateInfoGeometry.h @@ -26,6 +26,7 @@ public: bool SetGeom(const Prim &ip,const Prim &op,const uint32_t mv); + int AddOutput(SVList &); int AddOutput(const ShaderVariableType &type,const AnsiString &name,Interpolation inter=Interpolation::Smooth); void AddMaterialInstanceOutput() override; diff --git a/inc/hgl/shadergen/ShaderCreateInfoVertex.h b/inc/hgl/shadergen/ShaderCreateInfoVertex.h index 3c615e3e..f380624b 100644 --- a/inc/hgl/shadergen/ShaderCreateInfoVertex.h +++ b/inc/hgl/shadergen/ShaderCreateInfoVertex.h @@ -18,6 +18,8 @@ namespace hgl void GetOutputStrcutString(AnsiString &str) override; public: + + VIAArray &GetInput(){return vsdi.GetInput();} ShaderDescriptorInfo *GetSDI()override{return &vsdi;} @@ -26,11 +28,13 @@ namespace hgl ShaderCreateInfoVertex(MaterialDescriptorInfo *m):ShaderCreateInfo(){ShaderCreateInfo::Init(&vsdi,m);} ~ShaderCreateInfoVertex()override=default; + int AddInput(VIAList &); int AddInput(const graph::VAType &type,const AnsiString &name,const VkVertexInputRate input_rate=VK_VERTEX_INPUT_RATE_VERTEX,const VertexInputGroup &group=VertexInputGroup::Basic); int AddInput(const AnsiString &type,const AnsiString &name,const VkVertexInputRate input_rate=VK_VERTEX_INPUT_RATE_VERTEX,const VertexInputGroup &group=VertexInputGroup::Basic); int hasInput(const char *); + int AddOutput(SVList &); int AddOutput(const SVType &type,const AnsiString &name,Interpolation inter=Interpolation::Smooth); void AddMaterialInstanceOutput() override; diff --git a/src/SceneGraph/Vulkan/VKRenderResourceMaterial.cpp b/src/SceneGraph/Vulkan/VKRenderResourceMaterial.cpp index f9d7b260..47aae1f8 100644 --- a/src/SceneGraph/Vulkan/VKRenderResourceMaterial.cpp +++ b/src/SceneGraph/Vulkan/VKRenderResourceMaterial.cpp @@ -123,7 +123,7 @@ Material *RenderResource::CreateMaterial(const mtl::MaterialCreateInfo *mci) ShaderCreateInfoVertex *vert=mci->GetVS(); if(vert) - mtl->vertex_input=GetVertexInput(vert->sdi->GetShaderStageIO().input); + mtl->vertex_input=GetVertexInput(vert->GetInput()); } { diff --git a/src/ShaderGen/2d/M_PureTexture2D.cpp b/src/ShaderGen/2d/M_PureTexture2D.cpp index ac82ba09..cd51c1d0 100644 --- a/src/ShaderGen/2d/M_PureTexture2D.cpp +++ b/src/ShaderGen/2d/M_PureTexture2D.cpp @@ -37,7 +37,7 @@ void main() vsc->AddInput(VAT_VEC2,VAN::TexCoord); - vsc->AddOutput(VAT_VEC2,"TexCoord"); + vsc->AddOutput(SVT_VEC2,"TexCoord"); vsc->SetMain(vs_main); return(true); diff --git a/src/ShaderGen/2d/M_RectTexture2D.cpp b/src/ShaderGen/2d/M_RectTexture2D.cpp index b2a3c534..6a2976cf 100644 --- a/src/ShaderGen/2d/M_RectTexture2D.cpp +++ b/src/ShaderGen/2d/M_RectTexture2D.cpp @@ -54,7 +54,7 @@ void main() vsc->AddInput(VAT_VEC4,VAN::TexCoord); - vsc->AddOutput(VAT_VEC4,"TexCoord"); + vsc->AddOutput(SVT_VEC4,"TexCoord"); vsc->SetMain(vs_main); return(true); @@ -64,7 +64,7 @@ void main() { gsc->SetGeom(Prim::Points,Prim::TriangleStrip,4); - gsc->AddOutput(VAT_VEC2,"TexCoord"); + gsc->AddOutput(SVT_VEC2,"TexCoord"); gsc->SetMain(gs_main); return(true); diff --git a/src/ShaderGen/2d/M_RectTexture2DArray.cpp b/src/ShaderGen/2d/M_RectTexture2DArray.cpp index 90472093..23c65883 100644 --- a/src/ShaderGen/2d/M_RectTexture2DArray.cpp +++ b/src/ShaderGen/2d/M_RectTexture2DArray.cpp @@ -61,7 +61,7 @@ void main() vsc->AddInput(VAT_VEC4,VAN::TexCoord); - vsc->AddOutput(VAT_VEC4,"TexCoord"); + vsc->AddOutput(SVT_VEC4,"TexCoord"); vsc->SetMain(vs_main); return(true); @@ -71,7 +71,7 @@ void main() { gsc->SetGeom(Prim::Points,Prim::TriangleStrip,4); - gsc->AddOutput(VAT_VEC2,"TexCoord"); + gsc->AddOutput(SVT_VEC2,"TexCoord"); gsc->SetMain(gs_main); return(true); diff --git a/src/ShaderGen/2d/M_VertexColor2D.cpp b/src/ShaderGen/2d/M_VertexColor2D.cpp index 4fa912b6..453dd969 100644 --- a/src/ShaderGen/2d/M_VertexColor2D.cpp +++ b/src/ShaderGen/2d/M_VertexColor2D.cpp @@ -38,7 +38,7 @@ void main() vsc->AddInput(VAT_VEC4,VAN::Color); - vsc->AddOutput(VAT_VEC4,"Color"); + vsc->AddOutput(SVT_VEC4,"Color"); vsc->SetMain(vs_main); return(true); diff --git a/src/ShaderGen/2d/Std2DMaterialLoader.cpp b/src/ShaderGen/2d/Std2DMaterialLoader.cpp index a90d1fd2..9a958e7c 100644 --- a/src/ShaderGen/2d/Std2DMaterialLoader.cpp +++ b/src/ShaderGen/2d/Std2DMaterialLoader.cpp @@ -53,15 +53,15 @@ namespace return true; } - material_file::ShaderData *CommonProc(VkShaderStageFlagBits ss,ShaderCreateInfo *sc) + template + SD *CommonProc(SCI *sc) { - material_file::ShaderData *sd=mfd->shader[ss]; + SD *sd=(SD *)(mfd->shader[ss]); if(!sd) return(nullptr); - for(auto &ua:sd->output) - sc->AddOutput(ua.vat,ua.name); + sc->AddOutput(sd->output); for(auto &s:sd->sampler) mci->AddSampler(ss,DescriptorSetType::PerMaterial,s.type,s.name); @@ -73,18 +73,17 @@ namespace bool CustomVertexShader(ShaderCreateInfoVertex *vsc) override { - for(auto &ua:mfd->vi) - vsc->AddInput(ua.vat,ua.name); + vsc->AddInput(mfd->via); if(!Std2DMaterial::CustomVertexShader(vsc)) return(false); - return CommonProc(VK_SHADER_STAGE_VERTEX_BIT,vsc); + return CommonProc(vsc); } bool CustomGeometryShader(ShaderCreateInfoGeometry *gsc) override { - material_file::GeometryShaderData *sd=(material_file::GeometryShaderData *)CommonProc(VK_SHADER_STAGE_GEOMETRY_BIT,gsc); + material_file::GeometryShaderData *sd=CommonProc(gsc); if(!sd) return(false); @@ -96,7 +95,7 @@ namespace bool CustomFragmentShader(ShaderCreateInfoFragment *fsc) override { - return CommonProc(VK_SHADER_STAGE_FRAGMENT_BIT,fsc); + return CommonProc(fsc); } };//class Std2DMaterialLoader:public Std2DMaterial }//namespace diff --git a/src/ShaderGen/3d/M_BillboardDynamicSize.cpp b/src/ShaderGen/3d/M_BillboardDynamicSize.cpp index 037e9581..5da84835 100644 --- a/src/ShaderGen/3d/M_BillboardDynamicSize.cpp +++ b/src/ShaderGen/3d/M_BillboardDynamicSize.cpp @@ -57,7 +57,7 @@ void main() if(!Std3DMaterial::CustomVertexShader(vsc)) return(false); - vsc->AddOutput(VAT_UINT,"l2w_id",Interpolation::Flat); + vsc->AddOutput(SVT_UINT,"l2w_id",Interpolation::Flat); vsc->SetMain(vs_main); return(true); @@ -67,7 +67,7 @@ void main() { gsc->SetGeom(Prim::Points,Prim::TriangleStrip,4); - gsc->AddOutput(VAT_VEC2,"TexCoord"); + gsc->AddOutput(SVT_VEC2,"TexCoord"); gsc->SetMain(gs_main); return(true); diff --git a/src/ShaderGen/3d/M_BillboardFixedSize.cpp b/src/ShaderGen/3d/M_BillboardFixedSize.cpp index ec43ebed..61c1b43e 100644 --- a/src/ShaderGen/3d/M_BillboardFixedSize.cpp +++ b/src/ShaderGen/3d/M_BillboardFixedSize.cpp @@ -59,7 +59,7 @@ void main() if(!Std3DMaterial::CustomVertexShader(vsc)) return(false); - vsc->AddOutput(VAT_VEC2,"BillboardSize"); + vsc->AddOutput(SVT_VEC2,"BillboardSize"); vsc->SetMain(vs_main); return(true); @@ -69,7 +69,7 @@ void main() { gsc->SetGeom(Prim::Points,Prim::TriangleStrip,4); - gsc->AddOutput(VAT_VEC2,"TexCoord"); + gsc->AddOutput(SVT_VEC2,"TexCoord"); gsc->SetMain(gs_main); return(true); diff --git a/src/ShaderGen/3d/M_VertexColor3D.cpp b/src/ShaderGen/3d/M_VertexColor3D.cpp index 7b32dffb..02be0956 100644 --- a/src/ShaderGen/3d/M_VertexColor3D.cpp +++ b/src/ShaderGen/3d/M_VertexColor3D.cpp @@ -38,7 +38,7 @@ void main() vsc->AddInput(VAT_VEC4,VAN::Color); - vsc->AddOutput(VAT_VEC4,"Color"); + vsc->AddOutput(SVT_VEC4,"Color"); vsc->SetMain(vs_main); return(true); diff --git a/src/ShaderGen/3d/M_VertexLum3D.cpp b/src/ShaderGen/3d/M_VertexLum3D.cpp index d1324b32..9842244d 100644 --- a/src/ShaderGen/3d/M_VertexLum3D.cpp +++ b/src/ShaderGen/3d/M_VertexLum3D.cpp @@ -43,7 +43,7 @@ void main() vsc->AddInput(VAT_FLOAT,VAN::Luminance); - vsc->AddOutput(VAT_VEC4,"Color"); + vsc->AddOutput(SVT_VEC4,"Color"); vsc->SetMain(vs_main); return(true); diff --git a/src/ShaderGen/3d/Std3DMaterialLoader.cpp b/src/ShaderGen/3d/Std3DMaterialLoader.cpp index eb7f80a5..56a303ec 100644 --- a/src/ShaderGen/3d/Std3DMaterialLoader.cpp +++ b/src/ShaderGen/3d/Std3DMaterialLoader.cpp @@ -53,16 +53,16 @@ namespace return true; } - - material_file::ShaderData *CommonProc(VkShaderStageFlagBits ss,ShaderCreateInfo *sc) + + template + SD *CommonProc(SCI *sc) { - material_file::ShaderData *sd=mfd->shader[ss]; + SD *sd=(SD *)(mfd->shader[ss]); if(!sd) return (nullptr); - - for(auto &ua:sd->output) - sc->AddOutput(ua.vat,ua.name); + + sc->AddOutput(sd->output); for(auto &s:sd->sampler) mci->AddSampler(ss,DescriptorSetType::PerMaterial,s.type,s.name); @@ -74,18 +74,17 @@ namespace bool CustomVertexShader(ShaderCreateInfoVertex *vsc) override { - for(auto &ua:mfd->vi) - vsc->AddInput(ua.vat,ua.name); + vsc->AddInput(mfd->via); if(!Std3DMaterial::CustomVertexShader(vsc)) return (false); - - return CommonProc(VK_SHADER_STAGE_VERTEX_BIT,vsc); + + return CommonProc(vsc); } bool CustomGeometryShader(ShaderCreateInfoGeometry *gsc) override { - material_file::GeometryShaderData *sd=(material_file::GeometryShaderData *)CommonProc(VK_SHADER_STAGE_GEOMETRY_BIT,gsc); + material_file::GeometryShaderData *sd=CommonProc(gsc); if(!sd) return (false); @@ -97,7 +96,7 @@ namespace bool CustomFragmentShader(ShaderCreateInfoFragment *fsc) override { - return CommonProc(VK_SHADER_STAGE_FRAGMENT_BIT,fsc); + return CommonProc(fsc); } }; // class Std3DMaterialLoader:public Std3DMaterial } // namespace diff --git a/src/ShaderGen/MaterialFileData.h b/src/ShaderGen/MaterialFileData.h index f4359b98..63b3ce8d 100644 --- a/src/ShaderGen/MaterialFileData.h +++ b/src/ShaderGen/MaterialFileData.h @@ -68,19 +68,17 @@ namespace material_file } const VkShaderStageFlagBits GetShaderStage()const{return shader_stage;} - - virtual void AddOutput(const ShaderVariable &sv); }; struct VertexShaderData:public ShaderData { - List output; + SVList output; VertexShaderData():ShaderData(VK_SHADER_STAGE_VERTEX_BIT){} public: - void AddOutput(const ShaderVariable &sv)override{output.Add(sv);} + void AddOutput(const ShaderVariable &sv){output.Add(sv);} }; struct GeometryShaderData:public ShaderData @@ -89,7 +87,7 @@ namespace material_file Prim output_prim; uint max_vertices=0; - List output; + SVList output; public: @@ -97,18 +95,16 @@ namespace material_file public: - void AddOutput(const ShaderVariable &sv)override{output.Add(sv);} + void AddOutput(const ShaderVariable &sv){output.Add(sv);} }; struct FragmentShaderData:public ShaderData { - List output; + VIAList output; FragmentShaderData():ShaderData(VK_SHADER_STAGE_FRAGMENT_BIT){} - - public: - void AddOutput(const ShaderVariable &sv)override{} + void AddOutput(const VIA &via){output.Add(via);} }; using ShaderDataMap=ObjectMap; @@ -131,7 +127,7 @@ namespace material_file MaterialInstanceData mi{}; - List via; ///interpolation),str)) + { + while(*str!=' '&&*str!='\t')++str; + while(*str==' '||*str=='\t')++str; + } + else + { + via->interpolation=Interpolation::Smooth; + } + VAType vat; if(!ParseVertexAttribType(&(vat),str)) @@ -372,12 +397,22 @@ namespace return(true); } - bool ParseUniformAttrib(ShaderVariable *sv,const char *str) + bool ParseOutputItem(ShaderVariable *sv,const char *str) { const char *sp; while(*str==' '||*str=='\t')++str; + if(ParseInterpolation(&(sv->interpolation),str)) + { + while(*str!=' '&&*str!='\t')++str; + while(*str==' '||*str=='\t')++str; + } + else + { + sv->interpolation=Interpolation::Smooth; + } + if(!sv->type.ParseTypeString(str)) return(false); @@ -411,16 +446,17 @@ namespace VIA via; - if(ParseVertexInputAttrib(&via,text)) + if(ParseOutputItem(&via,text)) via_list->Add(via); return(true); } };//struct VertexInputBlockParse + template struct ShaderBlockParse:public TextParse { - ShaderData * shader_data=nullptr; + SD * shader_data=nullptr; bool output=false; @@ -429,7 +465,7 @@ namespace public: - ShaderBlockParse(ShaderData *sd) + ShaderBlockParse(SD *sd) { shader_data=sd; } @@ -460,10 +496,10 @@ namespace return(true); } - ShaderVariable sv; + OIT output_item; - if(ParseUniformAttrib(&sv,text)) - shader_data->AddOutput(sv); + if(ParseOutputItem(&output_item,text)) + shader_data->AddOutput(output_item); } if(hgl::stricmp(text,"Code",4)==0) @@ -507,7 +543,10 @@ namespace } };//struct ShaderBlockParse - struct GeometryShaderBlockParse:public ShaderBlockParse + using VertexShaderBlockParse=ShaderBlockParse; + using FragmentShaderBlockParse=ShaderBlockParse; + + struct GeometryShaderBlockParse:public ShaderBlockParse { GeometryShaderData *gsd=nullptr; @@ -576,7 +615,6 @@ namespace return(true); } - };//struct GeometryShaderBlockParse struct MaterialTextParse:public TextParse @@ -620,7 +658,7 @@ namespace parse=new MaterialInstanceBlockParse(&(mfd->mi)); else if(state==MaterialFileBlock::VertexInput) - parse=new VertexInputBlockParse(&(mfd->vi)); + parse=new VertexInputBlockParse(&(mfd->via)); else if(state>=MaterialFileBlock::Vertex &&state<=MaterialFileBlock::Fragment) @@ -629,23 +667,23 @@ namespace if(state==MaterialFileBlock::Vertex) { - sd=new ShaderData(VK_SHADER_STAGE_VERTEX_BIT); + sd=new VertexShaderData(); - parse=new ShaderBlockParse(sd); + parse=new VertexShaderBlockParse((VertexShaderData *)sd); } else if(state==MaterialFileBlock::Geometry) { - sd=new GeometryShaderData(VK_SHADER_STAGE_GEOMETRY_BIT); + sd=new GeometryShaderData(); parse=new GeometryShaderBlockParse((GeometryShaderData *)sd); } else if(state==MaterialFileBlock::Fragment) { - sd=new ShaderData(VK_SHADER_STAGE_FRAGMENT_BIT); + sd=new FragmentShaderData(); - parse=new ShaderBlockParse(sd); + parse=new FragmentShaderBlockParse((FragmentShaderData *)sd); } if(!sd) diff --git a/src/ShaderGen/ShaderCreateInfoFragment.cpp b/src/ShaderGen/ShaderCreateInfoFragment.cpp index 458fc93e..ff6f37fc 100644 --- a/src/ShaderGen/ShaderCreateInfoFragment.cpp +++ b/src/ShaderGen/ShaderCreateInfoFragment.cpp @@ -2,7 +2,24 @@ #include namespace hgl{namespace graph{ - + +int ShaderCreateInfoFragment::AddOutput(VIAList &via_list) +{ + int count=0; + + for(VIA &via:via_list) + { + //都输出了,没这些值 + //via.input_rate=VK_VERTEX_INPUT_RATE_VERTEX; + //via.group=VertexInputGroup::Basic; + + if(fsdi.AddOutput(via)) + ++count; + } + + return count; +} + int ShaderCreateInfoFragment::AddOutput(const VAType &type,const AnsiString &name,Interpolation inter) { VertexInputAttribute via; diff --git a/src/ShaderGen/ShaderCreateInfoGeometry.cpp b/src/ShaderGen/ShaderCreateInfoGeometry.cpp index ac68d5ef..099d4709 100644 --- a/src/ShaderGen/ShaderCreateInfoGeometry.cpp +++ b/src/ShaderGen/ShaderCreateInfoGeometry.cpp @@ -26,6 +26,21 @@ namespace hgl AddFunction(mtl::func::MF_HandoverMI_GS); } + int ShaderCreateInfoGeometry::AddOutput(SVList &sv_list) + { + int count=0; + + for(ShaderVariable &sv:sv_list) + { + sv.interpolation=Interpolation::Smooth; + + if(gsdi.AddOutput(sv)) + ++count; + } + + return count; + } + int ShaderCreateInfoGeometry::AddOutput(const SVType &type,const AnsiString &name,Interpolation inter) { ShaderVariable sv; diff --git a/src/ShaderGen/ShaderCreateInfoVertex.cpp b/src/ShaderGen/ShaderCreateInfoVertex.cpp index cd1b9017..0dbf261b 100644 --- a/src/ShaderGen/ShaderCreateInfoVertex.cpp +++ b/src/ShaderGen/ShaderCreateInfoVertex.cpp @@ -14,9 +14,25 @@ void ShaderCreateInfoVertex::AddMaterialInstanceOutput() AddFunction(mtl::func::MF_HandoverMI_VS); } +int ShaderCreateInfoVertex::AddInput(VIAList &via_list) +{ + int count=0; + + for(VIA &via:via_list) + { + via.input_rate=VK_VERTEX_INPUT_RATE_VERTEX; + via.group=VertexInputGroup::Basic; + + if(vsdi.AddInput(via)) + ++count; + } + + return count; +} + int ShaderCreateInfoVertex::AddInput(const VAType &type,const AnsiString &name,const VkVertexInputRate input_rate,const VertexInputGroup &group) { - VertexInputAttribute via; + VIA via; hgl::strcpy(via.name,sizeof(via.name),name.c_str()); @@ -26,6 +42,8 @@ int ShaderCreateInfoVertex::AddInput(const VAType &type,const AnsiString &name,c via.input_rate =input_rate; via.group =group; + via.interpolation =Interpolation::Smooth; + return vsdi.AddInput(via); } @@ -44,6 +62,21 @@ int ShaderCreateInfoVertex::hasInput(const char *name) return vsdi.hasInput(name); } +int ShaderCreateInfoVertex::AddOutput(SVList &sv_list) +{ + int count=0; + + for(ShaderVariable &sv:sv_list) + { + sv.interpolation=Interpolation::Smooth; + + if(vsdi.AddOutput(sv)) + ++count; + } + + return count; +} + int ShaderCreateInfoVertex::AddOutput(const SVType &type,const AnsiString &name,Interpolation inter) { ShaderVariable sv; diff --git a/src/ShaderGen/ShaderVariableType.cpp b/src/ShaderGen/ShaderVariableType.cpp index 78d28630..49abfe95 100644 --- a/src/ShaderGen/ShaderVariableType.cpp +++ b/src/ShaderGen/ShaderVariableType.cpp @@ -265,5 +265,7 @@ bool ShaderVariableType::ParseTypeString(const char *str) base_type=SVBaseType::AtomicCounter; return(true); } + + return(false); } VK_NAMESPACE_END