// Copyright 2019-2023 The Khronos Group Inc.
//
// SPDX-License-Identifier: CC-BY-4.0

[open,refpage='VkPresentIdKHR',desc='The list of presentation identifiers',type='structs']
--
The sname:VkPresentIdKHR structure is defined as:

include::{generated}/api/structs/VkPresentIdKHR.adoc[]

  * pname:sType is a elink:VkStructureType value identifying this structure.
  * pname:pNext is `NULL` or a pointer to a structure extending this
    structure.
  * pname:swapchainCount is the number of swapchains being presented to the
    fname:vkQueuePresentKHR command.
  * pname:pPresentIds is `NULL` or a pointer to an array of code:uint64_t
    with pname:swapchainCount entries.
    If not `NULL`, each non-zero value in pname:pPresentIds specifies the
    present id to be associated with the presentation of the swapchain with
    the same index in the flink:vkQueuePresentKHR call.

For applications to be able to reference specific presentation events queued
by a call to fname:vkQueuePresentKHR, an identifier needs to be associated
with them.
When the <<features-presentId, pname:presentId>> feature is enabled,
applications can: include the sname:VkPresentIdKHR structure in the
pname:pNext chain of the slink:VkPresentInfoKHR structure to supply
identifiers.

Each sname:VkSwapchainKHR has a presentId associated with it.
This value is initially set to zero when the sname:VkSwapchainKHR is
created.

When a sname:VkPresentIdKHR structure with a non-NULL pname:pPresentIds is
included in the pname:pNext chain of a slink:VkPresentInfoKHR structure,
each pname:pSwapchains entry has a presentId associated in the
pname:pPresentIds array at the same index as the swapchain in the
pname:pSwapchains array.
If this presentId is non-zero, then the application can: later use this
value to refer to that image presentation.
A value of zero indicates that this presentation has no associated
presentId.
A non-zero presentId must: be greater than any non-zero presentId passed
previously by the application for the same swapchain.

There is no requirement for any precise timing relationship between the
presentation of the image to the user and the update of the presentId value,
but implementations should: make this as close as possible to the
presentation of the first pixel in the new image to the user.

.Valid Usage
****
  * [[VUID-VkPresentIdKHR-swapchainCount-04998]]
    pname:swapchainCount must: be the same value as
    sname:VkPresentInfoKHR::pname:swapchainCount, where this
    sname:VkPresentIdKHR is in the pname:pNext chain of the
    sname:VkPresentInfoKHR structure
  * [[VUID-VkPresentIdKHR-presentIds-04999]]
    Each pname:presentIds entry must: be greater than any previous
    pname:presentIds entry passed for the associated pname:pSwapchains entry
****

include::{generated}/validity/structs/VkPresentIdKHR.adoc[]
--

ifdef::VK_KHR_present_wait[]
include::{chapters}/VK_KHR_present_wait/WaitForPresent.adoc[]
endif::VK_KHR_present_wait[]
