xserver: Branch 'master'

Keith Packard keithp at kemper.freedesktop.org
Mon Feb 24 16:33:51 PST 2014


 randr/rrcrtc.c |   14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

New commits:
commit caf1dec2a76fbbd21259fe4cc809e24a55ff79b4
Author: David Sodman <dsodman at chromium.org>
Date:   Mon Feb 10 09:07:33 2014 -0800

    V2: Add check for link from output to crtc before optimizing out a CrtcSet call
    
    The function RRCrtcSet call checks to see if the config being set is
    already configured, but, doesn't check that the selected outputs are
    connected to the crtc before skipping.  This means that the following
    sequence will omit the final CrtcSet call to the driver:
    
        CRTC c1 connect to output o
        CRTC c2 connect to output o
        CRTC c1 connect to output o
    
    This change adds the check to ensure that each of the calls are made to
    the driver.
    
    Signed-off-by: David Sodman <dsodman at chromium.org>
    Reviewed-by: Stéphane Marchesin <marcheu at chromium.org>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c
index 6e181ba..6da698e 100644
--- a/randr/rrcrtc.c
+++ b/randr/rrcrtc.c
@@ -522,9 +522,19 @@ RRCrtcSet(RRCrtcPtr crtc,
     ScreenPtr pScreen = crtc->pScreen;
     Bool ret = FALSE;
     Bool recompute = TRUE;
+    Bool crtcChanged;
+    int  o;
 
     rrScrPriv(pScreen);
 
+    crtcChanged = FALSE;
+    for (o = 0; o < numOutputs; o++) {
+        if (outputs[o] && outputs[o]->crtc != crtc) {
+            crtcChanged = TRUE;
+            break;
+        }
+    }
+
     /* See if nothing changed */
     if (crtc->mode == mode &&
         crtc->x == x &&
@@ -532,7 +542,8 @@ RRCrtcSet(RRCrtcPtr crtc,
         crtc->rotation == rotation &&
         crtc->numOutputs == numOutputs &&
         !memcmp(crtc->outputs, outputs, numOutputs * sizeof(RROutputPtr)) &&
-        !RRCrtcPendingProperties(crtc) && !RRCrtcPendingTransform(crtc)) {
+        !RRCrtcPendingProperties(crtc) && !RRCrtcPendingTransform(crtc) &&
+        !crtcChanged) {
         recompute = FALSE;
         ret = TRUE;
     }
@@ -604,7 +615,6 @@ RRCrtcSet(RRCrtcPtr crtc,
 #endif
         }
         if (ret) {
-            int o;
 
             RRTellChanged(pScreen);
 


More information about the xorg-commit mailing list