Function Prototype

vkAcquireNextImageKHR

Retrieve the index of the next available presentable image

To acquire an available presentable image to use, and retrieve the index of that image, call:

VkResult vkAcquireNextImageKHR(
    VkDevice device,
    VkSwapchainKHR swapchain,
    uint64_t timeout,
    VkSemaphore semaphore,
    VkFence fence,
    uint32_t* pImageIndex);
  • device is the device associated with swapchain.
  • swapchain is the non-retired swapchain from which an image is being acquired.
  • timeout specifies how long the function waits, in nanoseconds, if no image is available.
  • semaphore is VK_NULL_HANDLE or a semaphore to signal.
  • fence is VK_NULL_HANDLE or a fence to signal.
  • pImageIndex is a pointer to a uint32_t in which the index of the next image to use (i.e. an index into the array of images returned by vkGetSwapchainImagesKHR) is returned.

If the swapchain has been created with the VK_SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_EXT flag, the image whose index is returned in pImageIndex will be fully backed by memory before this call returns to the application, as if it is bound completely and contiguously to a single VkDeviceMemory object.

Valid Usage

VUID-vkAcquireNextImageKHR-swapchain-01285

swapchain must not be in the retired state

VUID-vkAcquireNextImageKHR-semaphore-01286

If semaphore is not VK_NULL_HANDLE, it must be unsignaled

VUID-vkAcquireNextImageKHR-semaphore-01779

If semaphore is not VK_NULL_HANDLE, it must not have any uncompleted signal or wait operations pending

VUID-vkAcquireNextImageKHR-fence-01287

If fence is not VK_NULL_HANDLE, fence must be unsignaled

VUID-vkAcquireNextImageKHR-fence-10066

If fence is not VK_NULL_HANDLE, fence must not be associated with any other queue command that has not yet completed execution on that queue

VUID-vkAcquireNextImageKHR-semaphore-01780

semaphore and fence must not both be equal to VK_NULL_HANDLE

VUID-vkAcquireNextImageKHR-surface-07783

If forward progress cannot be guaranteed for the surface used to create the swapchain member of pAcquireInfo, timeout must not be UINT64_MAX

VUID-vkAcquireNextImageKHR-semaphore-03265

semaphore must have a VkSemaphoreType of VK_SEMAPHORE_TYPE_BINARY

Valid Usage (Implicit)

VUID-vkAcquireNextImageKHR-semaphore-parameter

If semaphore is not VK_NULL_HANDLE, semaphore must be a valid VkSemaphore handle

VUID-vkAcquireNextImageKHR-fence-parameter

If fence is not VK_NULL_HANDLE, fence must be a valid VkFence handle

VUID-vkAcquireNextImageKHR-pImageIndex-parameter

pImageIndex must be a valid pointer to a uint32_t value

VUID-vkAcquireNextImageKHR-swapchain-parent

swapchain must have been created, allocated, or retrieved from device

VUID-vkAcquireNextImageKHR-semaphore-parent

If semaphore is a valid handle, it must have been created, allocated, or retrieved from device

VUID-vkAcquireNextImageKHR-fence-parent

If fence is a valid handle, it must have been created, allocated, or retrieved from device

Host Synchronization

  • Host access to swapchain must be externally synchronized
  • Host access to semaphore must be externally synchronized
  • Host access to fence must be externally synchronized ::