| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- #pragma once
- #include "coral_device.h"
- namespace coral_3d
- {
- class coral_buffer final
- {
- public:
- explicit coral_buffer(coral_device& device) : device_{device}{};
- coral_buffer(
- coral_device& device,
- VkDeviceSize instance_size,
- uint32_t instance_count,
- VkBufferUsageFlags usage_flags,
- VmaMemoryUsage usage,
- VmaAllocationCreateFlags flags = 0,
- VkDeviceSize min_offset_alignment = 1
- );
- ~coral_buffer();
- coral_buffer(const coral_buffer&) = delete;
- coral_buffer& operator=(const coral_buffer&) = delete;
- VkResult map();
- void unmap();
- void write_to_buffer(void* data, VkDeviceSize size = VK_WHOLE_SIZE, VkDeviceSize offset = 0);
- VkResult flush(VkDeviceSize size = VK_WHOLE_SIZE, VkDeviceSize offset = 0);
- VkDescriptorBufferInfo descriptor_info(VkDeviceSize size = VK_WHOLE_SIZE, VkDeviceSize offset = 0) const;
- VkResult invalidate(VkDeviceSize size = VK_WHOLE_SIZE, VkDeviceSize offset = 0);
- void write_to_index(void* data, uint32_t index);
- VkResult flush_index(uint32_t index);
- VkDescriptorBufferInfo descriptor_info_index(uint32_t index) const;
- VkResult invalidate_index(uint32_t index);
- AllocatedBuffer get_buffer() const { return buffer_; }
- void* get_mapped_data() const { return mapped_data_; }
- uint32_t get_instance_count() const { return instance_count_; }
- VkDeviceSize get_instance_size() const { return instance_size_; }
- VkDeviceSize get_alignment_size() const { return alignment_size_; }
- VmaMemoryUsage get_usage() const { return usage_; }
- VkDeviceSize get_buffer_size() const { return buffer_size_; }
- private:
- static VkDeviceSize get_allignment(VkDeviceSize instance_size, VkDeviceSize min_offset_alignment);
- coral_device& device_;
- void* mapped_data_{nullptr};
- AllocatedBuffer buffer_{};
- VkDeviceSize buffer_size_{0};
- VkDeviceSize instance_size_{0};
- uint32_t instance_count_{ 0 };
- VkDeviceSize alignment_size_{ 0 };
- VmaMemoryUsage usage_{VMA_MEMORY_USAGE_AUTO};
- VkBufferUsageFlags usage_flags_{0};
- };
- }
|