14 #include "vulkan/vulkan.h"
18 namespace initializers
21 inline VkMemoryAllocateInfo memoryAllocateInfo()
23 VkMemoryAllocateInfo memAllocInfo {};
24 memAllocInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
28 inline VkMappedMemoryRange mappedMemoryRange()
30 VkMappedMemoryRange mappedMemoryRange {};
31 mappedMemoryRange.sType = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE;
32 return mappedMemoryRange;
35 inline VkCommandBufferAllocateInfo commandBufferAllocateInfo(
36 VkCommandPool commandPool,
37 VkCommandBufferLevel level,
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;
48 inline VkCommandPoolCreateInfo commandPoolCreateInfo()
50 VkCommandPoolCreateInfo cmdPoolCreateInfo {};
51 cmdPoolCreateInfo.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;
52 return cmdPoolCreateInfo;
55 inline VkCommandBufferBeginInfo commandBufferBeginInfo()
57 VkCommandBufferBeginInfo cmdBufferBeginInfo {};
58 cmdBufferBeginInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
59 return cmdBufferBeginInfo;
62 inline VkCommandBufferInheritanceInfo commandBufferInheritanceInfo()
64 VkCommandBufferInheritanceInfo cmdBufferInheritanceInfo {};
65 cmdBufferInheritanceInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO;
66 return cmdBufferInheritanceInfo;
69 inline VkRenderPassBeginInfo renderPassBeginInfo()
71 VkRenderPassBeginInfo renderPassBeginInfo {};
72 renderPassBeginInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
73 return renderPassBeginInfo;
76 inline VkRenderPassCreateInfo renderPassCreateInfo()
78 VkRenderPassCreateInfo renderPassCreateInfo {};
79 renderPassCreateInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO;
80 return renderPassCreateInfo;
84 inline VkImageMemoryBarrier imageMemoryBarrier()
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;
94 inline VkBufferMemoryBarrier bufferMemoryBarrier()
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;
103 inline VkMemoryBarrier memoryBarrier()
105 VkMemoryBarrier memoryBarrier {};
106 memoryBarrier.sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER;
107 return memoryBarrier;
110 inline VkImageCreateInfo imageCreateInfo()
112 VkImageCreateInfo imageCreateInfo {};
113 imageCreateInfo.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
114 return imageCreateInfo;
117 inline VkSamplerCreateInfo samplerCreateInfo()
119 VkSamplerCreateInfo samplerCreateInfo {};
120 samplerCreateInfo.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO;
121 samplerCreateInfo.maxAnisotropy = 1.0f;
122 return samplerCreateInfo;
125 inline VkImageViewCreateInfo imageViewCreateInfo()
127 VkImageViewCreateInfo imageViewCreateInfo {};
128 imageViewCreateInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
129 return imageViewCreateInfo;
132 inline VkFramebufferCreateInfo framebufferCreateInfo()
134 VkFramebufferCreateInfo framebufferCreateInfo {};
135 framebufferCreateInfo.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO;
136 return framebufferCreateInfo;
139 inline VkSemaphoreCreateInfo semaphoreCreateInfo()
141 VkSemaphoreCreateInfo semaphoreCreateInfo {};
142 semaphoreCreateInfo.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO;
143 return semaphoreCreateInfo;
146 inline VkFenceCreateInfo fenceCreateInfo(VkFenceCreateFlags flags = 0)
148 VkFenceCreateInfo fenceCreateInfo {};
149 fenceCreateInfo.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO;
150 fenceCreateInfo.flags = flags;
151 return fenceCreateInfo;
154 inline VkEventCreateInfo eventCreateInfo()
156 VkEventCreateInfo eventCreateInfo {};
157 eventCreateInfo.sType = VK_STRUCTURE_TYPE_EVENT_CREATE_INFO;
158 return eventCreateInfo;
161 inline VkSubmitInfo submitInfo()
163 VkSubmitInfo submitInfo {};
164 submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
168 inline VkViewport viewport(
174 VkViewport viewport {};
175 viewport.width = width;
176 viewport.height = height;
177 viewport.minDepth = minDepth;
178 viewport.maxDepth = maxDepth;
182 inline VkRect2D rect2D(
189 rect2D.extent.width = width;
190 rect2D.extent.height = height;
191 rect2D.offset.x = offsetX;
192 rect2D.offset.y = offsetY;
196 inline VkBufferCreateInfo bufferCreateInfo()
198 VkBufferCreateInfo bufCreateInfo {};
199 bufCreateInfo.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
200 return bufCreateInfo;
203 inline VkBufferCreateInfo bufferCreateInfo(
204 VkBufferUsageFlags usage,
207 VkBufferCreateInfo bufCreateInfo {};
208 bufCreateInfo.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
209 bufCreateInfo.usage = usage;
210 bufCreateInfo.size = size;
211 return bufCreateInfo;
214 inline VkDescriptorPoolCreateInfo descriptorPoolCreateInfo(
215 uint32_t poolSizeCount,
216 VkDescriptorPoolSize* pPoolSizes,
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;
227 inline VkDescriptorPoolCreateInfo descriptorPoolCreateInfo(
228 const std::vector<VkDescriptorPoolSize>& poolSizes,
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;
239 inline VkDescriptorPoolSize descriptorPoolSize(
240 VkDescriptorType type,
241 uint32_t descriptorCount)
243 VkDescriptorPoolSize descriptorPoolSize {};
244 descriptorPoolSize.type = type;
245 descriptorPoolSize.descriptorCount = descriptorCount;
246 return descriptorPoolSize;
249 inline VkDescriptorSetLayoutBinding descriptorSetLayoutBinding(
250 VkDescriptorType type,
251 VkShaderStageFlags stageFlags,
253 uint32_t descriptorCount = 1)
255 VkDescriptorSetLayoutBinding setLayoutBinding {};
256 setLayoutBinding.descriptorType = type;
257 setLayoutBinding.stageFlags = stageFlags;
258 setLayoutBinding.binding = binding;
259 setLayoutBinding.descriptorCount = descriptorCount;
260 return setLayoutBinding;
263 inline VkDescriptorSetLayoutCreateInfo descriptorSetLayoutCreateInfo(
264 const VkDescriptorSetLayoutBinding* pBindings,
265 uint32_t bindingCount)
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;
274 inline VkDescriptorSetLayoutCreateInfo descriptorSetLayoutCreateInfo(
275 const std::vector<VkDescriptorSetLayoutBinding>& bindings)
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;
284 inline VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo(
285 const VkDescriptorSetLayout* pSetLayouts,
286 uint32_t setLayoutCount = 1)
288 VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo {};
289 pipelineLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
290 pipelineLayoutCreateInfo.setLayoutCount = setLayoutCount;
291 pipelineLayoutCreateInfo.pSetLayouts = pSetLayouts;
292 return pipelineLayoutCreateInfo;
295 inline VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo(
296 uint32_t setLayoutCount = 1)
298 VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo{};
299 pipelineLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
300 pipelineLayoutCreateInfo.setLayoutCount = setLayoutCount;
301 return pipelineLayoutCreateInfo;
304 inline VkDescriptorSetAllocateInfo descriptorSetAllocateInfo(
305 VkDescriptorPool descriptorPool,
306 const VkDescriptorSetLayout* pSetLayouts,
307 uint32_t descriptorSetCount)
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;
317 inline VkDescriptorImageInfo descriptorImageInfo(VkSampler sampler, VkImageView imageView, VkImageLayout imageLayout)
319 VkDescriptorImageInfo descriptorImageInfo {};
320 descriptorImageInfo.sampler = sampler;
321 descriptorImageInfo.imageView = imageView;
322 descriptorImageInfo.imageLayout = imageLayout;
323 return descriptorImageInfo;
326 inline VkWriteDescriptorSet writeDescriptorSet(
327 VkDescriptorSet dstSet,
328 VkDescriptorType type,
330 VkDescriptorBufferInfo* bufferInfo,
331 uint32_t descriptorCount = 1)
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;
343 inline VkWriteDescriptorSet writeDescriptorSet(
344 VkDescriptorSet dstSet,
345 VkDescriptorType type,
347 VkDescriptorImageInfo *imageInfo,
348 uint32_t descriptorCount = 1)
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;
360 inline VkVertexInputBindingDescription vertexInputBindingDescription(
363 VkVertexInputRate inputRate)
365 VkVertexInputBindingDescription vInputBindDescription {};
366 vInputBindDescription.binding = binding;
367 vInputBindDescription.stride = stride;
368 vInputBindDescription.inputRate = inputRate;
369 return vInputBindDescription;
372 inline VkVertexInputAttributeDescription vertexInputAttributeDescription(
378 VkVertexInputAttributeDescription vInputAttribDescription {};
379 vInputAttribDescription.location = location;
380 vInputAttribDescription.binding = binding;
381 vInputAttribDescription.format = format;
382 vInputAttribDescription.offset = offset;
383 return vInputAttribDescription;
386 inline VkPipelineVertexInputStateCreateInfo pipelineVertexInputStateCreateInfo()
388 VkPipelineVertexInputStateCreateInfo pipelineVertexInputStateCreateInfo {};
389 pipelineVertexInputStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO;
390 return pipelineVertexInputStateCreateInfo;
393 inline VkPipelineVertexInputStateCreateInfo pipelineVertexInputStateCreateInfo(
394 const std::vector<VkVertexInputBindingDescription> &vertexBindingDescriptions,
395 const std::vector<VkVertexInputAttributeDescription> &vertexAttributeDescriptions
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;
407 inline VkPipelineInputAssemblyStateCreateInfo pipelineInputAssemblyStateCreateInfo(
408 VkPrimitiveTopology topology,
409 VkPipelineInputAssemblyStateCreateFlags flags,
410 VkBool32 primitiveRestartEnable)
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;
420 inline VkPipelineRasterizationStateCreateInfo pipelineRasterizationStateCreateInfo(
421 VkPolygonMode polygonMode,
422 VkCullModeFlags cullMode,
423 VkFrontFace frontFace,
424 VkPipelineRasterizationStateCreateFlags flags = 0)
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;
437 inline VkPipelineColorBlendAttachmentState pipelineColorBlendAttachmentState(
438 VkColorComponentFlags colorWriteMask,
439 VkBool32 blendEnable)
441 VkPipelineColorBlendAttachmentState pipelineColorBlendAttachmentState {};
442 pipelineColorBlendAttachmentState.colorWriteMask = colorWriteMask;
443 pipelineColorBlendAttachmentState.blendEnable = blendEnable;
444 return pipelineColorBlendAttachmentState;
447 inline VkPipelineColorBlendStateCreateInfo pipelineColorBlendStateCreateInfo(
448 uint32_t attachmentCount,
449 const VkPipelineColorBlendAttachmentState * pAttachments)
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;
458 inline VkPipelineDepthStencilStateCreateInfo pipelineDepthStencilStateCreateInfo(
459 VkBool32 depthTestEnable,
460 VkBool32 depthWriteEnable,
461 VkCompareOp depthCompareOp)
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;
469 return pipelineDepthStencilStateCreateInfo;
472 inline VkPipelineViewportStateCreateInfo pipelineViewportStateCreateInfo(
473 uint32_t viewportCount,
474 uint32_t scissorCount,
475 VkPipelineViewportStateCreateFlags flags = 0)
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;
485 inline VkPipelineMultisampleStateCreateInfo pipelineMultisampleStateCreateInfo(
486 VkSampleCountFlagBits rasterizationSamples,
487 VkPipelineMultisampleStateCreateFlags flags = 0)
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;
496 inline VkPipelineDynamicStateCreateInfo pipelineDynamicStateCreateInfo(
497 const VkDynamicState * pDynamicStates,
498 uint32_t dynamicStateCount,
499 VkPipelineDynamicStateCreateFlags flags = 0)
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;
509 inline VkPipelineDynamicStateCreateInfo pipelineDynamicStateCreateInfo(
510 const std::vector<VkDynamicState>& pDynamicStates,
511 VkPipelineDynamicStateCreateFlags flags = 0)
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;
521 inline VkPipelineTessellationStateCreateInfo pipelineTessellationStateCreateInfo(uint32_t patchControlPoints)
523 VkPipelineTessellationStateCreateInfo pipelineTessellationStateCreateInfo {};
524 pipelineTessellationStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO;
525 pipelineTessellationStateCreateInfo.patchControlPoints = patchControlPoints;
526 return pipelineTessellationStateCreateInfo;
529 inline VkGraphicsPipelineCreateInfo pipelineCreateInfo(
530 VkPipelineLayout layout,
531 VkRenderPass renderPass,
532 VkPipelineCreateFlags flags = 0)
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;
544 inline VkGraphicsPipelineCreateInfo pipelineCreateInfo()
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;
553 inline VkComputePipelineCreateInfo computePipelineCreateInfo(
554 VkPipelineLayout layout,
555 VkPipelineCreateFlags flags = 0)
557 VkComputePipelineCreateInfo computePipelineCreateInfo {};
558 computePipelineCreateInfo.sType = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO;
559 computePipelineCreateInfo.layout = layout;
560 computePipelineCreateInfo.flags = flags;
561 return computePipelineCreateInfo;
564 inline VkPushConstantRange pushConstantRange(
565 VkShaderStageFlags stageFlags,
569 VkPushConstantRange pushConstantRange {};
570 pushConstantRange.stageFlags = stageFlags;
571 pushConstantRange.offset = offset;
572 pushConstantRange.size = size;
573 return pushConstantRange;
576 inline VkBindSparseInfo bindSparseInfo()
578 VkBindSparseInfo bindSparseInfo{};
579 bindSparseInfo.sType = VK_STRUCTURE_TYPE_BIND_SPARSE_INFO;
580 return bindSparseInfo;
584 inline VkSpecializationMapEntry specializationMapEntry(uint32_t constantID, uint32_t offset,
size_t size)
586 VkSpecializationMapEntry specializationMapEntry{};
587 specializationMapEntry.constantID = constantID;
588 specializationMapEntry.offset = offset;
589 specializationMapEntry.size = size;
590 return specializationMapEntry;
594 inline VkSpecializationInfo specializationInfo(uint32_t mapEntryCount,
const VkSpecializationMapEntry* mapEntries,
size_t dataSize,
const void* data)
596 VkSpecializationInfo specializationInfo{};
597 specializationInfo.mapEntryCount = mapEntryCount;
598 specializationInfo.pMapEntries = mapEntries;
599 specializationInfo.dataSize = dataSize;
600 specializationInfo.pData = data;
601 return specializationInfo;
605 inline VkSpecializationInfo specializationInfo(
const std::vector<VkSpecializationMapEntry> &mapEntries,
size_t dataSize,
const void* data)
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;
616 inline VkAccelerationStructureGeometryKHR accelerationStructureGeometryKHR()
618 VkAccelerationStructureGeometryKHR accelerationStructureGeometryKHR{};
619 accelerationStructureGeometryKHR.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR;
620 return accelerationStructureGeometryKHR;
623 inline VkAccelerationStructureBuildGeometryInfoKHR accelerationStructureBuildGeometryInfoKHR()
625 VkAccelerationStructureBuildGeometryInfoKHR accelerationStructureBuildGeometryInfoKHR{};
626 accelerationStructureBuildGeometryInfoKHR.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR;
627 return accelerationStructureBuildGeometryInfoKHR;
630 inline VkAccelerationStructureBuildSizesInfoKHR accelerationStructureBuildSizesInfoKHR()
632 VkAccelerationStructureBuildSizesInfoKHR accelerationStructureBuildSizesInfoKHR{};
633 accelerationStructureBuildSizesInfoKHR.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR;
634 return accelerationStructureBuildSizesInfoKHR;
637 inline VkRayTracingShaderGroupCreateInfoKHR rayTracingShaderGroupCreateInfoKHR()
639 VkRayTracingShaderGroupCreateInfoKHR rayTracingShaderGroupCreateInfoKHR{};
640 rayTracingShaderGroupCreateInfoKHR.sType = VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR;
641 return rayTracingShaderGroupCreateInfoKHR;
644 inline VkRayTracingPipelineCreateInfoKHR rayTracingPipelineCreateInfoKHR()
646 VkRayTracingPipelineCreateInfoKHR rayTracingPipelineCreateInfoKHR{};
647 rayTracingPipelineCreateInfoKHR.sType = VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR;
648 return rayTracingPipelineCreateInfoKHR;
651 inline VkWriteDescriptorSetAccelerationStructureKHR writeDescriptorSetAccelerationStructureKHR()
653 VkWriteDescriptorSetAccelerationStructureKHR writeDescriptorSetAccelerationStructureKHR{};
654 writeDescriptorSetAccelerationStructureKHR.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR;
655 return writeDescriptorSetAccelerationStructureKHR;