summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--etnaviv/etnaviv_dri2.c10
-rw-r--r--src/common_drm.c16
-rw-r--r--src/common_drm_dri2.c10
-rw-r--r--src/common_drm_helper.h5
-rw-r--r--vivante/vivante_dri2.c10
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;