mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-21 23:00:29 +01:00
vulkan/wsi/x11: Wait for GPU work before present with mailbox.
Otherwise the wait only happens at flip time, which messes with keeping idle buffers around if the GPU work makes the image miss the next flip. I decided not to use the wait fences as those are still xshm fences, so that means we'd still have to wait in the application. Just doing it before presenting makes things simpler. Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
This commit is contained in:
parent
cc6a72a002
commit
5eae9bfbfc
1 changed files with 12 additions and 1 deletions
|
|
@ -1091,6 +1091,16 @@ x11_manage_fifo_queues(void *state)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
if (chain->base.present_mode == VK_PRESENT_MODE_MAILBOX_KHR) {
|
||||
result = chain->base.wsi->WaitForFences(chain->base.device, 1,
|
||||
&chain->base.fences[image_index],
|
||||
true, UINT64_MAX);
|
||||
if (result != VK_SUCCESS) {
|
||||
result = VK_ERROR_OUT_OF_DATE_KHR;
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
||||
uint64_t target_msc = 0;
|
||||
if (chain->has_acquire_queue)
|
||||
target_msc = chain->last_present_msc + 1;
|
||||
|
|
@ -1503,7 +1513,8 @@ x11_surface_create_swapchain(VkIcdSurfaceBase *icd_surface,
|
|||
goto fail_init_images;
|
||||
}
|
||||
|
||||
if (chain->base.present_mode == VK_PRESENT_MODE_FIFO_KHR) {
|
||||
if (chain->base.present_mode == VK_PRESENT_MODE_FIFO_KHR ||
|
||||
chain->base.present_mode == VK_PRESENT_MODE_MAILBOX_KHR) {
|
||||
chain->has_present_queue = true;
|
||||
|
||||
/* Initialize our queues. We make them base.image_count + 1 because we will
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue