/* WARNING: This is auto-generated file. Do not modify, since changes will
 * be lost! Modify the generating script instead.
 */
template<> VkStructureType getStructureType<VkBufferMemoryBarrier> (void)
{
	return VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER;
}

template<> VkStructureType getStructureType<VkImageMemoryBarrier> (void)
{
	return VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
}

template<> VkStructureType getStructureType<VkMemoryBarrier> (void)
{
	return VK_STRUCTURE_TYPE_MEMORY_BARRIER;
}

template<> VkStructureType getStructureType<VkApplicationInfo> (void)
{
	return VK_STRUCTURE_TYPE_APPLICATION_INFO;
}

template<> VkStructureType getStructureType<VkInstanceCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkDeviceQueueCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkDeviceCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkSubmitInfo> (void)
{
	return VK_STRUCTURE_TYPE_SUBMIT_INFO;
}

template<> VkStructureType getStructureType<VkMappedMemoryRange> (void)
{
	return VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE;
}

template<> VkStructureType getStructureType<VkMemoryAllocateInfo> (void)
{
	return VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
}

template<> VkStructureType getStructureType<VkBindSparseInfo> (void)
{
	return VK_STRUCTURE_TYPE_BIND_SPARSE_INFO;
}

template<> VkStructureType getStructureType<VkFenceCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_FENCE_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkSemaphoreCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkEventCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_EVENT_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkQueryPoolCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkBufferCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkBufferViewCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkImageCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkImageViewCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkShaderModuleCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkPipelineCacheCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkPipelineShaderStageCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkComputePipelineCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkPipelineVertexInputStateCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkPipelineInputAssemblyStateCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkPipelineTessellationStateCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkPipelineViewportStateCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkPipelineRasterizationStateCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkPipelineMultisampleStateCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkPipelineDepthStencilStateCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkPipelineColorBlendStateCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkPipelineDynamicStateCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkGraphicsPipelineCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkPipelineLayoutCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkSamplerCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkCopyDescriptorSet> (void)
{
	return VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET;
}

template<> VkStructureType getStructureType<VkDescriptorPoolCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkDescriptorSetAllocateInfo> (void)
{
	return VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO;
}

template<> VkStructureType getStructureType<VkDescriptorSetLayoutCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkWriteDescriptorSet> (void)
{
	return VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
}

template<> VkStructureType getStructureType<VkFramebufferCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkRenderPassCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkCommandPoolCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkCommandBufferAllocateInfo> (void)
{
	return VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;
}

template<> VkStructureType getStructureType<VkCommandBufferInheritanceInfo> (void)
{
	return VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO;
}

template<> VkStructureType getStructureType<VkCommandBufferBeginInfo> (void)
{
	return VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
}

template<> VkStructureType getStructureType<VkRenderPassBeginInfo> (void)
{
	return VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceSubgroupProperties> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES;
}

template<> VkStructureType getStructureType<VkBindBufferMemoryInfo> (void)
{
	return VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO;
}

template<> VkStructureType getStructureType<VkBindImageMemoryInfo> (void)
{
	return VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO;
}

template<> VkStructureType getStructureType<VkPhysicalDevice16BitStorageFeatures> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES;
}

template<> VkStructureType getStructureType<VkMemoryDedicatedRequirements> (void)
{
	return VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS;
}

template<> VkStructureType getStructureType<VkMemoryDedicatedAllocateInfo> (void)
{
	return VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO;
}

template<> VkStructureType getStructureType<VkMemoryAllocateFlagsInfo> (void)
{
	return VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO;
}

template<> VkStructureType getStructureType<VkDeviceGroupRenderPassBeginInfo> (void)
{
	return VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO;
}

template<> VkStructureType getStructureType<VkDeviceGroupCommandBufferBeginInfo> (void)
{
	return VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO;
}

template<> VkStructureType getStructureType<VkDeviceGroupSubmitInfo> (void)
{
	return VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO;
}

template<> VkStructureType getStructureType<VkDeviceGroupBindSparseInfo> (void)
{
	return VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO;
}

template<> VkStructureType getStructureType<VkBindBufferMemoryDeviceGroupInfo> (void)
{
	return VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO;
}

template<> VkStructureType getStructureType<VkBindImageMemoryDeviceGroupInfo> (void)
{
	return VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceGroupProperties> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES;
}

template<> VkStructureType getStructureType<VkDeviceGroupDeviceCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkBufferMemoryRequirementsInfo2> (void)
{
	return VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2;
}

template<> VkStructureType getStructureType<VkImageMemoryRequirementsInfo2> (void)
{
	return VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2;
}

template<> VkStructureType getStructureType<VkImageSparseMemoryRequirementsInfo2> (void)
{
	return VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2;
}

template<> VkStructureType getStructureType<VkMemoryRequirements2> (void)
{
	return VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2;
}

template<> VkStructureType getStructureType<VkSparseImageMemoryRequirements2> (void)
{
	return VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceFeatures2> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceProperties2> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2;
}

template<> VkStructureType getStructureType<VkFormatProperties2> (void)
{
	return VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2;
}

template<> VkStructureType getStructureType<VkImageFormatProperties2> (void)
{
	return VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceImageFormatInfo2> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2;
}

template<> VkStructureType getStructureType<VkQueueFamilyProperties2> (void)
{
	return VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceMemoryProperties2> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2;
}

template<> VkStructureType getStructureType<VkSparseImageFormatProperties2> (void)
{
	return VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceSparseImageFormatInfo2> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2;
}

template<> VkStructureType getStructureType<VkPhysicalDevicePointClippingProperties> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES;
}

template<> VkStructureType getStructureType<VkRenderPassInputAttachmentAspectCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkImageViewUsageCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkPipelineTessellationDomainOriginStateCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkRenderPassMultiviewCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceMultiviewFeatures> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceMultiviewProperties> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceVariablePointersFeatures> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceProtectedMemoryFeatures> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceProtectedMemoryProperties> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES;
}

template<> VkStructureType getStructureType<VkDeviceQueueInfo2> (void)
{
	return VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2;
}

template<> VkStructureType getStructureType<VkProtectedSubmitInfo> (void)
{
	return VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO;
}

template<> VkStructureType getStructureType<VkSamplerYcbcrConversionCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkSamplerYcbcrConversionInfo> (void)
{
	return VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO;
}

template<> VkStructureType getStructureType<VkBindImagePlaneMemoryInfo> (void)
{
	return VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO;
}

template<> VkStructureType getStructureType<VkImagePlaneMemoryRequirementsInfo> (void)
{
	return VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceSamplerYcbcrConversionFeatures> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES;
}

template<> VkStructureType getStructureType<VkSamplerYcbcrConversionImageFormatProperties> (void)
{
	return VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES;
}

template<> VkStructureType getStructureType<VkDescriptorUpdateTemplateCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceExternalImageFormatInfo> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO;
}

template<> VkStructureType getStructureType<VkExternalImageFormatProperties> (void)
{
	return VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceExternalBufferInfo> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO;
}

template<> VkStructureType getStructureType<VkExternalBufferProperties> (void)
{
	return VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceIDProperties> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES;
}

template<> VkStructureType getStructureType<VkExternalMemoryImageCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkExternalMemoryBufferCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkExportMemoryAllocateInfo> (void)
{
	return VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceExternalFenceInfo> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO;
}

template<> VkStructureType getStructureType<VkExternalFenceProperties> (void)
{
	return VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES;
}

template<> VkStructureType getStructureType<VkExportFenceCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkExportSemaphoreCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceExternalSemaphoreInfo> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO;
}

template<> VkStructureType getStructureType<VkExternalSemaphoreProperties> (void)
{
	return VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceMaintenance3Properties> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES;
}

template<> VkStructureType getStructureType<VkDescriptorSetLayoutSupport> (void)
{
	return VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceShaderDrawParametersFeatures> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceVulkan11Features> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceVulkan11Properties> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceVulkan12Features> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceVulkan12Properties> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES;
}

template<> VkStructureType getStructureType<VkImageFormatListCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkAttachmentDescription2> (void)
{
	return VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2;
}

template<> VkStructureType getStructureType<VkAttachmentReference2> (void)
{
	return VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2;
}

template<> VkStructureType getStructureType<VkSubpassDescription2> (void)
{
	return VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2;
}

template<> VkStructureType getStructureType<VkSubpassDependency2> (void)
{
	return VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2;
}

template<> VkStructureType getStructureType<VkRenderPassCreateInfo2> (void)
{
	return VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2;
}

template<> VkStructureType getStructureType<VkSubpassBeginInfo> (void)
{
	return VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO;
}

template<> VkStructureType getStructureType<VkSubpassEndInfo> (void)
{
	return VK_STRUCTURE_TYPE_SUBPASS_END_INFO;
}

template<> VkStructureType getStructureType<VkPhysicalDevice8BitStorageFeatures> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceDriverProperties> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceShaderAtomicInt64Features> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceShaderFloat16Int8Features> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceFloatControlsProperties> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES;
}

template<> VkStructureType getStructureType<VkDescriptorSetLayoutBindingFlagsCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceDescriptorIndexingFeatures> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceDescriptorIndexingProperties> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES;
}

template<> VkStructureType getStructureType<VkDescriptorSetVariableDescriptorCountAllocateInfo> (void)
{
	return VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO;
}

template<> VkStructureType getStructureType<VkDescriptorSetVariableDescriptorCountLayoutSupport> (void)
{
	return VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT;
}

template<> VkStructureType getStructureType<VkSubpassDescriptionDepthStencilResolve> (void)
{
	return VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceDepthStencilResolveProperties> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceScalarBlockLayoutFeatures> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES;
}

template<> VkStructureType getStructureType<VkImageStencilUsageCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkSamplerReductionModeCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceSamplerFilterMinmaxProperties> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceVulkanMemoryModelFeatures> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceImagelessFramebufferFeatures> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES;
}

template<> VkStructureType getStructureType<VkFramebufferAttachmentImageInfo> (void)
{
	return VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO;
}

template<> VkStructureType getStructureType<VkFramebufferAttachmentsCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkRenderPassAttachmentBeginInfo> (void)
{
	return VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceUniformBufferStandardLayoutFeatures> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES;
}

template<> VkStructureType getStructureType<VkAttachmentReferenceStencilLayout> (void)
{
	return VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT;
}

template<> VkStructureType getStructureType<VkAttachmentDescriptionStencilLayout> (void)
{
	return VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceHostQueryResetFeatures> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceTimelineSemaphoreFeatures> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceTimelineSemaphoreProperties> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES;
}

template<> VkStructureType getStructureType<VkSemaphoreTypeCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkTimelineSemaphoreSubmitInfo> (void)
{
	return VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO;
}

template<> VkStructureType getStructureType<VkSemaphoreWaitInfo> (void)
{
	return VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO;
}

template<> VkStructureType getStructureType<VkSemaphoreSignalInfo> (void)
{
	return VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceBufferDeviceAddressFeatures> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES;
}

template<> VkStructureType getStructureType<VkBufferDeviceAddressInfo> (void)
{
	return VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO;
}

template<> VkStructureType getStructureType<VkBufferOpaqueCaptureAddressCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO;
}

template<> VkStructureType getStructureType<VkMemoryOpaqueCaptureAddressAllocateInfo> (void)
{
	return VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO;
}

template<> VkStructureType getStructureType<VkDeviceMemoryOpaqueCaptureAddressInfo> (void)
{
	return VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO;
}

template<> VkStructureType getStructureType<VkSwapchainCreateInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkPresentInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_PRESENT_INFO_KHR;
}

template<> VkStructureType getStructureType<VkImageSwapchainCreateInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkBindImageMemorySwapchainInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR;
}

template<> VkStructureType getStructureType<VkAcquireNextImageInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkDeviceGroupPresentCapabilitiesKHR> (void)
{
	return VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR;
}

template<> VkStructureType getStructureType<VkDeviceGroupPresentInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR;
}

template<> VkStructureType getStructureType<VkDeviceGroupSwapchainCreateInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkDisplayModeCreateInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkDisplaySurfaceCreateInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkDisplayPresentInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR;
}

template<> VkStructureType getStructureType<VkRenderingAttachmentInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR;
}

template<> VkStructureType getStructureType<VkRenderingInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_RENDERING_INFO_KHR;
}

template<> VkStructureType getStructureType<VkPipelineRenderingCreateInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceDynamicRenderingFeaturesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES_KHR;
}

template<> VkStructureType getStructureType<VkCommandBufferInheritanceRenderingInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO_KHR;
}

template<> VkStructureType getStructureType<VkRenderingFragmentShadingRateAttachmentInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR;
}

template<> VkStructureType getStructureType<VkRenderingFragmentDensityMapAttachmentInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT;
}

template<> VkStructureType getStructureType<VkAttachmentSampleCountInfoAMD> (void)
{
	return VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD;
}

template<> VkStructureType getStructureType<VkMultiviewPerViewAttributesInfoNVX> (void)
{
	return VK_STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_ATTRIBUTES_INFO_NVX;
}

template<> VkStructureType getStructureType<VkImportMemoryFdInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR;
}

template<> VkStructureType getStructureType<VkMemoryFdPropertiesKHR> (void)
{
	return VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR;
}

template<> VkStructureType getStructureType<VkMemoryGetFdInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR;
}

template<> VkStructureType getStructureType<VkImportSemaphoreFdInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR;
}

template<> VkStructureType getStructureType<VkSemaphoreGetFdInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDevicePushDescriptorPropertiesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR;
}

template<> VkStructureType getStructureType<VkPresentRegionsKHR> (void)
{
	return VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR;
}

template<> VkStructureType getStructureType<VkSharedPresentSurfaceCapabilitiesKHR> (void)
{
	return VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR;
}

template<> VkStructureType getStructureType<VkImportFenceFdInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR;
}

template<> VkStructureType getStructureType<VkFenceGetFdInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDevicePerformanceQueryFeaturesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDevicePerformanceQueryPropertiesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR;
}

template<> VkStructureType getStructureType<VkPerformanceCounterKHR> (void)
{
	return VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR;
}

template<> VkStructureType getStructureType<VkPerformanceCounterDescriptionKHR> (void)
{
	return VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR;
}

template<> VkStructureType getStructureType<VkQueryPoolPerformanceCreateInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkAcquireProfilingLockInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR;
}

template<> VkStructureType getStructureType<VkPerformanceQuerySubmitInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceSurfaceInfo2KHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR;
}

template<> VkStructureType getStructureType<VkSurfaceCapabilities2KHR> (void)
{
	return VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR;
}

template<> VkStructureType getStructureType<VkSurfaceFormat2KHR> (void)
{
	return VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR;
}

template<> VkStructureType getStructureType<VkDisplayProperties2KHR> (void)
{
	return VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR;
}

template<> VkStructureType getStructureType<VkDisplayPlaneProperties2KHR> (void)
{
	return VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR;
}

template<> VkStructureType getStructureType<VkDisplayModeProperties2KHR> (void)
{
	return VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR;
}

template<> VkStructureType getStructureType<VkDisplayPlaneInfo2KHR> (void)
{
	return VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR;
}

template<> VkStructureType getStructureType<VkDisplayPlaneCapabilities2KHR> (void)
{
	return VK_STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceShaderClockFeaturesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR;
}

template<> VkStructureType getStructureType<VkFragmentShadingRateAttachmentInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR;
}

template<> VkStructureType getStructureType<VkPipelineFragmentShadingRateStateCreateInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceFragmentShadingRateFeaturesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceFragmentShadingRatePropertiesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceFragmentShadingRateKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_KHR;
}

template<> VkStructureType getStructureType<VkSurfaceProtectedCapabilitiesKHR> (void)
{
	return VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDevicePresentWaitFeaturesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR;
}

template<> VkStructureType getStructureType<VkPipelineInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkPipelineExecutablePropertiesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR;
}

template<> VkStructureType getStructureType<VkPipelineExecutableInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkPipelineExecutableStatisticKHR> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR;
}

template<> VkStructureType getStructureType<VkPipelineExecutableInternalRepresentationKHR> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES_KHR;
}

template<> VkStructureType getStructureType<VkPipelineLibraryCreateInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkPresentIdKHR> (void)
{
	return VK_STRUCTURE_TYPE_PRESENT_ID_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDevicePresentIdFeaturesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR;
}

template<> VkStructureType getStructureType<VkMemoryBarrier2KHR> (void)
{
	return VK_STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR;
}

template<> VkStructureType getStructureType<VkBufferMemoryBarrier2KHR> (void)
{
	return VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2_KHR;
}

template<> VkStructureType getStructureType<VkImageMemoryBarrier2KHR> (void)
{
	return VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2_KHR;
}

template<> VkStructureType getStructureType<VkDependencyInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_DEPENDENCY_INFO_KHR;
}

template<> VkStructureType getStructureType<VkSemaphoreSubmitInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO_KHR;
}

template<> VkStructureType getStructureType<VkCommandBufferSubmitInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO_KHR;
}

template<> VkStructureType getStructureType<VkSubmitInfo2KHR> (void)
{
	return VK_STRUCTURE_TYPE_SUBMIT_INFO_2_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceSynchronization2FeaturesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES_KHR;
}

template<> VkStructureType getStructureType<VkQueueFamilyCheckpointProperties2NV> (void)
{
	return VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV;
}

template<> VkStructureType getStructureType<VkCheckpointData2NV> (void)
{
	return VK_STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR;
}

template<> VkStructureType getStructureType<VkBufferCopy2KHR> (void)
{
	return VK_STRUCTURE_TYPE_BUFFER_COPY_2_KHR;
}

template<> VkStructureType getStructureType<VkCopyBufferInfo2KHR> (void)
{
	return VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR;
}

template<> VkStructureType getStructureType<VkImageCopy2KHR> (void)
{
	return VK_STRUCTURE_TYPE_IMAGE_COPY_2_KHR;
}

template<> VkStructureType getStructureType<VkCopyImageInfo2KHR> (void)
{
	return VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR;
}

template<> VkStructureType getStructureType<VkBufferImageCopy2KHR> (void)
{
	return VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR;
}

template<> VkStructureType getStructureType<VkCopyBufferToImageInfo2KHR> (void)
{
	return VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR;
}

template<> VkStructureType getStructureType<VkCopyImageToBufferInfo2KHR> (void)
{
	return VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR;
}

template<> VkStructureType getStructureType<VkImageBlit2KHR> (void)
{
	return VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR;
}

template<> VkStructureType getStructureType<VkBlitImageInfo2KHR> (void)
{
	return VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR;
}

template<> VkStructureType getStructureType<VkImageResolve2KHR> (void)
{
	return VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR;
}

template<> VkStructureType getStructureType<VkResolveImageInfo2KHR> (void)
{
	return VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR;
}

template<> VkStructureType getStructureType<VkFormatPropertiesExtendedKHR> (void)
{
	return VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_EXTENDED_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceMaintenance4FeaturesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceMaintenance4PropertiesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES_KHR;
}

template<> VkStructureType getStructureType<VkDeviceBufferMemoryRequirementsKHR> (void)
{
	return VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS_KHR;
}

template<> VkStructureType getStructureType<VkDeviceImageMemoryRequirementsKHR> (void)
{
	return VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS_KHR;
}

template<> VkStructureType getStructureType<VkDebugReportCallbackCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkPipelineRasterizationStateRasterizationOrderAMD> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD;
}

template<> VkStructureType getStructureType<VkDebugMarkerObjectNameInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT;
}

template<> VkStructureType getStructureType<VkDebugMarkerObjectTagInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT;
}

template<> VkStructureType getStructureType<VkDebugMarkerMarkerInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT;
}

template<> VkStructureType getStructureType<VkDedicatedAllocationImageCreateInfoNV> (void)
{
	return VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV;
}

template<> VkStructureType getStructureType<VkDedicatedAllocationBufferCreateInfoNV> (void)
{
	return VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV;
}

template<> VkStructureType getStructureType<VkDedicatedAllocationMemoryAllocateInfoNV> (void)
{
	return VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceTransformFeedbackFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceTransformFeedbackPropertiesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT;
}

template<> VkStructureType getStructureType<VkPipelineRasterizationStateStreamCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkCuModuleCreateInfoNVX> (void)
{
	return VK_STRUCTURE_TYPE_CU_MODULE_CREATE_INFO_NVX;
}

template<> VkStructureType getStructureType<VkCuFunctionCreateInfoNVX> (void)
{
	return VK_STRUCTURE_TYPE_CU_FUNCTION_CREATE_INFO_NVX;
}

template<> VkStructureType getStructureType<VkCuLaunchInfoNVX> (void)
{
	return VK_STRUCTURE_TYPE_CU_LAUNCH_INFO_NVX;
}

template<> VkStructureType getStructureType<VkImageViewHandleInfoNVX> (void)
{
	return VK_STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX;
}

template<> VkStructureType getStructureType<VkImageViewAddressPropertiesNVX> (void)
{
	return VK_STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX;
}

template<> VkStructureType getStructureType<VkTextureLODGatherFormatPropertiesAMD> (void)
{
	return VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceCornerSampledImageFeaturesNV> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV;
}

template<> VkStructureType getStructureType<VkExternalMemoryImageCreateInfoNV> (void)
{
	return VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV;
}

template<> VkStructureType getStructureType<VkExportMemoryAllocateInfoNV> (void)
{
	return VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV;
}

template<> VkStructureType getStructureType<VkValidationFlagsEXT> (void)
{
	return VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkImageViewASTCDecodeModeEXT> (void)
{
	return VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceASTCDecodeFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkConditionalRenderingBeginInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceConditionalRenderingFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkCommandBufferInheritanceConditionalRenderingInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT;
}

template<> VkStructureType getStructureType<VkPipelineViewportWScalingStateCreateInfoNV> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV;
}

template<> VkStructureType getStructureType<VkSurfaceCapabilities2EXT> (void)
{
	return VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT;
}

template<> VkStructureType getStructureType<VkDisplayPowerInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT;
}

template<> VkStructureType getStructureType<VkDeviceEventInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT;
}

template<> VkStructureType getStructureType<VkDisplayEventInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT;
}

template<> VkStructureType getStructureType<VkSwapchainCounterCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkPresentTimesInfoGOOGLE> (void)
{
	return VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX;
}

template<> VkStructureType getStructureType<VkPipelineViewportSwizzleStateCreateInfoNV> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceDiscardRectanglePropertiesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT;
}

template<> VkStructureType getStructureType<VkPipelineDiscardRectangleStateCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceConservativeRasterizationPropertiesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT;
}

template<> VkStructureType getStructureType<VkPipelineRasterizationConservativeStateCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceDepthClipEnableFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkPipelineRasterizationDepthClipStateCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkHdrMetadataEXT> (void)
{
	return VK_STRUCTURE_TYPE_HDR_METADATA_EXT;
}

template<> VkStructureType getStructureType<VkDebugUtilsLabelEXT> (void)
{
	return VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT;
}

template<> VkStructureType getStructureType<VkDebugUtilsObjectNameInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT;
}

template<> VkStructureType getStructureType<VkDebugUtilsMessengerCallbackDataEXT> (void)
{
	return VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT;
}

template<> VkStructureType getStructureType<VkDebugUtilsMessengerCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkDebugUtilsObjectTagInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceInlineUniformBlockFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceInlineUniformBlockPropertiesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT;
}

template<> VkStructureType getStructureType<VkWriteDescriptorSetInlineUniformBlockEXT> (void)
{
	return VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT;
}

template<> VkStructureType getStructureType<VkDescriptorPoolInlineUniformBlockCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkSampleLocationsInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT;
}

template<> VkStructureType getStructureType<VkRenderPassSampleLocationsBeginInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT;
}

template<> VkStructureType getStructureType<VkPipelineSampleLocationsStateCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceSampleLocationsPropertiesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT;
}

template<> VkStructureType getStructureType<VkMultisamplePropertiesEXT> (void)
{
	return VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT;
}

template<> VkStructureType getStructureType<VkPipelineColorBlendAdvancedStateCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkPipelineCoverageToColorStateCreateInfoNV> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV;
}

template<> VkStructureType getStructureType<VkPipelineCoverageModulationStateCreateInfoNV> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceShaderSMBuiltinsPropertiesNV> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceShaderSMBuiltinsFeaturesNV> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV;
}

template<> VkStructureType getStructureType<VkDrmFormatModifierPropertiesListEXT> (void)
{
	return VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceImageDrmFormatModifierInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT;
}

template<> VkStructureType getStructureType<VkImageDrmFormatModifierListCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkImageDrmFormatModifierExplicitCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkImageDrmFormatModifierPropertiesEXT> (void)
{
	return VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT;
}

template<> VkStructureType getStructureType<VkValidationCacheCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkShaderModuleValidationCacheCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkPipelineViewportShadingRateImageStateCreateInfoNV> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceShadingRateImageFeaturesNV> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceShadingRateImagePropertiesNV> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV;
}

template<> VkStructureType getStructureType<VkPipelineViewportCoarseSampleOrderStateCreateInfoNV> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV;
}

template<> VkStructureType getStructureType<VkRayTracingShaderGroupCreateInfoNV> (void)
{
	return VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV;
}

template<> VkStructureType getStructureType<VkRayTracingPipelineCreateInfoNV> (void)
{
	return VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV;
}

template<> VkStructureType getStructureType<VkGeometryTrianglesNV> (void)
{
	return VK_STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV;
}

template<> VkStructureType getStructureType<VkGeometryAABBNV> (void)
{
	return VK_STRUCTURE_TYPE_GEOMETRY_AABB_NV;
}

template<> VkStructureType getStructureType<VkGeometryNV> (void)
{
	return VK_STRUCTURE_TYPE_GEOMETRY_NV;
}

template<> VkStructureType getStructureType<VkAccelerationStructureInfoNV> (void)
{
	return VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV;
}

template<> VkStructureType getStructureType<VkAccelerationStructureCreateInfoNV> (void)
{
	return VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV;
}

template<> VkStructureType getStructureType<VkBindAccelerationStructureMemoryInfoNV> (void)
{
	return VK_STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_NV;
}

template<> VkStructureType getStructureType<VkWriteDescriptorSetAccelerationStructureNV> (void)
{
	return VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV;
}

template<> VkStructureType getStructureType<VkAccelerationStructureMemoryRequirementsInfoNV> (void)
{
	return VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceRayTracingPropertiesNV> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV;
}

template<> VkStructureType getStructureType<VkPipelineRepresentativeFragmentTestStateCreateInfoNV> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceImageViewImageFormatInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT;
}

template<> VkStructureType getStructureType<VkFilterCubicImageViewImageFormatPropertiesEXT> (void)
{
	return VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT;
}

template<> VkStructureType getStructureType<VkDeviceQueueGlobalPriorityCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkImportMemoryHostPointerInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT;
}

template<> VkStructureType getStructureType<VkMemoryHostPointerPropertiesEXT> (void)
{
	return VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceExternalMemoryHostPropertiesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT;
}

template<> VkStructureType getStructureType<VkPipelineCompilerControlCreateInfoAMD> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD;
}

template<> VkStructureType getStructureType<VkCalibratedTimestampInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceShaderCorePropertiesAMD> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD;
}

template<> VkStructureType getStructureType<VkDeviceMemoryOverallocationCreateInfoAMD> (void)
{
	return VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT;
}

template<> VkStructureType getStructureType<VkPipelineVertexInputDivisorStateCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkPipelineCreationFeedbackCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceComputeShaderDerivativesFeaturesNV> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceMeshShaderFeaturesNV> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceMeshShaderPropertiesNV> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceShaderImageFootprintFeaturesNV> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV;
}

template<> VkStructureType getStructureType<VkPipelineViewportExclusiveScissorStateCreateInfoNV> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceExclusiveScissorFeaturesNV> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV;
}

template<> VkStructureType getStructureType<VkQueueFamilyCheckpointPropertiesNV> (void)
{
	return VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV;
}

template<> VkStructureType getStructureType<VkCheckpointDataNV> (void)
{
	return VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL;
}

template<> VkStructureType getStructureType<VkInitializePerformanceApiInfoINTEL> (void)
{
	return VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL;
}

template<> VkStructureType getStructureType<VkQueryPoolPerformanceQueryCreateInfoINTEL> (void)
{
	return VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL;
}

template<> VkStructureType getStructureType<VkPerformanceMarkerInfoINTEL> (void)
{
	return VK_STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL;
}

template<> VkStructureType getStructureType<VkPerformanceStreamMarkerInfoINTEL> (void)
{
	return VK_STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL;
}

template<> VkStructureType getStructureType<VkPerformanceOverrideInfoINTEL> (void)
{
	return VK_STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL;
}

template<> VkStructureType getStructureType<VkPerformanceConfigurationAcquireInfoINTEL> (void)
{
	return VK_STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL;
}

template<> VkStructureType getStructureType<VkPhysicalDevicePCIBusInfoPropertiesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT;
}

template<> VkStructureType getStructureType<VkDisplayNativeHdrSurfaceCapabilitiesAMD> (void)
{
	return VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD;
}

template<> VkStructureType getStructureType<VkSwapchainDisplayNativeHdrCreateInfoAMD> (void)
{
	return VK_STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceFragmentDensityMapFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceFragmentDensityMapPropertiesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT;
}

template<> VkStructureType getStructureType<VkRenderPassFragmentDensityMapCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceSubgroupSizeControlFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceSubgroupSizeControlPropertiesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT;
}

template<> VkStructureType getStructureType<VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceShaderCoreProperties2AMD> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceCoherentMemoryFeaturesAMD> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceMemoryBudgetPropertiesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceMemoryPriorityFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkMemoryPriorityAllocateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceBufferDeviceAddressFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkBufferDeviceAddressCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceToolPropertiesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT;
}

template<> VkStructureType getStructureType<VkValidationFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkCooperativeMatrixPropertiesNV> (void)
{
	return VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceCooperativeMatrixFeaturesNV> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceCooperativeMatrixPropertiesNV> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceCoverageReductionModeFeaturesNV> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV;
}

template<> VkStructureType getStructureType<VkPipelineCoverageReductionStateCreateInfoNV> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV;
}

template<> VkStructureType getStructureType<VkFramebufferMixedSamplesCombinationNV> (void)
{
	return VK_STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceYcbcrImageArraysFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceProvokingVertexFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceProvokingVertexPropertiesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_PROPERTIES_EXT;
}

template<> VkStructureType getStructureType<VkPipelineRasterizationProvokingVertexStateCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_PROVOKING_VERTEX_STATE_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkHeadlessSurfaceCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceLineRasterizationFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceLineRasterizationPropertiesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT;
}

template<> VkStructureType getStructureType<VkPipelineRasterizationLineStateCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceShaderAtomicFloatFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceIndexTypeUint8FeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceExtendedDynamicStateFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV;
}

template<> VkStructureType getStructureType<VkGraphicsShaderGroupCreateInfoNV> (void)
{
	return VK_STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV;
}

template<> VkStructureType getStructureType<VkGraphicsPipelineShaderGroupsCreateInfoNV> (void)
{
	return VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV;
}

template<> VkStructureType getStructureType<VkIndirectCommandsLayoutTokenNV> (void)
{
	return VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV;
}

template<> VkStructureType getStructureType<VkIndirectCommandsLayoutCreateInfoNV> (void)
{
	return VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV;
}

template<> VkStructureType getStructureType<VkGeneratedCommandsInfoNV> (void)
{
	return VK_STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV;
}

template<> VkStructureType getStructureType<VkGeneratedCommandsMemoryRequirementsInfoNV> (void)
{
	return VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceInheritedViewportScissorFeaturesNV> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV;
}

template<> VkStructureType getStructureType<VkCommandBufferInheritanceViewportScissorInfoNV> (void)
{
	return VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_VIEWPORT_SCISSOR_INFO_NV;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT;
}

template<> VkStructureType getStructureType<VkRenderPassTransformBeginInfoQCOM> (void)
{
	return VK_STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM;
}

template<> VkStructureType getStructureType<VkCommandBufferInheritanceRenderPassTransformInfoQCOM> (void)
{
	return VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceDeviceMemoryReportFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkDeviceMemoryReportCallbackDataEXT> (void)
{
	return VK_STRUCTURE_TYPE_DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT;
}

template<> VkStructureType getStructureType<VkDeviceDeviceMemoryReportCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceRobustness2FeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceRobustness2PropertiesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT;
}

template<> VkStructureType getStructureType<VkSamplerCustomBorderColorCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceCustomBorderColorPropertiesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceCustomBorderColorFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDevicePrivateDataFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkDevicePrivateDataCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkPrivateDataSlotCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceDiagnosticsConfigFeaturesNV> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV;
}

template<> VkStructureType getStructureType<VkDeviceDiagnosticsConfigCreateInfoNV> (void)
{
	return VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV;
}

template<> VkStructureType getStructureType<VkPipelineFragmentShadingRateEnumStateCreateInfoNV> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV;
}

template<> VkStructureType getStructureType<VkAccelerationStructureGeometryMotionTrianglesDataNV> (void)
{
	return VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV;
}

template<> VkStructureType getStructureType<VkAccelerationStructureMotionInfoNV> (void)
{
	return VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceRayTracingMotionBlurFeaturesNV> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceFragmentDensityMap2FeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceFragmentDensityMap2PropertiesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT;
}

template<> VkStructureType getStructureType<VkCopyCommandTransformInfoQCOM> (void)
{
	return VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceImageRobustnessFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDevice4444FormatsFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE;
}

template<> VkStructureType getStructureType<VkMutableDescriptorTypeCreateInfoVALVE> (void)
{
	return VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkVertexInputBindingDescription2EXT> (void)
{
	return VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT;
}

template<> VkStructureType getStructureType<VkVertexInputAttributeDescription2EXT> (void)
{
	return VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceDrmPropertiesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkSubpassShadingPipelineCreateInfoHUAWEI> (void)
{
	return VK_STRUCTURE_TYPE_SUBPASS_SHADING_PIPELINE_CREATE_INFO_HUAWEI;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceSubpassShadingFeaturesHUAWEI> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_FEATURES_HUAWEI;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceSubpassShadingPropertiesHUAWEI> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_PROPERTIES_HUAWEI;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceInvocationMaskFeaturesHUAWEI> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI;
}

template<> VkStructureType getStructureType<VkMemoryGetRemoteAddressInfoNV> (void)
{
	return VK_STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceExternalMemoryRDMAFeaturesNV> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceExtendedDynamicState2FeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceColorWriteEnableFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkPipelineColorWriteCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkQueueFamilyGlobalPriorityPropertiesEXT> (void)
{
	return VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceMultiDrawFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceMultiDrawPropertiesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceBorderColorSwizzleFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkSamplerBorderColorComponentMappingCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_SAMPLER_BORDER_COLOR_COMPONENT_MAPPING_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkAccelerationStructureGeometryTrianglesDataKHR> (void)
{
	return VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR;
}

template<> VkStructureType getStructureType<VkAccelerationStructureGeometryAabbsDataKHR> (void)
{
	return VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR;
}

template<> VkStructureType getStructureType<VkAccelerationStructureGeometryInstancesDataKHR> (void)
{
	return VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR;
}

template<> VkStructureType getStructureType<VkAccelerationStructureGeometryKHR> (void)
{
	return VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR;
}

template<> VkStructureType getStructureType<VkAccelerationStructureBuildGeometryInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR;
}

template<> VkStructureType getStructureType<VkAccelerationStructureCreateInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkWriteDescriptorSetAccelerationStructureKHR> (void)
{
	return VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceAccelerationStructureFeaturesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceAccelerationStructurePropertiesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR;
}

template<> VkStructureType getStructureType<VkAccelerationStructureDeviceAddressInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR;
}

template<> VkStructureType getStructureType<VkAccelerationStructureVersionInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_INFO_KHR;
}

template<> VkStructureType getStructureType<VkCopyAccelerationStructureToMemoryInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR;
}

template<> VkStructureType getStructureType<VkCopyMemoryToAccelerationStructureInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkCopyAccelerationStructureInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkAccelerationStructureBuildSizesInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR;
}

template<> VkStructureType getStructureType<VkRayTracingShaderGroupCreateInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkRayTracingPipelineInterfaceCreateInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkRayTracingPipelineCreateInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceRayTracingPipelineFeaturesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceRayTracingPipelinePropertiesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceRayQueryFeaturesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR;
}

template<> VkStructureType getStructureType<VkAndroidSurfaceCreateInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkAndroidHardwareBufferUsageANDROID> (void)
{
	return VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID;
}

template<> VkStructureType getStructureType<VkAndroidHardwareBufferPropertiesANDROID> (void)
{
	return VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID;
}

template<> VkStructureType getStructureType<VkAndroidHardwareBufferFormatPropertiesANDROID> (void)
{
	return VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID;
}

template<> VkStructureType getStructureType<VkImportAndroidHardwareBufferInfoANDROID> (void)
{
	return VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID;
}

template<> VkStructureType getStructureType<VkMemoryGetAndroidHardwareBufferInfoANDROID> (void)
{
	return VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID;
}

template<> VkStructureType getStructureType<VkExternalFormatANDROID> (void)
{
	return VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID;
}

template<> VkStructureType getStructureType<VkVideoQueueFamilyProperties2KHR> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_QUEUE_FAMILY_PROPERTIES_2_KHR;
}

template<> VkStructureType getStructureType<VkVideoProfileKHR> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_PROFILE_KHR;
}

template<> VkStructureType getStructureType<VkVideoProfilesKHR> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_PROFILES_KHR;
}

template<> VkStructureType getStructureType<VkVideoCapabilitiesKHR> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceVideoFormatInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_FORMAT_INFO_KHR;
}

template<> VkStructureType getStructureType<VkVideoFormatPropertiesKHR> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_FORMAT_PROPERTIES_KHR;
}

template<> VkStructureType getStructureType<VkVideoPictureResourceKHR> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_KHR;
}

template<> VkStructureType getStructureType<VkVideoReferenceSlotKHR> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_KHR;
}

template<> VkStructureType getStructureType<VkVideoGetMemoryPropertiesKHR> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_GET_MEMORY_PROPERTIES_KHR;
}

template<> VkStructureType getStructureType<VkVideoBindMemoryKHR> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_BIND_MEMORY_KHR;
}

template<> VkStructureType getStructureType<VkVideoSessionCreateInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_SESSION_CREATE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkVideoSessionParametersCreateInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_CREATE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkVideoSessionParametersUpdateInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_UPDATE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkVideoBeginCodingInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_BEGIN_CODING_INFO_KHR;
}

template<> VkStructureType getStructureType<VkVideoEndCodingInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_END_CODING_INFO_KHR;
}

template<> VkStructureType getStructureType<VkVideoCodingControlInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_CODING_CONTROL_INFO_KHR;
}

template<> VkStructureType getStructureType<VkVideoDecodeInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDevicePortabilitySubsetFeaturesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDevicePortabilitySubsetPropertiesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR;
}

template<> VkStructureType getStructureType<VkVideoEncodeInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_ENCODE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkVideoEncodeRateControlInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_INFO_KHR;
}

template<> VkStructureType getStructureType<VkVideoEncodeH264CapabilitiesEXT> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_CAPABILITIES_EXT;
}

template<> VkStructureType getStructureType<VkVideoEncodeH264SessionCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkVideoEncodeH264SessionParametersAddInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_ADD_INFO_EXT;
}

template<> VkStructureType getStructureType<VkVideoEncodeH264SessionParametersCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkVideoEncodeH264DpbSlotInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_DPB_SLOT_INFO_EXT;
}

template<> VkStructureType getStructureType<VkVideoEncodeH264NaluSliceEXT> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_NALU_SLICE_EXT;
}

template<> VkStructureType getStructureType<VkVideoEncodeH264VclFrameInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_VCL_FRAME_INFO_EXT;
}

template<> VkStructureType getStructureType<VkVideoEncodeH264EmitPictureParametersEXT> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_EMIT_PICTURE_PARAMETERS_EXT;
}

template<> VkStructureType getStructureType<VkVideoEncodeH264ProfileEXT> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PROFILE_EXT;
}

template<> VkStructureType getStructureType<VkVideoDecodeH264ProfileEXT> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PROFILE_EXT;
}

template<> VkStructureType getStructureType<VkVideoDecodeH264CapabilitiesEXT> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_CAPABILITIES_EXT;
}

template<> VkStructureType getStructureType<VkVideoDecodeH264SessionCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkVideoDecodeH264SessionParametersAddInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_ADD_INFO_EXT;
}

template<> VkStructureType getStructureType<VkVideoDecodeH264SessionParametersCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkVideoDecodeH264PictureInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PICTURE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkVideoDecodeH264MvcEXT> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_MVC_EXT;
}

template<> VkStructureType getStructureType<VkVideoDecodeH264DpbSlotInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_DPB_SLOT_INFO_EXT;
}

template<> VkStructureType getStructureType<VkVideoDecodeH265ProfileEXT> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_EXT;
}

template<> VkStructureType getStructureType<VkVideoDecodeH265CapabilitiesEXT> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_CAPABILITIES_EXT;
}

template<> VkStructureType getStructureType<VkVideoDecodeH265SessionCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkVideoDecodeH265SessionParametersAddInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_ADD_INFO_EXT;
}

template<> VkStructureType getStructureType<VkVideoDecodeH265SessionParametersCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkVideoDecodeH265PictureInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkVideoDecodeH265DpbSlotInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_EXT;
}

template<> VkStructureType getStructureType<VkImagePipeSurfaceCreateInfoFUCHSIA> (void)
{
	return VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA;
}

template<> VkStructureType getStructureType<VkImportMemoryZirconHandleInfoFUCHSIA> (void)
{
	return VK_STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA;
}

template<> VkStructureType getStructureType<VkMemoryZirconHandlePropertiesFUCHSIA> (void)
{
	return VK_STRUCTURE_TYPE_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA;
}

template<> VkStructureType getStructureType<VkMemoryGetZirconHandleInfoFUCHSIA> (void)
{
	return VK_STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA;
}

template<> VkStructureType getStructureType<VkImportSemaphoreZirconHandleInfoFUCHSIA> (void)
{
	return VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA;
}

template<> VkStructureType getStructureType<VkSemaphoreGetZirconHandleInfoFUCHSIA> (void)
{
	return VK_STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA;
}

template<> VkStructureType getStructureType<VkStreamDescriptorSurfaceCreateInfoGGP> (void)
{
	return VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP;
}

template<> VkStructureType getStructureType<VkPresentFrameTokenGGP> (void)
{
	return VK_STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP;
}

template<> VkStructureType getStructureType<VkIOSSurfaceCreateInfoMVK> (void)
{
	return VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK;
}

template<> VkStructureType getStructureType<VkMacOSSurfaceCreateInfoMVK> (void)
{
	return VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK;
}

template<> VkStructureType getStructureType<VkMetalSurfaceCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkViSurfaceCreateInfoNN> (void)
{
	return VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN;
}

template<> VkStructureType getStructureType<VkWaylandSurfaceCreateInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkWin32SurfaceCreateInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkImportMemoryWin32HandleInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkExportMemoryWin32HandleInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkMemoryWin32HandlePropertiesKHR> (void)
{
	return VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR;
}

template<> VkStructureType getStructureType<VkMemoryGetWin32HandleInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkWin32KeyedMutexAcquireReleaseInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkImportSemaphoreWin32HandleInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkExportSemaphoreWin32HandleInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkD3D12FenceSubmitInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR;
}

template<> VkStructureType getStructureType<VkSemaphoreGetWin32HandleInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkImportFenceWin32HandleInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkExportFenceWin32HandleInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkFenceGetWin32HandleInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkImportMemoryWin32HandleInfoNV> (void)
{
	return VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV;
}

template<> VkStructureType getStructureType<VkExportMemoryWin32HandleInfoNV> (void)
{
	return VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV;
}

template<> VkStructureType getStructureType<VkWin32KeyedMutexAcquireReleaseInfoNV> (void)
{
	return VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV;
}

template<> VkStructureType getStructureType<VkSurfaceFullScreenExclusiveInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkSurfaceCapabilitiesFullScreenExclusiveEXT> (void)
{
	return VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT;
}

template<> VkStructureType getStructureType<VkSurfaceFullScreenExclusiveWin32InfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT;
}

template<> VkStructureType getStructureType<VkXcbSurfaceCreateInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkXlibSurfaceCreateInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR;
}

