static EGLBoolean dri2_x11_get_sync_values(_EGLDisplay *display, _EGLSurface *surface, EGLuint64KHR *ust, EGLuint64KHR *msc, EGLuint64KHR *sbc) { struct dri2_egl_display *dri2_dpy = dri2_egl_display(display); struct dri2_egl_surface *dri2_surf = dri2_egl_surface(surface); xcb_dri2_get_msc_cookie_t cookie; xcb_dri2_get_msc_reply_t *reply; cookie = xcb_dri2_get_msc(dri2_dpy->conn, dri2_surf->drawable); reply = xcb_dri2_get_msc_reply(dri2_dpy->conn, cookie, NULL); if (!reply) { _eglError(EGL_BAD_ACCESS, __func__); return EGL_FALSE; } *ust = ((EGLuint64KHR) reply->ust_hi << 32) | reply->ust_lo; *msc = ((EGLuint64KHR) reply->msc_hi << 32) | reply->msc_lo; *sbc = ((EGLuint64KHR) reply->sbc_hi << 32) | reply->sbc_lo; free(reply); return EGL_TRUE; }
static uint64_t vl_dri2_screen_get_timestamp(struct vl_screen *vscreen, void *drawable) { struct vl_dri_screen *scrn = (struct vl_dri_screen *)vscreen; xcb_dri2_get_msc_cookie_t cookie; xcb_dri2_get_msc_reply_t *reply; assert(scrn); vl_dri2_set_drawable(scrn, (Drawable)drawable); if (!scrn->last_ust) { cookie = xcb_dri2_get_msc_unchecked(scrn->conn, (Drawable)drawable); reply = xcb_dri2_get_msc_reply(scrn->conn, cookie, NULL); if (reply) { vl_dri2_handle_stamps(scrn, reply->ust_hi, reply->ust_lo, reply->msc_hi, reply->msc_lo); free(reply); } } return scrn->last_ust; }