/* WARNING: This is auto-generated file. Do not modify, since changes will
 * be lost! Modify the generating script instead.
 */

void getInstanceExtensionFunctions (::std::string extName, ::std::vector<const char*>& functions)
{
	if (extName == "VK_KHR_surface")
	{
		functions.push_back("vkDestroySurfaceKHR");
		functions.push_back("vkGetPhysicalDeviceSurfaceSupportKHR");
		functions.push_back("vkGetPhysicalDeviceSurfaceCapabilitiesKHR");
		functions.push_back("vkGetPhysicalDeviceSurfaceFormatsKHR");
		functions.push_back("vkGetPhysicalDeviceSurfacePresentModesKHR");
	}
	else if (extName == "VK_KHR_swapchain")
		functions.push_back("vkGetPhysicalDevicePresentRectanglesKHR");
	else if (extName == "VK_KHR_display")
	{
		functions.push_back("vkGetPhysicalDeviceDisplayPropertiesKHR");
		functions.push_back("vkGetPhysicalDeviceDisplayPlanePropertiesKHR");
		functions.push_back("vkGetDisplayPlaneSupportedDisplaysKHR");
		functions.push_back("vkGetDisplayModePropertiesKHR");
		functions.push_back("vkCreateDisplayModeKHR");
		functions.push_back("vkGetDisplayPlaneCapabilitiesKHR");
		functions.push_back("vkCreateDisplayPlaneSurfaceKHR");
	}
	else if (extName == "VK_KHR_xlib_surface")
	{
		functions.push_back("vkCreateXlibSurfaceKHR");
		functions.push_back("vkGetPhysicalDeviceXlibPresentationSupportKHR");
	}
	else if (extName == "VK_KHR_xcb_surface")
	{
		functions.push_back("vkCreateXcbSurfaceKHR");
		functions.push_back("vkGetPhysicalDeviceXcbPresentationSupportKHR");
	}
	else if (extName == "VK_KHR_wayland_surface")
	{
		functions.push_back("vkCreateWaylandSurfaceKHR");
		functions.push_back("vkGetPhysicalDeviceWaylandPresentationSupportKHR");
	}
	else if (extName == "VK_KHR_mir_surface")
	{
		functions.push_back("vkCreateMirSurfaceKHR");
		functions.push_back("vkGetPhysicalDeviceMirPresentationSupportKHR");
	}
	else if (extName == "VK_KHR_android_surface")
		functions.push_back("vkCreateAndroidSurfaceKHR");
	else if (extName == "VK_KHR_win32_surface")
	{
		functions.push_back("vkCreateWin32SurfaceKHR");
		functions.push_back("vkGetPhysicalDeviceWin32PresentationSupportKHR");
	}
	else if (extName == "VK_KHR_get_physical_device_properties2")
	{
		functions.push_back("vkGetPhysicalDeviceFeatures2KHR");
		functions.push_back("vkGetPhysicalDeviceFormatProperties2KHR");
		functions.push_back("vkGetPhysicalDeviceImageFormatProperties2KHR");
		functions.push_back("vkGetPhysicalDeviceMemoryProperties2KHR");
		functions.push_back("vkGetPhysicalDeviceProperties2KHR");
		functions.push_back("vkGetPhysicalDeviceQueueFamilyProperties2KHR");
		functions.push_back("vkGetPhysicalDeviceSparseImageFormatProperties2KHR");
	}
	else if (extName == "VK_KHR_device_group_creation")
		functions.push_back("vkEnumeratePhysicalDeviceGroupsKHR");
	else if (extName == "VK_KHR_external_memory_capabilities")
		functions.push_back("vkGetPhysicalDeviceExternalBufferPropertiesKHR");
	else if (extName == "VK_KHR_external_semaphore_capabilities")
		functions.push_back("vkGetPhysicalDeviceExternalSemaphorePropertiesKHR");
	else if (extName == "VK_KHR_external_fence_capabilities")
		functions.push_back("vkGetPhysicalDeviceExternalFencePropertiesKHR");
	else if (extName == "VK_KHR_get_surface_capabilities2")
	{
		functions.push_back("vkGetPhysicalDeviceSurfaceCapabilities2KHR");
		functions.push_back("vkGetPhysicalDeviceSurfaceFormats2KHR");
	}
	else if (extName == "VK_KHR_get_display_properties2")
	{
		functions.push_back("vkGetPhysicalDeviceDisplayProperties2KHR");
		functions.push_back("vkGetPhysicalDeviceDisplayPlaneProperties2KHR");
		functions.push_back("vkGetDisplayModeProperties2KHR");
		functions.push_back("vkGetDisplayPlaneCapabilities2KHR");
	}
	else if (extName == "VK_EXT_debug_report")
	{
		functions.push_back("vkCreateDebugReportCallbackEXT");
		functions.push_back("vkDestroyDebugReportCallbackEXT");
		functions.push_back("vkDebugReportMessageEXT");
	}
	else if (extName == "VK_NV_external_memory_capabilities")
		functions.push_back("vkGetPhysicalDeviceExternalImageFormatPropertiesNV");
	else if (extName == "VK_NN_vi_surface")
		functions.push_back("vkCreateViSurfaceNN");
	else if (extName == "VK_NVX_device_generated_commands")
		functions.push_back("vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX");
	else if (extName == "VK_EXT_direct_mode_display")
		functions.push_back("vkReleaseDisplayEXT");
	else if (extName == "VK_EXT_acquire_xlib_display")
	{
		functions.push_back("vkAcquireXlibDisplayEXT");
		functions.push_back("vkGetRandROutputDisplayEXT");
	}
	else if (extName == "VK_EXT_display_surface_counter")
		functions.push_back("vkGetPhysicalDeviceSurfaceCapabilities2EXT");
	else if (extName == "VK_MVK_ios_surface")
		functions.push_back("vkCreateIOSSurfaceMVK");
	else if (extName == "VK_MVK_macos_surface")
		functions.push_back("vkCreateMacOSSurfaceMVK");
	else if (extName == "VK_EXT_sample_locations")
		functions.push_back("vkGetPhysicalDeviceMultisamplePropertiesEXT");
	else if (extName == "VK_NV_cooperative_matrix")
		functions.push_back("vkGetPhysicalDeviceCooperativeMatrixPropertiesNV");
	else
		DE_ASSERT("Extension name not found");
}

void getDeviceExtensionFunctions (::std::string extName, ::std::vector<const char*>& functions)
{
	if (extName == "VK_KHR_swapchain")
	{
		functions.push_back("vkCreateSwapchainKHR");
		functions.push_back("vkDestroySwapchainKHR");
		functions.push_back("vkGetSwapchainImagesKHR");
		functions.push_back("vkAcquireNextImageKHR");
		functions.push_back("vkQueuePresentKHR");
		functions.push_back("vkGetDeviceGroupPresentCapabilitiesKHR");
		functions.push_back("vkGetDeviceGroupSurfacePresentModesKHR");
		functions.push_back("vkAcquireNextImage2KHR");
	}
	else if (extName == "VK_KHR_display_swapchain")
		functions.push_back("vkCreateSharedSwapchainsKHR");
	else if (extName == "VK_KHR_device_group")
	{
		functions.push_back("vkCmdDispatchBaseKHR");
		functions.push_back("vkCmdSetDeviceMaskKHR");
		functions.push_back("vkGetDeviceGroupPeerMemoryFeaturesKHR");
	}
	else if (extName == "VK_KHR_maintenance1")
		functions.push_back("vkTrimCommandPoolKHR");
	else if (extName == "VK_KHR_external_memory_win32")
	{
		functions.push_back("vkGetMemoryWin32HandleKHR");
		functions.push_back("vkGetMemoryWin32HandlePropertiesKHR");
	}
	else if (extName == "VK_KHR_external_memory_fd")
	{
		functions.push_back("vkGetMemoryFdKHR");
		functions.push_back("vkGetMemoryFdPropertiesKHR");
	}
	else if (extName == "VK_KHR_external_semaphore_win32")
	{
		functions.push_back("vkImportSemaphoreWin32HandleKHR");
		functions.push_back("vkGetSemaphoreWin32HandleKHR");
	}
	else if (extName == "VK_KHR_external_semaphore_fd")
	{
		functions.push_back("vkImportSemaphoreFdKHR");
		functions.push_back("vkGetSemaphoreFdKHR");
	}
	else if (extName == "VK_KHR_push_descriptor")
	{
		functions.push_back("vkCmdPushDescriptorSetKHR");
		functions.push_back("vkCmdPushDescriptorSetWithTemplateKHR");
	}
	else if (extName == "VK_KHR_descriptor_update_template")
	{
		functions.push_back("vkCreateDescriptorUpdateTemplateKHR");
		functions.push_back("vkDestroyDescriptorUpdateTemplateKHR");
		functions.push_back("vkUpdateDescriptorSetWithTemplateKHR");
	}
	else if (extName == "VK_KHR_create_renderpass2")
	{
		functions.push_back("vkCreateRenderPass2KHR");
		functions.push_back("vkCmdBeginRenderPass2KHR");
		functions.push_back("vkCmdNextSubpass2KHR");
		functions.push_back("vkCmdEndRenderPass2KHR");
	}
	else if (extName == "VK_KHR_shared_presentable_image")
		functions.push_back("vkGetSwapchainStatusKHR");
	else if (extName == "VK_KHR_external_fence_win32")
	{
		functions.push_back("vkImportFenceWin32HandleKHR");
		functions.push_back("vkGetFenceWin32HandleKHR");
	}
	else if (extName == "VK_KHR_external_fence_fd")
	{
		functions.push_back("vkImportFenceFdKHR");
		functions.push_back("vkGetFenceFdKHR");
	}
	else if (extName == "VK_KHR_get_memory_requirements2")
	{
		functions.push_back("vkGetBufferMemoryRequirements2KHR");
		functions.push_back("vkGetImageMemoryRequirements2KHR");
		functions.push_back("vkGetImageSparseMemoryRequirements2KHR");
	}
	else if (extName == "VK_KHR_sampler_ycbcr_conversion")
	{
		functions.push_back("vkCreateSamplerYcbcrConversionKHR");
		functions.push_back("vkDestroySamplerYcbcrConversionKHR");
	}
	else if (extName == "VK_KHR_bind_memory2")
	{
		functions.push_back("vkBindBufferMemory2KHR");
		functions.push_back("vkBindImageMemory2KHR");
	}
	else if (extName == "VK_KHR_maintenance3")
		functions.push_back("vkGetDescriptorSetLayoutSupportKHR");
	else if (extName == "VK_EXT_debug_marker")
	{
		functions.push_back("vkDebugMarkerSetObjectTagEXT");
		functions.push_back("vkDebugMarkerSetObjectNameEXT");
		functions.push_back("vkCmdDebugMarkerBeginEXT");
		functions.push_back("vkCmdDebugMarkerEndEXT");
		functions.push_back("vkCmdDebugMarkerInsertEXT");
	}
	else if (extName == "VK_AMD_draw_indirect_count")
	{
		functions.push_back("vkCmdDrawIndirectCountAMD");
		functions.push_back("vkCmdDrawIndexedIndirectCountAMD");
	}
	else if (extName == "VK_KHR_draw_indirect_count")
	{
		functions.push_back("vkCmdDrawIndirectCountKHR");
		functions.push_back("vkCmdDrawIndexedIndirectCountKHR");
	}
	else if (extName == "VK_NV_external_memory_win32")
		functions.push_back("vkGetMemoryWin32HandleNV");
	else if (extName == "VK_EXT_conditional_rendering")
	{
		functions.push_back("vkCmdBeginConditionalRenderingEXT");
		functions.push_back("vkCmdEndConditionalRenderingEXT");
	}
	else if (extName == "VK_NVX_device_generated_commands")
	{
		functions.push_back("vkCmdProcessCommandsNVX");
		functions.push_back("vkCmdReserveSpaceForCommandsNVX");
		functions.push_back("vkCreateIndirectCommandsLayoutNVX");
		functions.push_back("vkDestroyIndirectCommandsLayoutNVX");
		functions.push_back("vkCreateObjectTableNVX");
		functions.push_back("vkDestroyObjectTableNVX");
		functions.push_back("vkRegisterObjectsNVX");
		functions.push_back("vkUnregisterObjectsNVX");
	}
	else if (extName == "VK_NV_clip_space_w_scaling")
		functions.push_back("vkCmdSetViewportWScalingNV");
	else if (extName == "VK_EXT_display_control")
	{
		functions.push_back("vkDisplayPowerControlEXT");
		functions.push_back("vkRegisterDeviceEventEXT");
		functions.push_back("vkRegisterDisplayEventEXT");
		functions.push_back("vkGetSwapchainCounterEXT");
	}
	else if (extName == "VK_GOOGLE_display_timing")
	{
		functions.push_back("vkGetRefreshCycleDurationGOOGLE");
		functions.push_back("vkGetPastPresentationTimingGOOGLE");
	}
	else if (extName == "VK_EXT_discard_rectangles")
		functions.push_back("vkCmdSetDiscardRectangleEXT");
	else if (extName == "VK_EXT_hdr_metadata")
		functions.push_back("vkSetHdrMetadataEXT");
	else if (extName == "VK_EXT_sample_locations")
		functions.push_back("vkCmdSetSampleLocationsEXT");
	else if (extName == "VK_EXT_validation_cache")
	{
		functions.push_back("vkCreateValidationCacheEXT");
		functions.push_back("vkDestroyValidationCacheEXT");
		functions.push_back("vkMergeValidationCachesEXT");
		functions.push_back("vkGetValidationCacheDataEXT");
	}
	else if (extName == "VK_ANDROID_external_memory_android_hardware_buffer")
	{
		functions.push_back("vkGetMemoryHostPointerPropertiesEXT");
		functions.push_back("vkGetAndroidHardwareBufferPropertiesANDROID");
		functions.push_back("vkGetMemoryAndroidHardwareBufferANDROID");
	}
	else if (extName == "VK_EXT_buffer_device_address")
		functions.push_back("vkGetBufferDeviceAddressEXT");
	else if (extName == "VK_EXT_host_query_reset")
		functions.push_back("vkResetQueryPoolEXT");
	else
		DE_ASSERT("Extension name not found");
}

::std::string instanceExtensionNames[] =
{
	"VK_KHR_surface",
	"VK_KHR_display",
	"VK_KHR_xlib_surface",
	"VK_KHR_xcb_surface",
	"VK_KHR_wayland_surface",
	"VK_KHR_mir_surface",
	"VK_KHR_android_surface",
	"VK_KHR_win32_surface",
	"VK_KHR_get_physical_device_properties2",
	"VK_KHR_device_group_creation",
	"VK_KHR_external_memory_capabilities",
	"VK_KHR_external_semaphore_capabilities",
	"VK_KHR_external_fence_capabilities",
	"VK_KHR_get_surface_capabilities2",
	"VK_KHR_get_display_properties2",
	"VK_EXT_debug_report",
	"VK_NV_external_memory_capabilities",
	"VK_NN_vi_surface",
	"VK_EXT_direct_mode_display",
	"VK_EXT_acquire_xlib_display",
	"VK_EXT_display_surface_counter",
	"VK_MVK_ios_surface",
	"VK_MVK_macos_surface",
	"VK_NV_cooperative_matrix"
};

::std::string deviceExtensionNames[] =
{
	"VK_KHR_swapchain",
	"VK_KHR_display_swapchain",
	"VK_KHR_device_group",
	"VK_KHR_maintenance1",
	"VK_KHR_external_memory_win32",
	"VK_KHR_external_memory_fd",
	"VK_KHR_external_semaphore_win32",
	"VK_KHR_external_semaphore_fd",
	"VK_KHR_push_descriptor",
	"VK_KHR_descriptor_update_template",
	"VK_KHR_create_renderpass2",
	"VK_KHR_shared_presentable_image",
	"VK_KHR_external_fence_win32",
	"VK_KHR_external_fence_fd",
	"VK_KHR_get_memory_requirements2",
	"VK_KHR_sampler_ycbcr_conversion",
	"VK_KHR_bind_memory2",
	"VK_KHR_maintenance3",
	"VK_EXT_debug_marker",
	"VK_AMD_draw_indirect_count",
	"VK_KHR_draw_indirect_count",
	"VK_NV_external_memory_win32",
	"VK_EXT_conditional_rendering",
	"VK_NVX_device_generated_commands",
	"VK_NV_clip_space_w_scaling",
	"VK_EXT_display_control",
	"VK_GOOGLE_display_timing",
	"VK_EXT_discard_rectangles",
	"VK_EXT_hdr_metadata",
	"VK_EXT_sample_locations",
	"VK_EXT_validation_cache",
	"VK_ANDROID_external_memory_android_hardware_buffer",
	"VK_EXT_buffer_device_address",
	"VK_EXT_host_query_reset"
};
