]> git.tdb.fi Git - libs/gl.git/blob - source/backends/vulkan/pipelinestate_backend.h
Initial implementation of Vulkan backend
[libs/gl.git] / source / backends / vulkan / pipelinestate_backend.h
1 #ifndef MSP_GL_PIPELINESTATE_BACKEND_H_
2 #define MSP_GL_PIPELINESTATE_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 VulkanPipelineState: public NonCopyable
13 {
14         friend class PipelineCache;
15         friend class VulkanCommands;
16
17 protected:
18         Device &device;
19         mutable unsigned changes = 0;
20         mutable VkPipeline handle;
21         mutable std::vector<VkDescriptorSet> descriptor_set_handles;
22
23         VulkanPipelineState();
24         VulkanPipelineState(VulkanPipelineState &&);
25
26         void update() const;
27         void refresh() const { if(changes) update(); }
28         std::uint64_t compute_hash() const;
29         void fill_creation_info(std::vector<char> &) const;
30         std::uint64_t compute_descriptor_set_hash(unsigned) const;
31         VkDescriptorSetLayout get_descriptor_set_layout(unsigned) const;
32         unsigned fill_descriptor_writes(unsigned, std::vector<char> &) const;
33
34         void apply(VkCommandBuffer) const;
35 };
36
37 using PipelineStateBackend = VulkanPipelineState;
38
39 } // namespace GL
40 } // namespace Msp
41
42 #endif