diff options
author | Russell King <rmk@arm.linux.org.uk> | 2015-10-26 17:16:15 +0000 |
---|---|---|
committer | Russell King <rmk@arm.linux.org.uk> | 2015-10-26 19:38:58 +0000 |
commit | 63488a4bf346b23658ac5eefb3438222b8b77c05 (patch) | |
tree | 8f12826ae814c71e822afbb4f42454712caf1e3d | |
parent | 16786f7d7b37c8df49d506ec0565da5afc8e4324 (diff) |
convert to 64-bit MSC values
Convert DDX to use 64-bit MSC values thoughout the driver.
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
-rw-r--r-- | etnaviv/etnaviv_dri2.c | 4 | ||||
-rw-r--r-- | src/common_drm.c | 15 | ||||
-rw-r--r-- | src/common_drm.h | 2 | ||||
-rw-r--r-- | src/common_drm_dri2.c | 8 | ||||
-rw-r--r-- | vivante/vivante_dri2.c | 4 |
5 files changed, 15 insertions, 18 deletions
diff --git a/etnaviv/etnaviv_dri2.c b/etnaviv/etnaviv_dri2.c index ba88636..82538b1 100644 --- a/etnaviv/etnaviv_dri2.c +++ b/etnaviv/etnaviv_dri2.c @@ -211,10 +211,6 @@ static int etnaviv_dri2_ScheduleSwap(ClientPtr client, DrawablePtr draw, if (!crtc) goto blit; - *target_msc &= 0xffffffff; - divisor &= 0xffffffff; - remainder &= 0xffffffff; - wait = common_dri2_wait_alloc(client, draw, crtc, DRI2_SWAP); if (!wait) goto blit; 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( diff --git a/src/common_drm.h b/src/common_drm.h index f187c32..605ab5c 100644 --- a/src/common_drm.h +++ b/src/common_drm.h @@ -14,6 +14,8 @@ struct common_crtc_info { void *cursor_data; uint32_t cursor_handle; uint32_t rotate_fb_id; + uint32_t last_seq; + uint64_t last_msc; }; #define common_crtc(crtc) \ ((struct common_crtc_info *)(crtc)->driver_private) diff --git a/src/common_drm_dri2.c b/src/common_drm_dri2.c index 30fbf80..4f3063c 100644 --- a/src/common_drm_dri2.c +++ b/src/common_drm_dri2.c @@ -299,14 +299,6 @@ Bool common_dri2_ScheduleWaitMSC(ClientPtr client, DrawablePtr draw, CARD64 cur_msc, cur_ust; int ret; - /* - * Truncate to match kernel interfaces; means occasional - * overflow misses, but that's generally not a big deal. - */ - target_msc &= 0xffffffff; - divisor &= 0xffffffff; - remainder &= 0xffffffff; - crtc = common_drm_drawable_covering_crtc(draw); if (!crtc) goto complete; diff --git a/vivante/vivante_dri2.c b/vivante/vivante_dri2.c index 9c64256..3d26f57 100644 --- a/vivante/vivante_dri2.c +++ b/vivante/vivante_dri2.c @@ -216,10 +216,6 @@ vivante_dri2_ScheduleSwap(ClientPtr client, DrawablePtr draw, if (!crtc) goto blit; - *target_msc &= 0xffffffff; - divisor &= 0xffffffff; - remainder &= 0xffffffff; - wait = common_dri2_wait_alloc(client, draw, crtc, DRI2_SWAP); if (!wait) goto blit; |