diff --git a/.pick_status.json b/.pick_status.json index 70279d189f9..da5b1672b7f 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -409,7 +409,7 @@ "description": "vulkan/wsi/x11: add sent image counter", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": null }, diff --git a/src/vulkan/wsi/wsi_common_x11.c b/src/vulkan/wsi/wsi_common_x11.c index 566926845f9..36491fc3b00 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(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, @@ -1479,6 +1486,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;