Created render_pass object
Some TODO's to handle regarding exposing access to vulkan functionallity
This commit is contained in:
69
src/vulkan/basalt_render_pass.cpp
Normal file
69
src/vulkan/basalt_render_pass.cpp
Normal file
@@ -0,0 +1,69 @@
|
||||
#include "vulkan/basalt_render_pass.h"
|
||||
|
||||
basalt::RenderPassBuilder::RenderPassBuilder(basalt::Device& device) :
|
||||
device(device),
|
||||
subpasses(MEMORY_TAG_CLASS_DYNARRAY | MEMORY_TAG_ZONE_ENGINE | MEMORY_TAG_ALIGN_ANY),
|
||||
subpass_indicies(MEMORY_TAG_CLASS_DYNARRAY | MEMORY_TAG_ZONE_ENGINE | MEMORY_TAG_ALIGN_ANY),
|
||||
attachments(MEMORY_TAG_CLASS_DYNARRAY | MEMORY_TAG_ZONE_ENGINE | MEMORY_TAG_ALIGN_ANY),
|
||||
dependencies(MEMORY_TAG_CLASS_DYNARRAY | MEMORY_TAG_ZONE_ENGINE | MEMORY_TAG_ALIGN_ANY)
|
||||
{
|
||||
ci.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO;
|
||||
ci.dependencyCount = 0;
|
||||
ci.pDependencies = VK_NULL_HANDLE;
|
||||
ci.attachmentCount = 0;
|
||||
ci.pAttachments = VK_NULL_HANDLE;
|
||||
ci.subpassCount = 0;
|
||||
ci.pSubpasses = VK_NULL_HANDLE;
|
||||
ci.flags = 0;
|
||||
ci.pNext = VK_NULL_HANDLE;
|
||||
}
|
||||
|
||||
basalt::RenderPassBuilder& basalt::RenderPassBuilder::add_subpass(VkPipelineBindPoint bind_point, const basalt::darray<VkAttachmentReference>& attachments)
|
||||
{
|
||||
this->subpass_indicies.push_back(attachments);
|
||||
VkSubpassDescription subpass = {};
|
||||
subpass.colorAttachmentCount = this->subpass_indicies.peek_back().m_nelements;
|
||||
subpass.pColorAttachments = this->subpass_indicies.peek_back().m_pdata;
|
||||
subpass.pipelineBindPoint = bind_point;
|
||||
this->subpasses.push_back(subpass);
|
||||
return *this;
|
||||
}
|
||||
|
||||
basalt::RenderPassBuilder& basalt::RenderPassBuilder::add_attachment(VkAttachmentDescription desc)
|
||||
{
|
||||
this->attachments.push_back(desc);
|
||||
return *this;
|
||||
}
|
||||
|
||||
basalt::RenderPassBuilder& basalt::RenderPassBuilder::add_subpass_dependency(VkSubpassDependency dep)
|
||||
{
|
||||
this->dependencies.push_back(dep);
|
||||
return *this;
|
||||
}
|
||||
|
||||
basalt::RenderPass basalt::RenderPassBuilder::build(void)
|
||||
{
|
||||
ci.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO;
|
||||
ci.attachmentCount = this->attachments.m_nelements;
|
||||
ci.pAttachments = this->attachments.m_pdata;
|
||||
ci.subpassCount = this->subpasses.m_nelements;
|
||||
ci.pSubpasses = this->subpasses.m_pdata;
|
||||
ci.pNext = VK_NULL_HANDLE;
|
||||
ci.flags = 0;
|
||||
ci.dependencyCount = dependencies.m_nelements;
|
||||
ci.pDependencies = dependencies.m_pdata;
|
||||
|
||||
VkRenderPass pass = VK_NULL_HANDLE;
|
||||
VkResult err = VK_SUCCESS;
|
||||
VK_ASSERT(vkCreateRenderPass(device, &ci, device.ctx->vk_alloc, &pass), "Failed to create render pass\n\tAt %s:%d\n\tError %s\n");
|
||||
return basalt::RenderPass(device, pass);
|
||||
}
|
||||
|
||||
basalt::RenderPass::RenderPass(basalt::Device& device, VkRenderPass pass) :
|
||||
device(device), render_pass(pass)
|
||||
{}
|
||||
|
||||
basalt::RenderPass::~RenderPass()
|
||||
{
|
||||
vkDestroyRenderPass(device, render_pass, device.ctx->vk_alloc);
|
||||
}
|
||||
Reference in New Issue
Block a user