summaryrefslogtreecommitdiffstats
path: root/src/glx
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2012-09-25 12:05:28 -0700
committerEric Anholt <[email protected]>2012-10-09 14:32:03 -0700
commitab8ae9301fe8c4843d902cb55e64620f5768c7b0 (patch)
treeaa305ce26caa0fb64b03d394dbce93f43953a799 /src/glx
parent8e61b9028ad4f68c9d68fd781b6f44e1f6a266bd (diff)
glx: Replace DRI2GetMSC custom protocol with XCB.
Reviewed-by: Chad Versace <[email protected]>
Diffstat (limited to 'src/glx')
-rw-r--r--src/glx/dri2.c33
-rw-r--r--src/glx/dri2.h3
-rw-r--r--src/glx/dri2_glx.c26
3 files changed, 10 insertions, 52 deletions
diff --git a/src/glx/dri2.c b/src/glx/dri2.c
index 96c2ae87aed..0c49b83dbae 100644
--- a/src/glx/dri2.c
+++ b/src/glx/dri2.c
@@ -585,39 +585,6 @@ void DRI2SwapBuffers(Display *dpy, XID drawable, CARD64 target_msc,
}
#endif
-#ifdef X_DRI2GetMSC
-Bool DRI2GetMSC(Display *dpy, XID drawable, CARD64 *ust, CARD64 *msc,
- CARD64 *sbc)
-{
- XExtDisplayInfo *info = DRI2FindDisplay(dpy);
- xDRI2GetMSCReq *req;
- xDRI2MSCReply rep;
-
- XextCheckExtension (dpy, info, dri2ExtensionName, False);
-
- LockDisplay(dpy);
- GetReq(DRI2GetMSC, req);
- req->reqType = info->codes->major_opcode;
- req->dri2ReqType = X_DRI2GetMSC;
- req->drawable = drawable;
-
- if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
- UnlockDisplay(dpy);
- SyncHandle();
- return False;
- }
-
- *ust = vals_to_card64(rep.ust_lo, rep.ust_hi);
- *msc = vals_to_card64(rep.msc_lo, rep.msc_hi);
- *sbc = vals_to_card64(rep.sbc_lo, rep.sbc_hi);
-
- UnlockDisplay(dpy);
- SyncHandle();
-
- return True;
-}
-#endif
-
#ifdef X_DRI2SwapInterval
void DRI2SwapInterval(Display *dpy, XID drawable, int interval)
{
diff --git a/src/glx/dri2.h b/src/glx/dri2.h
index fe7c24e40ac..991ab377e9d 100644
--- a/src/glx/dri2.h
+++ b/src/glx/dri2.h
@@ -89,9 +89,6 @@ extern void
DRI2SwapBuffers(Display *dpy, XID drawable, CARD64 target_msc, CARD64 divisor,
CARD64 remainder, CARD64 *count);
-extern Bool
-DRI2GetMSC(Display *dpy, XID drawable, CARD64 *ust, CARD64 *msc, CARD64 *sbc);
-
extern void
DRI2SwapInterval(Display *dpy, XID drawable, int interval);
diff --git a/src/glx/dri2_glx.c b/src/glx/dri2_glx.c
index 60dc0354ca5..18542d18201 100644
--- a/src/glx/dri2_glx.c
+++ b/src/glx/dri2_glx.c
@@ -432,26 +432,24 @@ dri2CreateDrawable(struct glx_screen *base, XID xDrawable,
return &pdraw->base;
}
-#ifdef X_DRI2GetMSC
-
static int
dri2DrawableGetMSC(struct glx_screen *psc, __GLXDRIdrawable *pdraw,
int64_t *ust, int64_t *msc, int64_t *sbc)
{
- CARD64 dri2_ust, dri2_msc, dri2_sbc;
- int ret;
+ xcb_connection_t *c = XGetXCBConnection(pdraw->psc->dpy);
+ xcb_dri2_get_msc_cookie_t get_msc_cookie;
+ xcb_dri2_get_msc_reply_t *get_msc_reply;
- ret = DRI2GetMSC(psc->dpy, pdraw->xDrawable,
- &dri2_ust, &dri2_msc, &dri2_sbc);
- *ust = dri2_ust;
- *msc = dri2_msc;
- *sbc = dri2_sbc;
+ get_msc_cookie = xcb_dri2_get_msc_unchecked(c, pdraw->xDrawable);
+ get_msc_reply = xcb_dri2_get_msc_reply(c, get_msc_cookie, NULL);
+ *ust = merge_counter(get_msc_reply->ust_hi, get_msc_reply->ust_lo);
+ *msc = merge_counter(get_msc_reply->msc_hi, get_msc_reply->msc_lo);
+ *sbc = merge_counter(get_msc_reply->sbc_hi, get_msc_reply->sbc_lo);
+ free(get_msc_reply);
- return ret;
+ return 0;
}
-#endif
-
static int
dri2WaitForMSC(__GLXDRIdrawable *pdraw, int64_t target_msc, int64_t divisor,
int64_t remainder, int64_t *ust, int64_t *msc, int64_t *sbc)
@@ -1147,18 +1145,14 @@ dri2CreateScreen(int screen, struct glx_display * priv)
psp->getSwapInterval = NULL;
if (pdp->driMinor >= 2) {
-#ifdef X_DRI2GetMSC
psp->getDrawableMSC = dri2DrawableGetMSC;
-#endif
psp->waitForMSC = dri2WaitForMSC;
psp->waitForSBC = dri2WaitForSBC;
#ifdef X_DRI2SwapInterval
psp->setSwapInterval = dri2SetSwapInterval;
psp->getSwapInterval = dri2GetSwapInterval;
#endif
-#if defined(X_DRI2GetMSC) && defined(X_DRI2WaitMSC) && defined(X_DRI2SwapInterval)
__glXEnableDirectExtension(&psc->base, "GLX_OML_sync_control");
-#endif
}
/* DRI2 suports SubBuffer through DRI2CopyRegion, so it's always