#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