summaryrefslogtreecommitdiff
path: root/src/vk/destination_buffer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/vk/destination_buffer.cpp')
-rw-r--r--src/vk/destination_buffer.cpp70
1 files changed, 37 insertions, 33 deletions
diff --git a/src/vk/destination_buffer.cpp b/src/vk/destination_buffer.cpp
index 872f8a8..5c55fd2 100644
--- a/src/vk/destination_buffer.cpp
+++ b/src/vk/destination_buffer.cpp
@@ -34,39 +34,7 @@ DestinationBuffer::DestinationBuffer(
BaseBuffer::loader.execute(dynamic_cast<BaseBuffer*>(this));
- // Load command
- {
- CommandPool command_pool(this->queue_family, 1);
- Queue transfer_queue{this->queue_family->get_queue()};
-
- this->vk_command_buffer = command_pool.command_buffers[0];
-
- VkCommandBufferBeginInfo begin_info = {};
- begin_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
- begin_info.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT;
-
- VkBufferCopy copy_region = {};
- copy_region.srcOffset = 0;
- copy_region.dstOffset = 0;
- copy_region.size = this->device_size;
-
- vkBeginCommandBuffer(this->vk_command_buffer, &begin_info);
-
- vkCmdCopyBuffer(
- this->vk_command_buffer, this->source_buffer->buffer, this->buffer, 1,
- &copy_region);
-
- vkEndCommandBuffer(this->vk_command_buffer);
-
- VkSubmitInfo submit_info = {};
- submit_info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
- submit_info.commandBufferCount = 1;
- submit_info.pCommandBuffers = &this->vk_command_buffer;
-
- vkQueueSubmit(transfer_queue.queue, 1, &submit_info, VK_NULL_HANDLE);
-
- vkQueueWaitIdle(transfer_queue.queue);
- }
+ this->copy_data();
}
DestinationBuffer::DestinationBuffer(
@@ -102,4 +70,40 @@ DestinationBuffer::~DestinationBuffer()
BaseBuffer::loader.revert(dynamic_cast<BaseBuffer*>(this));
}
+void
+DestinationBuffer::copy_data()
+{
+ CommandPool command_pool(this->queue_family, 1);
+ Queue transfer_queue{this->queue_family->get_queue()};
+ this->device_size = source_buffer->device_size;
+
+ this->vk_command_buffer = command_pool.command_buffers[0];
+
+ VkCommandBufferBeginInfo begin_info = {};
+ begin_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
+ begin_info.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT;
+
+ VkBufferCopy copy_region = {};
+ copy_region.srcOffset = 0;
+ copy_region.dstOffset = 0;
+ copy_region.size = this->device_size;
+
+ vkBeginCommandBuffer(this->vk_command_buffer, &begin_info);
+
+ vkCmdCopyBuffer(
+ this->vk_command_buffer, this->source_buffer->buffer, this->buffer, 1,
+ &copy_region);
+
+ vkEndCommandBuffer(this->vk_command_buffer);
+
+ VkSubmitInfo submit_info = {};
+ submit_info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
+ submit_info.commandBufferCount = 1;
+ submit_info.pCommandBuffers = &this->vk_command_buffer;
+
+ vkQueueSubmit(transfer_queue.queue, 1, &submit_info, VK_NULL_HANDLE);
+
+ vkQueueWaitIdle(transfer_queue.queue);
+}
+
}