diff options
| author | ladevieq <ladevie.quentin@gmail.com> | 2021-08-03 21:32:32 +0200 |
|---|---|---|
| committer | ladevieq <ladevie.quentin@gmail.com> | 2021-08-03 21:32:32 +0200 |
| commit | 753165e67e2003791cf2ca1b0294c9f470238118 (patch) | |
| tree | 207c0ffb34d686f1ec921685bb983893142cf0c3 | |
| parent | 0b73a7bb7ee2b60226eb36fc6024aa3ff340ce6c (diff) | |
Add copy_buffer functions to vk api
| -rw-r--r-- | include/vk-api.hpp | 2 | ||||
| -rw-r--r-- | src/vk-api.cpp | 27 | ||||
| -rw-r--r-- | src/vk-renderer.cpp | 33 |
3 files changed, 32 insertions, 30 deletions
diff --git a/include/vk-api.hpp b/include/vk-api.hpp index a9dc024..2f7302e 100644 --- a/include/vk-api.hpp +++ b/include/vk-api.hpp @@ -47,6 +47,8 @@ class vkapi { ~vkapi(); Buffer create_buffer(size_t data_size, VkBufferUsageFlags buffer_usage, VmaMemoryUsage mem_usage); + void copy_buffer(VkCommandBuffer cmd_buf, Buffer src, Buffer dst, size_t size); + void copy_buffer(VkCommandBuffer cmd_buf, Buffer src, Image dst); void destroy_buffer(Buffer& buffer); diff --git a/src/vk-api.cpp b/src/vk-api.cpp index e5705fb..9ce8c05 100644 --- a/src/vk-api.cpp +++ b/src/vk-api.cpp @@ -74,6 +74,33 @@ Buffer vkapi::create_buffer(size_t data_size, VkBufferUsageFlags buffer_usage, V return std::move(buffer); } +void vkapi::copy_buffer(VkCommandBuffer cmd_buf, Buffer src, Buffer dst, size_t size) { + VkBufferCopy buffer_copy = {}; + buffer_copy.srcOffset = 0; + buffer_copy.dstOffset = 0; + buffer_copy.size = size; + + vkCmdCopyBuffer(cmd_buf, src.handle, dst.handle, 1, &buffer_copy); +} + +void vkapi::copy_buffer(VkCommandBuffer cmd_buf, Buffer src, Image dst) { + VkImageSubresourceLayers image_subresource_layers = {}; + image_subresource_layers.aspectMask = dst.subresource_range.aspectMask; + image_subresource_layers.mipLevel = 0; + image_subresource_layers.baseArrayLayer = 0; + image_subresource_layers.layerCount = 1; + + VkBufferImageCopy buffer_to_image_copy = {}; + buffer_to_image_copy.bufferOffset = 0; + buffer_to_image_copy.bufferRowLength = 0; + buffer_to_image_copy.bufferImageHeight = 0; + buffer_to_image_copy.imageSubresource = image_subresource_layers; + buffer_to_image_copy.imageOffset = { 0, 0, 0 }; + buffer_to_image_copy.imageExtent = dst.size; + + vkCmdCopyBufferToImage(cmd_buf, src.handle, dst.handle, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &buffer_to_image_copy); +} + void vkapi::destroy_buffer(Buffer& buffer) { // vmaUnmapMemory(context.allocator, buffer.alloc); vmaDestroyBuffer(context.allocator, buffer.handle, buffer.alloc); diff --git a/src/vk-renderer.cpp b/src/vk-renderer.cpp index 8570119..521bd52 100644 --- a/src/vk-renderer.cpp +++ b/src/vk-renderer.cpp @@ -186,22 +186,7 @@ vkrenderer::vkrenderer(window& wnd, size_t scene_buffer_size, size_t geometry_bu api.image_barrier(cmd_buf, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_ACCESS_MEMORY_WRITE_BIT, VK_ACCESS_TRANSFER_WRITE_BIT, ui_texture); - // TODO: Move this into the API - VkImageSubresourceLayers image_subresource_layers = {}; - image_subresource_layers.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; - image_subresource_layers.mipLevel = 0; - image_subresource_layers.baseArrayLayer = 0; - image_subresource_layers.layerCount = 1; - - VkBufferImageCopy buffer_to_image_copy = {}; - buffer_to_image_copy.bufferOffset = 0; - buffer_to_image_copy.bufferRowLength = 0; - buffer_to_image_copy.bufferImageHeight = 0; - buffer_to_image_copy.imageSubresource = image_subresource_layers; - buffer_to_image_copy.imageOffset = { 0, 0, 0 }; - buffer_to_image_copy.imageExtent = atlas_size; - - vkCmdCopyBufferToImage(cmd_buf, staging_buffer.handle, ui_texture.handle, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &buffer_to_image_copy); + api.copy_buffer(cmd_buf, staging_buffer, ui_texture); api.image_barrier(cmd_buf, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_GENERAL, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, VK_ACCESS_TRANSFER_WRITE_BIT, 0, ui_texture); @@ -490,14 +475,8 @@ void vkrenderer::update_geometry_buffer(void* data) { auto staging_buffer = api.create_buffer(geometry_buffer.size, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, VMA_MEMORY_USAGE_CPU_ONLY); std::memcpy(staging_buffer.alloc_info.pMappedData, data, staging_buffer.size); - // std::memcpy(geometry_staging_buffer.alloc_info.pMappedData, data, geometry_staging_buffer.size); - VkBufferCopy buffer_copy = {}; - buffer_copy.srcOffset = 0; - buffer_copy.dstOffset = 0; - buffer_copy.size = staging_buffer.size; - - vkCmdCopyBuffer(cmd_buf, staging_buffer.handle, geometry_buffer.handle, 1, &buffer_copy); + api.copy_buffer(cmd_buf, staging_buffer, geometry_buffer, staging_buffer.size); api.end_record(cmd_buf); @@ -517,14 +496,8 @@ void vkrenderer::update_bvh_buffer(void* data) { auto staging_buffer = api.create_buffer(bvh_buffer.size, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, VMA_MEMORY_USAGE_CPU_ONLY); std::memcpy(staging_buffer.alloc_info.pMappedData, data, staging_buffer.size); - // std::memcpy(bvh_staging_buffer.alloc_info.pMappedData, data, bvh_staging_buffer.size); - - VkBufferCopy buffer_copy = {}; - buffer_copy.srcOffset = 0; - buffer_copy.dstOffset = 0; - buffer_copy.size = staging_buffer.size; - vkCmdCopyBuffer(cmd_buf, staging_buffer.handle, bvh_buffer.handle, 1, &buffer_copy); + api.copy_buffer(cmd_buf, staging_buffer, bvh_buffer, staging_buffer.size); api.end_record(cmd_buf); |
