vkCreateDevice
A logical device is created as a connection to a physical device. To create a logical device, call:
VkResult vkCreateDevice(
VkPhysicalDevice physicalDevice,
const VkDeviceCreateInfo* pCreateInfo,
const VkAllocationCallbacks* pAllocator,
VkDevice* pDevice);
physicalDevice
must be one of the device handles returned from a call tovkEnumeratePhysicalDevices
(see Physical Device Enumeration).pCreateInfo
is a pointer to a VkDeviceCreateInfo structure containing information about how to create the device.pAllocator
controls host memory allocation as described in the Memory Allocation chapter.pDevice
is a pointer to a handle in which the created VkDevice is returned.
vkCreateDevice
verifies that extensions and features requested in the
ppEnabledExtensionNames
and pEnabledFeatures
members of
pCreateInfo
, respectively, are supported by the implementation.
If any requested extension is not supported, vkCreateDevice
must
return VK_ERROR_EXTENSION_NOT_PRESENT
.
If any requested feature is not supported, vkCreateDevice
must return
VK_ERROR_FEATURE_NOT_PRESENT
.
Support for extensions can be checked before creating a device by querying
vkEnumerateDeviceExtensionProperties.
Support for features can similarly be checked by querying
vkGetPhysicalDeviceFeatures.
After verifying and enabling the extensions the VkDevice
object is
created and returned to the application.
Multiple logical devices can be created from the same physical device.
Logical device creation may fail due to lack of device-specific resources
(in addition to other errors).
If that occurs, vkCreateDevice
will return
VK_ERROR_TOO_MANY_OBJECTS
.
Valid Usage
VUID-vkCreateDevice-ppEnabledExtensionNames-01387
All required device
extensions for each extension in the
VkDeviceCreateInfo::ppEnabledExtensionNames
list must also
be present in that list
Valid Usage (Implicit)
VUID-vkCreateDevice-physicalDevice-parameter
physicalDevice
must be a valid VkPhysicalDevice handle
VUID-vkCreateDevice-pCreateInfo-parameter
pCreateInfo
must be a valid pointer to a valid VkDeviceCreateInfo structure
VUID-vkCreateDevice-pAllocator-parameter
If pAllocator
is not NULL
, pAllocator
must be a valid pointer to a valid VkAllocationCallbacks structure
VUID-vkCreateDevice-pDevice-parameter
pDevice
must be a valid pointer to a VkDevice handle