10 VmaAllocator allocator,
11 const VkBufferUsageFlags bufferUsageFlags,
12 const VkMemoryPropertyFlags memoryProperties,
13 const VkDeviceSize
size)
16 VkBufferCreateInfo bufferCI{ VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
18 bufferCI.usage = bufferUsageFlags;
19 bufferCI.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
21 VmaAllocationCreateInfo allocCI{};
22 allocCI.usage = VMA_MEMORY_USAGE_AUTO;
25 if (memoryProperties & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
27 allocCI.flags |= VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT;
29 if (memoryProperties & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT)
31 allocCI.flags |= VMA_ALLOCATION_CREATE_MAPPED_BIT;
33 if ((memoryProperties & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT) &&
34 !(memoryProperties & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT))
36 allocCI.usage = VMA_MEMORY_USAGE_AUTO_PREFER_DEVICE;
41 THROW_ERROR(
"Failed to create DataBuffer with VMA");
57 VkCommandBufferBeginInfo beginInfo{ VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO };
58 beginInfo.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT;
59 PLOG_THROW_FN_VK(vkBeginCommandBuffer(commandBuffer, &beginInfo));
61 VkBufferCopy copyRegion{};
62 copyRegion.size =
size;
63 vkCmdCopyBuffer(commandBuffer,
buffer, target.
getBuffer(), 1u, ©Region);
65 PLOG_THROW_FN_VK(vkEndCommandBuffer(commandBuffer));
68 VkSubmitInfo submitInfo{ VK_STRUCTURE_TYPE_SUBMIT_INFO };
69 submitInfo.commandBufferCount = 1u;
70 submitInfo.pCommandBuffers = &commandBuffer;
71 PLOG_THROW_FN_VK(vkQueueSubmit(queue, 1u, &submitInfo, VK_NULL_HANDLE));
74 PLOG_THROW_FN_VK(vkQueueWaitIdle(queue));
DataBuffer(VkDevice device, VkPhysicalDevice physicalDevice, VmaAllocator allocator, VkBufferUsageFlags bufferUsageFlags, VkMemoryPropertyFlags memoryProperties, VkDeviceSize size)