Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
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
- Extension and Version Dependencies
- Requires support for Vulkan 1.0
- Requires
VK_KHR_swapchain
to be enabled for any device-level functionality
- 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
Note
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/master/cube/cube.c
).
Version History
Revision 1, 2017-02-14 (Ian Elliott)
- Internal revisions
See Also
PastPresentationTimingGOOGLE
, PresentTimeGOOGLE
,
PresentTimesInfoGOOGLE
, RefreshCycleDurationGOOGLE
,
getPastPresentationTimingGOOGLE
, getRefreshCycleDurationGOOGLE
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.
Synopsis
- getRefreshCycleDurationGOOGLE :: forall io. MonadIO io => Device -> SwapchainKHR -> io ("displayTimingProperties" ::: RefreshCycleDurationGOOGLE)
- getPastPresentationTimingGOOGLE :: forall io. MonadIO io => Device -> SwapchainKHR -> io (Result, "presentationTimings" ::: Vector PastPresentationTimingGOOGLE)
- data RefreshCycleDurationGOOGLE = RefreshCycleDurationGOOGLE {}
- data PastPresentationTimingGOOGLE = PastPresentationTimingGOOGLE {}
- data PresentTimesInfoGOOGLE = PresentTimesInfoGOOGLE {}
- data PresentTimeGOOGLE = PresentTimeGOOGLE {}
- type GOOGLE_DISPLAY_TIMING_SPEC_VERSION = 1
- pattern GOOGLE_DISPLAY_TIMING_SPEC_VERSION :: forall a. Integral a => a
- type GOOGLE_DISPLAY_TIMING_EXTENSION_NAME = "VK_GOOGLE_display_timing"
- pattern GOOGLE_DISPLAY_TIMING_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a
- newtype SwapchainKHR = SwapchainKHR Word64
Documentation
getRefreshCycleDurationGOOGLE Source #
:: forall io. MonadIO io | |
=> Device |
|
-> SwapchainKHR |
|
-> io ("displayTimingProperties" ::: RefreshCycleDurationGOOGLE) |
vkGetRefreshCycleDurationGOOGLE - Obtain the RC duration of the PE’s display
Valid Usage (Implicit)
-
device
must be a validDevice
handle
-
swapchain
must be a validSwapchainKHR
handle -
pDisplayTimingProperties
must be a valid pointer to aRefreshCycleDurationGOOGLE
structure -
swapchain
must have been created, allocated, or retrieved fromdevice
Host Synchronization
- Host access to
swapchain
must be externally synchronized
Return Codes
See Also
VK_GOOGLE_display_timing,
Device
, RefreshCycleDurationGOOGLE
,
SwapchainKHR
getPastPresentationTimingGOOGLE Source #
:: forall io. MonadIO io | |
=> Device |
|
-> SwapchainKHR |
|
-> 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 validDevice
handle
-
swapchain
must be a validSwapchainKHR
handle -
pPresentationTimingCount
must be a valid pointer to auint32_t
value -
If the value referenced by
pPresentationTimingCount
is not0
, andpPresentationTimings
is notNULL
,pPresentationTimings
must be a valid pointer to an array ofpPresentationTimingCount
PastPresentationTimingGOOGLE
structures -
swapchain
must have been created, allocated, or retrieved fromdevice
Host Synchronization
- Host access to
swapchain
must be externally synchronized
Return Codes
See Also
VK_GOOGLE_display_timing,
Device
, PastPresentationTimingGOOGLE
,
SwapchainKHR
data RefreshCycleDurationGOOGLE Source #
VkRefreshCycleDurationGOOGLE - Structure containing the RC duration of a display
See Also
RefreshCycleDurationGOOGLE | |
|
Instances
data PastPresentationTimingGOOGLE Source #
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
PastPresentationTimingGOOGLE | |
|
Instances
data PresentTimesInfoGOOGLE Source #
VkPresentTimesInfoGOOGLE - The earliest time each image should be presented
Valid Usage
-
swapchainCount
must be the same value asPresentInfoKHR
::swapchainCount
, wherePresentInfoKHR
is included in thepNext
chain of thisPresentTimesInfoGOOGLE
structure
Valid Usage (Implicit)
-
sType
must beSTRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE
- If
pTimes
is notNULL
,pTimes
must be a valid pointer to an array ofswapchainCount
PresentTimeGOOGLE
structures -
swapchainCount
must be greater than0
See Also
PresentTimesInfoGOOGLE | |
|
Instances
Show PresentTimesInfoGOOGLE Source # | |
Defined in Vulkan.Extensions.VK_GOOGLE_display_timing showsPrec :: Int -> PresentTimesInfoGOOGLE -> ShowS # show :: PresentTimesInfoGOOGLE -> String # showList :: [PresentTimesInfoGOOGLE] -> ShowS # | |
FromCStruct PresentTimesInfoGOOGLE Source # | |
ToCStruct PresentTimesInfoGOOGLE Source # | |
Defined in Vulkan.Extensions.VK_GOOGLE_display_timing withCStruct :: PresentTimesInfoGOOGLE -> (Ptr PresentTimesInfoGOOGLE -> IO b) -> IO b Source # pokeCStruct :: Ptr PresentTimesInfoGOOGLE -> PresentTimesInfoGOOGLE -> IO b -> IO b Source # withZeroCStruct :: (Ptr PresentTimesInfoGOOGLE -> IO b) -> IO b Source # pokeZeroCStruct :: Ptr PresentTimesInfoGOOGLE -> IO b -> IO b Source # cStructSize :: Int Source # | |
Zero PresentTimesInfoGOOGLE Source # | |
data PresentTimeGOOGLE Source #
VkPresentTimeGOOGLE - The earliest time image should be presented
Description
but does not need a specific pname:desiredPresentTime.
See Also
PresentTimeGOOGLE | |
|
Instances
type GOOGLE_DISPLAY_TIMING_SPEC_VERSION = 1 Source #
pattern GOOGLE_DISPLAY_TIMING_SPEC_VERSION :: forall a. Integral a => a Source #
type GOOGLE_DISPLAY_TIMING_EXTENSION_NAME = "VK_GOOGLE_display_timing" Source #
pattern GOOGLE_DISPLAY_TIMING_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a Source #
newtype SwapchainKHR Source #
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.
Note
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
releaseSwapchainImagesEXT
,
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.
Note
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_KHR_swapchain,
AcquireNextImageInfoKHR
,
BindImageMemorySwapchainInfoKHR
,
ImageSwapchainCreateInfoKHR
,
PresentInfoKHR
,
ReleaseSwapchainImagesInfoEXT
,
SwapchainCreateInfoKHR
,
acquireFullScreenExclusiveModeEXT
,
acquireNextImageKHR
,
createSharedSwapchainsKHR
,
createSwapchainKHR
,
destroySwapchainKHR
,
getPastPresentationTimingGOOGLE
,
getRefreshCycleDurationGOOGLE
,
getSwapchainCounterEXT
,
getSwapchainImagesKHR
,
getSwapchainStatusKHR
,
queuePresentKHR
,
releaseFullScreenExclusiveModeEXT
,
setHdrMetadataEXT
,
setLocalDimmingAMD
,
waitForPresentKHR