/* WARNING: This is auto-generated file. Do not modify, since changes will
 * be lost! Modify the generating script instead.
 */
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<VkMemoryAllocateInfo> (void)
{
	return VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
}

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

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<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<VkComputePipelineCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_COMPUTE_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<VkDescriptorSetLayoutCreateInfo> (void)
{
	return VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
}

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<VkWriteDescriptorSet> (void)
{
	return VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
}

template<> VkStructureType getStructureType<VkCopyDescriptorSet> (void)
{
	return VK_STRUCTURE_TYPE_COPY_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<VkMemoryBarrier> (void)
{
	return VK_STRUCTURE_TYPE_MEMORY_BARRIER;
}

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<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<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<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<VkPhysicalDeviceShaderFloat16Int8FeaturesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR;
}

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

template<> VkStructureType getStructureType<VkPhysicalDeviceImagelessFramebufferFeaturesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES_KHR;
}

template<> VkStructureType getStructureType<VkFramebufferAttachmentImageInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkFramebufferAttachmentsCreateInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkRenderPassAttachmentBeginInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO_KHR;
}

template<> VkStructureType getStructureType<VkAttachmentDescription2KHR> (void)
{
	return VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2_KHR;
}

template<> VkStructureType getStructureType<VkAttachmentReference2KHR> (void)
{
	return VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2_KHR;
}

template<> VkStructureType getStructureType<VkSubpassDescription2KHR> (void)
{
	return VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2_KHR;
}

template<> VkStructureType getStructureType<VkSubpassDependency2KHR> (void)
{
	return VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2_KHR;
}

template<> VkStructureType getStructureType<VkRenderPassCreateInfo2KHR> (void)
{
	return VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2_KHR;
}

template<> VkStructureType getStructureType<VkSubpassBeginInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO_KHR;
}

template<> VkStructureType getStructureType<VkSubpassEndInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_SUBPASS_END_INFO_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<VkImageFormatListCreateInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDevice8BitStorageFeaturesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceShaderAtomicInt64FeaturesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR;
}

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

template<> VkStructureType getStructureType<VkPhysicalDeviceDriverPropertiesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceFloatControlsPropertiesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR;
}

template<> VkStructureType getStructureType<VkSubpassDescriptionDepthStencilResolveKHR> (void)
{
	return VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceDepthStencilResolvePropertiesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceTimelineSemaphoreFeaturesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceTimelineSemaphorePropertiesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR;
}

template<> VkStructureType getStructureType<VkSemaphoreTypeCreateInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR;
}

template<> VkStructureType getStructureType<VkTimelineSemaphoreSubmitInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO_KHR;
}

template<> VkStructureType getStructureType<VkSemaphoreWaitInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO_KHR;
}

template<> VkStructureType getStructureType<VkSemaphoreSignalInfoKHR> (void)
{
	return VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceVulkanMemoryModelFeaturesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR;
}

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

template<> VkStructureType getStructureType<VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES_KHR;
}

template<> VkStructureType getStructureType<VkAttachmentReferenceStencilLayoutKHR> (void)
{
	return VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT_KHR;
}

template<> VkStructureType getStructureType<VkAttachmentDescriptionStencilLayoutKHR> (void)
{
	return VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT_KHR;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_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<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<VkImageViewHandleInfoNVX> (void)
{
	return VK_STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_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<VkDeviceGeneratedCommandsFeaturesNVX> (void)
{
	return VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVX;
}

template<> VkStructureType getStructureType<VkDeviceGeneratedCommandsLimitsNVX> (void)
{
	return VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVX;
}

template<> VkStructureType getStructureType<VkIndirectCommandsLayoutCreateInfoNVX> (void)
{
	return VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX;
}

template<> VkStructureType getStructureType<VkCmdProcessCommandsInfoNVX> (void)
{
	return VK_STRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVX;
}

template<> VkStructureType getStructureType<VkCmdReserveSpaceForCommandsInfoNVX> (void)
{
	return VK_STRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVX;
}

template<> VkStructureType getStructureType<VkObjectTableCreateInfoNVX> (void)
{
	return VK_STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVX;
}

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<VkDebugUtilsObjectNameInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT;
}

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

template<> VkStructureType getStructureType<VkDebugUtilsLabelEXT> (void)
{
	return VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_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<VkSamplerReductionModeCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_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<VkDescriptorSetLayoutBindingFlagsCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceDescriptorIndexingFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT;
}

template<> VkStructureType getStructureType<VkPhysicalDeviceDescriptorIndexingPropertiesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT;
}

template<> VkStructureType getStructureType<VkDescriptorSetVariableDescriptorCountAllocateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT;
}

template<> VkStructureType getStructureType<VkDescriptorSetVariableDescriptorCountLayoutSupportEXT> (void)
{
	return VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_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<VkQueryPoolCreateInfoINTEL> (void)
{
	return VK_STRUCTURE_TYPE_QUERY_POOL_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<VkPhysicalDeviceScalarBlockLayoutFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_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<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<VkBufferDeviceAddressInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_EXT;
}

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

template<> VkStructureType getStructureType<VkImageStencilUsageCreateInfoEXT> (void)
{
	return VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO_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<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<VkPhysicalDeviceHostQueryResetFeaturesEXT> (void)
{
	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT;
}

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

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

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<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<VkImagePipeSurfaceCreateInfoFUCHSIA> (void)
{
	return VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_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;
}

