Initialization

Before using Vulkan, an application must initialize it by loading the Vulkan commands, and creating a VkInstance object.

Command Function Pointers

Vulkan commands are not necessarily exposed by static linking on a platform. Commands to query function pointers for Vulkan commands are described below.

When extensions are promoted or otherwise incorporated into another extension or Vulkan core version, command aliases may be included. Whilst the behavior of each command alias is identical, the behavior of retrieving each alias’s function pointer is not. A function pointer for a given alias can only be retrieved if the extension or version that introduced that alias is supported and enabled, irrespective of whether any other alias is available.

vkGetInstanceProcAddrReturn a function pointer for a command
vkGetDeviceProcAddrReturn a function pointer for a command
PFN_vkVoidFunctionPlaceholder function pointer type returned by queries

Extending Physical Device From Device Extensions

When the VK_KHR_get_physical_device_properties2 extension is enabled, physical-device-level functionality of a device extension can be used with a physical device if the corresponding extension is enumerated by vkEnumerateDeviceExtensionProperties for that physical device, even before a logical device has been created.

To obtain a function pointer for a physical-device-level command from a device extension, an application can use vkGetInstanceProcAddr. This function pointer may point to dispatch code, which calls a different real implementation for different VkPhysicalDevice objects. Applications must not use a VkPhysicalDevice in any command added by an extension or core version that is not supported by that physical device.

Device extensions may define structures that can be added to the pNext chain of physical-device-level commands.

Instances

VkInstanceOpaque handle to an instance object
vkCreateInstanceCreate a new Vulkan instance
VkInstanceCreateInfoStructure specifying parameters of a newly created instance
VkInstanceCreateFlagBitsBitmask specifying behavior of the instance
VkInstanceCreateFlagsBitmask of VkInstanceCreateFlagBits
VkValidationFlagsEXTSpecify validation checks to disable for a Vulkan instance
VkValidationCheckEXTSpecify validation checks to disable
VkValidationFeaturesEXTSpecify validation features to enable or disable for a Vulkan instance
VkValidationFeatureEnableEXTSpecify validation features to enable
VkValidationFeatureDisableEXTSpecify validation features to disable

Disabling checks such as parameter validation and object lifetime validation prevents the reporting of error conditions that can cause other validation checks to behave incorrectly or crash. Some validation checks assume that their inputs are already valid and do not always revalidate them.

The VK_EXT_validation_features extension subsumes all the functionality provided in the VK_EXT_validation_flags extension.

VkLayerSettingsCreateInfoEXTSpecify layer capabilities for a Vulkan instance
VkLayerSettingEXTSpecify a layer capability to configure
VkLayerSettingTypeEXTType of the values that can be passed to a layer
VkDirectDriverLoadingListLUNARGStructure specifying additional drivers to load
VkDirectDriverLoadingInfoLUNARGStructure specifying the information required to load an additional driver
VkDirectDriverLoadingModeLUNARGSpecify loader behavior of added drivers
VkDirectDriverLoadingFlagsLUNARGReserved for future use
PFN_vkGetInstanceProcAddrLUNARGType definition for vkGetInstanceProcAddr
VkApplicationInfoStructure specifying application information
vkDestroyInstanceDestroy an instance of Vulkan