summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichel Dänzer <mdaenzer@redhat.com>2021-04-06 12:15:45 +0200
committerDylan Baker <dylan.c.baker@intel.com>2021-04-07 10:24:27 -0700
commitdde2e324effef280fefcf5b65d6c65131d615fdd (patch)
tree32dad3f8e84379fa81586c748bdf1d8627fcdb1b
parentc4214ca9db2141785aa876e646ce374315f865df (diff)
wsi/x11: Wait for fences with IMMEDIATE on Xwayland
The commit below was already meant to do this, but accidentally missed this part. Fixes stutter when the frame-rate drops below the refresh rate. Fixes: e8f50bd60087 "wsi/x11: Treat IMMEDIATE present mode the same as MAILBOX for Xwayland" Reviewed-by: Adam Jackson <ajax@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10026> (cherry picked from commit 8ec530d9828e01ac12918c7abb9b4e4aaf9a38cf)
-rw-r--r--.pick_status.json2
-rw-r--r--src/vulkan/wsi/wsi_common_x11.c6
2 files changed, 6 insertions, 2 deletions
diff --git a/.pick_status.json b/.pick_status.json
index f7d3ab67770..cc3aa948500 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -148,7 +148,7 @@
"description": "wsi/x11: Wait for fences with IMMEDIATE on Xwayland",
"nominated": true,
"nomination_type": 1,
- "resolution": 0,
+ "resolution": 1,
"master_sha": null,
"because_sha": "e8f50bd60087805aa89144ecdd6e5a9b4368b532"
},
diff --git a/src/vulkan/wsi/wsi_common_x11.c b/src/vulkan/wsi/wsi_common_x11.c
index 165b366e2df..bf53dbc055f 100644
--- a/src/vulkan/wsi/wsi_common_x11.c
+++ b/src/vulkan/wsi/wsi_common_x11.c
@@ -1202,6 +1202,8 @@ static void *
x11_manage_fifo_queues(void *state)
{
struct x11_swapchain *chain = state;
+ struct wsi_x11_connection *wsi_conn =
+ wsi_x11_get_connection((struct wsi_device*)chain->base.wsi, chain->conn);
VkResult result = VK_SUCCESS;
assert(chain->has_present_queue);
@@ -1225,7 +1227,9 @@ x11_manage_fifo_queues(void *state)
return NULL;
}
- if (chain->base.present_mode == VK_PRESENT_MODE_MAILBOX_KHR) {
+ if (chain->base.present_mode == VK_PRESENT_MODE_MAILBOX_KHR ||
+ (chain->base.present_mode == VK_PRESENT_MODE_IMMEDIATE_KHR &&
+ wsi_conn->is_xwayland)) {
result = chain->base.wsi->WaitForFences(chain->base.device, 1,
&chain->base.fences[image_index],
true, UINT64_MAX);