wsi/x11: Synchronously check for error from xcb_present_pixmap
Yes this is a round trip, but X_PresentPixmap is not itself a blocking operation, it just instructs the server to do the next presentation at some time. More importantly, if _we_ don't catch the presentation error, xlib's error queue will, and the calling code is certainly not prepared to handle errors from Present. Forcing the round trip here is also a bit more correct semantically. This is the end of the Vulkan client part of the present queue, and the X_PresentPixmap request transfers the queue operation to the server, so we should not return until we are sure the handoff has happened. Fixes some flakiness with piglit@glx-visuals-* with zink+radv. Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17685>
This commit is contained in:
parent
747913377f
commit
2b3b7b692b
|
@ -42,7 +42,6 @@ glx@glx-copy-sub-buffer samples=2,Fail
|
||||||
glx@glx-copy-sub-buffer samples=4,Fail
|
glx@glx-copy-sub-buffer samples=4,Fail
|
||||||
glx@glx-swap-pixmap-bad,Fail
|
glx@glx-swap-pixmap-bad,Fail
|
||||||
glx@glx-visuals-depth,Crash
|
glx@glx-visuals-depth,Crash
|
||||||
glx@glx-visuals-stencil,Crash
|
|
||||||
glx@glx_arb_create_context_es2_profile@invalid opengl es version,Fail
|
glx@glx_arb_create_context_es2_profile@invalid opengl es version,Fail
|
||||||
# X error 167 (GLXBadFBConfig (9)) was generated, but X error 8 was expected.
|
# X error 167 (GLXBadFBConfig (9)) was generated, but X error 8 was expected.
|
||||||
glx@glx_arb_create_context_no_error@no error,Crash
|
glx@glx_arb_create_context_no_error@no error,Crash
|
||||||
|
|
|
@ -13,9 +13,8 @@ spec@arb_compute_variable_group_size@local-size
|
||||||
# "X connection to :99 broken (explicit kill or server shutdown)."
|
# "X connection to :99 broken (explicit kill or server shutdown)."
|
||||||
glx@glx-multi-context-ib-1
|
glx@glx-multi-context-ib-1
|
||||||
|
|
||||||
# depth/stencil visuals
|
# depth visuals
|
||||||
glx@glx-visuals-depth
|
glx@glx-visuals-depth
|
||||||
glx@glx-visuals-stencil
|
|
||||||
|
|
||||||
# mysterious
|
# mysterious
|
||||||
glx@glx-shader-sharing
|
glx@glx-shader-sharing
|
||||||
|
|
|
@ -39,7 +39,6 @@ glx@glx-swap-copy,Fail
|
||||||
glx@glx-swap-pixmap-bad,Fail
|
glx@glx-swap-pixmap-bad,Fail
|
||||||
glx@glx-visuals-depth,Crash
|
glx@glx-visuals-depth,Crash
|
||||||
glx@glx-visuals-depth -pixmap,Crash
|
glx@glx-visuals-depth -pixmap,Crash
|
||||||
glx@glx-visuals-stencil,Crash
|
|
||||||
glx@glx-visuals-stencil -pixmap,Crash
|
glx@glx-visuals-stencil -pixmap,Crash
|
||||||
|
|
||||||
# #6322
|
# #6322
|
||||||
|
|
|
@ -1261,24 +1261,26 @@ x11_present_to_x11_dri3(struct x11_swapchain *chain, uint32_t image_index,
|
||||||
image->serial = (uint32_t) chain->send_sbc;
|
image->serial = (uint32_t) chain->send_sbc;
|
||||||
|
|
||||||
xcb_void_cookie_t cookie =
|
xcb_void_cookie_t cookie =
|
||||||
xcb_present_pixmap(chain->conn,
|
xcb_present_pixmap_checked(chain->conn,
|
||||||
chain->window,
|
chain->window,
|
||||||
image->pixmap,
|
image->pixmap,
|
||||||
image->serial,
|
image->serial,
|
||||||
0, /* valid */
|
0, /* valid */
|
||||||
image->update_area, /* update */
|
image->update_area, /* update */
|
||||||
0, /* x_off */
|
0, /* x_off */
|
||||||
0, /* y_off */
|
0, /* y_off */
|
||||||
XCB_NONE, /* target_crtc */
|
XCB_NONE, /* target_crtc */
|
||||||
XCB_NONE,
|
XCB_NONE,
|
||||||
image->sync_fence,
|
image->sync_fence,
|
||||||
options,
|
options,
|
||||||
target_msc,
|
target_msc,
|
||||||
divisor,
|
divisor,
|
||||||
remainder, 0, NULL);
|
remainder, 0, NULL);
|
||||||
xcb_discard_reply(chain->conn, cookie.sequence);
|
xcb_generic_error_t *error = xcb_request_check(chain->conn, cookie);
|
||||||
|
if (error) {
|
||||||
xcb_flush(chain->conn);
|
free(error);
|
||||||
|
return x11_swapchain_result(chain, VK_ERROR_SURFACE_LOST_KHR);
|
||||||
|
}
|
||||||
|
|
||||||
return x11_swapchain_result(chain, VK_SUCCESS);
|
return x11_swapchain_result(chain, VK_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue