jGL
Loading...
Searching...
No Matches
descriptorSets.h
Go to the documentation of this file.
1#ifndef DESCRIPTORSETS
2#define DESCRIPTORSETS
3
6
7
8namespace jGL::Vulkan
9{
10 template <class T>
12
13 template <>
14 class DescriptorSets<VkDescriptorBufferInfo>
15 {
16
17 public:
18
19 DescriptorSets() = default;
20
22 (
23 const Device & device,
24 const DescriptorPool & pool,
25 std::vector<VkDescriptorSetLayout> & layouts,
26 std::vector<std::vector<VkDescriptorBufferInfo>> & infos,
27 std::vector<std::vector<VkDescriptorType>> & types
28 )
29 {
30 VkDescriptorSetAllocateInfo allocInfo{};
31 allocInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO;
32 allocInfo.descriptorPool = pool.getVkDescriptorPool();
33 allocInfo.descriptorSetCount = layouts.size();
34 allocInfo.pSetLayouts = layouts.data();
35
36 descriptorSets.resize(layouts.size());
37 if (vkAllocateDescriptorSets(device.getVkDevice(), &allocInfo, descriptorSets.data()) != VK_SUCCESS)
38 {
39 throw std::runtime_error("Failed to allocate image descriptor sets");
40 }
41
42
43 for (size_t i = 0; i < layouts.size(); i++)
44 {
45 for (size_t j = 0; j < infos[i].size(); j++)
46 {
47 VkWriteDescriptorSet descriptorWrite{};
48 descriptorWrite.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
49 descriptorWrite.dstSet = descriptorSets[i];
50 descriptorWrite.dstBinding = j;
51 descriptorWrite.dstArrayElement = 0;
52
53 descriptorWrite.descriptorType = types[i][j];
54 descriptorWrite.descriptorCount = 1;
55
56 descriptorWrite.pBufferInfo = &infos[i][j];
57
58 vkUpdateDescriptorSets(device.getVkDevice(), 1, &descriptorWrite, 0, nullptr);
59 }
60 }
61 }
62
63 const VkDescriptorSet & getVkDescriptorSet(size_t i) const { return descriptorSets[i]; }
64 const std::vector<VkDescriptorSet> & getVkDescriptorSets() const { return descriptorSets; }
65
66 private:
67
68 std::vector<VkDescriptorSet> descriptorSets;
69
70 };
71
72 template <>
73 class DescriptorSets<VkDescriptorImageInfo>
74 {
75
76 public:
77
78 DescriptorSets() = default;
79
81 (
82 const Device & device,
83 const DescriptorPool & pool,
84 std::vector<VkDescriptorSetLayout> & layouts,
85 std::vector<std::vector<VkDescriptorImageInfo>> & infos,
86 std::vector<std::vector<VkDescriptorType>> & types
87 )
88 {
89 VkDescriptorSetAllocateInfo allocInfo{};
90 allocInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO;
91 allocInfo.descriptorPool = pool.getVkDescriptorPool();
92 allocInfo.descriptorSetCount = layouts.size();
93 allocInfo.pSetLayouts = layouts.data();
94 // number of layouts is number of frames...
95 descriptorSets.resize(layouts.size());
96 if (vkAllocateDescriptorSets(device.getVkDevice(), &allocInfo, descriptorSets.data()) != VK_SUCCESS)
97 {
98 throw std::runtime_error("Failed to allocate image descriptor sets");
99 }
100
101 for (size_t i = 0; i < layouts.size(); i++)
102 {
103 for (size_t j = 0; j < infos[i].size(); j++)
104 {
105 VkWriteDescriptorSet descriptorWrite{};
106 descriptorWrite.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
107 descriptorWrite.dstSet = descriptorSets[i];
108 descriptorWrite.dstBinding = j;
109 descriptorWrite.dstArrayElement = 0;
110
111 descriptorWrite.descriptorType = types[i][j];
112 descriptorWrite.descriptorCount = 1;
113
114 descriptorWrite.pImageInfo = &infos[i][j];
115
116 vkUpdateDescriptorSets(device.getVkDevice(), 1, &descriptorWrite, 0, nullptr);
117 }
118 }
119 }
120
121 const VkDescriptorSet & getVkDescriptorSet(size_t i) const { return descriptorSets[i]; }
122 const std::vector<VkDescriptorSet> & getVkDescriptorSets() const { return descriptorSets; }
123
124 private:
125
126 std::vector<VkDescriptorSet> descriptorSets;
127
128 };
129}
130
131#endif /* DESCRIPTORSETS */
Definition descriptorPool.h:7
const VkDescriptorPool & getVkDescriptorPool() const
Definition descriptorPool.h:45
DescriptorSets(const Device &device, const DescriptorPool &pool, std::vector< VkDescriptorSetLayout > &layouts, std::vector< std::vector< VkDescriptorBufferInfo > > &infos, std::vector< std::vector< VkDescriptorType > > &types)
Definition descriptorSets.h:22
const std::vector< VkDescriptorSet > & getVkDescriptorSets() const
Definition descriptorSets.h:64
const VkDescriptorSet & getVkDescriptorSet(size_t i) const
Definition descriptorSets.h:63
DescriptorSets(const Device &device, const DescriptorPool &pool, std::vector< VkDescriptorSetLayout > &layouts, std::vector< std::vector< VkDescriptorImageInfo > > &infos, std::vector< std::vector< VkDescriptorType > > &types)
Definition descriptorSets.h:81
const std::vector< VkDescriptorSet > & getVkDescriptorSets() const
Definition descriptorSets.h:122
const VkDescriptorSet & getVkDescriptorSet(size_t i) const
Definition descriptorSets.h:121
Definition descriptorSets.h:11
Definition device.h:10
const VkDevice & getVkDevice() const
Definition device.h:24
Definition buffer.h:10