Created render_pass object

Some TODO's to handle regarding exposing access to vulkan functionallity
This commit is contained in:
2025-07-07 22:54:59 +10:00
parent 0598a89d0c
commit 4d797e1170
2 changed files with 107 additions and 0 deletions

View 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);
}