Program Listing for File CommandBufferManager.cpp
↰ Return to documentation for file (Src/GraphicsEngineVulkan/renderer/CommandBufferManager.cpp
)
#include "renderer/CommandBufferManager.hpp"
#include "common/Utilities.hpp"
Kataglyphis::VulkanRendererInternals::CommandBufferManager::CommandBufferManager() {}
VkCommandBuffer Kataglyphis::VulkanRendererInternals::CommandBufferManager::beginCommandBuffer(VkDevice device,
VkCommandPool command_pool)
{
// command buffer to hold transfer commands
VkCommandBuffer command_buffer;
// command buffer details
VkCommandBufferAllocateInfo alloc_info{};
alloc_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;
alloc_info.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY;
alloc_info.commandPool = command_pool;
alloc_info.commandBufferCount = 1;
// allocate command buffer from pool
vkAllocateCommandBuffers(device, &alloc_info, &command_buffer);
// infromation to begin the command buffer record
VkCommandBufferBeginInfo begin_info{};
begin_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
// we are only using the command buffer once, so set up for one time submit
begin_info.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT;
// begin recording transfer commands
vkBeginCommandBuffer(command_buffer, &begin_info);
return command_buffer;
}
void Kataglyphis::VulkanRendererInternals::CommandBufferManager::endAndSubmitCommandBuffer(VkDevice device,
VkCommandPool command_pool,
VkQueue queue,
VkCommandBuffer &command_buffer)
{
// end commands
VkResult result = vkEndCommandBuffer(command_buffer);
ASSERT_VULKAN(result, "Failed to end command buffer!")
// queue submission information
VkSubmitInfo submit_info{};
submit_info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
submit_info.commandBufferCount = 1;
submit_info.pCommandBuffers = &command_buffer;
// submit transfer command to transfer queue and wait until it finishes
result = vkQueueSubmit(queue, 1, &submit_info, VK_NULL_HANDLE);
ASSERT_VULKAN(result, "Failed to submit to queue!")
result = vkQueueWaitIdle(queue);
ASSERT_VULKAN(result, "Failed to wait Idle!")
// free temporary command buffer back to pool
vkFreeCommandBuffers(device, command_pool, 1, &command_buffer);
}
Kataglyphis::VulkanRendererInternals::CommandBufferManager::~CommandBufferManager() {}