moved CreatePipeline functions to RenderPass class.
This commit is contained in:
@@ -72,7 +72,7 @@ bool RenderCmdBuffer::BindFramebuffer(RenderPass *rp,Framebuffer *fb)
|
||||
render_area.offset.y=0;
|
||||
render_area.extent=fb->GetExtent();
|
||||
|
||||
rp_begin.renderPass = *rp;
|
||||
rp_begin.renderPass = rp->GetVkRenderPass();
|
||||
rp_begin.framebuffer = *fb;
|
||||
rp_begin.renderArea = render_area;
|
||||
rp_begin.clearValueCount = cv_count;
|
||||
|
@@ -5,7 +5,7 @@ VkFramebuffer CreateVulkanFramebuffer(VkDevice device,RenderPass *rp,const VkExt
|
||||
{
|
||||
FramebufferCreateInfo fb_info;
|
||||
|
||||
fb_info.renderPass = *rp;
|
||||
fb_info.renderPass = rp->GetVkRenderPass();
|
||||
fb_info.attachmentCount = attachmentCount;
|
||||
fb_info.pAttachments = attachments;
|
||||
fb_info.width = extent.width;
|
||||
@@ -75,7 +75,7 @@ Framebuffer *GPUDevice::CreateFramebuffer(RenderPass *rp,ImageView **color_list,
|
||||
if(!fbo)
|
||||
return(nullptr);
|
||||
|
||||
return(new Framebuffer(GetDevice(),fbo,extent,*rp,color_count,depth));
|
||||
return(new Framebuffer(GetDevice(),fbo,extent,rp->GetVkRenderPass(),color_count,depth));
|
||||
}
|
||||
//
|
||||
//Framebuffer *GPUDevice::CreateFramebuffer(RenderPass *rp,List<ImageView *> &color,ImageView *depth)
|
||||
|
@@ -1,48 +0,0 @@
|
||||
#include<hgl/graph/VKPipeline.h>
|
||||
#include<hgl/graph/VKDevice.h>
|
||||
#include<hgl/graph/VKMaterial.h>
|
||||
#include<hgl/graph/VKRenderPass.h>
|
||||
#include<hgl/graph/VKRenderTarget.h>
|
||||
#include<hgl/graph/VKFramebuffer.h>
|
||||
|
||||
VK_NAMESPACE_BEGIN
|
||||
Pipeline *GPUDevice::CreatePipeline(PipelineData *data,const Material *material,const RenderTarget *rt)
|
||||
{
|
||||
VkPipeline graphicsPipeline;
|
||||
|
||||
data->InitVertexInputState( material->GetStageCount(),
|
||||
material->GetStages(),
|
||||
material->GetVertexAttrCount(),
|
||||
material->GetVertexBindingList(),
|
||||
material->GetVertexAttributeList());
|
||||
|
||||
data->InitViewportState(rt->GetExtent());
|
||||
|
||||
data->SetColorAttachments(rt->GetColorCount());
|
||||
|
||||
data->pipeline_info.layout = material->GetPipelineLayout();
|
||||
|
||||
{
|
||||
data->pipeline_info.renderPass = rt->GetVkRenderPass();
|
||||
data->pipeline_info.subpass = 0; //subpass<73><73><EFBFBD>ڻ<EFBFBD><DABB><EFBFBD>֪<EFBFBD><D6AA><EFBFBD><EFBFBD>ʲô<CAB2>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱд0<D0B4><30><EFBFBD><EFBFBD>֪<EFBFBD><D6AA><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD>
|
||||
}
|
||||
|
||||
if (vkCreateGraphicsPipelines( attr->device,
|
||||
attr->pipeline_cache,
|
||||
1,&data->pipeline_info,
|
||||
nullptr,
|
||||
&graphicsPipeline) != VK_SUCCESS)
|
||||
return(nullptr);
|
||||
|
||||
return(new Pipeline(attr->device,graphicsPipeline,data));
|
||||
}
|
||||
|
||||
Pipeline *GPUDevice::CreatePipeline(const InlinePipeline &ip,const Material *mtl,const RenderTarget *rt)
|
||||
{
|
||||
PipelineData *pd=GetPipelineData(ip);
|
||||
|
||||
if(!pd)return(nullptr);
|
||||
|
||||
return this->CreatePipeline(pd,mtl,rt);
|
||||
}
|
||||
VK_NAMESPACE_END
|
@@ -6,7 +6,7 @@
|
||||
VK_NAMESPACE_BEGIN
|
||||
void GPUDevice::InitRenderPassManage()
|
||||
{
|
||||
render_pass_manage=new DeviceRenderPassManage(attr->device);
|
||||
render_pass_manage=new DeviceRenderPassManage(attr->device,attr->pipeline_cache);
|
||||
|
||||
SwapchainRenderbufferInfo rbi(attr->format,attr->physical_device->GetDepthFormat());
|
||||
|
||||
|
@@ -210,9 +210,10 @@ bool CreateDepthAttachment( List<VkAttachmentReference> &ref_list,List<VkAttachm
|
||||
return(true);
|
||||
}
|
||||
|
||||
DeviceRenderPassManage::DeviceRenderPassManage(VkDevice dev)
|
||||
DeviceRenderPassManage::DeviceRenderPassManage(VkDevice dev,VkPipelineCache pc)
|
||||
{
|
||||
device=dev;
|
||||
pipeline_cache=pc;
|
||||
|
||||
hash=util::CreateSHA1LEHash();
|
||||
}
|
||||
@@ -298,7 +299,7 @@ RenderPass *DeviceRenderPassManage::CreateRenderPass( const List<VkAttachmentD
|
||||
if(vkCreateRenderPass(device,&rp_info,nullptr,&render_pass)!=VK_SUCCESS)
|
||||
return(nullptr);
|
||||
|
||||
return(new RenderPass(device,render_pass,rbi->GetColorFormatList(),depth_format));
|
||||
return(new RenderPass(device,pipeline_cache,render_pass,rbi->GetColorFormatList(),depth_format));
|
||||
}
|
||||
|
||||
RenderPass *DeviceRenderPassManage::AcquireRenderPass(const RenderbufferInfo *rbi)
|
||||
|
@@ -1,8 +1,106 @@
|
||||
#include<hgl/graph/VKRenderPass.h>
|
||||
#include<hgl/graph/VKDevice.h>
|
||||
#include<hgl/graph/VKInlinePipeline.h>
|
||||
#include<hgl/graph/VKPipelineData.h>
|
||||
#include<hgl/graph/VKMaterial.h>
|
||||
#include<hgl/graph/VKMaterialInstance.h>
|
||||
VK_NAMESPACE_BEGIN
|
||||
RenderPass::~RenderPass()
|
||||
{
|
||||
pipeline_list.Clear();
|
||||
|
||||
vkDestroyRenderPass(device,render_pass,nullptr);
|
||||
}
|
||||
|
||||
Pipeline *RenderPass::CreatePipeline(const Material *material,PipelineData *data)
|
||||
{
|
||||
VkPipeline graphicsPipeline;
|
||||
|
||||
data->InitVertexInputState( material->GetStageCount(),
|
||||
material->GetStages(),
|
||||
material->GetVertexAttrCount(),
|
||||
material->GetVertexBindingList(),
|
||||
material->GetVertexAttributeList());
|
||||
|
||||
data->SetColorAttachments(color_formats.GetCount());
|
||||
|
||||
data->pipeline_info.layout = material->GetPipelineLayout();
|
||||
|
||||
{
|
||||
data->pipeline_info.renderPass = render_pass;
|
||||
data->pipeline_info.subpass = 0; //subpass由于还不知道有什么用,所以暂时写0,待知道功用后,需改进
|
||||
}
|
||||
|
||||
if (vkCreateGraphicsPipelines( device,
|
||||
pipeline_cache,
|
||||
1,&data->pipeline_info,
|
||||
nullptr,
|
||||
&graphicsPipeline) != VK_SUCCESS)
|
||||
return(nullptr);
|
||||
|
||||
return(new Pipeline(device,graphicsPipeline,data));
|
||||
}
|
||||
|
||||
Pipeline *RenderPass::CreatePipeline(const Material *mtl,const InlinePipeline &ip)
|
||||
{
|
||||
PipelineData *pd=GetPipelineData(ip);
|
||||
|
||||
if(!pd)return(nullptr);
|
||||
|
||||
return CreatePipeline(mtl,pd);
|
||||
}
|
||||
|
||||
Pipeline *RenderPass::CreatePipeline(Material *mtl,const InlinePipeline &ip,const Prim &prim,const bool prim_restart)
|
||||
{
|
||||
if(!mtl)return(nullptr);
|
||||
|
||||
PipelineData *pd=GetPipelineData(ip);
|
||||
|
||||
pd->Set(prim,prim_restart);
|
||||
|
||||
Pipeline *p=CreatePipeline(mtl,pd);
|
||||
|
||||
if(p)
|
||||
pipeline_list.Add(p);
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
Pipeline *RenderPass::CreatePipeline(MaterialInstance *mi,const InlinePipeline &ip,const Prim &prim,const bool prim_restart)
|
||||
{
|
||||
if(!mi)return(nullptr);
|
||||
|
||||
return CreatePipeline(mi->GetMaterial(),ip,prim,prim_restart);
|
||||
}
|
||||
|
||||
Pipeline *RenderPass::CreatePipeline(Material *mtl,PipelineData *pd,const Prim &prim,const bool prim_restart)
|
||||
{
|
||||
pd->Set(prim,prim_restart);
|
||||
|
||||
Pipeline *p=CreatePipeline(mtl,pd);
|
||||
|
||||
if(p)
|
||||
pipeline_list.Add(p);
|
||||
|
||||
return(p);
|
||||
}
|
||||
|
||||
Pipeline *RenderPass::CreatePipeline(MaterialInstance *mi,PipelineData *pd,const Prim &prim,const bool prim_restart)
|
||||
{
|
||||
return CreatePipeline(mi->GetMaterial(),pd,prim,prim_restart);
|
||||
}
|
||||
|
||||
Pipeline *RenderPass::CreatePipeline(Material *mtl,const OSString &pipeline_filename,const Prim &prim,const bool prim_restart)
|
||||
{
|
||||
PipelineData *pd=GetPipelineData(pipeline_filename);
|
||||
|
||||
if(!pd)return(nullptr);
|
||||
|
||||
return CreatePipeline(mtl,pd,prim,prim_restart);
|
||||
}
|
||||
|
||||
Pipeline *RenderPass::CreatePipeline(MaterialInstance *mi,const OSString &filename,const Prim &prim,const bool prim_restart)
|
||||
{
|
||||
return CreatePipeline(mi->GetMaterial(),filename,prim,prim_restart);
|
||||
}
|
||||
VK_NAMESPACE_END
|
||||
|
@@ -53,7 +53,6 @@ RenderTarget::RenderTarget(GPUDevice *dev,RenderPass *_rp,Framebuffer *_fb,Textu
|
||||
|
||||
RenderTarget::~RenderTarget()
|
||||
{
|
||||
pipeline_list.Clear();
|
||||
SAFE_CLEAR(depth_texture);
|
||||
SAFE_CLEAR_OBJECT_ARRAY(color_textures,color_count);
|
||||
|
||||
|
@@ -1,61 +0,0 @@
|
||||
#include<hgl/graph/VKRenderTarget.h>
|
||||
#include<hgl/graph/VKMaterialInstance.h>
|
||||
#include<hgl/graph/VKDevice.h>
|
||||
#include<hgl/graph/VKInlinePipeline.h>
|
||||
#include<hgl/graph/VKPipelineData.h>
|
||||
|
||||
VK_NAMESPACE_BEGIN
|
||||
Pipeline *RenderTarget::CreatePipeline(Material *mtl,const InlinePipeline &ip,const Prim &prim,const bool prim_restart)
|
||||
{
|
||||
if(!mtl)return(nullptr);
|
||||
|
||||
PipelineData *pd=GetPipelineData(ip);
|
||||
|
||||
pd->Set(prim,prim_restart);
|
||||
|
||||
Pipeline *p=device->CreatePipeline(pd,mtl,this);
|
||||
|
||||
if(p)
|
||||
pipeline_list.Add(p);
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
Pipeline *RenderTarget::CreatePipeline(MaterialInstance *mi,const InlinePipeline &ip,const Prim &prim,const bool prim_restart)
|
||||
{
|
||||
if(!mi)return(nullptr);
|
||||
|
||||
return CreatePipeline(mi->GetMaterial(),ip,prim,prim_restart);
|
||||
}
|
||||
|
||||
Pipeline *RenderTarget::CreatePipeline(Material *mtl,PipelineData *pd,const Prim &prim,const bool prim_restart)
|
||||
{
|
||||
pd->Set(prim,prim_restart);
|
||||
|
||||
Pipeline *p=device->CreatePipeline(pd,mtl,this);
|
||||
|
||||
if(p)
|
||||
pipeline_list.Add(p);
|
||||
|
||||
return(p);
|
||||
}
|
||||
|
||||
Pipeline *RenderTarget::CreatePipeline(MaterialInstance *mi,PipelineData *pd,const Prim &prim,const bool prim_restart)
|
||||
{
|
||||
return CreatePipeline(mi->GetMaterial(),pd,prim,prim_restart);
|
||||
}
|
||||
|
||||
Pipeline *RenderTarget::CreatePipeline(Material *mtl,const OSString &pipeline_filename,const Prim &prim,const bool prim_restart)
|
||||
{
|
||||
PipelineData *pd=GetPipelineData(pipeline_filename);
|
||||
|
||||
if(!pd)return(nullptr);
|
||||
|
||||
return CreatePipeline(mtl,pd,prim,prim_restart);
|
||||
}
|
||||
|
||||
Pipeline *RenderTarget::CreatePipeline(MaterialInstance *mi,const OSString &filename,const Prim &prim,const bool prim_restart)
|
||||
{
|
||||
return CreatePipeline(mi->GetMaterial(),filename,prim,prim_restart);
|
||||
}
|
||||
VK_NAMESPACE_END
|
Reference in New Issue
Block a user