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
signature.asc
Description: PGP signature
_______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
