ULRE/src/SceneGraph/Vulkan/VKPipelineLayoutData.cpp

73 lines
2.1 KiB
C++
Raw Normal View History

2021-09-14 20:31:15 +08:00
#include"VKPipelineLayoutData.h"
#include<hgl/graph/VKDescriptorSets.h>
#include<hgl/graph/VKDevice.h>
#include<hgl/graph/VKMaterialDescriptorSets.h>
VK_NAMESPACE_BEGIN
PipelineLayoutData *GPUDevice::CreatePipelineLayoutData(const MaterialDescriptorSets *mds)
{
PipelineLayoutData *pld=hgl_zero_new<PipelineLayoutData>();
ENUM_CLASS_FOR(DescriptorSetsType,int,i)
2021-09-14 20:31:15 +08:00
{
const DescriptorSetLayoutCreateInfo *dslci=mds->GetBinding((DescriptorSetsType)i);
2021-09-14 20:31:15 +08:00
if(!dslci||dslci->bindingCount<=0)
2021-09-14 20:31:15 +08:00
continue;
if(pld->layouts[i])
vkDestroyDescriptorSetLayout(attr->device,pld->layouts[i],nullptr);
if(vkCreateDescriptorSetLayout(attr->device,dslci,nullptr,pld->layouts+i)!=VK_SUCCESS)
2021-09-14 20:31:15 +08:00
{
delete pld;
return(nullptr);
}
pld->binding_count[i]=dslci->bindingCount;
2021-09-14 20:31:15 +08:00
pld->fin_dsl[pld->fin_dsl_count]=pld->layouts[i];
++pld->fin_dsl_count;
}
if(pld->fin_dsl_count<=0)
{
delete pld;
return(nullptr);
}
//VkPushConstantRange push_constant_range;
//push_constant_range.stageFlags = VK_SHADER_STAGE_VERTEX_BIT;
//push_constant_range.size = MAX_PUSH_CONSTANT_BYTES;
//push_constant_range.offset = 0;
PipelineLayoutCreateInfo pPipelineLayoutCreateInfo;
pPipelineLayoutCreateInfo.setLayoutCount = pld->fin_dsl_count;
pPipelineLayoutCreateInfo.pSetLayouts = pld->fin_dsl;
pPipelineLayoutCreateInfo.pushConstantRangeCount = 0;//1;
pPipelineLayoutCreateInfo.pPushConstantRanges = nullptr;//&push_constant_range;
pld->device=attr->device;
if(vkCreatePipelineLayout(attr->device,&pPipelineLayoutCreateInfo,nullptr,&(pld->pipeline_layout))!=VK_SUCCESS)
{
delete pld;
return(nullptr);
}
return(pld);
}
PipelineLayoutData::~PipelineLayoutData()
{
vkDestroyPipelineLayout(device,pipeline_layout,nullptr);
ENUM_CLASS_FOR(DescriptorSetsType,int,i)
2021-09-14 20:31:15 +08:00
if(layouts[i])
vkDestroyDescriptorSetLayout(device,layouts[i],nullptr);
}
VK_NAMESPACE_END