sandbox
Loading...
Searching...
No Matches
storage_buffer.hpp
1#ifndef LIBSBX_GRAPHICS_BUFFERS_STORAGE_BUFFER_HPP_
2#define LIBSBX_GRAPHICS_BUFFERS_STORAGE_BUFFER_HPP_
3
4#include <libsbx/units/bytes.hpp>
5
6#include <libsbx/memory/observer_ptr.hpp>
7
8#include <libsbx/graphics/descriptor/descriptor.hpp>
9
10#include <libsbx/graphics/buffers/buffer.hpp>
11
12#include <libsbx/graphics/resource_storage.hpp>
13
14namespace sbx::graphics {
15
16class storage_buffer : public buffer, public descriptor {
17
18public:
19
20 inline static constexpr auto max_size = units::quantity_cast<units::byte>(units::kibibyte{512});
21 inline static constexpr auto min_size = units::quantity_cast<units::byte>(units::kibibyte{16});
22
23 storage_buffer(VkDeviceSize size, memory::observer_ptr<const void> data = nullptr);
24
25 storage_buffer(VkDeviceSize size, VkBufferUsageFlags additional_usage, memory::observer_ptr<const void> data = nullptr);
26
27 ~storage_buffer() override;
28
29 auto update(memory::observer_ptr<const void> data, VkDeviceSize size, std::size_t offset = 0u) -> void;
30
31 template<typename Type>
32 auto read(const std::size_t index) const -> const Type& {
33 return *(static_cast<const Type*>(_mapped_memory.get()) + index * sizeof(Type));
34 }
35
36 auto write_descriptor_set(std::uint32_t binding, VkDescriptorType descriptor_type) const noexcept -> graphics::write_descriptor_set override;
37
38 static auto create_descriptor_set_layout_binding(std::uint32_t binding, VkDescriptorType descriptor_type, VkShaderStageFlags stage_flags) noexcept -> VkDescriptorSetLayoutBinding;
39
40}; // class storage_buffer
41
43
44} // namespace sbx::graphics
45
46#endif // LIBSBX_GRAPHICS_BUFFERS_STORAGE_BUFFER_HPP_
47
Definition: buffer.hpp:20
Definition: descriptor.hpp:37
Definition: resource_storage.hpp:17
Definition: storage_buffer.hpp:16
Definition: descriptor.hpp:12
A non-owning pointer that can be used to observe the value of a pointer.
Definition: observer_ptr.hpp:27
Definition: quantity.hpp:65