ULRE/src/RenderDevice/VKPipeline.cpp
2020-10-21 12:09:15 +08:00

57 lines
1.9 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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::~Pipeline()
{
vkDestroyPipeline(device,pipeline,nullptr);
}
Pipeline *CreatePipeline(VkDevice device,VkPipelineCache pipeline_cache,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->pipeline_info.layout = material->GetPipelineLayout();
{
data->pipeline_info.renderPass = rt->GetRenderPass();
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 *RenderDevice::CreatePipeline(const InlinePipeline &ip,const Material *mtl,const RenderTarget *rt)
{
PipelineData *pd=GetPipelineData(ip);
if(!pd)return(nullptr);
return VK_NAMESPACE::CreatePipeline(attr->device,attr->pipeline_cache,pd,mtl,rt);
}
Pipeline *RenderDevice::CreatePipeline(PipelineData *pd,const Material *mtl,const RenderTarget *rt)
{
return VK_NAMESPACE::CreatePipeline(attr->device,attr->pipeline_cache,pd,mtl,rt);
}
VK_NAMESPACE_END