summaryrefslogtreecommitdiff
path: root/src/common_drm.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/common_drm.c')
-rw-r--r--src/common_drm.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/common_drm.c b/src/common_drm.c
index b641a14..1523694 100644
--- a/src/common_drm.c
+++ b/src/common_drm.c
@@ -114,12 +114,23 @@ static void drmmode_ConvertFromKMode(ScrnInfoPtr pScrn,
static uint64_t common_drm_frame_to_msc(xf86CrtcPtr crtc, uint32_t seq)
{
- return seq;
+ struct common_crtc_info *drmc = common_crtc(crtc);
+
+ if (seq < drmc->last_seq) {
+ if ((int32_t)(drmc->last_seq - seq) > 0x40000000)
+ drmc->last_msc += 0x100000000ULL;
+ else
+ seq = drmc->last_seq;
+ }
+ drmc->last_seq = seq;
+ return drmc->last_msc + seq;
}
static uint32_t common_drm_msc_to_frame(xf86CrtcPtr crtc, uint64_t msc)
{
- return msc;
+ struct common_crtc_info *drmc = common_crtc(crtc);
+
+ return msc - drmc->last_msc;
}
static drmModePropertyPtr common_drm_conn_find_property(