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 <daniels@collabora.com>
Reviewed-by: Eric Engestrom <eric.engestrom@imgtec.com>
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;
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);
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;
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,