[Mesa-dev] Playing with display timing -- VK_MESA_present_period
Keith Packard
keithp at keithp.org
Sun Feb 2 06:51:08 UTC 2020
I spent some time over the last week experimenting with a different way
of doing frame timing.
Instead of specifying *when* a particular frame should be displayed, how
about we specify how *long* a particular frame should be made visible
to the user?
This has a couple of advantages over the approach taken in GOOGLE_display_timing:
1. It provides information to the backend about frame timing
a frame earlier.
2. Missing a frame can generate fewer artifacts.
Here's what I'm thinking the extension would look like:
An application uses VK_MESA_present_period by including a
VkPresentPeriodMESA structure in the pNext chain in the
VkPresentInfoKHR structure passed to the vkQueuePresentKHR call.
typedef struct VkPresentPeriodMESA {
VkStructureType sType;
const void* pNext;
uint32_t swapchainCount;
const int64_t* pPresentPeriods;
} VkPresentPeriodMESA;
The fields in this structure are:
* sType. Set to VK_STRUCTURE_TYPE_PRESENT_PERIOD_MESA
* pNext. Points to the next extension structure in the chain (if any).
* swapchainCount. A copy of the swapchainCount field in the
VkPresentInfoKHR structure.
* pPresentPeriods. An array, length swapchainCount, of presentation
periods for each image in the call.
Positive presentation periods represent nanoseconds. Negative
presentation periods represent frames. A zero value means the
extension does not affect the associated presentation.
Nanosecond values are rounded to the nearest upcoming frame so that a
value of n * refresh_interval is the same as using a value of n
frames.
The presentation period causes *future* images to be delayed at least
until the specified interval after this image has been
presented. Specifying both a presentation period in a previous frame
and using GOOGLE_display_timing is well defined -- the presentation
will be delayed until the later of the two times.
I've got this kludged together to experiment with; I managed to make it
work purely within Vulkan using the infrastructure built for
GOOGLE_display_timing.
https://gitlab.freedesktop.org/keithp/mesa/commits/present-period
I wrote a longer article on my blog:
https://keithp.com/blogs/present-period/
I'm interested in hearing what people think about the general approach.
--
-keith
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 832 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20200201/b48171e9/attachment.sig>
More information about the mesa-dev
mailing list