diff options
author | Michel Dänzer <michel.daenzer@amd.com> | 2018-04-18 11:17:02 +0200 |
---|---|---|
committer | Michel Dänzer <michel@daenzer.net> | 2018-04-20 17:14:45 +0200 |
commit | 36d01989cd842588f12fdae5b2cba5fdcf9c91dd (patch) | |
tree | 6e5fa13e094a0207c5f16c361ffb81949f72a7eb | |
parent | 04a5c5f7cfacad8d9ccffe81e388cc3da2036cb5 (diff) |
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.
-rw-r--r-- | src/drmmode_display.c | 12 |
1 files 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) { |