From: Roman Gilg Date: Mon, 31 Aug 2020 09:33:27 +0000 (+0200) Subject: vulkan/wsi/x11: add sent image counter X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d0bc1ad3776bce7d4b356e2a3d8bdbb9ae64e588;p=mesa.git vulkan/wsi/x11: add sent image counter Add a counter to count how many images from our swapchain are currently "sent" to the X server via Present extension. An image is sent when it has been presented but we have not yet received an idle event for it. CC: mesa-stable Reviewed-by: Bas Nieuwenhuizen Reviewed-by: Simon Ser Part-of: --- diff --git a/src/vulkan/wsi/wsi_common_x11.c b/src/vulkan/wsi/wsi_common_x11.c index 760522b770f..2be3072587a 100644 --- a/src/vulkan/wsi/wsi_common_x11.c +++ b/src/vulkan/wsi/wsi_common_x11.c @@ -752,6 +752,7 @@ struct x11_swapchain { uint64_t send_sbc; uint64_t last_present_msc; uint32_t stamp; + int sent_image_count; bool has_present_queue; bool has_acquire_queue; @@ -848,6 +849,8 @@ x11_handle_dri3_present_event(struct x11_swapchain *chain, for (unsigned i = 0; i < chain->base.image_count; i++) { if (chain->images[i].pixmap == idle->pixmap) { chain->images[i].busy = false; + chain->sent_image_count--; + assert(chain->sent_image_count >= 0); if (chain->has_acquire_queue) wsi_queue_push(&chain->acquire_queue, i); break; @@ -1028,7 +1031,11 @@ x11_present_to_x11_dri3(struct x11_swapchain *chain, uint32_t image_index, xshmfence_reset(image->shm_fence); + ++chain->sent_image_count; + assert(chain->sent_image_count <= chain->base.image_count); + ++chain->send_sbc; + xcb_void_cookie_t cookie = xcb_present_pixmap(chain->conn, chain->window, @@ -1524,6 +1531,7 @@ x11_surface_create_swapchain(VkIcdSurfaceBase *icd_surface, chain->depth = bit_depth; chain->extent = pCreateInfo->imageExtent; chain->send_sbc = 0; + chain->sent_image_count = 0; chain->last_present_msc = 0; chain->has_acquire_queue = false; chain->has_present_queue = false;