52 lines
2.0 KiB
C++
52 lines
2.0 KiB
C++
#include "pipeline.h"
|
|
|
|
#include "renderer_vk.h"
|
|
#include "application/application.h"
|
|
|
|
void pipeline::create_pipeline_layout() {
|
|
const auto renderer = application::get()->get_renderer();
|
|
const auto device = renderer->device;
|
|
|
|
vk::DescriptorSetLayoutCreateInfo descriptor_set_layout_create_info;
|
|
descriptor_set_layout_create_info.setBindings(descriptor_set_layout_bindings_);
|
|
vk::DescriptorSetLayout descriptor_set_layout = device.createDescriptorSetLayout(descriptor_set_layout_create_info);
|
|
|
|
vk::PipelineLayoutCreateInfo pipeline_layout_create_info;
|
|
pipeline_layout_create_info.setSetLayouts(descriptor_set_layout);
|
|
pipeline_layout_ = device.createPipelineLayout(pipeline_layout_create_info);
|
|
}
|
|
|
|
void pipeline::execute_pipeline() const {
|
|
#ifdef _DEBUG
|
|
if (pipeline_ == vk::Pipeline()) {
|
|
throw std::runtime_error("Pipeline not created");
|
|
}
|
|
#endif
|
|
const auto renderer = application::get()->get_renderer();
|
|
const auto device = renderer->device;
|
|
const auto command_pool = renderer->command_pool;
|
|
|
|
vk::CommandBufferAllocateInfo command_buffer_allocate_info;
|
|
command_buffer_allocate_info.setCommandPool(command_pool);
|
|
command_buffer_allocate_info.setLevel(vk::CommandBufferLevel::ePrimary);
|
|
command_buffer_allocate_info.setCommandBufferCount(1);
|
|
const vk::CommandBuffer command_buffer = device.allocateCommandBuffers(command_buffer_allocate_info)[0];
|
|
|
|
vk::CommandBufferBeginInfo command_buffer_begin_info;
|
|
command_buffer_begin_info.setFlags(vk::CommandBufferUsageFlagBits::eOneTimeSubmit);
|
|
command_buffer.begin(command_buffer_begin_info);
|
|
|
|
bind(command_buffer);
|
|
|
|
command_buffer.end();
|
|
|
|
vk::SubmitInfo submit_info;
|
|
submit_info.setCommandBufferCount(1);
|
|
submit_info.setPCommandBuffers(&command_buffer);
|
|
renderer->queue.submit(submit_info, nullptr);
|
|
renderer->queue.waitIdle();
|
|
|
|
device.freeCommandBuffers(command_pool, command_buffer);
|
|
device.destroyCommandPool(command_pool);
|
|
}
|