From: Daniel Stone Date: Wed, 21 Feb 2018 10:39:34 +0000 (+0000) Subject: x11/dri3: Store raw present completion mode X-Git-Url: https://git.libre-soc.org/?p=mesa.git;a=commitdiff_plain;h=eef890b7b1216443bd75382f7f602e26338a7899 x11/dri3: Store raw present completion mode The DRI3 drawable info struct currently stores a boolean for whether the last completed operation was a flip or not. As we need to track the full completion mode for handling suboptimal returns, change the 'flipping' field to the raw present completion mode from the server. Signed-off-by: Daniel Stone Reviewed-by: Eric Engestrom --- diff --git a/src/loader/loader_dri3_helper.c b/src/loader/loader_dri3_helper.c index cb947c58728..426966a786a 100644 --- a/src/loader/loader_dri3_helper.c +++ b/src/loader/loader_dri3_helper.c @@ -196,7 +196,7 @@ dri3_fence_await(xcb_connection_t *c, struct loader_dri3_drawable *draw, static void dri3_update_num_back(struct loader_dri3_drawable *draw) { - if (draw->flipping) + if (draw->last_present_mode == XCB_PRESENT_COMPLETE_MODE_FLIP) draw->num_back = 3; else draw->num_back = 2; @@ -369,14 +369,8 @@ dri3_handle_present_event(struct loader_dri3_drawable *draw, draw->recv_sbc = (draw->send_sbc & 0xffffffff00000000LL) | ce->serial; if (draw->recv_sbc > draw->send_sbc) draw->recv_sbc -= 0x100000000; - switch (ce->mode) { - case XCB_PRESENT_COMPLETE_MODE_FLIP: - draw->flipping = true; - break; - case XCB_PRESENT_COMPLETE_MODE_COPY: - draw->flipping = false; - break; - } + + draw->last_present_mode = ce->mode; if (draw->vtable->show_fps) draw->vtable->show_fps(draw, ce->ust); diff --git a/src/loader/loader_dri3_helper.h b/src/loader/loader_dri3_helper.h index 839cba30df0..5caf214b372 100644 --- a/src/loader/loader_dri3_helper.h +++ b/src/loader/loader_dri3_helper.h @@ -116,7 +116,6 @@ struct loader_dri3_drawable { uint8_t have_back; uint8_t have_fake_front; uint8_t is_pixmap; - uint8_t flipping; /* Information about the GPU owning the buffer */ __DRIscreen *dri_screen; @@ -157,6 +156,7 @@ struct loader_dri3_drawable { unsigned int swap_method; unsigned int back_format; + xcb_present_complete_mode_t last_present_mode; /* Currently protects the following fields: * event_cnd, has_event_waiter,