Function Prototype

vkDestroyDevice

Destroy a logical device

To destroy a device, call:

void vkDestroyDevice(
    VkDevice device,
    const VkAllocationCallbacks* pAllocator);
  • device is the logical device to destroy.
  • pAllocator controls host memory allocation as described in the Memory Allocation chapter.

To ensure that no work is active on the device, vkDeviceWaitIdle can be used to gate the destruction of the device. Prior to destroying a device, an application is responsible for destroying/freeing any Vulkan objects that were created using that device as the first parameter of the corresponding vkCreate* or vkAllocate* command.

The lifetime of each of these objects is bound by the lifetime of the VkDevice object. Therefore, to avoid resource leaks, it is critical that an application explicitly free all of these resources prior to calling vkDestroyDevice.

Valid Usage

VUID-vkDestroyDevice-device-05137

All child objects created on devicemust have been destroyed prior to destroying device

VUID-vkDestroyDevice-device-00379

If VkAllocationCallbacks were provided when device was created, a compatible set of callbacks must be provided here

VUID-vkDestroyDevice-device-00380

If no VkAllocationCallbacks were provided when device was created, pAllocator must be NULL

Valid Usage (Implicit)

VUID-vkDestroyDevice-device-parameter

If device is not NULL, device must be a valid VkDevice handle

VUID-vkDestroyDevice-pAllocator-parameter

If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure

Host Synchronization

  • Host access to device must be externally synchronized
  • Host access to all VkQueue objects created from device must be externally synchronized ::