/* WARNING: This is auto-generated file. Do not modify, since changes will
 * be lost! Modify the generating script instead.
 */
DestroyInstanceFunc													destroyInstance;
EnumeratePhysicalDevicesFunc										enumeratePhysicalDevices;
GetPhysicalDeviceFeaturesFunc										getPhysicalDeviceFeatures;
GetPhysicalDeviceFormatPropertiesFunc								getPhysicalDeviceFormatProperties;
GetPhysicalDeviceImageFormatPropertiesFunc							getPhysicalDeviceImageFormatProperties;
GetPhysicalDevicePropertiesFunc										getPhysicalDeviceProperties;
GetPhysicalDeviceQueueFamilyPropertiesFunc							getPhysicalDeviceQueueFamilyProperties;
GetPhysicalDeviceMemoryPropertiesFunc								getPhysicalDeviceMemoryProperties;
CreateDeviceFunc													createDevice;
EnumerateDeviceExtensionPropertiesFunc								enumerateDeviceExtensionProperties;
EnumerateDeviceLayerPropertiesFunc									enumerateDeviceLayerProperties;
GetPhysicalDeviceSparseImageFormatPropertiesFunc					getPhysicalDeviceSparseImageFormatProperties;
EnumeratePhysicalDeviceGroupsFunc									enumeratePhysicalDeviceGroups;
GetPhysicalDeviceFeatures2Func										getPhysicalDeviceFeatures2;
GetPhysicalDeviceProperties2Func									getPhysicalDeviceProperties2;
GetPhysicalDeviceFormatProperties2Func								getPhysicalDeviceFormatProperties2;
GetPhysicalDeviceImageFormatProperties2Func							getPhysicalDeviceImageFormatProperties2;
GetPhysicalDeviceQueueFamilyProperties2Func							getPhysicalDeviceQueueFamilyProperties2;
GetPhysicalDeviceMemoryProperties2Func								getPhysicalDeviceMemoryProperties2;
GetPhysicalDeviceSparseImageFormatProperties2Func					getPhysicalDeviceSparseImageFormatProperties2;
GetPhysicalDeviceExternalBufferPropertiesFunc						getPhysicalDeviceExternalBufferProperties;
GetPhysicalDeviceExternalFencePropertiesFunc						getPhysicalDeviceExternalFenceProperties;
GetPhysicalDeviceExternalSemaphorePropertiesFunc					getPhysicalDeviceExternalSemaphoreProperties;
DestroySurfaceKHRFunc												destroySurfaceKHR;
GetPhysicalDeviceSurfaceSupportKHRFunc								getPhysicalDeviceSurfaceSupportKHR;
GetPhysicalDeviceSurfaceCapabilitiesKHRFunc							getPhysicalDeviceSurfaceCapabilitiesKHR;
GetPhysicalDeviceSurfaceFormatsKHRFunc								getPhysicalDeviceSurfaceFormatsKHR;
GetPhysicalDeviceSurfacePresentModesKHRFunc							getPhysicalDeviceSurfacePresentModesKHR;
GetPhysicalDevicePresentRectanglesKHRFunc							getPhysicalDevicePresentRectanglesKHR;
GetPhysicalDeviceDisplayPropertiesKHRFunc							getPhysicalDeviceDisplayPropertiesKHR;
GetPhysicalDeviceDisplayPlanePropertiesKHRFunc						getPhysicalDeviceDisplayPlanePropertiesKHR;
GetDisplayPlaneSupportedDisplaysKHRFunc								getDisplayPlaneSupportedDisplaysKHR;
GetDisplayModePropertiesKHRFunc										getDisplayModePropertiesKHR;
CreateDisplayModeKHRFunc											createDisplayModeKHR;
GetDisplayPlaneCapabilitiesKHRFunc									getDisplayPlaneCapabilitiesKHR;
CreateDisplayPlaneSurfaceKHRFunc									createDisplayPlaneSurfaceKHR;
GetPhysicalDeviceFeatures2KHRFunc									getPhysicalDeviceFeatures2KHR;
GetPhysicalDeviceProperties2KHRFunc									getPhysicalDeviceProperties2KHR;
GetPhysicalDeviceFormatProperties2KHRFunc							getPhysicalDeviceFormatProperties2KHR;
GetPhysicalDeviceImageFormatProperties2KHRFunc						getPhysicalDeviceImageFormatProperties2KHR;
GetPhysicalDeviceQueueFamilyProperties2KHRFunc						getPhysicalDeviceQueueFamilyProperties2KHR;
GetPhysicalDeviceMemoryProperties2KHRFunc							getPhysicalDeviceMemoryProperties2KHR;
GetPhysicalDeviceSparseImageFormatProperties2KHRFunc				getPhysicalDeviceSparseImageFormatProperties2KHR;
GetPhysicalDeviceExternalBufferPropertiesKHRFunc					getPhysicalDeviceExternalBufferPropertiesKHR;
GetPhysicalDeviceExternalSemaphorePropertiesKHRFunc					getPhysicalDeviceExternalSemaphorePropertiesKHR;
GetPhysicalDeviceExternalFencePropertiesKHRFunc						getPhysicalDeviceExternalFencePropertiesKHR;
EnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHRFunc	enumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR;
GetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHRFunc			getPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR;
GetPhysicalDeviceSurfaceCapabilities2KHRFunc						getPhysicalDeviceSurfaceCapabilities2KHR;
GetPhysicalDeviceSurfaceFormats2KHRFunc								getPhysicalDeviceSurfaceFormats2KHR;
GetPhysicalDeviceDisplayProperties2KHRFunc							getPhysicalDeviceDisplayProperties2KHR;
GetPhysicalDeviceDisplayPlaneProperties2KHRFunc						getPhysicalDeviceDisplayPlaneProperties2KHR;
GetDisplayModeProperties2KHRFunc									getDisplayModeProperties2KHR;
GetDisplayPlaneCapabilities2KHRFunc									getDisplayPlaneCapabilities2KHR;
GetPhysicalDeviceFragmentShadingRatesKHRFunc						getPhysicalDeviceFragmentShadingRatesKHR;
CreateDebugReportCallbackEXTFunc									createDebugReportCallbackEXT;
DestroyDebugReportCallbackEXTFunc									destroyDebugReportCallbackEXT;
DebugReportMessageEXTFunc											debugReportMessageEXT;
GetPhysicalDeviceExternalImageFormatPropertiesNVFunc				getPhysicalDeviceExternalImageFormatPropertiesNV;
ReleaseDisplayEXTFunc												releaseDisplayEXT;
GetPhysicalDeviceSurfaceCapabilities2EXTFunc						getPhysicalDeviceSurfaceCapabilities2EXT;
CreateDebugUtilsMessengerEXTFunc									createDebugUtilsMessengerEXT;
DestroyDebugUtilsMessengerEXTFunc									destroyDebugUtilsMessengerEXT;
SubmitDebugUtilsMessageEXTFunc										submitDebugUtilsMessageEXT;
GetPhysicalDeviceMultisamplePropertiesEXTFunc						getPhysicalDeviceMultisamplePropertiesEXT;
GetPhysicalDeviceCalibrateableTimeDomainsEXTFunc					getPhysicalDeviceCalibrateableTimeDomainsEXT;
GetPhysicalDeviceToolPropertiesEXTFunc								getPhysicalDeviceToolPropertiesEXT;
GetPhysicalDeviceCooperativeMatrixPropertiesNVFunc					getPhysicalDeviceCooperativeMatrixPropertiesNV;
GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNVFunc	getPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV;
CreateHeadlessSurfaceEXTFunc										createHeadlessSurfaceEXT;
AcquireDrmDisplayEXTFunc											acquireDrmDisplayEXT;
GetDrmDisplayEXTFunc												getDrmDisplayEXT;
AcquireWinrtDisplayNVFunc											acquireWinrtDisplayNV;
GetWinrtDisplayNVFunc												getWinrtDisplayNV;
CreateAndroidSurfaceKHRFunc											createAndroidSurfaceKHR;
GetPhysicalDeviceVideoCapabilitiesKHRFunc							getPhysicalDeviceVideoCapabilitiesKHR;
GetPhysicalDeviceVideoFormatPropertiesKHRFunc						getPhysicalDeviceVideoFormatPropertiesKHR;
CreateImagePipeSurfaceFUCHSIAFunc									createImagePipeSurfaceFUCHSIA;
CreateStreamDescriptorSurfaceGGPFunc								createStreamDescriptorSurfaceGGP;
CreateIOSSurfaceMVKFunc												createIOSSurfaceMVK;
CreateMacOSSurfaceMVKFunc											createMacOSSurfaceMVK;
CreateMetalSurfaceEXTFunc											createMetalSurfaceEXT;
CreateViSurfaceNNFunc												createViSurfaceNN;
CreateWaylandSurfaceKHRFunc											createWaylandSurfaceKHR;
GetPhysicalDeviceWaylandPresentationSupportKHRFunc					getPhysicalDeviceWaylandPresentationSupportKHR;
CreateWin32SurfaceKHRFunc											createWin32SurfaceKHR;
GetPhysicalDeviceWin32PresentationSupportKHRFunc					getPhysicalDeviceWin32PresentationSupportKHR;
GetPhysicalDeviceSurfacePresentModes2EXTFunc						getPhysicalDeviceSurfacePresentModes2EXT;
CreateXcbSurfaceKHRFunc												createXcbSurfaceKHR;
GetPhysicalDeviceXcbPresentationSupportKHRFunc						getPhysicalDeviceXcbPresentationSupportKHR;
CreateXlibSurfaceKHRFunc											createXlibSurfaceKHR;
GetPhysicalDeviceXlibPresentationSupportKHRFunc						getPhysicalDeviceXlibPresentationSupportKHR;
AcquireXlibDisplayEXTFunc											acquireXlibDisplayEXT;
GetRandROutputDisplayEXTFunc										getRandROutputDisplayEXT;
