// Copyright (c) 2018-2020 Google LLC
//
// SPDX-License-Identifier: CC-BY-4.0


[open,refpage='VkPresentTimesInfoGOOGLE',desc='The earliest time each image should be presented',type='structs']
--
When the `apiext:VK_GOOGLE_display_timing` extension is enabled, additional
fields can: be specified that allow an application to specify the earliest
time that an image should be displayed.
This allows an application to avoid stutter that is caused by an image being
displayed earlier than planned.
Such stuttering can occur with both fixed and variable-refresh-rate
displays, because stuttering occurs when the geometry is not correctly
positioned for when the image is displayed.
An application can: instruct the presentation engine that an image should
not be displayed earlier than a specified time by adding a
sname:VkPresentTimesInfoGOOGLE structure to the pname:pNext chain of the
sname:VkPresentInfoKHR structure.

The sname:VkPresentTimesInfoGOOGLE structure is defined as:

include::{generated}/api/structs/VkPresentTimesInfoGOOGLE.txt[]

  * pname:sType is the type of 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 by
    this command.
  * pname:pTimes is `NULL` or a pointer to an array of
    sname:VkPresentTimeGOOGLE elements with pname:swapchainCount entries.
    If not `NULL`, each element of pname:pTimes contains the earliest time
    to present the image corresponding to the entry in the
    sname:VkPresentInfoKHR::pname:pImageIndices array.

.Valid Usage
****
  * [[VUID-VkPresentTimesInfoGOOGLE-swapchainCount-01247]]
    pname:swapchainCount must: be the same value as
    sname:VkPresentInfoKHR::pname:swapchainCount, where
    sname:VkPresentInfoKHR is included in the pname:pNext chain of this
    sname:VkPresentTimesInfoGOOGLE structure
****

include::{generated}/validity/structs/VkPresentTimesInfoGOOGLE.txt[]
--

[open,refpage='VkPresentTimeGOOGLE',desc='The earliest time image should be presented',type='structs']
--
The sname:VkPresentTimeGOOGLE structure is defined as:

include::{generated}/api/structs/VkPresentTimeGOOGLE.txt[]

  * pname:presentID is an application-provided identification value, that
    can: be used with the results of
    flink:vkGetPastPresentationTimingGOOGLE, in order to uniquely identify
    this present.
    In order to be useful to the application, it should: be unique within
    some period of time that is meaningful to the application.
  * pname:desiredPresentTime specifies that the image given should: not be
    displayed to the user any earlier than this time.
    pname:desiredPresentTime is a time in nanoseconds, relative to a
    monotonically-increasing clock (e.g. `CLOCK_MONOTONIC` (see
    clock_gettime(2)) on Android and Linux).
    A value of zero specifies that the presentation engine may: display the
    image at any time.
    This is useful when the application desires to provide pname:presentID,
    but does not need a specific pname:desiredPresentTime.
--
