]> git.tdb.fi Git - libs/gl.git/blob - source/backends/vulkan/buffer_backend.h
Multiplex streaming buffer contents on Vulkan
[libs/gl.git] / source / backends / vulkan / buffer_backend.h
1 #ifndef MSP_GL_BUFFER_BACKEND_H_
2 #define MSP_GL_BUFFER_BACKEND_H_
3
4 #include <msp/core/noncopyable.h>
5 #include "handles.h"
6
7 namespace Msp {
8 namespace GL {
9
10 class Device;
11
12 class VulkanBuffer: public NonCopyable
13 {
14         friend class Synchronizer;
15         friend class VulkanPipelineState;
16         friend class VulkanVertexSetup;
17
18 protected:
19         Device &device;
20         VkBuffer handle = 0;
21         unsigned memory_id = 0;
22         void *mapped_address = 0;
23         std::string debug_name;
24
25         VulkanBuffer();
26         VulkanBuffer(VulkanBuffer &&);
27         ~VulkanBuffer();
28
29         void allocate();
30         void sub_data(std::size_t, std::size_t, const void *);
31
32         unsigned get_multiplicity() const;
33
34         bool can_map() const;
35         void *map();
36         bool unmap();
37
38         void set_debug_name(const std::string &);
39         void set_vulkan_object_name() const;
40 };
41
42 using BufferBackend = VulkanBuffer;
43
44 } // namespace GL
45 } // namespace Msp
46
47 #endif