summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichel Dänzer <michel.daenzer@amd.com>2018-04-18 11:17:02 +0200
committerMichel Dänzer <michel@daenzer.net>2018-04-20 17:14:45 +0200
commit36d01989cd842588f12fdae5b2cba5fdcf9c91dd (patch)
tree6e5fa13e094a0207c5f16c361ffb81949f72a7eb
parent04a5c5f7cfacad8d9ccffe81e388cc3da2036cb5 (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.c12
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) {