summaryrefslogtreecommitdiff
path: root/src/drmmode_display.c
diff options
context:
space:
mode:
authorMichel Dänzer <michel.daenzer@amd.com>2018-12-21 12:47:18 +0100
committerMichel Dänzer <michel@daenzer.net>2018-12-28 12:07:24 +0100
commitce7db51020d32f17e442338bfd305220feb51630 (patch)
tree3e58ce126bb20ce5bd13c503f5ed95d15f4066e8 /src/drmmode_display.c
parent21d65e5b78c8889e363aee8596cd0b0f942fee46 (diff)
Cancel pending scanout update in drmmode_crtc_scanout_update
drmmode_crtc_scanout_update does the equivalent of a scanout update, so no need to do it again. This might also avoid issues if there's a pending scanout update at this point. (Ported from amdgpu commit 4e7a24ac5a64e402146953ec5850d13c05742116)
Diffstat (limited to 'src/drmmode_display.c')
-rw-r--r--src/drmmode_display.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 134b0f72..34c88c8e 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -781,11 +781,17 @@ drmmode_crtc_scanout_update(xf86CrtcPtr crtc, DisplayModePtr mode,
*fb = radeon_pixmap_get_fb(drmmode_crtc->scanout[scanout_id].pixmap);
*x = *y = 0;
- radeon_scanout_do_update(crtc, scanout_id,
- screen->GetWindowPixmap(screen->root),
- extents);
- RegionEmpty(DamageRegion(drmmode_crtc->scanout_damage));
- radeon_finish(scrn, drmmode_crtc->scanout[scanout_id].bo);
+ if (radeon_scanout_do_update(crtc, scanout_id,
+ screen->GetWindowPixmap(screen->root),
+ extents)) {
+ RegionEmpty(DamageRegion(drmmode_crtc->scanout_damage));
+ radeon_glamor_finish(scrn);
+
+ if (!drmmode_crtc->flip_pending) {
+ radeon_drm_abort_entry(drmmode_crtc->
+ scanout_update_pending);
+ }
+ }
}
}