所有PipelineCreater定义改用智能指针

This commit is contained in:
hyzboy 2019-07-05 17:00:49 +08:00
parent 8c1de18045
commit 1e8eb7d6bf
13 changed files with 108 additions and 130 deletions

View File

@ -87,7 +87,8 @@ private:
bool InitPipeline() bool InitPipeline()
{ {
vulkan::PipelineCreater *pipeline_creater=new vulkan::PipelineCreater(device,material,device->GetMainRenderPass(),device->GetExtent()); SharedPtr<vulkan::PipelineCreater>
pipeline_creater=new vulkan::PipelineCreater(device,material,device->GetMainRenderPass(),device->GetExtent());
pipeline_creater->SetDepthTest(true); pipeline_creater->SetDepthTest(true);
pipeline_creater->SetDepthWrite(true); pipeline_creater->SetDepthWrite(true);
pipeline_creater->SetCullMode(VK_CULL_MODE_NONE); pipeline_creater->SetCullMode(VK_CULL_MODE_NONE);
@ -98,8 +99,6 @@ private:
return(false); return(false);
db->Add(pipeline_solid); db->Add(pipeline_solid);
delete pipeline_creater;
return(true); return(true);
} }

View File

@ -49,7 +49,7 @@ private:
Texture2DPointer texture_list[4]; Texture2DPointer texture_list[4];
}; };
List<VkFormat> color_format_list; List<VkFormat> gbuffer_format_list;
List<vulkan::ImageView *> image_view_list; List<vulkan::ImageView *> image_view_list;
struct struct
@ -91,13 +91,13 @@ private:
for(uint i=0;i<3;i++) for(uint i=0;i<3;i++)
{ {
gbuffer.color_format_list.Add(gbuffer.texture_list[i]->GetFormat()); gbuffer.gbuffer_format_list.Add(gbuffer.texture_list[i]->GetFormat());
gbuffer.image_view_list.Add(gbuffer.texture_list[i]->GetImageView()); gbuffer.image_view_list.Add(gbuffer.texture_list[i]->GetImageView());
} }
if(!device->CreateAttachment( gbuffer.attachment.ref_list, if(!device->CreateAttachment( gbuffer.attachment.ref_list,
gbuffer.attachment.desc_list, gbuffer.attachment.desc_list,
gbuffer.color_format_list, gbuffer.gbuffer_format_list,
gbuffer.depth->GetFormat())) gbuffer.depth->GetFormat()))
return(false); return(false);
@ -112,7 +112,7 @@ private:
gbuffer.renderpass=device->CreateRenderPass(gbuffer.attachment.desc_list, gbuffer.renderpass=device->CreateRenderPass(gbuffer.attachment.desc_list,
gbuffer.subpass.desc, gbuffer.subpass.desc,
gbuffer.subpass.dependency, gbuffer.subpass.dependency,
gbuffer.color_format_list, gbuffer.gbuffer_format_list,
gbuffer.depth->GetFormat()); gbuffer.depth->GetFormat());
if(!gbuffer.renderpass) if(!gbuffer.renderpass)
@ -142,25 +142,24 @@ private:
bool InitGBufferPipeline(SubpassParam *sp) bool InitGBufferPipeline(SubpassParam *sp)
{ {
vulkan::PipelineCreater *pipeline_creater=new vulkan::PipelineCreater(device,sp->material,gbuffer.renderpass,device->GetExtent()); SharedPtr<vulkan::PipelineCreater> pipeline_creater=new vulkan::PipelineCreater(device,sp->material,gbuffer.renderpass,device->GetExtent());
pipeline_creater->SetDepthTest(true); pipeline_creater->SetDepthTest(true);
pipeline_creater->SetDepthWrite(true); pipeline_creater->SetDepthWrite(true);
pipeline_creater->SetCullMode(VK_CULL_MODE_BACK_BIT); pipeline_creater->SetCullMode(VK_CULL_MODE_BACK_BIT);
pipeline_creater->Set(PRIM_TRIANGLES); pipeline_creater->Set(PRIM_TRIANGLES);
sp->pipeline=pipeline_creater->Create(); sp->pipeline=pipeline_creater->Create();
if(!sp->pipeline) if(!sp->pipeline)
return(false); return(false);
db->Add(sp->pipeline); db->Add(sp->pipeline);
delete pipeline_creater;
return(true); return(true);
} }
bool InitCompositionPipeline(SubpassParam *sp) bool InitCompositionPipeline(SubpassParam *sp)
{ {
vulkan::PipelineCreater *pipeline_creater=new vulkan::PipelineCreater(device,sp->material,device->GetMainRenderPass(),device->GetExtent()); SharedPtr<vulkan::PipelineCreater> pipeline_creater=new vulkan::PipelineCreater(device,sp->material,device->GetMainRenderPass(),device->GetExtent());
pipeline_creater->SetDepthTest(false); pipeline_creater->SetDepthTest(false);
pipeline_creater->SetDepthWrite(false); pipeline_creater->SetDepthWrite(false);
pipeline_creater->SetCullMode(VK_CULL_MODE_NONE); pipeline_creater->SetCullMode(VK_CULL_MODE_NONE);
@ -171,8 +170,6 @@ private:
return(false); return(false);
db->Add(sp->pipeline); db->Add(sp->pipeline);
delete pipeline_creater;
return(true); return(true);
} }

View File

@ -114,21 +114,18 @@ private:
bool InitPipeline() bool InitPipeline()
{ {
constexpr os_char PIPELINE_FILENAME[]=OS_TEXT("2DSolid.pipeline"); SharedPtr<vulkan::PipelineCreater>
pipeline_creater=new vulkan::PipelineCreater(device,material,device->GetMainRenderPass(),device->GetExtent());
pipeline_creater->SetDepthTest(false);
pipeline_creater->SetDepthWrite(false);
pipeline_creater->CloseCullFace();
pipeline_creater->Set(PRIM_TRIANGLE_FAN);
{ pipeline=pipeline_creater->Create();
vulkan::PipelineCreater *pipeline_creater=new vulkan::PipelineCreater(device,material,device->GetMainRenderPass(),device->GetExtent()); if(!pipeline)return(false);
pipeline_creater->SetDepthTest(false);
pipeline_creater->SetDepthWrite(false);
pipeline_creater->CloseCullFace();
pipeline_creater->Set(PRIM_TRIANGLE_FAN);
pipeline=pipeline_creater->Create(); db->Add(pipeline);
db->Add(pipeline); return(true);
delete pipeline_creater;
}
return pipeline;
} }
bool InitScene() bool InitScene()

View File

@ -84,23 +84,19 @@ private:
bool InitPipeline() bool InitPipeline()
{ {
{ SharedPtr<vulkan::PipelineCreater>
vulkan::PipelineCreater *pipeline_creater=new vulkan::PipelineCreater(device,material,device->GetMainRenderPass(),device->GetExtent()); pipeline_creater=new vulkan::PipelineCreater(device,material,device->GetMainRenderPass(),device->GetExtent());
pipeline_creater->SetDepthTest(true); pipeline_creater->SetDepthTest(true);
pipeline_creater->SetDepthWrite(true); pipeline_creater->SetDepthWrite(true);
pipeline_creater->CloseCullFace(); pipeline_creater->CloseCullFace();
pipeline_creater->Set(PRIM_LINES); pipeline_creater->Set(PRIM_LINES);
pipeline_line=pipeline_creater->Create(); pipeline_line=pipeline_creater->Create();
if(!pipeline_line) if(!pipeline_line)
return(false); return(false);
db->Add(pipeline_line); db->Add(pipeline_line);
return(true);
delete pipeline_creater;
}
return pipeline_line;
} }
bool InitScene() bool InitScene()

View File

@ -137,31 +137,35 @@ private:
bool InitPipeline() bool InitPipeline()
{ {
vulkan::PipelineCreater *pipeline_creater=new vulkan::PipelineCreater(device,material,device->GetMainRenderPass(),device->GetExtent()); SharedPtr<vulkan::PipelineCreater>
pipeline_creater=new vulkan::PipelineCreater(device,material,device->GetMainRenderPass(),device->GetExtent());
pipeline_creater->SetDepthTest(true); pipeline_creater->SetDepthTest(true);
pipeline_creater->SetDepthWrite(true); pipeline_creater->SetDepthWrite(true);
pipeline_creater->Set(PRIM_LINES); pipeline_creater->Set(PRIM_LINES);
pipeline_line=pipeline_creater->Create(); pipeline_line=pipeline_creater->Create();
if(!pipeline_line)
return(false);
db->Add(pipeline_line); db->Add(pipeline_line);
pipeline_creater->Set(PRIM_TRIANGLES); pipeline_creater->Set(PRIM_TRIANGLES);
pipeline_creater->SetPolygonMode(VK_POLYGON_MODE_LINE); pipeline_creater->SetPolygonMode(VK_POLYGON_MODE_LINE);
pipeline_solid=pipeline_creater->Create(); pipeline_solid=pipeline_creater->Create();
db->Add(pipeline_solid);
pipeline_creater->SetCullMode(VK_CULL_MODE_NONE);
pipeline_twoside=pipeline_creater->Create();
db->Add(pipeline_twoside);
delete pipeline_creater;
if(!pipeline_line)
return(false);
if(!pipeline_solid) if(!pipeline_solid)
return(false); return(false);
db->Add(pipeline_solid);
pipeline_creater->SetCullMode(VK_CULL_MODE_NONE);
pipeline_twoside=pipeline_creater->Create();
if(!pipeline_twoside)
return(false);
db->Add(pipeline_twoside);
return(true); return(true);
} }

View File

@ -162,33 +162,31 @@ private:
bool InitPipeline() bool InitPipeline()
{ {
constexpr os_char PIPELINE_FILENAME[]=OS_TEXT("2DSolid.pipeline"); SharedPtr<vulkan::PipelineCreater>
pipeline_creater=new vulkan::PipelineCreater(device,material,device->GetMainRenderPass(),device->GetExtent());
pipeline_creater->SetDepthTest(false);
pipeline_creater->SetDepthWrite(false);
pipeline_creater->SetPolygonMode(VK_POLYGON_MODE_LINE);
pipeline_creater->CloseCullFace();
pipeline_creater->Set(PRIM_TRIANGLES);
{ pipeline_wireframe=pipeline_creater->Create();
vulkan::PipelineCreater *pipeline_creater=new vulkan::PipelineCreater(device,material,device->GetMainRenderPass(),device->GetExtent());
pipeline_creater->SetDepthTest(false);
pipeline_creater->SetDepthWrite(false);
pipeline_creater->SetPolygonMode(VK_POLYGON_MODE_LINE);
pipeline_creater->CloseCullFace();
pipeline_creater->Set(PRIM_TRIANGLES);
pipeline_wireframe=pipeline_creater->Create(); if(!pipeline_wireframe)
return(false);
if(pipeline_wireframe) db->Add(pipeline_wireframe);
db->Add(pipeline_wireframe);
pipeline_creater->SetPolygonMode(VK_POLYGON_MODE_FILL); pipeline_creater->SetPolygonMode(VK_POLYGON_MODE_FILL);
pipeline_creater->Set(PRIM_LINES); pipeline_creater->Set(PRIM_LINES);
pipeline_lines=pipeline_creater->Create(); pipeline_lines=pipeline_creater->Create();
if(pipeline_lines) if(!pipeline_lines)
db->Add(pipeline_lines); return(false);
delete pipeline_creater; db->Add(pipeline_lines);
} return(true);
return pipeline_wireframe;
} }
void CreateSceneNode(SceneNode *scene_node,ModelSceneNode *model_node) void CreateSceneNode(SceneNode *scene_node,ModelSceneNode *model_node)

View File

@ -74,24 +74,20 @@ private:
bool InitPipeline() bool InitPipeline()
{ {
{ SharedPtr<vulkan::PipelineCreater>
vulkan::PipelineCreater *pipeline_creater=new vulkan::PipelineCreater(device,material,device->GetMainRenderPass(),device->GetExtent()); pipeline_creater=new vulkan::PipelineCreater(device,material,device->GetMainRenderPass(),device->GetExtent());
pipeline_creater->SetDepthTest(true); pipeline_creater->SetDepthTest(true);
pipeline_creater->SetDepthWrite(true); pipeline_creater->SetDepthWrite(true);
pipeline_creater->CloseCullFace(); pipeline_creater->CloseCullFace();
pipeline_creater->SetPolygonMode(VK_POLYGON_MODE_LINE); pipeline_creater->SetPolygonMode(VK_POLYGON_MODE_LINE);
pipeline_creater->Set(PRIM_TRIANGLES); pipeline_creater->Set(PRIM_TRIANGLES);
pipeline_line=pipeline_creater->Create(); pipeline_line=pipeline_creater->Create();
if(!pipeline_line) if(!pipeline_line)
return(false); return(false);
db->Add(pipeline_line); db->Add(pipeline_line);
return(true);
delete pipeline_creater;
}
return pipeline_line;
} }
bool InitScene() bool InitScene()

View File

@ -103,7 +103,7 @@ private:
bool InitPipeline() bool InitPipeline()
{ {
vulkan::PipelineCreater * SharedPtr<vulkan::PipelineCreater>
pipeline_creater=new vulkan::PipelineCreater(device,material,device->GetMainRenderPass(),device->GetExtent()); pipeline_creater=new vulkan::PipelineCreater(device,material,device->GetMainRenderPass(),device->GetExtent());
pipeline_creater->SetDepthTest(false); pipeline_creater->SetDepthTest(false);
pipeline_creater->SetDepthWrite(false); pipeline_creater->SetDepthWrite(false);
@ -112,9 +112,6 @@ private:
pipeline=pipeline_creater->Create(); pipeline=pipeline_creater->Create();
delete pipeline_creater;
pipeline_creater=nullptr;
return pipeline; return pipeline;
} }

View File

@ -107,26 +107,23 @@ private:
constexpr os_char PIPELINE_FILENAME[]=OS_TEXT("2DSolid.pipeline"); constexpr os_char PIPELINE_FILENAME[]=OS_TEXT("2DSolid.pipeline");
{ {
vulkan::PipelineCreater *pipeline_creater=new vulkan::PipelineCreater(device,material,device->GetMainRenderPass(),device->GetExtent()); SharedPtr<vulkan::PipelineCreater>
pipeline_creater=new vulkan::PipelineCreater(device,material,device->GetMainRenderPass(),device->GetExtent());
pipeline_creater->SetDepthTest(false); pipeline_creater->SetDepthTest(false);
pipeline_creater->SetDepthWrite(false); pipeline_creater->SetDepthWrite(false);
pipeline_creater->CloseCullFace(); pipeline_creater->CloseCullFace();
pipeline_creater->Set(PRIM_TRIANGLES); pipeline_creater->Set(PRIM_TRIANGLES);
SaveToFile(PIPELINE_FILENAME,pipeline_creater); SaveToFile(PIPELINE_FILENAME,pipeline_creater);
delete pipeline_creater;
} }
{ {
void *data; void *data;
uint size=filesystem::LoadFileToMemory(PIPELINE_FILENAME,(void **)&data); uint size=filesystem::LoadFileToMemory(PIPELINE_FILENAME,(void **)&data);
vulkan::PipelineCreater *pipeline_creater=new vulkan::PipelineCreater(device,material,device->GetMainRenderPass(),device->GetExtent(),(uchar *)data,size); SharedPtr<vulkan::PipelineCreater> pipeline_creater=new vulkan::PipelineCreater(device,material,device->GetMainRenderPass(),device->GetExtent(),(uchar *)data,size);
pipeline=pipeline_creater->Create(); pipeline=pipeline_creater->Create();
delete pipeline_creater;
} }
return pipeline; return pipeline;

View File

@ -148,8 +148,8 @@ private:
bool InitPipeline() bool InitPipeline()
{ {
vulkan::PipelineCreater * SharedPtr<vulkan::PipelineCreater>
pipeline_creater=new vulkan::PipelineCreater(device,material,device->GetMainRenderPass(),device->GetExtent()); pipeline_creater=new vulkan::PipelineCreater(device,material,device->GetMainRenderPass(),device->GetExtent());
pipeline_creater->SetDepthTest(false); pipeline_creater->SetDepthTest(false);
pipeline_creater->SetDepthWrite(false); pipeline_creater->SetDepthWrite(false);
pipeline_creater->CloseCullFace(); pipeline_creater->CloseCullFace();
@ -157,9 +157,6 @@ private:
pipeline=pipeline_creater->Create(); pipeline=pipeline_creater->Create();
delete pipeline_creater;
pipeline_creater=nullptr;
return pipeline; return pipeline;
} }

View File

@ -52,22 +52,22 @@ bool CommandBuffer::BeginRenderPass(RenderPass *rp,Framebuffer *fb)
{ {
VkRenderPassBeginInfo rp_begin; VkRenderPassBeginInfo rp_begin;
rp_begin.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; rp_begin.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
rp_begin.pNext = nullptr; rp_begin.pNext = nullptr;
rp_begin.renderPass = *rp; rp_begin.renderPass = *rp;
rp_begin.framebuffer = *fb; rp_begin.framebuffer = *fb;
rp_begin.renderArea = render_area; rp_begin.renderArea = render_area;
rp_begin.clearValueCount = 2; rp_begin.clearValueCount = 2;
rp_begin.pClearValues = clear_values; rp_begin.pClearValues = clear_values;
vkCmdBeginRenderPass(cmd_buf, &rp_begin, VK_SUBPASS_CONTENTS_INLINE); vkCmdBeginRenderPass(cmd_buf, &rp_begin, VK_SUBPASS_CONTENTS_INLINE);
viewport.x=0; viewport.x = 0;
viewport.y=0; viewport.y = 0;
viewport.minDepth=0.0f; viewport.minDepth = 0.0f;
viewport.maxDepth=1.0f; viewport.maxDepth = 1.0f;
viewport.width=render_area.extent.width; viewport.width = render_area.extent.width;
viewport.height=render_area.extent.height; viewport.height = render_area.extent.height;
vkCmdSetViewport(cmd_buf,0,1,&viewport); vkCmdSetViewport(cmd_buf,0,1,&viewport);
vkCmdSetScissor(cmd_buf,0,1,&render_area); vkCmdSetScissor(cmd_buf,0,1,&render_area);

View File

@ -31,19 +31,19 @@ const ShaderModule *ShaderModuleManage::CreateShader(const VkShaderStageFlagBits
return(nullptr); return(nullptr);
VkPipelineShaderStageCreateInfo *shader_stage=new VkPipelineShaderStageCreateInfo; VkPipelineShaderStageCreateInfo *shader_stage=new VkPipelineShaderStageCreateInfo;
shader_stage->sType=VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; shader_stage->sType =VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
shader_stage->pNext=nullptr; shader_stage->pNext =nullptr;
shader_stage->pSpecializationInfo=nullptr; shader_stage->pSpecializationInfo =nullptr;
shader_stage->flags=0; shader_stage->flags =0;
shader_stage->stage=shader_stage_bit; shader_stage->stage =shader_stage_bit;
shader_stage->pName="main"; shader_stage->pName ="main";
VkShaderModuleCreateInfo moduleCreateInfo; VkShaderModuleCreateInfo moduleCreateInfo;
moduleCreateInfo.sType=VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; moduleCreateInfo.sType =VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
moduleCreateInfo.pNext=nullptr; moduleCreateInfo.pNext =nullptr;
moduleCreateInfo.flags=0; moduleCreateInfo.flags =0;
moduleCreateInfo.codeSize=spv_size; moduleCreateInfo.codeSize =spv_size;
moduleCreateInfo.pCode=(const uint32_t *)spv_data; moduleCreateInfo.pCode =(const uint32_t *)spv_data;
if(vkCreateShaderModule(*device,&moduleCreateInfo,nullptr,&(shader_stage->module))!=VK_SUCCESS) if(vkCreateShaderModule(*device,&moduleCreateInfo,nullptr,&(shader_stage->module))!=VK_SUCCESS)
return(nullptr); return(nullptr);

View File

@ -32,8 +32,8 @@ public:
SHADER_PARSE_GET_RESOURCE(StageInputs, stage_inputs) SHADER_PARSE_GET_RESOURCE(StageInputs, stage_inputs)
SHADER_PARSE_GET_RESOURCE(StageOutputs, stage_outputs) SHADER_PARSE_GET_RESOURCE(StageOutputs, stage_outputs)
SHADER_PARSE_GET_RESOURCE(Sampler, sampled_images) SHADER_PARSE_GET_RESOURCE(Sampler, sampled_images)
SHADER_PARSE_GET_RESOURCE(Subpass, subpass_inputs)
//SmallVector<Resource> subpass_inputs;
//SmallVector<Resource> storage_images; //SmallVector<Resource> storage_images;
//SmallVector<Resource> atomic_counters; //SmallVector<Resource> atomic_counters;
//SmallVector<Resource> acceleration_structures; //SmallVector<Resource> acceleration_structures;