static int ProcDRI2GetMSC(ClientPtr client) { REQUEST(xDRI2GetMSCReq); xDRI2MSCReply rep = { .type = X_Reply, .sequenceNumber = client->sequence, .length = 0 }; DrawablePtr pDrawable; CARD64 ust, msc, sbc; int status; REQUEST_SIZE_MATCH(xDRI2GetMSCReq); if (!validDrawable(client, stuff->drawable, DixReadAccess, &pDrawable, &status)) return status; status = DRI2GetMSC(pDrawable, &ust, &msc, &sbc); if (status != Success) return status; load_msc_reply(&rep, ust, msc, sbc); WriteToClient(client, sizeof(xDRI2MSCReply), &rep); return Success; } static int ProcDRI2WaitMSC(ClientPtr client) { REQUEST(xDRI2WaitMSCReq); DrawablePtr pDrawable; CARD64 target, divisor, remainder; int status; /* FIXME: in restart case, client may be gone at this point */ REQUEST_SIZE_MATCH(xDRI2WaitMSCReq); if (!validDrawable(client, stuff->drawable, DixReadAccess, &pDrawable, &status)) return status; target = vals_to_card64(stuff->target_msc_lo, stuff->target_msc_hi); divisor = vals_to_card64(stuff->divisor_lo, stuff->divisor_hi); remainder = vals_to_card64(stuff->remainder_lo, stuff->remainder_hi); status = DRI2WaitMSC(client, pDrawable, target, divisor, remainder); if (status != Success) return status; return Success; }
static int dri2DrawableGetMSC(__GLXscreenConfigs *psc, __GLXDRIdrawable *pdraw, int64_t *ust, int64_t *msc, int64_t *sbc) { return DRI2GetMSC(psc->dpy, pdraw->xDrawable, ust, msc, sbc); }