Overte C++ Documentation
VulkanInitializers.hpp
1 /*
2 * Initializers for Vulkan structures and objects used by the examples
3 * Saves lot of VK_STRUCTURE_TYPE assignments
4 * Some initializers are parameterized for convenience
5 *
6 * Copyright (C) 2016 by Sascha Willems - www.saschawillems.de
7 *
8 * This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
9 */
10 
11 #pragma once
12 
13 #include <vector>
14 #include "vulkan/vulkan.h"
15 
16 namespace vks
17 {
18  namespace initializers
19  {
20 
21  inline VkMemoryAllocateInfo memoryAllocateInfo()
22  {
23  VkMemoryAllocateInfo memAllocInfo {};
24  memAllocInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
25  return memAllocInfo;
26  }
27 
28  inline VkMappedMemoryRange mappedMemoryRange()
29  {
30  VkMappedMemoryRange mappedMemoryRange {};
31  mappedMemoryRange.sType = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE;
32  return mappedMemoryRange;
33  }
34 
35  inline VkCommandBufferAllocateInfo commandBufferAllocateInfo(
36  VkCommandPool commandPool,
37  VkCommandBufferLevel level,
38  uint32_t bufferCount)
39  {
40  VkCommandBufferAllocateInfo commandBufferAllocateInfo {};
41  commandBufferAllocateInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;
42  commandBufferAllocateInfo.commandPool = commandPool;
43  commandBufferAllocateInfo.level = level;
44  commandBufferAllocateInfo.commandBufferCount = bufferCount;
45  return commandBufferAllocateInfo;
46  }
47 
48  inline VkCommandPoolCreateInfo commandPoolCreateInfo()
49  {
50  VkCommandPoolCreateInfo cmdPoolCreateInfo {};
51  cmdPoolCreateInfo.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;
52  return cmdPoolCreateInfo;
53  }
54 
55  inline VkCommandBufferBeginInfo commandBufferBeginInfo()
56  {
57  VkCommandBufferBeginInfo cmdBufferBeginInfo {};
58  cmdBufferBeginInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
59  return cmdBufferBeginInfo;
60  }
61 
62  inline VkCommandBufferInheritanceInfo commandBufferInheritanceInfo()
63  {
64  VkCommandBufferInheritanceInfo cmdBufferInheritanceInfo {};
65  cmdBufferInheritanceInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO;
66  return cmdBufferInheritanceInfo;
67  }
68 
69  inline VkRenderPassBeginInfo renderPassBeginInfo()
70  {
71  VkRenderPassBeginInfo renderPassBeginInfo {};
72  renderPassBeginInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
73  return renderPassBeginInfo;
74  }
75 
76  inline VkRenderPassCreateInfo renderPassCreateInfo()
77  {
78  VkRenderPassCreateInfo renderPassCreateInfo {};
79  renderPassCreateInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO;
80  return renderPassCreateInfo;
81  }
82 
84  inline VkImageMemoryBarrier imageMemoryBarrier()
85  {
86  VkImageMemoryBarrier imageMemoryBarrier {};
87  imageMemoryBarrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
88  imageMemoryBarrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
89  imageMemoryBarrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
90  return imageMemoryBarrier;
91  }
92 
94  inline VkBufferMemoryBarrier bufferMemoryBarrier()
95  {
96  VkBufferMemoryBarrier bufferMemoryBarrier {};
97  bufferMemoryBarrier.sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER;
98  bufferMemoryBarrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
99  bufferMemoryBarrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
100  return bufferMemoryBarrier;
101  }
102 
103  inline VkMemoryBarrier memoryBarrier()
104  {
105  VkMemoryBarrier memoryBarrier {};
106  memoryBarrier.sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER;
107  return memoryBarrier;
108  }
109 
110  inline VkImageCreateInfo imageCreateInfo()
111  {
112  VkImageCreateInfo imageCreateInfo {};
113  imageCreateInfo.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
114  return imageCreateInfo;
115  }
116 
117  inline VkSamplerCreateInfo samplerCreateInfo()
118  {
119  VkSamplerCreateInfo samplerCreateInfo {};
120  samplerCreateInfo.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO;
121  samplerCreateInfo.maxAnisotropy = 1.0f;
122  return samplerCreateInfo;
123  }
124 
125  inline VkImageViewCreateInfo imageViewCreateInfo()
126  {
127  VkImageViewCreateInfo imageViewCreateInfo {};
128  imageViewCreateInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
129  return imageViewCreateInfo;
130  }
131 
132  inline VkFramebufferCreateInfo framebufferCreateInfo()
133  {
134  VkFramebufferCreateInfo framebufferCreateInfo {};
135  framebufferCreateInfo.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO;
136  return framebufferCreateInfo;
137  }
138 
139  inline VkSemaphoreCreateInfo semaphoreCreateInfo()
140  {
141  VkSemaphoreCreateInfo semaphoreCreateInfo {};
142  semaphoreCreateInfo.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO;
143  return semaphoreCreateInfo;
144  }
145 
146  inline VkFenceCreateInfo fenceCreateInfo(VkFenceCreateFlags flags = 0)
147  {
148  VkFenceCreateInfo fenceCreateInfo {};
149  fenceCreateInfo.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO;
150  fenceCreateInfo.flags = flags;
151  return fenceCreateInfo;
152  }
153 
154  inline VkEventCreateInfo eventCreateInfo()
155  {
156  VkEventCreateInfo eventCreateInfo {};
157  eventCreateInfo.sType = VK_STRUCTURE_TYPE_EVENT_CREATE_INFO;
158  return eventCreateInfo;
159  }
160 
161  inline VkSubmitInfo submitInfo()
162  {
163  VkSubmitInfo submitInfo {};
164  submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
165  return submitInfo;
166  }
167 
168  inline VkViewport viewport(
169  float width,
170  float height,
171  float minDepth,
172  float maxDepth)
173  {
174  VkViewport viewport {};
175  viewport.width = width;
176  viewport.height = height;
177  viewport.minDepth = minDepth;
178  viewport.maxDepth = maxDepth;
179  return viewport;
180  }
181 
182  inline VkRect2D rect2D(
183  int32_t width,
184  int32_t height,
185  int32_t offsetX,
186  int32_t offsetY)
187  {
188  VkRect2D rect2D {};
189  rect2D.extent.width = width;
190  rect2D.extent.height = height;
191  rect2D.offset.x = offsetX;
192  rect2D.offset.y = offsetY;
193  return rect2D;
194  }
195 
196  inline VkBufferCreateInfo bufferCreateInfo()
197  {
198  VkBufferCreateInfo bufCreateInfo {};
199  bufCreateInfo.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
200  return bufCreateInfo;
201  }
202 
203  inline VkBufferCreateInfo bufferCreateInfo(
204  VkBufferUsageFlags usage,
205  VkDeviceSize size)
206  {
207  VkBufferCreateInfo bufCreateInfo {};
208  bufCreateInfo.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
209  bufCreateInfo.usage = usage;
210  bufCreateInfo.size = size;
211  return bufCreateInfo;
212  }
213 
214  inline VkDescriptorPoolCreateInfo descriptorPoolCreateInfo(
215  uint32_t poolSizeCount,
216  VkDescriptorPoolSize* pPoolSizes,
217  uint32_t maxSets)
218  {
219  VkDescriptorPoolCreateInfo descriptorPoolInfo {};
220  descriptorPoolInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
221  descriptorPoolInfo.poolSizeCount = poolSizeCount;
222  descriptorPoolInfo.pPoolSizes = pPoolSizes;
223  descriptorPoolInfo.maxSets = maxSets;
224  return descriptorPoolInfo;
225  }
226 
227  inline VkDescriptorPoolCreateInfo descriptorPoolCreateInfo(
228  const std::vector<VkDescriptorPoolSize>& poolSizes,
229  uint32_t maxSets)
230  {
231  VkDescriptorPoolCreateInfo descriptorPoolInfo{};
232  descriptorPoolInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
233  descriptorPoolInfo.poolSizeCount = static_cast<uint32_t>(poolSizes.size());
234  descriptorPoolInfo.pPoolSizes = poolSizes.data();
235  descriptorPoolInfo.maxSets = maxSets;
236  return descriptorPoolInfo;
237  }
238 
239  inline VkDescriptorPoolSize descriptorPoolSize(
240  VkDescriptorType type,
241  uint32_t descriptorCount)
242  {
243  VkDescriptorPoolSize descriptorPoolSize {};
244  descriptorPoolSize.type = type;
245  descriptorPoolSize.descriptorCount = descriptorCount;
246  return descriptorPoolSize;
247  }
248 
249  inline VkDescriptorSetLayoutBinding descriptorSetLayoutBinding(
250  VkDescriptorType type,
251  VkShaderStageFlags stageFlags,
252  uint32_t binding,
253  uint32_t descriptorCount = 1)
254  {
255  VkDescriptorSetLayoutBinding setLayoutBinding {};
256  setLayoutBinding.descriptorType = type;
257  setLayoutBinding.stageFlags = stageFlags;
258  setLayoutBinding.binding = binding;
259  setLayoutBinding.descriptorCount = descriptorCount;
260  return setLayoutBinding;
261  }
262 
263  inline VkDescriptorSetLayoutCreateInfo descriptorSetLayoutCreateInfo(
264  const VkDescriptorSetLayoutBinding* pBindings,
265  uint32_t bindingCount)
266  {
267  VkDescriptorSetLayoutCreateInfo descriptorSetLayoutCreateInfo {};
268  descriptorSetLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
269  descriptorSetLayoutCreateInfo.pBindings = pBindings;
270  descriptorSetLayoutCreateInfo.bindingCount = bindingCount;
271  return descriptorSetLayoutCreateInfo;
272  }
273 
274  inline VkDescriptorSetLayoutCreateInfo descriptorSetLayoutCreateInfo(
275  const std::vector<VkDescriptorSetLayoutBinding>& bindings)
276  {
277  VkDescriptorSetLayoutCreateInfo descriptorSetLayoutCreateInfo{};
278  descriptorSetLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
279  descriptorSetLayoutCreateInfo.pBindings = bindings.data();
280  descriptorSetLayoutCreateInfo.bindingCount = static_cast<uint32_t>(bindings.size());
281  return descriptorSetLayoutCreateInfo;
282  }
283 
284  inline VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo(
285  const VkDescriptorSetLayout* pSetLayouts,
286  uint32_t setLayoutCount = 1)
287  {
288  VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo {};
289  pipelineLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
290  pipelineLayoutCreateInfo.setLayoutCount = setLayoutCount;
291  pipelineLayoutCreateInfo.pSetLayouts = pSetLayouts;
292  return pipelineLayoutCreateInfo;
293  }
294 
295  inline VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo(
296  uint32_t setLayoutCount = 1)
297  {
298  VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo{};
299  pipelineLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
300  pipelineLayoutCreateInfo.setLayoutCount = setLayoutCount;
301  return pipelineLayoutCreateInfo;
302  }
303 
304  inline VkDescriptorSetAllocateInfo descriptorSetAllocateInfo(
305  VkDescriptorPool descriptorPool,
306  const VkDescriptorSetLayout* pSetLayouts,
307  uint32_t descriptorSetCount)
308  {
309  VkDescriptorSetAllocateInfo descriptorSetAllocateInfo {};
310  descriptorSetAllocateInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO;
311  descriptorSetAllocateInfo.descriptorPool = descriptorPool;
312  descriptorSetAllocateInfo.pSetLayouts = pSetLayouts;
313  descriptorSetAllocateInfo.descriptorSetCount = descriptorSetCount;
314  return descriptorSetAllocateInfo;
315  }
316 
317  inline VkDescriptorImageInfo descriptorImageInfo(VkSampler sampler, VkImageView imageView, VkImageLayout imageLayout)
318  {
319  VkDescriptorImageInfo descriptorImageInfo {};
320  descriptorImageInfo.sampler = sampler;
321  descriptorImageInfo.imageView = imageView;
322  descriptorImageInfo.imageLayout = imageLayout;
323  return descriptorImageInfo;
324  }
325 
326  inline VkWriteDescriptorSet writeDescriptorSet(
327  VkDescriptorSet dstSet,
328  VkDescriptorType type,
329  uint32_t binding,
330  VkDescriptorBufferInfo* bufferInfo,
331  uint32_t descriptorCount = 1)
332  {
333  VkWriteDescriptorSet writeDescriptorSet {};
334  writeDescriptorSet.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
335  writeDescriptorSet.dstSet = dstSet;
336  writeDescriptorSet.descriptorType = type;
337  writeDescriptorSet.dstBinding = binding;
338  writeDescriptorSet.pBufferInfo = bufferInfo;
339  writeDescriptorSet.descriptorCount = descriptorCount;
340  return writeDescriptorSet;
341  }
342 
343  inline VkWriteDescriptorSet writeDescriptorSet(
344  VkDescriptorSet dstSet,
345  VkDescriptorType type,
346  uint32_t binding,
347  VkDescriptorImageInfo *imageInfo,
348  uint32_t descriptorCount = 1)
349  {
350  VkWriteDescriptorSet writeDescriptorSet {};
351  writeDescriptorSet.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
352  writeDescriptorSet.dstSet = dstSet;
353  writeDescriptorSet.descriptorType = type;
354  writeDescriptorSet.dstBinding = binding;
355  writeDescriptorSet.pImageInfo = imageInfo;
356  writeDescriptorSet.descriptorCount = descriptorCount;
357  return writeDescriptorSet;
358  }
359 
360  inline VkVertexInputBindingDescription vertexInputBindingDescription(
361  uint32_t binding,
362  uint32_t stride,
363  VkVertexInputRate inputRate)
364  {
365  VkVertexInputBindingDescription vInputBindDescription {};
366  vInputBindDescription.binding = binding;
367  vInputBindDescription.stride = stride;
368  vInputBindDescription.inputRate = inputRate;
369  return vInputBindDescription;
370  }
371 
372  inline VkVertexInputAttributeDescription vertexInputAttributeDescription(
373  uint32_t binding,
374  uint32_t location,
375  VkFormat format,
376  uint32_t offset)
377  {
378  VkVertexInputAttributeDescription vInputAttribDescription {};
379  vInputAttribDescription.location = location;
380  vInputAttribDescription.binding = binding;
381  vInputAttribDescription.format = format;
382  vInputAttribDescription.offset = offset;
383  return vInputAttribDescription;
384  }
385 
386  inline VkPipelineVertexInputStateCreateInfo pipelineVertexInputStateCreateInfo()
387  {
388  VkPipelineVertexInputStateCreateInfo pipelineVertexInputStateCreateInfo {};
389  pipelineVertexInputStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO;
390  return pipelineVertexInputStateCreateInfo;
391  }
392 
393  inline VkPipelineVertexInputStateCreateInfo pipelineVertexInputStateCreateInfo(
394  const std::vector<VkVertexInputBindingDescription> &vertexBindingDescriptions,
395  const std::vector<VkVertexInputAttributeDescription> &vertexAttributeDescriptions
396  )
397  {
398  VkPipelineVertexInputStateCreateInfo pipelineVertexInputStateCreateInfo{};
399  pipelineVertexInputStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO;
400  pipelineVertexInputStateCreateInfo.vertexBindingDescriptionCount = static_cast<uint32_t>(vertexBindingDescriptions.size());
401  pipelineVertexInputStateCreateInfo.pVertexBindingDescriptions = vertexBindingDescriptions.data();
402  pipelineVertexInputStateCreateInfo.vertexAttributeDescriptionCount = static_cast<uint32_t>(vertexAttributeDescriptions.size());
403  pipelineVertexInputStateCreateInfo.pVertexAttributeDescriptions = vertexAttributeDescriptions.data();
404  return pipelineVertexInputStateCreateInfo;
405  }
406 
407  inline VkPipelineInputAssemblyStateCreateInfo pipelineInputAssemblyStateCreateInfo(
408  VkPrimitiveTopology topology,
409  VkPipelineInputAssemblyStateCreateFlags flags,
410  VkBool32 primitiveRestartEnable)
411  {
412  VkPipelineInputAssemblyStateCreateInfo pipelineInputAssemblyStateCreateInfo {};
413  pipelineInputAssemblyStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO;
414  pipelineInputAssemblyStateCreateInfo.topology = topology;
415  pipelineInputAssemblyStateCreateInfo.flags = flags;
416  pipelineInputAssemblyStateCreateInfo.primitiveRestartEnable = primitiveRestartEnable;
417  return pipelineInputAssemblyStateCreateInfo;
418  }
419 
420  inline VkPipelineRasterizationStateCreateInfo pipelineRasterizationStateCreateInfo(
421  VkPolygonMode polygonMode,
422  VkCullModeFlags cullMode,
423  VkFrontFace frontFace,
424  VkPipelineRasterizationStateCreateFlags flags = 0)
425  {
426  VkPipelineRasterizationStateCreateInfo pipelineRasterizationStateCreateInfo {};
427  pipelineRasterizationStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO;
428  pipelineRasterizationStateCreateInfo.polygonMode = polygonMode;
429  pipelineRasterizationStateCreateInfo.cullMode = cullMode;
430  pipelineRasterizationStateCreateInfo.frontFace = frontFace;
431  pipelineRasterizationStateCreateInfo.flags = flags;
432  pipelineRasterizationStateCreateInfo.depthClampEnable = VK_FALSE;
433  pipelineRasterizationStateCreateInfo.lineWidth = 1.0f;
434  return pipelineRasterizationStateCreateInfo;
435  }
436 
437  inline VkPipelineColorBlendAttachmentState pipelineColorBlendAttachmentState(
438  VkColorComponentFlags colorWriteMask,
439  VkBool32 blendEnable)
440  {
441  VkPipelineColorBlendAttachmentState pipelineColorBlendAttachmentState {};
442  pipelineColorBlendAttachmentState.colorWriteMask = colorWriteMask;
443  pipelineColorBlendAttachmentState.blendEnable = blendEnable;
444  return pipelineColorBlendAttachmentState;
445  }
446 
447  inline VkPipelineColorBlendStateCreateInfo pipelineColorBlendStateCreateInfo(
448  uint32_t attachmentCount,
449  const VkPipelineColorBlendAttachmentState * pAttachments)
450  {
451  VkPipelineColorBlendStateCreateInfo pipelineColorBlendStateCreateInfo {};
452  pipelineColorBlendStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO;
453  pipelineColorBlendStateCreateInfo.attachmentCount = attachmentCount;
454  pipelineColorBlendStateCreateInfo.pAttachments = pAttachments;
455  return pipelineColorBlendStateCreateInfo;
456  }
457 
458  inline VkPipelineDepthStencilStateCreateInfo pipelineDepthStencilStateCreateInfo(
459  VkBool32 depthTestEnable,
460  VkBool32 depthWriteEnable,
461  VkCompareOp depthCompareOp)
462  {
463  VkPipelineDepthStencilStateCreateInfo pipelineDepthStencilStateCreateInfo {};
464  pipelineDepthStencilStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO;
465  pipelineDepthStencilStateCreateInfo.depthTestEnable = depthTestEnable;
466  pipelineDepthStencilStateCreateInfo.depthWriteEnable = depthWriteEnable;
467  pipelineDepthStencilStateCreateInfo.depthCompareOp = depthCompareOp;
468  //pipelineDepthStencilStateCreateInfo.back.compareOp = VK_COMPARE_OP_ALWAYS;
469  return pipelineDepthStencilStateCreateInfo;
470  }
471 
472  inline VkPipelineViewportStateCreateInfo pipelineViewportStateCreateInfo(
473  uint32_t viewportCount,
474  uint32_t scissorCount,
475  VkPipelineViewportStateCreateFlags flags = 0)
476  {
477  VkPipelineViewportStateCreateInfo pipelineViewportStateCreateInfo {};
478  pipelineViewportStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO;
479  pipelineViewportStateCreateInfo.viewportCount = viewportCount;
480  pipelineViewportStateCreateInfo.scissorCount = scissorCount;
481  pipelineViewportStateCreateInfo.flags = flags;
482  return pipelineViewportStateCreateInfo;
483  }
484 
485  inline VkPipelineMultisampleStateCreateInfo pipelineMultisampleStateCreateInfo(
486  VkSampleCountFlagBits rasterizationSamples,
487  VkPipelineMultisampleStateCreateFlags flags = 0)
488  {
489  VkPipelineMultisampleStateCreateInfo pipelineMultisampleStateCreateInfo {};
490  pipelineMultisampleStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO;
491  pipelineMultisampleStateCreateInfo.rasterizationSamples = rasterizationSamples;
492  pipelineMultisampleStateCreateInfo.flags = flags;
493  return pipelineMultisampleStateCreateInfo;
494  }
495 
496  inline VkPipelineDynamicStateCreateInfo pipelineDynamicStateCreateInfo(
497  const VkDynamicState * pDynamicStates,
498  uint32_t dynamicStateCount,
499  VkPipelineDynamicStateCreateFlags flags = 0)
500  {
501  VkPipelineDynamicStateCreateInfo pipelineDynamicStateCreateInfo {};
502  pipelineDynamicStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO;
503  pipelineDynamicStateCreateInfo.pDynamicStates = pDynamicStates;
504  pipelineDynamicStateCreateInfo.dynamicStateCount = dynamicStateCount;
505  pipelineDynamicStateCreateInfo.flags = flags;
506  return pipelineDynamicStateCreateInfo;
507  }
508 
509  inline VkPipelineDynamicStateCreateInfo pipelineDynamicStateCreateInfo(
510  const std::vector<VkDynamicState>& pDynamicStates,
511  VkPipelineDynamicStateCreateFlags flags = 0)
512  {
513  VkPipelineDynamicStateCreateInfo pipelineDynamicStateCreateInfo{};
514  pipelineDynamicStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO;
515  pipelineDynamicStateCreateInfo.pDynamicStates = pDynamicStates.data();
516  pipelineDynamicStateCreateInfo.dynamicStateCount = static_cast<uint32_t>(pDynamicStates.size());
517  pipelineDynamicStateCreateInfo.flags = flags;
518  return pipelineDynamicStateCreateInfo;
519  }
520 
521  inline VkPipelineTessellationStateCreateInfo pipelineTessellationStateCreateInfo(uint32_t patchControlPoints)
522  {
523  VkPipelineTessellationStateCreateInfo pipelineTessellationStateCreateInfo {};
524  pipelineTessellationStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO;
525  pipelineTessellationStateCreateInfo.patchControlPoints = patchControlPoints;
526  return pipelineTessellationStateCreateInfo;
527  }
528 
529  inline VkGraphicsPipelineCreateInfo pipelineCreateInfo(
530  VkPipelineLayout layout,
531  VkRenderPass renderPass,
532  VkPipelineCreateFlags flags = 0)
533  {
534  VkGraphicsPipelineCreateInfo pipelineCreateInfo {};
535  pipelineCreateInfo.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO;
536  pipelineCreateInfo.layout = layout;
537  pipelineCreateInfo.renderPass = renderPass;
538  pipelineCreateInfo.flags = flags;
539  pipelineCreateInfo.basePipelineIndex = -1;
540  pipelineCreateInfo.basePipelineHandle = VK_NULL_HANDLE;
541  return pipelineCreateInfo;
542  }
543 
544  inline VkGraphicsPipelineCreateInfo pipelineCreateInfo()
545  {
546  VkGraphicsPipelineCreateInfo pipelineCreateInfo{};
547  pipelineCreateInfo.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO;
548  pipelineCreateInfo.basePipelineIndex = -1;
549  pipelineCreateInfo.basePipelineHandle = VK_NULL_HANDLE;
550  return pipelineCreateInfo;
551  }
552 
553  inline VkComputePipelineCreateInfo computePipelineCreateInfo(
554  VkPipelineLayout layout,
555  VkPipelineCreateFlags flags = 0)
556  {
557  VkComputePipelineCreateInfo computePipelineCreateInfo {};
558  computePipelineCreateInfo.sType = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO;
559  computePipelineCreateInfo.layout = layout;
560  computePipelineCreateInfo.flags = flags;
561  return computePipelineCreateInfo;
562  }
563 
564  inline VkPushConstantRange pushConstantRange(
565  VkShaderStageFlags stageFlags,
566  uint32_t size,
567  uint32_t offset)
568  {
569  VkPushConstantRange pushConstantRange {};
570  pushConstantRange.stageFlags = stageFlags;
571  pushConstantRange.offset = offset;
572  pushConstantRange.size = size;
573  return pushConstantRange;
574  }
575 
576  inline VkBindSparseInfo bindSparseInfo()
577  {
578  VkBindSparseInfo bindSparseInfo{};
579  bindSparseInfo.sType = VK_STRUCTURE_TYPE_BIND_SPARSE_INFO;
580  return bindSparseInfo;
581  }
582 
584  inline VkSpecializationMapEntry specializationMapEntry(uint32_t constantID, uint32_t offset, size_t size)
585  {
586  VkSpecializationMapEntry specializationMapEntry{};
587  specializationMapEntry.constantID = constantID;
588  specializationMapEntry.offset = offset;
589  specializationMapEntry.size = size;
590  return specializationMapEntry;
591  }
592 
594  inline VkSpecializationInfo specializationInfo(uint32_t mapEntryCount, const VkSpecializationMapEntry* mapEntries, size_t dataSize, const void* data)
595  {
596  VkSpecializationInfo specializationInfo{};
597  specializationInfo.mapEntryCount = mapEntryCount;
598  specializationInfo.pMapEntries = mapEntries;
599  specializationInfo.dataSize = dataSize;
600  specializationInfo.pData = data;
601  return specializationInfo;
602  }
603 
605  inline VkSpecializationInfo specializationInfo(const std::vector<VkSpecializationMapEntry> &mapEntries, size_t dataSize, const void* data)
606  {
607  VkSpecializationInfo specializationInfo{};
608  specializationInfo.mapEntryCount = static_cast<uint32_t>(mapEntries.size());
609  specializationInfo.pMapEntries = mapEntries.data();
610  specializationInfo.dataSize = dataSize;
611  specializationInfo.pData = data;
612  return specializationInfo;
613  }
614 
615  // Ray tracing related
616  inline VkAccelerationStructureGeometryKHR accelerationStructureGeometryKHR()
617  {
618  VkAccelerationStructureGeometryKHR accelerationStructureGeometryKHR{};
619  accelerationStructureGeometryKHR.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR;
620  return accelerationStructureGeometryKHR;
621  }
622 
623  inline VkAccelerationStructureBuildGeometryInfoKHR accelerationStructureBuildGeometryInfoKHR()
624  {
625  VkAccelerationStructureBuildGeometryInfoKHR accelerationStructureBuildGeometryInfoKHR{};
626  accelerationStructureBuildGeometryInfoKHR.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR;
627  return accelerationStructureBuildGeometryInfoKHR;
628  }
629 
630  inline VkAccelerationStructureBuildSizesInfoKHR accelerationStructureBuildSizesInfoKHR()
631  {
632  VkAccelerationStructureBuildSizesInfoKHR accelerationStructureBuildSizesInfoKHR{};
633  accelerationStructureBuildSizesInfoKHR.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR;
634  return accelerationStructureBuildSizesInfoKHR;
635  }
636 
637  inline VkRayTracingShaderGroupCreateInfoKHR rayTracingShaderGroupCreateInfoKHR()
638  {
639  VkRayTracingShaderGroupCreateInfoKHR rayTracingShaderGroupCreateInfoKHR{};
640  rayTracingShaderGroupCreateInfoKHR.sType = VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR;
641  return rayTracingShaderGroupCreateInfoKHR;
642  }
643 
644  inline VkRayTracingPipelineCreateInfoKHR rayTracingPipelineCreateInfoKHR()
645  {
646  VkRayTracingPipelineCreateInfoKHR rayTracingPipelineCreateInfoKHR{};
647  rayTracingPipelineCreateInfoKHR.sType = VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR;
648  return rayTracingPipelineCreateInfoKHR;
649  }
650 
651  inline VkWriteDescriptorSetAccelerationStructureKHR writeDescriptorSetAccelerationStructureKHR()
652  {
653  VkWriteDescriptorSetAccelerationStructureKHR writeDescriptorSetAccelerationStructureKHR{};
654  writeDescriptorSetAccelerationStructureKHR.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR;
655  return writeDescriptorSetAccelerationStructureKHR;
656  }
657 
658  }
659 }