coral_buffer.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #pragma once
  2. #include "coral_device.h"
  3. namespace coral_3d
  4. {
  5. class coral_buffer final
  6. {
  7. public:
  8. explicit coral_buffer(coral_device& device) : device_{device}{};
  9. coral_buffer(
  10. coral_device& device,
  11. VkDeviceSize instance_size,
  12. uint32_t instance_count,
  13. VkBufferUsageFlags usage_flags,
  14. VmaMemoryUsage usage,
  15. VmaAllocationCreateFlags flags = 0,
  16. VkDeviceSize min_offset_alignment = 1
  17. );
  18. ~coral_buffer();
  19. coral_buffer(const coral_buffer&) = delete;
  20. coral_buffer& operator=(const coral_buffer&) = delete;
  21. VkResult map();
  22. void unmap();
  23. void write_to_buffer(void* data, VkDeviceSize size = VK_WHOLE_SIZE, VkDeviceSize offset = 0);
  24. VkResult flush(VkDeviceSize size = VK_WHOLE_SIZE, VkDeviceSize offset = 0);
  25. VkDescriptorBufferInfo descriptor_info(VkDeviceSize size = VK_WHOLE_SIZE, VkDeviceSize offset = 0) const;
  26. VkResult invalidate(VkDeviceSize size = VK_WHOLE_SIZE, VkDeviceSize offset = 0);
  27. void write_to_index(void* data, uint32_t index);
  28. VkResult flush_index(uint32_t index);
  29. VkDescriptorBufferInfo descriptor_info_index(uint32_t index) const;
  30. VkResult invalidate_index(uint32_t index);
  31. AllocatedBuffer get_buffer() const { return buffer_; }
  32. void* get_mapped_data() const { return mapped_data_; }
  33. uint32_t get_instance_count() const { return instance_count_; }
  34. VkDeviceSize get_instance_size() const { return instance_size_; }
  35. VkDeviceSize get_alignment_size() const { return alignment_size_; }
  36. VmaMemoryUsage get_usage() const { return usage_; }
  37. VkDeviceSize get_buffer_size() const { return buffer_size_; }
  38. private:
  39. static VkDeviceSize get_allignment(VkDeviceSize instance_size, VkDeviceSize min_offset_alignment);
  40. coral_device& device_;
  41. void* mapped_data_{nullptr};
  42. AllocatedBuffer buffer_{};
  43. VkDeviceSize buffer_size_{0};
  44. VkDeviceSize instance_size_{0};
  45. uint32_t instance_count_{ 0 };
  46. VkDeviceSize alignment_size_{ 0 };
  47. VmaMemoryUsage usage_{VMA_MEMORY_USAGE_AUTO};
  48. VkBufferUsageFlags usage_flags_{0};
  49. };
  50. }