summaryrefslogtreecommitdiff
path: root/hw/xfree86
diff options
context:
space:
mode:
Diffstat (limited to 'hw/xfree86')
-rw-r--r--hw/xfree86/drivers/modesetting/drmmode_display.h1
-rw-r--r--hw/xfree86/drivers/modesetting/pageflip.c11
2 files changed, 10 insertions, 2 deletions
diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.h b/hw/xfree86/drivers/modesetting/drmmode_display.h
index 75c3195e4..2711a5776 100644
--- a/hw/xfree86/drivers/modesetting/drmmode_display.h
+++ b/hw/xfree86/drivers/modesetting/drmmode_display.h
@@ -123,6 +123,7 @@ typedef struct {
Bool dri2_flipping;
Bool present_flipping;
+ Bool flip_bo_import_failed;
Bool dri2_enable;
Bool present_enable;
diff --git a/hw/xfree86/drivers/modesetting/pageflip.c b/hw/xfree86/drivers/modesetting/pageflip.c
index 830ec7599..cb11bd4f9 100644
--- a/hw/xfree86/drivers/modesetting/pageflip.c
+++ b/hw/xfree86/drivers/modesetting/pageflip.c
@@ -285,9 +285,16 @@ ms_do_pageflip(ScreenPtr screen,
new_front_bo.height = new_front->drawable.height;
if (drmmode_bo_import(&ms->drmmode, &new_front_bo,
&ms->drmmode.fb_id)) {
- xf86DrvMsg(scrn->scrnIndex, X_WARNING, "%s: Import BO failed: %s\n",
- log_prefix, strerror(errno));
+ if (!ms->drmmode.flip_bo_import_failed) {
+ xf86DrvMsg(scrn->scrnIndex, X_WARNING, "%s: Import BO failed: %s\n",
+ log_prefix, strerror(errno));
+ ms->drmmode.flip_bo_import_failed = TRUE;
+ }
goto error_out;
+ } else {
+ if (ms->drmmode.flip_bo_import_failed &&
+ new_front != screen->GetScreenPixmap(screen))
+ ms->drmmode.flip_bo_import_failed = FALSE;
}
flags = DRM_MODE_PAGE_FLIP_EVENT;