static void vl_dri2_screen_destroy(struct vl_screen *vscreen) { struct vl_dri_screen *scrn = (struct vl_dri_screen *)vscreen; assert(vscreen); if (scrn->flushed) { free(xcb_dri2_swap_buffers_reply(scrn->conn, scrn->swap_cookie, NULL)); free(xcb_dri2_wait_sbc_reply(scrn->conn, scrn->wait_cookie, NULL)); free(xcb_dri2_get_buffers_reply(scrn->conn, scrn->buffers_cookie, NULL)); } vl_dri2_destroy_drawable(scrn); scrn->base.pscreen->destroy(scrn->base.pscreen); pipe_loader_release(&scrn->base.dev, 1); /* There is no user provided fd */ FREE(scrn); }
static xcb_dri2_get_buffers_reply_t * vl_dri2_get_flush_reply(struct vl_dri_screen *scrn) { xcb_dri2_wait_sbc_reply_t *wait_sbc_reply; assert(scrn); if (!scrn->flushed) return NULL; scrn->flushed = false; free(xcb_dri2_swap_buffers_reply(scrn->conn, scrn->swap_cookie, NULL)); wait_sbc_reply = xcb_dri2_wait_sbc_reply(scrn->conn, scrn->wait_cookie, NULL); if (!wait_sbc_reply) return NULL; vl_dri2_handle_stamps(scrn, wait_sbc_reply->ust_hi, wait_sbc_reply->ust_lo, wait_sbc_reply->msc_hi, wait_sbc_reply->msc_lo); free(wait_sbc_reply); return xcb_dri2_get_buffers_reply(scrn->conn, scrn->buffers_cookie, NULL); }