20#ifndef LLVMEXPR_RUNTIME_VULKAN_VULKANMEMORY_HPP
21#define LLVMEXPR_RUNTIME_VULKAN_VULKANMEMORY_HPP
23#define VK_NO_PROTOTYPES
27#define VULKAN_HPP_DISPATCH_LOADER_DYNAMIC 1
31#include <vk_mem_alloc.h>
32#include <vulkan/vulkan_raii.hpp>
47 VulkanBuffer(VkBuffer buf, VmaAllocation alloc, VmaAllocationInfo info,
58 other.buffer = VK_NULL_HANDLE;
59 other.allocation = VK_NULL_HANDLE;
69 other.buffer = VK_NULL_HANDLE;
70 other.allocation = VK_NULL_HANDLE;
92 VkBufferUsageFlags usage = VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
93 VK_BUFFER_USAGE_TRANSFER_DST_BIT |
94 VK_BUFFER_USAGE_TRANSFER_SRC_BIT);
101 VkDeviceSize size, VkDeviceSize offset = 0);
104 VkDeviceSize size, VkDeviceSize offset = 0);
111 VkDeviceSize offset = 0)
const;
113 VkDeviceSize offset = 0)
const;
117 VmaAllocator allocator = VK_NULL_HANDLE;
118 vk::raii::CommandPool transfer_pool =
nullptr;
119 vk::raii::CommandBuffer transfer_cmd =
nullptr;
120 vk::raii::Fence transfer_fence =
nullptr;
VulkanMemory(VulkanContext &ctx)
VulkanMemory(const VulkanMemory &)=delete
VulkanMemory(VulkanMemory &&)=delete
VulkanBuffer createStagingBuffer(VkDeviceSize size, bool for_upload=true)
VulkanMemory & operator=(const VulkanMemory &)=delete
VulkanBuffer createGPUBuffer(VkDeviceSize size, VkBufferUsageFlags usage=VK_BUFFER_USAGE_STORAGE_BUFFER_BIT|VK_BUFFER_USAGE_TRANSFER_DST_BIT|VK_BUFFER_USAGE_TRANSFER_SRC_BIT)
void destroyBuffer(VulkanBuffer &buffer)
VmaAllocator getAllocator() const
VulkanMemory & operator=(VulkanMemory &&)=delete
void copyBuffer(VulkanBuffer &src, VulkanBuffer &dst, VkDeviceSize size)
void uploadToBuffer(VulkanBuffer &gpu_buffer, const void *data, VkDeviceSize size, VkDeviceSize offset=0)
void flushBuffer(const VulkanBuffer &buffer, VkDeviceSize size, VkDeviceSize offset=0) const
void downloadFromBuffer(VulkanBuffer &gpu_buffer, void *data, VkDeviceSize size, VkDeviceSize offset=0)
void invalidateBuffer(const VulkanBuffer &buffer, VkDeviceSize size, VkDeviceSize offset=0) const
VulkanBuffer(const VulkanBuffer &)=delete
VulkanBuffer & operator=(VulkanBuffer &&other) noexcept
void * getMappedData() const
VulkanBuffer & operator=(const VulkanBuffer &)=delete
VulkanBuffer(VulkanBuffer &&other) noexcept
VulkanBuffer(VkBuffer buf, VmaAllocation alloc, VmaAllocationInfo info, VkDeviceSize sz)
VmaAllocationInfo alloc_info