From 36d01989cd842588f12fdae5b2cba5fdcf9c91dd Mon Sep 17 00:00:00 2001 From: Michel Dänzer Date: Wed, 18 Apr 2018 11:17:02 +0200 Subject: Abort scanout_update_pending event when possible We don't need to wait for a non-TearFree scanout update before scanning out from the screen pixmap or before flipping, as the scanout update won't be visible anyway. Instead, just abort it. --- src/drmmode_display.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/drmmode_display.c b/src/drmmode_display.c index 2d1540d..dcfc993 100644 --- a/src/drmmode_display.c +++ b/src/drmmode_display.c @@ -953,8 +953,8 @@ done: if (drmmode_crtc->scanout[scanout_id].pixmap && fb != amdgpu_pixmap_get_fb(drmmode_crtc-> scanout[scanout_id].pixmap)) { - drmmode_crtc_wait_pending_event(drmmode_crtc, pAMDGPUEnt->fd, - drmmode_crtc->scanout_update_pending); + amdgpu_drm_abort_entry(drmmode_crtc->scanout_update_pending); + drmmode_crtc->scanout_update_pending = 0; drmmode_crtc_scanout_free(drmmode_crtc); } else if (!drmmode_crtc->tear_free) { drmmode_crtc_scanout_destroy(drmmode, @@ -3083,8 +3083,12 @@ Bool amdgpu_do_pageflip(ScrnInfoPtr scrn, ClientPtr client, amdgpu_scanout_do_update(crtc, scanout_id, new_front, extents); - drmmode_crtc_wait_pending_event(drmmode_crtc, pAMDGPUEnt->fd, - drmmode_crtc->scanout_update_pending); + if (drmmode_crtc->scanout_update_pending) { + drmmode_crtc_wait_pending_event(drmmode_crtc, pAMDGPUEnt->fd, + drmmode_crtc->flip_pending); + amdgpu_drm_abort_entry(drmmode_crtc->scanout_update_pending); + drmmode_crtc->scanout_update_pending = 0; + } } if (crtc == ref_crtc) { -- cgit v1.2.3