/* WARNING: This is auto-generated file. Do not modify, since changes will
 * be lost! Modify the generating script instead.
 * This file was generated by /scripts/gen_framework.py
 */
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;
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;
CreateAndroidSurfaceKHRFunc											createAndroidSurfaceKHR;
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;
