TachyonUI 0.1.0
High-performance UI for building tools.
Loading...
Searching...
No Matches
vk_descriptors.h
Go to the documentation of this file.
1#pragma once
2
3#include <deque>
4#include <span>
5
6#include <vulkan/vulkan.h>
7
8namespace tachyon::vulkan
9{
12
14 {
15 ::std::vector<VkDescriptorSetLayoutBinding> bindings;
16
17 void add_binding(uint32_t binding, VkDescriptorType type);
18 void clear();
19 VkDescriptorSetLayout build(VkDevice device, const VkAllocationCallbacks* callbacks, VkShaderStageFlags shaderStages, void* pNext = nullptr, VkDescriptorSetLayoutCreateFlags flags = 0);
20 };
21
23 {
24 ::std::deque<VkDescriptorImageInfo> imageInfos;
25 ::std::deque<VkDescriptorBufferInfo> bufferInfos;
26 ::std::vector<VkWriteDescriptorSet> writes;
27
28 void write_image(int binding, VkImageView image, VkSampler sampler, VkImageLayout layout, VkDescriptorType type);
29 void write_buffer(int binding, VkBuffer buffer, size_t size, size_t offset, VkDescriptorType type);
30
31 void clear();
32 void update_set(VkDevice device, VkDescriptorSet set);
33 };
34
36 {
38 {
39 VkDescriptorType type;
40 float ratio;
41 };
42
43 VkDescriptorPool pool;
44 const VkAllocationCallbacks* callbacks = nullptr;
45
46 void init_pool(VkDevice device, uint32_t maxSets, ::std::span<PoolSizeRatio> poolRatios, const VkAllocationCallbacks* callbacks);
47 void clear_descriptors(VkDevice device);
48 void destroy_pool(VkDevice device);
49
50 VkDescriptorSet allocate(VkDevice device, VkDescriptorSetLayout layout);
51 };
52
54 {
55 public:
57 {
58 VkDescriptorType type;
59 float ratio;
60 };
61
62 void init(VkDevice device, uint32_t initialSets, ::std::span<PoolSizeRatio> poolRatios, const VkAllocationCallbacks* callbacks);
63 void clear_pools(VkDevice device);
64 void destroy_pools(VkDevice device);
65
66 VkDescriptorSet allocate(VkDevice device, VkDescriptorSetLayout layout, void* pNext = nullptr);
67
68 private:
69 VkDescriptorPool get_pool(VkDevice device);
70 VkDescriptorPool create_pool(VkDevice device, uint32_t setCount, ::std::span<PoolSizeRatio> poolRatios);
71
72 ::std::vector<PoolSizeRatio> ratios;
73 ::std::vector<VkDescriptorPool> fullPools;
74 ::std::vector<VkDescriptorPool> readyPools;
75 uint32_t setsPerPool;
76 const VkAllocationCallbacks* callbacks = nullptr;
77 };
78
79}
Definition vk_defaults.h:4
VkDescriptorType type
Definition vk_descriptors.h:58
Definition vk_descriptors.h:54
void init(VkDevice device, uint32_t initialSets, ::std::span< PoolSizeRatio > poolRatios, const VkAllocationCallbacks *callbacks)
VkDescriptorSet allocate(VkDevice device, VkDescriptorSetLayout layout, void *pNext=nullptr)
float ratio
Definition vk_descriptors.h:40
VkDescriptorType type
Definition vk_descriptors.h:39
Definition vk_descriptors.h:36
const VkAllocationCallbacks * callbacks
Definition vk_descriptors.h:44
VkDescriptorPool pool
Definition vk_descriptors.h:43
VkDescriptorSet allocate(VkDevice device, VkDescriptorSetLayout layout)
void destroy_pool(VkDevice device)
void clear_descriptors(VkDevice device)
void init_pool(VkDevice device, uint32_t maxSets, ::std::span< PoolSizeRatio > poolRatios, const VkAllocationCallbacks *callbacks)
Definition vk_descriptors.h:14
void add_binding(uint32_t binding, VkDescriptorType type)
::std::vector< VkDescriptorSetLayoutBinding > bindings
Definition vk_descriptors.h:15
VkDescriptorSetLayout build(VkDevice device, const VkAllocationCallbacks *callbacks, VkShaderStageFlags shaderStages, void *pNext=nullptr, VkDescriptorSetLayoutCreateFlags flags=0)
Definition vk_descriptors.h:23
::std::vector< VkWriteDescriptorSet > writes
Definition vk_descriptors.h:26
void write_buffer(int binding, VkBuffer buffer, size_t size, size_t offset, VkDescriptorType type)
::std::deque< VkDescriptorBufferInfo > bufferInfos
Definition vk_descriptors.h:25
void write_image(int binding, VkImageView image, VkSampler sampler, VkImageLayout layout, VkDescriptorType type)
void update_set(VkDevice device, VkDescriptorSet set)
::std::deque< VkDescriptorImageInfo > imageInfos
Definition vk_descriptors.h:24