Skip to content

Commit fa9f066

Browse files
Merge pull request #963 from vsg-dev/DescriptorBinding
Renamed vsg::UniformBinding to vsg::DescriptorBinding and renamed/decprecated enable/assignUnfirom() methods to enable/assignDescriptor().
2 parents 1eb71cc + 9a090fb commit fa9f066

File tree

8 files changed

+100
-74
lines changed

8 files changed

+100
-74
lines changed

include/vsg/state/StateCommand.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
1717
namespace vsg
1818
{
1919

20-
/// Base class for Vulkan commands associated with state, such as binding graphics pipelines and descriptor sets (textures and uniforms).
20+
/// Base class for Vulkan commands associated with state, such as binding graphics
21+
/// pipelines and descriptor sets for textures, uniform buffers and storage buffers.
2122
/// StateCommands can be attached directly as nodes in the scene graph, or more typically assigned to StateGroup nodes to enable push/popping of state.
2223
class VSG_DECLSPEC StateCommand : public Inherit<Command, StateCommand>
2324
{

include/vsg/utils/GraphicsPipelineConfigurator.h

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,22 @@ namespace vsg
4545
bool two_sided = false;
4646

4747
bool enableTexture(const std::string& name);
48-
bool enableUniform(const std::string& name);
49-
5048
bool assignTexture(const std::string& name, ref_ptr<Data> textureData = {}, ref_ptr<Sampler> sampler = {}, uint32_t dstArrayElement = 0);
5149
bool assignTexture(const std::string& name, const ImageInfoList& imageInfoList, uint32_t dstArrayElement = 0);
5250

53-
bool assignUniform(const std::string& name, ref_ptr<Data> data = {}, uint32_t dstArrayElement = 0);
54-
bool assignUniform(const std::string& name, const BufferInfoList& bufferInfoList, uint32_t dstArrayElement = 0);
51+
bool enableDescriptor(const std::string& name);
52+
bool assignDescriptor(const std::string& name, ref_ptr<Data> data = {}, uint32_t dstArrayElement = 0);
53+
bool assignDescriptor(const std::string& name, const BufferInfoList& bufferInfoList, uint32_t dstArrayElement = 0);
54+
55+
[[deprecated("use enableDescriptor(..)")]]
56+
bool enableUniform(const std::string& name) { return enableDescriptor(name); }
57+
58+
[[deprecated("use assignDescriptor(..)")]]
59+
bool assignUniform(const std::string& name, ref_ptr<Data> data = {}, uint32_t dstArrayElement = 0) { return assignDescriptor(name, data, dstArrayElement); }
60+
61+
[[deprecated("use assignDescriptor(..)")]]
62+
bool assignUniform(const std::string& name, const BufferInfoList& bufferInfoList, uint32_t dstArrayElement = 0) { return assignDescriptor(name, bufferInfoList, dstArrayElement); }
63+
5564

5665
bool assignDescriptor(uint32_t set, uint32_t binding, VkDescriptorType descriptorType, uint32_t descriptorCount, VkShaderStageFlags stageFlags, ref_ptr<Descriptor> descriptor);
5766

@@ -104,12 +113,18 @@ namespace vsg
104113
void reset();
105114

106115
bool enableArray(const std::string& name, VkVertexInputRate vertexInputRate, uint32_t stride, VkFormat format = VK_FORMAT_UNDEFINED);
116+
bool enableDescriptor(const std::string& name);
107117
bool enableTexture(const std::string& name);
108-
bool enableUniform(const std::string& name);
109118

110119
bool assignArray(DataList& arrays, const std::string& name, VkVertexInputRate vertexInputRate, ref_ptr<Data> array);
120+
bool assignDescriptor(const std::string& name, ref_ptr<Data> data = {});
111121
bool assignTexture(const std::string& name, ref_ptr<Data> textureData = {}, ref_ptr<Sampler> sampler = {});
112-
bool assignUniform(const std::string& name, ref_ptr<Data> data = {});
122+
123+
[[deprecated("use enableDescriptor(..)")]]
124+
bool enableUniform(const std::string& name) { return enableDescriptor(name); }
125+
126+
[[deprecated("use assignDescriptor(..)")]]
127+
bool assignUniform(const std::string& name, ref_ptr<Data> data = {}) { return assignDescriptor(name, data); }
113128

114129
// setup by assign calls
115130
ref_ptr<ShaderCompileSettings> shaderHints;

include/vsg/utils/ShaderSet.h

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ namespace vsg
3535
};
3636
VSG_type_name(vsg::AttributeBinding);
3737

38-
struct VSG_DECLSPEC UniformBinding
38+
struct VSG_DECLSPEC DescriptorBinding
3939
{
4040
std::string name;
4141
std::string define;
@@ -46,11 +46,11 @@ namespace vsg
4646
VkShaderStageFlags stageFlags = 0;
4747
ref_ptr<Data> data;
4848

49-
int compare(const UniformBinding& rhs) const;
49+
int compare(const DescriptorBinding& rhs) const;
5050

5151
explicit operator bool() const noexcept { return !name.empty(); }
5252
};
53-
VSG_type_name(vsg::UniformBinding);
53+
VSG_type_name(vsg::DescriptorBinding);
5454

5555
struct VSG_DECLSPEC PushConstantRange
5656
{
@@ -116,7 +116,7 @@ namespace vsg
116116
ShaderStages stages;
117117

118118
std::vector<AttributeBinding> attributeBindings;
119-
std::vector<UniformBinding> uniformBindings;
119+
std::vector<DescriptorBinding> descriptorBindings;
120120
std::vector<PushConstantRange> pushConstantRanges;
121121
std::vector<DefinesArrayState> definesArrayStates; // put more constrained ArrayState matches first so they are matched first.
122122
std::set<std::string> optionalDefines;
@@ -134,30 +134,40 @@ namespace vsg
134134
void addAttributeBinding(std::string name, std::string define, uint32_t location, VkFormat format, ref_ptr<Data> data);
135135

136136
/// add an uniform binding. Not thread safe, should only be called when initially setting up the ShaderSet
137-
void addUniformBinding(std::string name, std::string define, uint32_t set, uint32_t binding, VkDescriptorType descriptorType, uint32_t descriptorCount, VkShaderStageFlags stageFlags, ref_ptr<Data> data);
137+
void addDescriptorBinding(std::string name, std::string define, uint32_t set, uint32_t binding, VkDescriptorType descriptorType, uint32_t descriptorCount, VkShaderStageFlags stageFlags, ref_ptr<Data> data);
138+
139+
[[deprecated("use addDescriptorBinding(..)")]]
140+
void addUniformBinding(std::string name, std::string define, uint32_t set, uint32_t binding, VkDescriptorType descriptorType, uint32_t descriptorCount, VkShaderStageFlags stageFlags, ref_ptr<Data> data) { addDescriptorBinding(name, define, set, binding, descriptorType, descriptorCount, stageFlags, data); }
141+
138142

139143
/// add a push constant range. Not thread safe, should only be called when initially setting up the ShaderSet
140144
void addPushConstantRange(std::string name, std::string define, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size);
141145

142146
/// get the AttributeBinding associated with name
143147
AttributeBinding& getAttributeBinding(const std::string& name);
144148

145-
/// get the UniformBinding associated with name
146-
UniformBinding& getUniformBinding(const std::string& name);
147-
148149
/// get the const AttributeBinding associated with name
149150
const AttributeBinding& getAttributeBinding(const std::string& name) const;
150151

151-
/// get the const UniformBinding associated with name
152-
const UniformBinding& getUniformBinding(const std::string& name) const;
152+
/// get the DescriptorBinding associated with name
153+
DescriptorBinding& getDescriptorBinding(const std::string& name);
154+
155+
/// get the const DescriptorBinding associated with name
156+
const DescriptorBinding& getDescriptorBinding(const std::string& name) const;
157+
158+
[[deprecated("use getDescriptorBinding(..)")]]
159+
DescriptorBinding& getUniformBinding(const std::string& name) { return getDescriptorBinding(name); }
160+
161+
[[deprecated("use getDescriptorBinding(..)")]]
162+
const DescriptorBinding& getUnifomrBinding(const std::string& name) const { return getDescriptorBinding(name); }
153163

154164
/// get the first ArrayState that has matches with defines in the specified list of defines.
155165
ref_ptr<ArrayState> getSuitableArrayState(const std::set<std::string>& defines) const;
156166

157167
/// get the ShaderStages variant that uses specified ShaderCompileSettings.
158168
ShaderStages getShaderStages(ref_ptr<ShaderCompileSettings> scs = {});
159169

160-
/// return the <minimum_set, maximum_set+1> range of set numbers encompassing UniformBindings
170+
/// return the <minimum_set, maximum_set+1> range of set numbers encompassing DescriptorBindings
161171
std::pair<uint32_t, uint32_t> descriptorSetRange() const;
162172

163173
/// create the descriptor set layout.
@@ -182,7 +192,7 @@ namespace vsg
182192
virtual ~ShaderSet();
183193

184194
AttributeBinding _nullAttributeBinding;
185-
UniformBinding _nullUniformBinding;
195+
DescriptorBinding _nullDescriptorBinding;
186196
};
187197
VSG_type_name(vsg::ShaderSet);
188198

src/vsg/io/tile.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -327,14 +327,14 @@ void tile::init(vsg::ref_ptr<const vsg::Options> options)
327327
_graphicsPipelineConfig->enableTexture("displacementMap");
328328
}
329329
#endif
330-
_graphicsPipelineConfig->enableUniform("material");
330+
_graphicsPipelineConfig->enableDescriptor("material");
331331

332332
_graphicsPipelineConfig->enableArray("vsg_Vertex", VK_VERTEX_INPUT_RATE_VERTEX, 12, VK_FORMAT_R32G32B32_SFLOAT);
333333
_graphicsPipelineConfig->enableArray("vsg_Normal", VK_VERTEX_INPUT_RATE_VERTEX, 12, VK_FORMAT_R32G32B32_SFLOAT);
334334
_graphicsPipelineConfig->enableArray("vsg_TexCoord0", VK_VERTEX_INPUT_RATE_VERTEX, 8, VK_FORMAT_R32G32_SFLOAT);
335335
_graphicsPipelineConfig->enableArray("vsg_Color", VK_VERTEX_INPUT_RATE_INSTANCE, 16, VK_FORMAT_R32G32B32A32_SFLOAT);
336336

337-
if (auto& materialBinding = _shaderSet->getUniformBinding("material"))
337+
if (auto& materialBinding = _shaderSet->getDescriptorBinding("material"))
338338
{
339339
ref_ptr<Data> mat = materialBinding.data;
340340
if (!mat) mat = vsg::PhongMaterialValue::create();

src/vsg/text/GpuLayoutTechnique.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -249,8 +249,8 @@ void GpuLayoutTechnique::setup(Text* text, uint32_t minimumAllocation, ref_ptr<c
249249
config->assignTexture("textureAtlas", text->font->atlas, sampler);
250250
config->assignTexture("glyphMetrics", glyphMetricsProxy, glyphMetricSampler);
251251

252-
config->assignUniform("textLayout", layoutValue);
253-
config->assignUniform("text", textArray);
252+
config->assignDescriptor("textLayout", layoutValue);
253+
config->assignDescriptor("text", textArray);
254254

255255
// Set the InputAssemblyState.topology
256256
struct SetPipelineStates : public Visitor

src/vsg/utils/Builder.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,11 @@ ref_ptr<StateGroup> Builder::createStateGroup(const StateInfo& stateInfo)
8181
graphicsPipelineConfig->assignTexture("displacementMap", stateInfo.displacementMap, sampler);
8282
}
8383

84-
if (auto& materialBinding = activeShaderSet->getUniformBinding("material"))
84+
if (auto& materialBinding = activeShaderSet->getDescriptorBinding("material"))
8585
{
8686
ref_ptr<Data> mat = materialBinding.data;
8787
if (!mat) mat = vsg::PhongMaterialValue::create();
88-
graphicsPipelineConfig->assignUniform("material", mat);
88+
graphicsPipelineConfig->assignDescriptor("material", mat);
8989
}
9090

9191
graphicsPipelineConfig->enableArray("vsg_Vertex", VK_VERTEX_INPUT_RATE_VERTEX, 12);

src/vsg/utils/GraphicsPipelineConfigurator.cpp

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ void DescriptorConfigurator::reset()
101101

102102
bool DescriptorConfigurator::enableTexture(const std::string& name)
103103
{
104-
if (auto& textureBinding = shaderSet->getUniformBinding(name))
104+
if (auto& textureBinding = shaderSet->getDescriptorBinding(name))
105105
{
106106
assigned.insert(name);
107107

@@ -118,7 +118,7 @@ bool DescriptorConfigurator::enableTexture(const std::string& name)
118118

119119
bool DescriptorConfigurator::assignTexture(const std::string& name, ref_ptr<Data> textureData, ref_ptr<Sampler> sampler, uint32_t dstArrayElement)
120120
{
121-
if (auto& textureBinding = shaderSet->getUniformBinding(name))
121+
if (auto& textureBinding = shaderSet->getDescriptorBinding(name))
122122
{
123123
assigned.insert(name);
124124

@@ -135,7 +135,7 @@ bool DescriptorConfigurator::assignTexture(const std::string& name, ref_ptr<Data
135135

136136
bool DescriptorConfigurator::assignTexture(const std::string& name, const ImageInfoList& imageInfoList, uint32_t dstArrayElement)
137137
{
138-
if (auto& textureBinding = shaderSet->getUniformBinding(name))
138+
if (auto& textureBinding = shaderSet->getDescriptorBinding(name))
139139
{
140140
assigned.insert(name);
141141

@@ -149,50 +149,50 @@ bool DescriptorConfigurator::assignTexture(const std::string& name, const ImageI
149149
return false;
150150
}
151151

152-
bool DescriptorConfigurator::enableUniform(const std::string& name)
152+
bool DescriptorConfigurator::enableDescriptor(const std::string& name)
153153
{
154-
if (auto& uniformBinding = shaderSet->getUniformBinding(name))
154+
if (auto& descriptorBinding = shaderSet->getDescriptorBinding(name))
155155
{
156156
assigned.insert(name);
157157

158158
// set up bindings
159-
if (!uniformBinding.define.empty()) defines.insert(uniformBinding.define);
159+
if (!descriptorBinding.define.empty()) defines.insert(descriptorBinding.define);
160160

161161
// create uniform and associated DescriptorSets and binding
162-
return assignDescriptor(uniformBinding.set, uniformBinding.binding, uniformBinding.descriptorType, uniformBinding.descriptorCount, uniformBinding.stageFlags,
163-
DescriptorBuffer::create(uniformBinding.data, uniformBinding.binding));
162+
return assignDescriptor(descriptorBinding.set, descriptorBinding.binding, descriptorBinding.descriptorType, descriptorBinding.descriptorCount, descriptorBinding.stageFlags,
163+
DescriptorBuffer::create(descriptorBinding.data, descriptorBinding.binding));
164164
}
165165
return false;
166166
}
167167

168-
bool DescriptorConfigurator::assignUniform(const std::string& name, ref_ptr<Data> data, uint32_t dstArrayElement)
168+
bool DescriptorConfigurator::assignDescriptor(const std::string& name, ref_ptr<Data> data, uint32_t dstArrayElement)
169169
{
170-
if (auto& uniformBinding = shaderSet->getUniformBinding(name))
170+
if (auto& descriptorBinding = shaderSet->getDescriptorBinding(name))
171171
{
172172
assigned.insert(name);
173173

174174
// set up bindings
175-
if (!uniformBinding.define.empty()) defines.insert(uniformBinding.define);
175+
if (!descriptorBinding.define.empty()) defines.insert(descriptorBinding.define);
176176

177177
// create uniform and associated DescriptorSets and binding
178-
return assignDescriptor(uniformBinding.set, uniformBinding.binding, uniformBinding.descriptorType, uniformBinding.descriptorCount, uniformBinding.stageFlags,
179-
DescriptorBuffer::create(data ? data : uniformBinding.data, uniformBinding.binding, dstArrayElement, uniformBinding.descriptorType));
178+
return assignDescriptor(descriptorBinding.set, descriptorBinding.binding, descriptorBinding.descriptorType, descriptorBinding.descriptorCount, descriptorBinding.stageFlags,
179+
DescriptorBuffer::create(data ? data : descriptorBinding.data, descriptorBinding.binding, dstArrayElement, descriptorBinding.descriptorType));
180180
}
181181
return false;
182182
}
183183

184-
bool DescriptorConfigurator::assignUniform(const std::string& name, const BufferInfoList& bufferInfoList, uint32_t dstArrayElement)
184+
bool DescriptorConfigurator::assignDescriptor(const std::string& name, const BufferInfoList& bufferInfoList, uint32_t dstArrayElement)
185185
{
186-
if (auto& uniformBinding = shaderSet->getUniformBinding(name))
186+
if (auto& descriptorBinding = shaderSet->getDescriptorBinding(name))
187187
{
188188
assigned.insert(name);
189189

190190
// set up bindings
191-
if (!uniformBinding.define.empty()) defines.insert(uniformBinding.define);
191+
if (!descriptorBinding.define.empty()) defines.insert(descriptorBinding.define);
192192

193193
// create uniform and associated DescriptorSets and binding
194-
return assignDescriptor(uniformBinding.set, uniformBinding.binding, uniformBinding.descriptorType, uniformBinding.descriptorCount, uniformBinding.stageFlags,
195-
DescriptorBuffer::create(bufferInfoList, uniformBinding.binding, dstArrayElement, uniformBinding.descriptorType));
194+
return assignDescriptor(descriptorBinding.set, descriptorBinding.binding, descriptorBinding.descriptorType, descriptorBinding.descriptorCount, descriptorBinding.stageFlags,
195+
DescriptorBuffer::create(bufferInfoList, descriptorBinding.binding, dstArrayElement, descriptorBinding.descriptorType));
196196
}
197197
return false;
198198
}
@@ -223,14 +223,14 @@ bool DescriptorConfigurator::assignDefaults()
223223
bool assignedDefault = false;
224224
if (shaderSet)
225225
{
226-
for (auto& uniformBinding : shaderSet->uniformBindings)
226+
for (auto& descriptorBinding : shaderSet->descriptorBindings)
227227
{
228-
if (uniformBinding.define.empty() && assigned.count(uniformBinding.name) == 0)
228+
if (descriptorBinding.define.empty() && assigned.count(descriptorBinding.name) == 0)
229229
{
230230
bool set_matched = false;
231231
for (auto& cds : shaderSet->customDescriptorSetBindings)
232232
{
233-
if (cds->set == uniformBinding.set)
233+
if (cds->set == descriptorBinding.set)
234234
{
235235
set_matched = true;
236236
break;
@@ -239,7 +239,7 @@ bool DescriptorConfigurator::assignDefaults()
239239
if (!set_matched)
240240
{
241241
bool isTexture = false;
242-
switch (uniformBinding.descriptorType)
242+
switch (descriptorBinding.descriptorType)
243243
{
244244
case (VK_DESCRIPTOR_TYPE_SAMPLER):
245245
case (VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER):
@@ -253,16 +253,16 @@ bool DescriptorConfigurator::assignDefaults()
253253

254254
if (isTexture)
255255
{
256-
assignDescriptor(uniformBinding.set, uniformBinding.binding, uniformBinding.descriptorType, uniformBinding.descriptorCount, uniformBinding.stageFlags,
257-
DescriptorImage::create(Sampler::create(), uniformBinding.data, uniformBinding.binding, 0, uniformBinding.descriptorType));
256+
assignDescriptor(descriptorBinding.set, descriptorBinding.binding, descriptorBinding.descriptorType, descriptorBinding.descriptorCount, descriptorBinding.stageFlags,
257+
DescriptorImage::create(Sampler::create(), descriptorBinding.data, descriptorBinding.binding, 0, descriptorBinding.descriptorType));
258258
}
259259
else
260260
{
261-
assignDescriptor(uniformBinding.set, uniformBinding.binding, uniformBinding.descriptorType, uniformBinding.descriptorCount, uniformBinding.stageFlags,
262-
DescriptorBuffer::create(uniformBinding.data, uniformBinding.binding));
261+
assignDescriptor(descriptorBinding.set, descriptorBinding.binding, descriptorBinding.descriptorType, descriptorBinding.descriptorCount, descriptorBinding.stageFlags,
262+
DescriptorBuffer::create(descriptorBinding.data, descriptorBinding.binding));
263263
}
264264

265-
assigned.insert(uniformBinding.name);
265+
assigned.insert(descriptorBinding.name);
266266
assignedDefault = true;
267267
}
268268
}
@@ -401,10 +401,10 @@ bool GraphicsPipelineConfigurator::enableTexture(const std::string& name)
401401
return descriptorConfigurator->enableTexture(name);
402402
}
403403

404-
bool GraphicsPipelineConfigurator::enableUniform(const std::string& name)
404+
bool GraphicsPipelineConfigurator::enableDescriptor(const std::string& name)
405405
{
406406
if (!descriptorConfigurator) descriptorConfigurator = DescriptorConfigurator::create(shaderSet);
407-
return descriptorConfigurator->enableUniform(name);
407+
return descriptorConfigurator->enableDescriptor(name);
408408
}
409409

410410
bool GraphicsPipelineConfigurator::assignArray(DataList& arrays, const std::string& name, VkVertexInputRate vertexInputRate, ref_ptr<Data> array)
@@ -429,10 +429,10 @@ bool GraphicsPipelineConfigurator::assignTexture(const std::string& name, ref_pt
429429
return descriptorConfigurator->assignTexture(name, textureData, sampler);
430430
}
431431

432-
bool GraphicsPipelineConfigurator::assignUniform(const std::string& name, ref_ptr<Data> data)
432+
bool GraphicsPipelineConfigurator::assignDescriptor(const std::string& name, ref_ptr<Data> data)
433433
{
434434
if (!descriptorConfigurator) descriptorConfigurator = DescriptorConfigurator::create(shaderSet);
435-
return descriptorConfigurator->assignUniform(name, data);
435+
return descriptorConfigurator->assignDescriptor(name, data);
436436
}
437437

438438
int GraphicsPipelineConfigurator::compare(const Object& rhs_object) const

0 commit comments

Comments
 (0)