WindowPtr window = vblank->window;
ScreenPtr screen = window->drawable.pScreen;
present_screen_priv_ptr screen_priv = present_screen_priv(screen);
+ uint8_t mode;
if (vblank->wait_fence) {
if (!present_fence_check_triggered(vblank->wait_fence)) {
present_pixmap_idle(vblank->pixmap, vblank->window, vblank->serial, vblank->idle_fence);
}
- present_vblank_notify(vblank, vblank->kind, PresentCompleteModeCopy, ust, crtc_msc);
+
+ /* Compute correct CompleteMode
+ */
+ if (vblank->kind == PresentCompleteKindPixmap) {
+ if (vblank->pixmap && vblank->window)
+ mode = PresentCompleteModeCopy;
+ else
+ mode = PresentCompleteModeSkip;
+ }
+ else
+ mode = PresentCompleteModeCopy;
+
+
+ present_vblank_notify(vblank, vblank->kind, mode, ust, crtc_msc);
present_vblank_destroy(vblank);
}