From e71ec4be855d42818721ca7f72e9304b28a09555 Mon Sep 17 00:00:00 2001 From: "HuYingzhuo(hugo/hyzboy)" Date: Wed, 20 Sep 2023 17:15:13 +0800 Subject: [PATCH] Added few RenderPass::CreatePipeline functions. --- inc/hgl/graph/VKRenderPass.h | 8 +++-- src/SceneGraph/Vulkan/VKRenderPass.cpp | 44 +++++++++++++------------- 2 files changed, 27 insertions(+), 25 deletions(-) diff --git a/inc/hgl/graph/VKRenderPass.h b/inc/hgl/graph/VKRenderPass.h index 2f7814cf..8a15a398 100644 --- a/inc/hgl/graph/VKRenderPass.h +++ b/inc/hgl/graph/VKRenderPass.h @@ -53,10 +53,12 @@ public: const VkExtent2D & GetGranularity()const{return granularity;} public: + Pipeline *CreatePipeline(Material *,const VIL *,const PipelineData *, const Prim &,const bool prim_restart=false); + Pipeline *CreatePipeline(Material *,const VIL *,const InlinePipeline &, const Prim &,const bool prim_restart=false); - Pipeline *CreatePipeline(MaterialInstance *, const InlinePipeline &, const Prim &prim,const bool prim_restart=false); - Pipeline *CreatePipeline(MaterialInstance *, const PipelineData *, const Prim &prim,const bool prim_restart=false); - Pipeline *CreatePipeline(MaterialInstance *, const OSString &, const Prim &prim,const bool prim_restart=false); + Pipeline *CreatePipeline(MaterialInstance *, const InlinePipeline &, const Prim &,const bool prim_restart=false); + Pipeline *CreatePipeline(MaterialInstance *, const PipelineData *, const Prim &,const bool prim_restart=false); + Pipeline *CreatePipeline(MaterialInstance *, const OSString &, const Prim &,const bool prim_restart=false); };//class RenderPass VK_NAMESPACE_END #endif//HGL_GRAPH_VULKAN_RENDER_PASS_INCLUDE diff --git a/src/SceneGraph/Vulkan/VKRenderPass.cpp b/src/SceneGraph/Vulkan/VKRenderPass.cpp index 18c9cda9..56dddad7 100644 --- a/src/SceneGraph/Vulkan/VKRenderPass.cpp +++ b/src/SceneGraph/Vulkan/VKRenderPass.cpp @@ -56,33 +56,14 @@ Pipeline *RenderPass::CreatePipeline(PipelineData *pd,const ShaderStageCreateInf return(new Pipeline(device,graphicsPipeline,pd)); } -Pipeline *RenderPass::CreatePipeline(MaterialInstance *mi,const InlinePipeline &ip,const Prim &prim,const bool prim_restart) + +Pipeline *RenderPass::CreatePipeline(Material *mtl,const VIL *vil,const PipelineData *cpd,const Prim &prim,const bool prim_restart) { - if(!mi)return(nullptr); - - Material *mtl=mi->GetMaterial(); - const PipelineData *cpd=GetPipelineData(ip); - - PipelineData *pd=new PipelineData(cpd); - - pd->SetPrim(prim,prim_restart); - - Pipeline *p=CreatePipeline(pd,mtl->GetStageList(),mtl->GetPipelineLayout(),mi->GetVIL()); - - if(p) - pipeline_list.Add(p); - - return p; -} - -Pipeline *RenderPass::CreatePipeline(MaterialInstance *mi,const PipelineData *cpd,const Prim &prim,const bool prim_restart) -{ - Material *mtl=mi->GetMaterial(); PipelineData *pd=new PipelineData(cpd); pd->SetPrim(prim,prim_restart); - Pipeline *p=CreatePipeline(pd,mtl->GetStageList(),mtl->GetPipelineLayout(),mi->GetVIL()); + Pipeline *p=CreatePipeline(pd,mtl->GetStageList(),mtl->GetPipelineLayout(),vil); if(p) pipeline_list.Add(p); @@ -90,6 +71,25 @@ Pipeline *RenderPass::CreatePipeline(MaterialInstance *mi,const PipelineData *cp return(p); } +Pipeline *RenderPass::CreatePipeline(Material *mtl,const VIL *vil,const InlinePipeline &ip,const Prim &prim,const bool prim_restart) +{ + if(!mtl)return(nullptr); + + return CreatePipeline(mtl,vil,GetPipelineData(ip),prim,prim_restart); +} + +Pipeline *RenderPass::CreatePipeline(MaterialInstance *mi,const InlinePipeline &ip,const Prim &prim,const bool prim_restart) +{ + if(!mi)return(nullptr); + + return CreatePipeline(mi->GetMaterial(),mi->GetVIL(),ip,prim,prim_restart); +} + +Pipeline *RenderPass::CreatePipeline(MaterialInstance *mi,const PipelineData *cpd,const Prim &prim,const bool prim_restart) +{ + return CreatePipeline(mi->GetMaterial(),mi->GetVIL(),cpd,prim,prim_restart); +} + Pipeline *RenderPass::CreatePipeline(MaterialInstance *mi,const OSString &pipeline_filename,const Prim &prim,const bool prim_restart) { const PipelineData *pd=GetPipelineData(pipeline_filename);