You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Remove the VkPresentTimeEXT union, as it does not fit the style of Vulkan
- Remove boolean members and replace them with a new flags type.
- Cleanup some spec language and VUs.
For each swapchain referenced in `VkPresentInfoKHR`, a `VkPresentTimingInfoEXT` is specified:
323
317
324
-
* `time` is the absolute or relative time used to schedule this presentation request.
318
+
* `targetTime` is the absolute or relative time used to schedule this presentation request.
325
319
* `timeDomainId` is the id of the time domain used to specify `time` and to query timing results.
326
320
* `presentStageQueries` is a bitmask specifying all the present stages the application would like timings for.
327
-
* `presentAtRelativeTime` specifies whether `time` is to be interpreted as an absolute or a relative time value.
328
-
* `presentAtNearestRefreshCycle` specifies that the application would like to present at the refresh cycle that is nearest to the target present time.
329
321
330
-
`VkPresentTimeEXT` is interpreted according to the `VkPresentTimingInfoEXT::presentAtRelativeTime` flag:
322
+
If `presentStageQueries` is not zero, and the swapchain's internal timing queue is full, calling `vkQueuePresentKHR` yields a new error: `VK_ERROR_PRESENT_TIMING_QUEUE_FULL_EXT`.
323
+
324
+
The semantics of specifying a target present time only apply to FIFO present modes (`VK_PRESENT_MODE_FIFO_KHR`, `VK_PRESENT_MODE_FIFO_RELAXED_KHR` and `VK_PRESENT_MODE_FIFO_LATEST_READY_KHR`). When attempting to dequeue a presentation request from the FIFO queue, the presentation engine checks the current time against the target time.
325
+
326
+
The `VkPresentTimingInfoFlags` flags are defined as:
`VK_PRESENT_TIMING_INFO_PRESENT_AT_RELATIVE_TIME_BIT_EXT` specifies whether `time` is to be interpreted as an absolute or a relative time value. If `time` is interpreted as an absolute time, it specifies the earliest time in nanoseconds at which the image should be visible. Otherwise, if it is interpreted as a relative time, it specifies the minimum duration in nanoseconds the previously presented image should be visible.
331
335
332
-
* `targetPresentTime` specifies the earliest time in nanoseconds at which the image should be visible.
333
-
* `presentDuration` specifies the minimum duration in nanoseconds the image should be visible.
336
+
If `VK_PRESENT_TIMING_INFO_PRESENT_AT_NEAREST_REFRESH_CYCLE_BIT_EXT` is set, it indicates that the application would prefer the image to be made visible during the refresh cycle that is closest to the target present time, even if that refresh cycle starts earlier than the specified `time`.
334
337
335
338
[NOTE]
336
339
====
337
340
More specifically, the implementation attempts to align the `VK_PRESENT_STAGE_IMAGE_FIRST_PIXEL_VISIBLE_BIT_EXT` present stage with the requested target present time.
338
341
====
339
342
340
-
If `presentStageQueries` is not zero, and the swapchain's internal timing queue is full, calling `vkQueuePresentKHR` yields a new error: `VK_ERROR_PRESENT_TIMING_QUEUE_FULL_EXT`.
341
-
342
-
`presentAtNearestRefreshCycle` indicates whether the application prefers that the image be visible during the refresh cycle that is closer to the target present time, or if the presentation engine should hold presentation until the target present time has strictly passed.
343
-
344
-
The semantics of specifying a target present time only apply to FIFO present modes (`VK_PRESENT_MODE_FIFO_KHR`, `VK_PRESENT_MODE_FIFO_RELAXED_KHR` and `VK_PRESENT_MODE_FIFO_LATEST_READY_KHR`). When attempting to dequeue a presentation request from the FIFO queue, the presentation engine checks the current time against the target time.
345
-
346
343
[NOTE]
347
344
====
348
345
To maintain a constant image present duration (IPD), applications should use timing information collected via `vkGetPastPresentationTimingEXT` to determine the target time of each present. If the presentation engine is operating with a fixed refresh rate, the application's IPD should be a multiple of `VkSwapchainTimingPropertiesEXT::refreshInterval`. That is, the quanta for changing the IPD is `refreshInterval`. For example, if `refreshDuration` is 16.67ms, the IPD can be 16.67ms, 33.33ms, 50.0ms, etc.
0 commit comments