Program Listing for File VulkanBufferManager.cpp

Return to documentation for file (Src/GraphicsEngineVulkan/vulkan_base/VulkanBufferManager.cpp)

#include "vulkan_base/VulkanBufferManager.hpp"
#include "common/Utilities.hpp"

Kataglyphis::VulkanBufferManager::VulkanBufferManager() {}

void Kataglyphis::VulkanBufferManager::copyBuffer(VkDevice device,
  VkQueue transfer_queue,
  VkCommandPool transfer_command_pool,
  VulkanBuffer src_buffer,
  VulkanBuffer dst_buffer,
  VkDeviceSize buffer_size)
{
    // create buffer
    VkCommandBuffer command_buffer = commandBufferManager.beginCommandBuffer(device, transfer_command_pool);

    // region of data to copy from and to
    VkBufferCopy buffer_copy_region{};
    buffer_copy_region.srcOffset = 0;
    buffer_copy_region.dstOffset = 0;
    buffer_copy_region.size = buffer_size;

    // command to copy src buffer to dst buffer
    vkCmdCopyBuffer(command_buffer, src_buffer.getBuffer(), dst_buffer.getBuffer(), 1, &buffer_copy_region);

    commandBufferManager.endAndSubmitCommandBuffer(device, transfer_command_pool, transfer_queue, command_buffer);
}

void Kataglyphis::VulkanBufferManager::copyImageBuffer(VkDevice device,
  VkQueue transfer_queue,
  VkCommandPool transfer_command_pool,
  VkBuffer src_buffer,
  VkImage image,
  uint32_t width,
  uint32_t height)
{
    // create buffer
    VkCommandBuffer transfer_command_buffer = commandBufferManager.beginCommandBuffer(device, transfer_command_pool);

    VkBufferImageCopy image_region{};
    image_region.bufferOffset = 0;// offset into data
    image_region.bufferRowLength = 0;// row length of data to calculate data spacing
    image_region.bufferImageHeight = 0;// image height to calculate data spacing
    image_region.imageSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;// which aspect of image to copy
    image_region.imageSubresource.mipLevel = 0;
    image_region.imageSubresource.baseArrayLayer = 0;
    image_region.imageSubresource.layerCount = 1;
    image_region.imageOffset = { 0, 0, 0 };// offset into image
    image_region.imageExtent = { width, height, 1 };

    // copy buffer to given image
    vkCmdCopyBufferToImage(
      transfer_command_buffer, src_buffer, image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &image_region);

    commandBufferManager.endAndSubmitCommandBuffer(
      device, transfer_command_pool, transfer_queue, transfer_command_buffer);
}

Kataglyphis::VulkanBufferManager::~VulkanBufferManager() {}