PeriDyno 1.0.0
Loading...
Searching...
No Matches
VulkanInitializers.hpp
Go to the documentation of this file.
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
16namespace 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;
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;
74 }
75
76 inline VkRenderPassCreateInfo renderPassCreateInfo()
77 {
78 VkRenderPassCreateInfo renderPassCreateInfo {};
79 renderPassCreateInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO;
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;
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;
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());
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;
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;
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;
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;
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();
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;
416 pipelineInputAssemblyStateCreateInfo.primitiveRestartEnable = primitiveRestartEnable;
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;
432 pipelineRasterizationStateCreateInfo.depthClampEnable = VK_FALSE;
435 }
436
437 inline VkPipelineColorBlendAttachmentState pipelineColorBlendAttachmentState(
438 VkColorComponentFlags colorWriteMask,
439 VkBool32 blendEnable)
440 {
441 VkPipelineColorBlendAttachmentState pipelineColorBlendAttachmentState {};
442 pipelineColorBlendAttachmentState.colorWriteMask = colorWriteMask;
443 pipelineColorBlendAttachmentState.blendEnable = blendEnable;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
621 }
622
623 inline VkAccelerationStructureBuildGeometryInfoKHR accelerationStructureBuildGeometryInfoKHR()
624 {
625 VkAccelerationStructureBuildGeometryInfoKHR accelerationStructureBuildGeometryInfoKHR{};
626 accelerationStructureBuildGeometryInfoKHR.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR;
628 }
629
630 inline VkAccelerationStructureBuildSizesInfoKHR accelerationStructureBuildSizesInfoKHR()
631 {
632 VkAccelerationStructureBuildSizesInfoKHR accelerationStructureBuildSizesInfoKHR{};
633 accelerationStructureBuildSizesInfoKHR.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR;
635 }
636
637 inline VkRayTracingShaderGroupCreateInfoKHR rayTracingShaderGroupCreateInfoKHR()
638 {
639 VkRayTracingShaderGroupCreateInfoKHR rayTracingShaderGroupCreateInfoKHR{};
640 rayTracingShaderGroupCreateInfoKHR.sType = VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR;
642 }
643
644 inline VkRayTracingPipelineCreateInfoKHR rayTracingPipelineCreateInfoKHR()
645 {
646 VkRayTracingPipelineCreateInfoKHR rayTracingPipelineCreateInfoKHR{};
647 rayTracingPipelineCreateInfoKHR.sType = VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR;
649 }
650
651 inline VkWriteDescriptorSetAccelerationStructureKHR writeDescriptorSetAccelerationStructureKHR()
652 {
653 VkWriteDescriptorSetAccelerationStructureKHR writeDescriptorSetAccelerationStructureKHR{};
654 writeDescriptorSetAccelerationStructureKHR.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR;
656 }
657
658 }
659}
VkVertexInputAttributeDescription vertexInputAttributeDescription(uint32_t binding, uint32_t location, VkFormat format, uint32_t offset)
VkDescriptorSetLayoutBinding descriptorSetLayoutBinding(VkDescriptorType type, VkShaderStageFlags stageFlags, uint32_t binding, uint32_t descriptorCount=1)
VkComputePipelineCreateInfo computePipelineCreateInfo(VkPipelineLayout layout, VkPipelineCreateFlags flags=0)
VkPipelineColorBlendStateCreateInfo pipelineColorBlendStateCreateInfo(uint32_t attachmentCount, const VkPipelineColorBlendAttachmentState *pAttachments)
VkDescriptorSetLayoutCreateInfo descriptorSetLayoutCreateInfo(const VkDescriptorSetLayoutBinding *pBindings, uint32_t bindingCount)
VkPipelineViewportStateCreateInfo pipelineViewportStateCreateInfo(uint32_t viewportCount, uint32_t scissorCount, VkPipelineViewportStateCreateFlags flags=0)
VkEventCreateInfo eventCreateInfo()
VkDescriptorPoolSize descriptorPoolSize(VkDescriptorType type, uint32_t descriptorCount)
VkCommandPoolCreateInfo commandPoolCreateInfo()
VkAccelerationStructureGeometryKHR accelerationStructureGeometryKHR()
VkPipelineRasterizationStateCreateInfo pipelineRasterizationStateCreateInfo(VkPolygonMode polygonMode, VkCullModeFlags cullMode, VkFrontFace frontFace, VkPipelineRasterizationStateCreateFlags flags=0)
VkFramebufferCreateInfo framebufferCreateInfo()
VkDescriptorPoolCreateInfo descriptorPoolCreateInfo(uint32_t poolSizeCount, VkDescriptorPoolSize *pPoolSizes, uint32_t maxSets)
VkAccelerationStructureBuildSizesInfoKHR accelerationStructureBuildSizesInfoKHR()
VkPipelineDynamicStateCreateInfo pipelineDynamicStateCreateInfo(const VkDynamicState *pDynamicStates, uint32_t dynamicStateCount, VkPipelineDynamicStateCreateFlags flags=0)
VkRenderPassCreateInfo renderPassCreateInfo()
VkRayTracingShaderGroupCreateInfoKHR rayTracingShaderGroupCreateInfoKHR()
VkCommandBufferAllocateInfo commandBufferAllocateInfo(VkCommandPool commandPool, VkCommandBufferLevel level, uint32_t bufferCount)
VkSpecializationInfo specializationInfo(uint32_t mapEntryCount, const VkSpecializationMapEntry *mapEntries, size_t dataSize, const void *data)
Initialize a specialization constant info structure to pass to a shader stage.
VkVertexInputBindingDescription vertexInputBindingDescription(uint32_t binding, uint32_t stride, VkVertexInputRate inputRate)
VkAccelerationStructureBuildGeometryInfoKHR accelerationStructureBuildGeometryInfoKHR()
VkCommandBufferInheritanceInfo commandBufferInheritanceInfo()
VkImageMemoryBarrier imageMemoryBarrier()
Initialize an image memory barrier with no image transfer ownership.
VkBindSparseInfo bindSparseInfo()
VkPushConstantRange pushConstantRange(VkShaderStageFlags stageFlags, uint32_t size, uint32_t offset)
VkWriteDescriptorSet writeDescriptorSet(VkDescriptorSet dstSet, VkDescriptorType type, uint32_t binding, VkDescriptorBufferInfo *bufferInfo, uint32_t descriptorCount=1)
VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo(const VkDescriptorSetLayout *pSetLayouts, uint32_t setLayoutCount=1)
VkPipelineColorBlendAttachmentState pipelineColorBlendAttachmentState(VkColorComponentFlags colorWriteMask, VkBool32 blendEnable)
VkGraphicsPipelineCreateInfo pipelineCreateInfo()
VkPipelineMultisampleStateCreateInfo pipelineMultisampleStateCreateInfo(VkSampleCountFlagBits rasterizationSamples, VkPipelineMultisampleStateCreateFlags flags=0)
VkGraphicsPipelineCreateInfo pipelineCreateInfo(VkPipelineLayout layout, VkRenderPass renderPass, VkPipelineCreateFlags flags=0)
VkDescriptorSetAllocateInfo descriptorSetAllocateInfo(VkDescriptorPool descriptorPool, const VkDescriptorSetLayout *pSetLayouts, uint32_t descriptorSetCount)
VkFenceCreateInfo fenceCreateInfo(VkFenceCreateFlags flags=0)
VkRenderPassBeginInfo renderPassBeginInfo()
VkSpecializationMapEntry specializationMapEntry(uint32_t constantID, uint32_t offset, size_t size)
Initialize a map entry for a shader specialization constant.
VkPipelineDepthStencilStateCreateInfo pipelineDepthStencilStateCreateInfo(VkBool32 depthTestEnable, VkBool32 depthWriteEnable, VkCompareOp depthCompareOp)
VkPipelineInputAssemblyStateCreateInfo pipelineInputAssemblyStateCreateInfo(VkPrimitiveTopology topology, VkPipelineInputAssemblyStateCreateFlags flags, VkBool32 primitiveRestartEnable)
VkMemoryAllocateInfo memoryAllocateInfo()
VkCommandBufferBeginInfo commandBufferBeginInfo()
VkImageCreateInfo imageCreateInfo()
VkSemaphoreCreateInfo semaphoreCreateInfo()
VkRect2D rect2D(int32_t width, int32_t height, int32_t offsetX, int32_t offsetY)
VkSamplerCreateInfo samplerCreateInfo()
VkImageViewCreateInfo imageViewCreateInfo()
VkPipelineVertexInputStateCreateInfo pipelineVertexInputStateCreateInfo()
VkBufferMemoryBarrier bufferMemoryBarrier()
Initialize a buffer memory barrier with no image transfer ownership.
VkPipelineTessellationStateCreateInfo pipelineTessellationStateCreateInfo(uint32_t patchControlPoints)
VkViewport viewport(float width, float height, float minDepth, float maxDepth)
VkRayTracingPipelineCreateInfoKHR rayTracingPipelineCreateInfoKHR()
VkMemoryBarrier memoryBarrier()
VkBufferCreateInfo bufferCreateInfo()
VkMappedMemoryRange mappedMemoryRange()
VkDescriptorImageInfo descriptorImageInfo(VkSampler sampler, VkImageView imageView, VkImageLayout imageLayout)
VkWriteDescriptorSetAccelerationStructureKHR writeDescriptorSetAccelerationStructureKHR()