Skip to content

Commit 8e3dc26

Browse files
committed
Restructed passing of VkDescriptorSetLayoutBindingFlagsCreateInfo to Vulkan. Added default value for createFlags. Added version to seralization.
1 parent 5458739 commit 8e3dc26

File tree

2 files changed

+33
-26
lines changed

2 files changed

+33
-26
lines changed

include/vsg/state/DescriptorSetLayout.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,16 @@ namespace vsg
3636
virtual VkDescriptorSetLayout vk(uint32_t deviceID) const { return _implementation[deviceID]->_descriptorSetLayout; }
3737

3838
/// VkDescriptorSetLayoutCreateFlags flags
39-
VkDescriptorSetLayoutCreateFlags createFlags;
40-
41-
void addBinding(uint32_t binding, VkDescriptorType descriptorType, uint32_t descriptorCount, VkShaderStageFlags stageFlags, VkDescriptorBindingFlags flags = 0);
39+
VkDescriptorSetLayoutCreateFlags createFlags = 0;
4240

4341
/// VkDescriptorSetLayoutCreateInfo settings
4442
DescriptorSetLayoutBindings bindings;
4543

4644
/// VkDescriptorSetLayoutBindingFlagsCreateInfo settings
4745
DescriptorSetLayoutBindingFlags bindingFlags;
4846

47+
void addBinding(uint32_t binding, VkDescriptorType descriptorType, uint32_t descriptorCount, VkShaderStageFlags stageFlags, VkDescriptorBindingFlags flags = 0);
48+
4949
/// map the descriptor bindings to the descriptor pool sizes that will be required to represent them.
5050
void getDescriptorPoolSizes(DescriptorPoolSizes& descriptorPoolSizes);
5151

src/vsg/state/DescriptorSetLayout.cpp

Lines changed: 30 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -23,23 +23,20 @@ using namespace vsg;
2323
// DescriptorSetLayout
2424
//
2525
DescriptorSetLayout::DescriptorSetLayout()
26-
: createFlags(0)
2726
{
2827
}
2928

3029
DescriptorSetLayout::DescriptorSetLayout(const DescriptorSetLayout& rhs, const CopyOp& copyop) :
3130
Inherit(rhs, copyop),
31+
createFlags(rhs.createFlags),
3232
bindings(rhs.bindings),
33-
bindingFlags(rhs.bindingFlags),
34-
createFlags(rhs.createFlags)
33+
bindingFlags(rhs.bindingFlags)
3534
{
3635
}
3736

3837
DescriptorSetLayout::DescriptorSetLayout(const DescriptorSetLayoutBindings& descriptorSetLayoutBindings) :
39-
bindings(descriptorSetLayoutBindings),
40-
createFlags(0)
38+
bindings(descriptorSetLayoutBindings)
4139
{
42-
bindingFlags.resize(bindings.size(), 0);
4340
}
4441

4542
DescriptorSetLayout::~DescriptorSetLayout()
@@ -58,8 +55,7 @@ void DescriptorSetLayout::addBinding(uint32_t binding, VkDescriptorType descript
5855

5956
if (flags != 0)
6057
{
61-
if (binding >= bindingFlags.size())
62-
bindingFlags.resize(binding + 1, 0);
58+
if (binding >= bindingFlags.size()) bindingFlags.resize(binding + 1, 0);
6359
bindingFlags[binding] = flags;
6460
}
6561
}
@@ -97,38 +93,47 @@ void DescriptorSetLayout::read(Input& input)
9793
{
9894
Object::read(input);
9995

100-
createFlags = input.readValue<uint32_t>("createFlags");
101-
bindings.resize(input.readValue<uint32_t>("bindings"));
96+
if (input.version_greater_equal(1,1,12))
97+
{
98+
createFlags = input.readValue<uint32_t>("createFlags");
99+
}
102100

103-
size_t i = 0;
101+
bindings.resize(input.readValue<uint32_t>("bindings"));
104102
for (auto& dslb : bindings)
105103
{
106104
input.read("binding", dslb.binding);
107105
input.readValue<uint32_t>("descriptorType", dslb.descriptorType);
108106
input.read("descriptorCount", dslb.descriptorCount);
109107
input.readValue<uint32_t>("stageFlags", dslb.stageFlags);
110-
if (i >= bindingFlags.size()) bindingFlags.resize(i + 1);
111-
input.readValue<uint32_t>("flags", bindingFlags[i]);
112-
++i;
108+
}
109+
110+
if (input.version_greater_equal(1,1,12))
111+
{
112+
input.readValues("bindingFlags", bindingFlags);
113113
}
114114
}
115115

116116
void DescriptorSetLayout::write(Output& output) const
117117
{
118118
Object::write(output);
119119

120-
output.writeValue<uint32_t>("createFlags", createFlags);
121-
output.writeValue<uint32_t>("bindings", bindings.size());
120+
if (output.version_greater_equal(1,1,12))
121+
{
122+
output.writeValue<uint32_t>("createFlags", createFlags);
123+
}
122124

123-
size_t i = 0;
125+
output.writeValue<uint32_t>("bindings", bindings.size());
124126
for (auto& dslb : bindings)
125127
{
126128
output.write("binding", dslb.binding);
127129
output.writeValue<uint32_t>("descriptorType", dslb.descriptorType);
128130
output.write("descriptorCount", dslb.descriptorCount);
129131
output.writeValue<uint32_t>("stageFlags", dslb.stageFlags);
130-
output.writeValue<uint32_t>("flags", (i < bindingFlags.size()) ? static_cast<uint32_t>(bindingFlags[i]) : 0);
131-
++i;
132+
}
133+
134+
if (output.version_greater_equal(1,1,12))
135+
{
136+
output.writeValues("bindingFlags", bindingFlags);
132137
}
133138
}
134139

@@ -150,15 +155,17 @@ DescriptorSetLayout::Implementation::Implementation(Device* device, VkDescriptor
150155
layoutInfo.pBindings = descriptorSetLayoutBindings.data();
151156
layoutInfo.flags = createFlags;
152157

153-
if (!descriptorSetLayoutBindingFlags.empty())
158+
VkDescriptorSetLayoutBindingFlagsCreateInfo bindingFlagsCreateInfo = {};
159+
if (descriptorSetLayoutBindingFlags.empty())
160+
{
161+
layoutInfo.pNext = nullptr;
162+
}
163+
else
154164
{
155-
VkDescriptorSetLayoutBindingFlagsCreateInfo bindingFlagsCreateInfo = {};
156165
bindingFlagsCreateInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO;
157166
bindingFlagsCreateInfo.bindingCount = static_cast<uint32_t>(descriptorSetLayoutBindingFlags.size());
158167
bindingFlagsCreateInfo.pBindingFlags = descriptorSetLayoutBindingFlags.data();
159168
layoutInfo.pNext = &bindingFlagsCreateInfo;
160-
} else {
161-
layoutInfo.pNext = nullptr;
162169
}
163170

164171
if (VkResult result = vkCreateDescriptorSetLayout(*device, &layoutInfo, _device->getAllocationCallbacks(), &_descriptorSetLayout); result != VK_SUCCESS)

0 commit comments

Comments
 (0)