HORIZON HASKELLDocslts/ghc-9.14.x45dd5372026-10-11Search names, modules, packages, or :: a typeCtrl K

GHC 9.14.1 · lts/ghc-9.14.x · 45dd537 · 2026-10-11

Modulevulkan-3.27GHC2021

Vulkan.Extensions.VK_GOOGLE_display_timing

Name

VK_GOOGLE_display_timing - device extension

VK_GOOGLE_display_timing

Name String

VK_GOOGLE_display_timing

Extension Type

Device extension

Registered Extension Number

93

Revision

1

Ratification Status

Not ratified

Extension and Version Dependencies

VK_KHR_swapchain

Contact

Other Extension Metadata

Last Modified Date

2017-02-14

IP Status

No known IP claims.

Contributors
  • Ian Elliott, Google

  • Jesse Hall, Google

Description

This device extension allows an application that uses the VK_KHR_swapchain extension to obtain information about the presentation engine’s display, to obtain timing information about each present, and to schedule a present to happen no earlier than a desired time. An application can use this to minimize various visual anomalies (e.g. stuttering).

Traditional game and real-time animation applications need to correctly position their geometry for when the presentable image will be presented to the user. To accomplish this, applications need various timing information about the presentation engine’s display. They need to know when presentable images were actually presented, and when they could have been presented. Applications also need to tell the presentation engine to display an image no sooner than a given time. This allows the application to avoid stuttering, so the animation looks smooth to the user.

This extension treats variable-refresh-rate (VRR) displays as if they are fixed-refresh-rate (FRR) displays.

New Commands

New Structures

New Enum Constants

Examples

The example code for the this extension (like the VK_KHR_surface and VK_GOOGLE_display_timing extensions) is contained in the cube demo that is shipped with the official Khronos SDK, and is being kept up-to-date in that location (see: https://github.com/KhronosGroup/Vulkan-Tools/blob/main/cube/cube.c ).

Version History

  • Revision 1, 2017-02-14 (Ian Elliott)

    • Internal revisions

See Also

No cross-references are available

Document Notes

For more information, see the Vulkan Specification.

This page is a generated document. Fixes and changes should be made to the generator scripts, not directly.

  • 7 types
  • 2 values
  • Packagevulkan-3.27
  • Exports11
  • LanguageGHC2021
  • LicenceBSD-3-Clause
  • SourceVK_GOOGLE_display_timing.hs
valuegetRefreshCycleDurationGOOGLE
  1. :: MonadIO io
  2. => Device

    device is the device associated with swapchain.

  3. -> SwapchainKHR

    swapchain is the swapchain to obtain the refresh duration for.

  4. -> io ("displayTimingProperties" ::: RefreshCycleDurationGOOGLE)
#

vkGetRefreshCycleDurationGOOGLE - Obtain the RC duration of the PE’s display

Valid Usage (Implicit)

  • device must be a valid Device handle

  • swapchain must be a valid SwapchainKHR handle

  • pDisplayTimingProperties must be a valid pointer to a RefreshCycleDurationGOOGLE structure

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

Host Synchronization

  • Host access to swapchain must be externally synchronized

Return Codes

Success
Failure

See Also

VK_GOOGLE_display_timing, Device, RefreshCycleDurationGOOGLE, SwapchainKHR

valuegetPastPresentationTimingGOOGLE
  1. :: MonadIO io
  2. => Device

    device is the device associated with swapchain.

  3. -> SwapchainKHR

    swapchain is the swapchain to obtain presentation timing information duration for.

  4. -> io (Result, "presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
#

vkGetPastPresentationTimingGOOGLE - Obtain timing of a previously-presented image

Description

If pPresentationTimings is NULL, then the number of newly-available timing records for the given swapchain is returned in pPresentationTimingCount. Otherwise, pPresentationTimingCount must point to a variable set by the user to the number of elements in the pPresentationTimings array, and on return the variable is overwritten with the number of structures actually written to pPresentationTimings. If the value of pPresentationTimingCount is less than the number of newly-available timing records, at most pPresentationTimingCount structures will be written, and INCOMPLETE will be returned instead of SUCCESS, to indicate that not all the available timing records were returned.

Valid Usage (Implicit)

  • device must be a valid Device handle

  • swapchain must be a valid SwapchainKHR handle

  • pPresentationTimingCount must be a valid pointer to a uint32_t value

  • If the value referenced by pPresentationTimingCount is not 0, and pPresentationTimings is not NULL, pPresentationTimings must be a valid pointer to an array of pPresentationTimingCount PastPresentationTimingGOOGLE structures

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

Host Synchronization

  • Host access to swapchain must be externally synchronized

Return Codes

Success
Failure

See Also

VK_GOOGLE_display_timing, Device, PastPresentationTimingGOOGLE, SwapchainKHR

VkRefreshCycleDurationGOOGLE - Structure containing the RC duration of a display

See Also

VK_GOOGLE_display_timing, getRefreshCycleDurationGOOGLE

Constructors

Instances6Eq, Show, Storable, FromCStruct, ToCStruct, Zero

VkPastPresentationTimingGOOGLE - Structure containing timing information about a previously-presented image

Description

The results for a given swapchain and presentID are only returned once from getPastPresentationTimingGOOGLE.

The application can use the PastPresentationTimingGOOGLE values to occasionally adjust its timing. For example, if actualPresentTime is later than expected (e.g. one refreshDuration late), the application may increase its target IPD to a higher multiple of refreshDuration (e.g. decrease its frame rate from 60Hz to 30Hz). If actualPresentTime and earliestPresentTime are consistently different, and if presentMargin is consistently large enough, the application may decrease its target IPD to a smaller multiple of refreshDuration (e.g. increase its frame rate from 30Hz to 60Hz). If actualPresentTime and earliestPresentTime are same, and if presentMargin is consistently high, the application may delay the start of its input-render-present loop in order to decrease the latency between user input and the corresponding present (always leaving some margin in case a new image takes longer to render than the previous image). An application that desires its target IPD to always be the same as refreshDuration, can also adjust features until actualPresentTime is never late and presentMargin is satisfactory.

See Also

VK_GOOGLE_display_timing, getPastPresentationTimingGOOGLE

Constructors

Instances6Eq, Show, Storable, FromCStruct, ToCStruct, Zero

VkPresentTimesInfoGOOGLE - The earliest time each image should be presented

Valid Usage

Valid Usage (Implicit)

  • If pTimes is not NULL, pTimes must be a valid pointer to an array of swapchainCount PresentTimeGOOGLE structures

  • swapchainCount must be greater than 0

Structure Chaining

Extends the structure

See Also

VK_GOOGLE_display_timing, PresentTimeGOOGLE, StructureType

Constructors

Instances4Show, FromCStruct, ToCStruct, Zero
datadata PresentTimeGOOGLE
#

VkPresentTimeGOOGLE - The earliest time image should be presented

Description

but does not need a specific pname:desiredPresentTime.

See Also

VK_GOOGLE_display_timing, PresentTimesInfoGOOGLE

Constructors

  • PresentTimeGOOGLE
    • presentID :: Word32

      presentID is an application-provided identification value, that can be used with the results of getPastPresentationTimingGOOGLE, 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.

    • desiredPresentTime :: Word64

      desiredPresentTime specifies that the image given should not be displayed to the user any earlier than this time. 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 presentID,

Instances6Eq, Show, Storable, FromCStruct, ToCStruct, Zero
newtypenewtype SwapchainKHR
#

VkSwapchainKHR - Opaque handle to a swapchain object

Description

A swapchain is an abstraction for an array of presentable images that are associated with a surface. The presentable images are represented by Image objects created by the platform. One image (which can be an array image for multiview/stereoscopic-3D surfaces) is displayed at a time, but multiple images can be queued for presentation. An application renders to the image, and then queues the image for presentation to the surface.

A native window cannot be associated with more than one non-retired swapchain at a time. Further, swapchains cannot be created for native windows that have a non-Vulkan graphics API surface associated with them.

The presentation engine is an abstraction for the platform’s compositor or display engine.

The presentation engine may be synchronous or asynchronous with respect to the application and/or logical device.

Some implementations may use the device’s graphics queue or dedicated presentation hardware to perform presentation.

The presentable images of a swapchain are owned by the presentation engine. An application can acquire use of a presentable image from the presentation engine. Use of a presentable image must occur only after the image is returned by acquireNextImageKHR, and before it is released by queuePresentKHR. This includes transitioning the image layout and rendering commands.

An application can acquire use of a presentable image with acquireNextImageKHR. After acquiring a presentable image and before modifying it, the application must use a synchronization primitive to ensure that the presentation engine has finished reading from the image. The application can then transition the image’s layout, queue rendering commands to it, etc. Finally, the application presents the image with queuePresentKHR, which releases the acquisition of the image. The application can also release the acquisition of the image through releaseSwapchainImagesKHR, if the image is not in use by the device, and skip the present operation.

The presentation engine controls the order in which presentable images are acquired for use by the application.

This allows the platform to handle situations which require out-of-order return of images after presentation. At the same time, it allows the application to generate command buffers referencing all of the images in the swapchain at initialization time, rather than in its main loop.

See Also

VK_DEFINE_NON_DISPATCHABLE_HANDLE, VK_KHR_swapchain, AcquireNextImageInfoKHR, BindImageMemorySwapchainInfoKHR, ImageSwapchainCreateInfoKHR, PastPresentationTimingInfoEXT, PresentInfoKHR, ReleaseSwapchainImagesInfoKHR, SwapchainCalibratedTimestampInfoEXT, SwapchainCreateInfoKHR, acquireFullScreenExclusiveModeEXT, acquireNextImageKHR, createSharedSwapchainsKHR, createSwapchainKHR, destroySwapchainKHR, getLatencyTimingsNV, getPastPresentationTimingGOOGLE, getRefreshCycleDurationGOOGLE, getSwapchainCounterEXT, getSwapchainImagesKHR, getSwapchainStatusKHR, getSwapchainTimeDomainPropertiesEXT, getSwapchainTimingPropertiesEXT, latencySleepNV, queuePresentKHR, releaseFullScreenExclusiveModeEXT, setHdrMetadataEXT, setLatencyMarkerNV, setLatencySleepModeNV, setLocalDimmingAMD, setSwapchainPresentTimingQueueSizeEXT, waitForPresent2KHR, waitForPresentKHR

Constructors

Instances7Eq, Ord, Show, Storable, HasObjectType, IsHandle, …