Program Listing for File gpu_memory_buffer.hpp

Return to documentation for file (inexor/vulkan-renderer/wrapper/gpu_memory_buffer.hpp)

#pragma once

#include <vk_mem_alloc.h>

#include <string>

namespace inexor::vulkan_renderer::wrapper {

// Forward declaration
class Device;

class GPUMemoryBuffer {
protected:
    std::string m_name;
    const Device &m_device;
    VkBuffer m_buffer{VK_NULL_HANDLE};
    VkDeviceSize m_buffer_size{0};
    VmaAllocation m_allocation{VK_NULL_HANDLE};
    VmaAllocationInfo m_allocation_info{};

public:
    GPUMemoryBuffer(const Device &device, const std::string &name, const VkDeviceSize &size,
                    const VkBufferUsageFlags &buffer_usage, const VmaMemoryUsage &memory_usage);

    GPUMemoryBuffer(const Device &device, const std::string &name, const VkDeviceSize &buffer_size, const void *data,
                    std::size_t data_size, const VkBufferUsageFlags &buffer_usage, const VmaMemoryUsage &memory_usage);

    GPUMemoryBuffer(const GPUMemoryBuffer &) = delete;
    GPUMemoryBuffer(GPUMemoryBuffer &&) noexcept;

    virtual ~GPUMemoryBuffer();

    GPUMemoryBuffer &operator=(const GPUMemoryBuffer &) = delete;
    GPUMemoryBuffer &operator=(GPUMemoryBuffer &&) = delete;

    [[nodiscard]] const std::string &name() const {
        return m_name;
    }

    [[nodiscard]] VkBuffer buffer() const {
        return m_buffer;
    }

    [[nodiscard]] VmaAllocation allocation() const {
        return m_allocation;
    }

    [[nodiscard]] VmaAllocationInfo allocation_info() const {
        return m_allocation_info;
    }
};

} // namespace inexor::vulkan_renderer::wrapper