Newer
Older
ForwardPlusRenderer / include / Buffer / Buffer.h
#pragma once
#include <stdafx.h>
#include "Device.h"
namespace fpr
{
class Buffer
{
  vk::DeviceSize           m_buffer_size;
  vk::UniqueBuffer         m_buffer;
  vk::UniqueDeviceMemory   m_memory;
  vk::DescriptorBufferInfo m_buffer_info;
  vk::DeviceSize           m_alignment = 0;
  vk::BufferUsageFlags     m_usage;
  vk::MemoryPropertyFlags  m_memory_flags;
  void*                    mapped_data = nullptr;
public:
  Buffer() = default;
  Buffer(vk::DeviceSize buffer_size, vk::BufferUsageFlags usage_flags, vk::MemoryPropertyFlags mem_flags);
  ~Buffer();
  vk::DeviceSize GetSize();
  vk::Buffer&    GetBuffer();


  Buffer operator=(const Buffer& other) = delete;

  virtual void Transfer(Buffer* other);
  void         Update(const void* new_data);

  void  Flush();
  void* GetMapped();
};

[[nodiscard]] vk::UniqueDeviceMemory CreateImageMemory(fpr::Device* device, vk::Image image);

[[nodiscard]] uint32_t FindMemoryTypeIndex(
    vk::PhysicalDevice      physical_device,
    uint32_t                type_field,
    vk::MemoryPropertyFlags type_flags);

[[nodiscard]] bool IsNthBitSet(uint32_t bit_field, uint32_t nth_bit) FPR_NOEXCEPT;
[[nodiscard]] bool IsOnlyNthBitSet(uint32_t bit_field, uint32_t nth_bit) FPR_NOEXCEPT;

} // namespace fpr