From eef890b7b1216443bd75382f7f602e26338a7899 Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Wed, 21 Feb 2018 10:39:34 +0000 Subject: 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 --- src/loader/loader_dri3_helper.c | 12 +++--------- src/loader/loader_dri3_helper.h | 2 +- 2 files changed, 4 insertions(+), 10 deletions(-) (limited to 'src') 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, -- cgit v1.2.3