summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/sna/sna_dri.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/sna/sna_dri.c b/src/sna/sna_dri.c
index 34d20447..bf970e04 100644
--- a/src/sna/sna_dri.c
+++ b/src/sna/sna_dri.c
@@ -1353,6 +1353,24 @@ void sna_dri_vblank_handler(struct sna *sna, struct drm_event_vblank *event)
if (draw == NULL)
goto done;
+ if (sna->mode.shadow_flip && !sna->mode.shadow_damage) {
+ drmVBlank vbl;
+
+ /* recursed from wait_for_shadow(), simply requeue */
+ VG_CLEAR(vbl);
+ vbl.request.type =
+ DRM_VBLANK_RELATIVE |
+ DRM_VBLANK_EVENT |
+ pipe_select(info->pipe);
+ vbl.request.sequence = 1;
+ vbl.request.signal = (unsigned long)info;
+
+ if (sna_wait_vblank(sna, &vbl))
+ goto done;
+
+ return;
+ }
+
switch (info->type) {
case DRI2_FLIP:
/* If we can still flip... */
@@ -1617,6 +1635,8 @@ static void sna_dri_flip_event(struct sna *sna,
flip->fe_tv_usec,
flip->type));
+ assert(!sna->mode.shadow_flip);
+
if (flip->scanout[1].bo) {
struct dri_bo *c = NULL;