diff options
author | Russell King <rmk@arm.linux.org.uk> | 2016-01-28 00:28:53 +0000 |
---|---|---|
committer | Russell King <rmk@arm.linux.org.uk> | 2016-01-28 15:27:20 +0000 |
commit | c6b0e2d894eaa3d5c4db6116a4c43caa1b197977 (patch) | |
tree | abe365f37a7188fd743d435e086dc3b49de9b4d0 | |
parent | 52b37c6528cce5d53f132406e5e3f4054fbb1bfe (diff) |
src: dri2: pass drawable to MSC functions
Pass the drawable into the common_drm MSC functions, so we can better
calculate a monotonic MSC value for each drawable.
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
-rw-r--r-- | etnaviv/etnaviv_dri2.c | 10 | ||||
-rw-r--r-- | src/common_drm.c | 16 | ||||
-rw-r--r-- | src/common_drm_dri2.c | 10 | ||||
-rw-r--r-- | src/common_drm_helper.h | 5 | ||||
-rw-r--r-- | vivante/vivante_dri2.c | 10 |
5 files changed, 39 insertions, 12 deletions
diff --git a/etnaviv/etnaviv_dri2.c b/etnaviv/etnaviv_dri2.c index 5f52e50..1ecd28b 100644 --- a/etnaviv/etnaviv_dri2.c +++ b/etnaviv/etnaviv_dri2.c @@ -225,7 +225,8 @@ static int etnaviv_dri2_ScheduleSwap(ClientPtr client, DrawablePtr draw, common_dri2_buffer_reference(front); common_dri2_buffer_reference(back); - if (common_drm_get_msc(crtc, &cur_ust, &cur_msc) != Success) + if (common_drm_get_drawable_msc(crtc, draw, &cur_ust, &cur_msc) != + Success) goto blit_free; /* Flips need to be submitted one frame before */ @@ -285,9 +286,10 @@ static int etnaviv_dri2_ScheduleSwap(ClientPtr client, DrawablePtr draw, tgt_msc -= 1; } - ret = common_drm_queue_msc_event(pScrn, crtc, &tgt_msc, __FUNCTION__, - wait->type != DRI2_FLIP, - &wait->base); + ret = common_drm_queue_drawable_msc_event(pScrn, crtc, draw, &tgt_msc, + __FUNCTION__, + wait->type != DRI2_FLIP, + &wait->base); if (ret) goto blit_free; diff --git a/src/common_drm.c b/src/common_drm.c index a3c017e..b8c2250 100644 --- a/src/common_drm.c +++ b/src/common_drm.c @@ -1440,6 +1440,13 @@ int common_drm_get_msc(xf86CrtcPtr crtc, uint64_t *ust, uint64_t *msc) } _X_EXPORT +int common_drm_get_drawable_msc(xf86CrtcPtr crtc, DrawablePtr pDraw, + uint64_t *ust, uint64_t *msc) +{ + return common_drm_get_msc(crtc, ust, msc); +} + +_X_EXPORT int common_drm_queue_msc_event(ScrnInfoPtr pScrn, xf86CrtcPtr crtc, uint64_t *msc, const char *func, Bool nextonmiss, struct common_drm_event *event) @@ -1468,6 +1475,15 @@ int common_drm_queue_msc_event(ScrnInfoPtr pScrn, xf86CrtcPtr crtc, } _X_EXPORT +int common_drm_queue_drawable_msc_event(ScrnInfoPtr pScrn, xf86CrtcPtr crtc, + DrawablePtr pDraw, uint64_t *msc, const char *func, Bool nextonmiss, + struct common_drm_event *event) +{ + return common_drm_queue_msc_event(pScrn, crtc, msc, func, nextonmiss, + event); +} + +_X_EXPORT int common_drm_vblank_wait(ScrnInfoPtr pScrn, xf86CrtcPtr crtc, drmVBlank *vbl, const char *func, Bool nextonmiss) { diff --git a/src/common_drm_dri2.c b/src/common_drm_dri2.c index 4f3063c..dcf019e 100644 --- a/src/common_drm_dri2.c +++ b/src/common_drm_dri2.c @@ -278,7 +278,7 @@ int common_dri2_GetMSC(DrawablePtr draw, CARD64 *ust, CARD64 *msc) return TRUE; } - return common_drm_get_msc(crtc, ust, msc) == Success; + return common_drm_get_drawable_msc(crtc, draw, ust, msc) == Success; } static void common_dri2_waitmsc(struct common_dri2_wait *wait, @@ -310,7 +310,8 @@ Bool common_dri2_ScheduleWaitMSC(ClientPtr client, DrawablePtr draw, wait->event_func = common_dri2_waitmsc; /* Get current count */ - if (common_drm_get_msc(crtc, &cur_ust, &cur_msc) != Success) + if (common_drm_get_drawable_msc(crtc, draw, &cur_ust, &cur_msc) != + Success) goto del_wait; /* @@ -338,8 +339,9 @@ Bool common_dri2_ScheduleWaitMSC(ClientPtr client, DrawablePtr draw, target_msc += divisor; } - ret = common_drm_queue_msc_event(pScrn, crtc, &target_msc, __FUNCTION__, - FALSE, &wait->base); + ret = common_drm_queue_drawable_msc_event(pScrn, crtc, draw, + &target_msc, __FUNCTION__, + FALSE, &wait->base); if (ret) goto del_wait; diff --git a/src/common_drm_helper.h b/src/common_drm_helper.h index e8704c6..978cb18 100644 --- a/src/common_drm_helper.h +++ b/src/common_drm_helper.h @@ -14,10 +14,15 @@ int common_drm_vblank_get(ScrnInfoPtr pScrn, xf86CrtcPtr crtc, drmVBlank *vbl, const char *func); int common_drm_get_msc(xf86CrtcPtr crtc, uint64_t *ust, uint64_t *msc); +int common_drm_get_drawable_msc(xf86CrtcPtr crtc, DrawablePtr pDraw, + uint64_t *ust, uint64_t *msc); int common_drm_queue_msc_event(ScrnInfoPtr pScrn, xf86CrtcPtr crtc, uint64_t *msc, const char *func, Bool nextonmiss, struct common_drm_event *event); +int common_drm_queue_drawable_msc_event(ScrnInfoPtr pScrn, xf86CrtcPtr crtc, + DrawablePtr pDraw, uint64_t *msc, const char *func, Bool nextonmiss, + struct common_drm_event *event); int common_drm_vblank_wait(ScrnInfoPtr pScrn, xf86CrtcPtr crtc, drmVBlank *vbl, const char *func, Bool nextonmiss); diff --git a/vivante/vivante_dri2.c b/vivante/vivante_dri2.c index 3d26f57..21756a2 100644 --- a/vivante/vivante_dri2.c +++ b/vivante/vivante_dri2.c @@ -229,7 +229,8 @@ vivante_dri2_ScheduleSwap(ClientPtr client, DrawablePtr draw, common_dri2_buffer_reference(front); common_dri2_buffer_reference(back); - if (common_drm_get_msc(crtc, &cur_ust, &cur_msc) != Success) + if (common_drm_get_drawable_msc(crtc, draw, &cur_ust, &cur_msc) != + Success) goto blit_free; /* Flips need to be submitted one frame before */ @@ -289,9 +290,10 @@ vivante_dri2_ScheduleSwap(ClientPtr client, DrawablePtr draw, tgt_msc -= 1; } - ret = common_drm_queue_msc_event(pScrn, crtc, &tgt_msc, __FUNCTION__, - wait->type != DRI2_FLIP, - &wait->base); + ret = common_drm_queue_drawable_msc_event(pScrn, crtc, draw, &tgt_msc, + __FUNCTION__, + wait->type != DRI2_FLIP, + &wait->base); if (ret) goto blit_free; |