xserver: Branch 'master' - 3 commits

Keith Packard keithp at kemper.freedesktop.org
Fri Dec 27 09:39:04 PST 2013


 present/present.c |   33 +++++++++++++++++++++++++++++----
 1 file changed, 29 insertions(+), 4 deletions(-)

New commits:
commit 2eb9915eea358f941702d3dad7434197991885c5
Author: Keith Packard <keithp at keithp.com>
Date:   Thu Dec 12 15:48:08 2013 -0800

    present: Set complete notify mode to Skip as needed
    
    Skipped present pixmap calls were not setting the mode to
    PresentCompleteModeSkip for skipped operations.
    
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/present/present.c b/present/present.c
index 3caa8b7..30cd3b9 100644
--- a/present/present.c
+++ b/present/present.c
@@ -525,6 +525,7 @@ present_execute(present_vblank_ptr vblank, uint64_t ust, uint64_t crtc_msc)
     WindowPtr                   window = vblank->window;
     ScreenPtr                   screen = window->drawable.pScreen;
     present_screen_priv_ptr     screen_priv = present_screen_priv(screen);
+    uint8_t                     mode;
 
     if (vblank->wait_fence) {
         if (!present_fence_check_triggered(vblank->wait_fence)) {
@@ -604,7 +605,20 @@ present_execute(present_vblank_ptr vblank, uint64_t ust, uint64_t crtc_msc)
 
         present_pixmap_idle(vblank->pixmap, vblank->window, vblank->serial, vblank->idle_fence);
     }
-    present_vblank_notify(vblank, vblank->kind, PresentCompleteModeCopy, ust, crtc_msc);
+
+    /* Compute correct CompleteMode
+     */
+    if (vblank->kind == PresentCompleteKindPixmap) {
+        if (vblank->pixmap && vblank->window)
+            mode = PresentCompleteModeCopy;
+        else
+            mode = PresentCompleteModeSkip;
+    }
+    else
+        mode = PresentCompleteModeCopy;
+
+
+    present_vblank_notify(vblank, vblank->kind, mode, ust, crtc_msc);
     present_vblank_destroy(vblank);
 }
 
commit e487babd525ef1bd016ec7b283fa08cf9e6c6f4f
Author: Keith Packard <keithp at keithp.com>
Date:   Thu Dec 12 14:52:35 2013 -0800

    present: Don't abandon presents which are already queued for flip
    
    Presents which are not marked 'queued' and are in the window present
    list are waiting for the flip event; discarding those won't work very
    well (it'll end up trashing displayed content for the next frame), so
    skip over those when looking for duplicate frame presents
    
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/present/present.c b/present/present.c
index 4c0d63b..3caa8b7 100644
--- a/present/present.c
+++ b/present/present.c
@@ -689,6 +689,9 @@ present_pixmap(WindowPtr window,
             if (!vblank->pixmap)
                 continue;
 
+            if (!vblank->queued)
+                continue;
+
             if (vblank->crtc != target_crtc || vblank->target_msc != target_msc)
                 continue;
 
commit ca3a5b2a8f9f627bbaa9883e16512a21c2a0b81d
Author: Keith Packard <keithp at keithp.com>
Date:   Thu Dec 12 14:17:40 2013 -0800

    present: Handle PresentOptionAsync for copy mode
    
    Check for Async flag and execute immediately if set, otherwise wait
    for the next appropriate vblank before copying.
    
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/present/present.c b/present/present.c
index 50bd055..4c0d63b 100644
--- a/present/present.c
+++ b/present/present.c
@@ -663,10 +663,18 @@ present_pixmap(WindowPtr window,
     if (crtc_msc >= target_msc) {
         if (divisor != 0) {
             target_msc = crtc_msc - (crtc_msc % divisor) + remainder;
-            if (target_msc <= crtc_msc)
-                target_msc += divisor;
-        } else
+            if (options & PresentOptionAsync) {
+                if (target_msc < crtc_msc)
+                    target_msc += divisor;
+            } else {
+                if (target_msc <= crtc_msc)
+                    target_msc += divisor;
+            }
+        } else {
             target_msc = crtc_msc;
+            if (!(options & PresentOptionAsync))
+                target_msc++;
+        }
     }
 
     /*


More information about the xorg-commit mailing list