60 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #pragma once
 | |
| 
 | |
| #include <renderer/backend/vk/raii/raii.hpp>
 | |
| #include <renderer/frontend/data/buffer.hpp>
 | |
| 
 | |
| namespace lt::renderer::vk {
 | |
| 
 | |
| class Buffer: public IBuffer
 | |
| {
 | |
| public:
 | |
| 	Buffer(class IDevice *device, class IGpu *gpu, const CreateInfo &info);
 | |
| 
 | |
| 	[[nodiscard]] auto map() -> std::span<std::byte> override;
 | |
| 
 | |
| 	void unmap() override;
 | |
| 
 | |
| 	// TODO(Light): this is to make copying possible.
 | |
| 	// But it should be removed in the future,
 | |
| 	// Right now it's not possible because: buffers can't understand CommandBuffers.
 | |
| 	// And I'm not sure how to properly abstract over command buffers,
 | |
| 	// before using other APIs...
 | |
| 	[[nodiscard]] auto vk()
 | |
| 	{
 | |
| 		return *m_buffer;
 | |
| 	}
 | |
| 
 | |
| 	[[nodiscard]] auto get_size() const -> size_t override
 | |
| 	{
 | |
| 		return m_size;
 | |
| 	}
 | |
| 
 | |
| private:
 | |
| 	[[nodiscard]] auto determine_allocation_info(Usage usage) const -> VkMemoryAllocateInfo;
 | |
| 
 | |
| 	[[nodiscard]] auto to_native_usage_flags(Usage usage) const -> VkBufferUsageFlags;
 | |
| 
 | |
| 	[[nodiscard]] auto to_native_memory_properties(Usage usage) const -> VkMemoryPropertyFlags;
 | |
| 
 | |
| 
 | |
| 	[[nodiscard]] auto has_correct_memory_type_bit(uint32_t type_bits, uint32_t type_idx) const
 | |
| 	    -> bool;
 | |
| 
 | |
| 	[[nodiscard]] auto has_required_memory_properties(
 | |
| 	    uint32_t required_properties,
 | |
| 	    uint32_t property_flags
 | |
| 	) const -> bool;
 | |
| 
 | |
| 	Device *m_device {};
 | |
| 
 | |
| 	Gpu *m_gpu {};
 | |
| 
 | |
| 	raii::Buffer m_buffer;
 | |
| 
 | |
| 	raii::Memory m_memory;
 | |
| 
 | |
| 	// TODO(Light): should this reflect the allocation size instead?
 | |
| 	size_t m_size {};
 | |
| };
 | |
| 
 | |
| } // namespace lt::renderer::vk
 |