xserver: Branch 'master' - 2 commits

Adam Jackson ajax at kemper.freedesktop.org
Wed Feb 8 17:20:32 UTC 2017


 dix/pixmap.c      |   16 ++++++++++++----
 present/present.c |   16 ----------------
 2 files changed, 12 insertions(+), 20 deletions(-)

New commits:
commit 542d9f6807ac06b70f564ccab10af69fa21a1221
Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Wed Feb 1 18:35:57 2017 +0900

    present: Allow flipping with PRIME slave outputs
    
    Works fine now.
    
    Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
    Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>

diff --git a/present/present.c b/present/present.c
index c9c68dc..aa9c041 100644
--- a/present/present.c
+++ b/present/present.c
@@ -118,18 +118,6 @@ present_flip_pending_pixmap(ScreenPtr screen)
 }
 
 static Bool
-present_check_output_slaves_active(ScreenPtr pScreen)
-{
-    ScreenPtr pSlave;
-
-    xorg_list_for_each_entry(pSlave, &pScreen->slave_list, slave_head) {
-        if (RRHasScanoutPixmap(pSlave))
-            return TRUE;
-    }
-    return FALSE;
-}
-
-static Bool
 present_check_flip(RRCrtcPtr    crtc,
                    WindowPtr    window,
                    PixmapPtr    pixmap,
@@ -156,10 +144,6 @@ present_check_flip(RRCrtcPtr    crtc,
     if (!screen_priv->info->flip)
         return FALSE;
 
-    /* Fail to flip if we have slave outputs */
-    if (screen->output_slaves && present_check_output_slaves_active(screen))
-        return FALSE;
-
     /* Make sure the window hasn't been redirected with Composite */
     window_pixmap = screen->GetWindowPixmap(window);
     if (window_pixmap != screen->GetScreenPixmap(screen) &&
commit b5b292896f647c85f03f53b20b2f03c0e94de428
Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Wed Feb 1 18:35:56 2017 +0900

    prime: Sync shared pixmap from root window instead of screen pixmap
    
    The screen pixmap doesn't receive updates while there's a Present flip
    window.
    
    Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
    Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>

diff --git a/dix/pixmap.c b/dix/pixmap.c
index 49267a1..ef00830 100644
--- a/dix/pixmap.c
+++ b/dix/pixmap.c
@@ -233,7 +233,8 @@ PixmapStartDirtyTracking(PixmapPtr src,
     RegionUnion(damageregion, damageregion, &dstregion);
     RegionUninit(&dstregion);
 
-    DamageRegister(&src->drawable, dirty_update->damage);
+    DamageRegister(screen->root ? &screen->root->drawable : &src->drawable,
+                   dirty_update->damage);
     xorg_list_add(&dirty_update->ent, &screen->pixmap_dirty_list);
     return TRUE;
 }
@@ -260,6 +261,7 @@ PixmapDirtyCopyArea(PixmapPtr dst,
                     RegionPtr dirty_region)
 {
     ScreenPtr pScreen = dirty->src->drawable.pScreen;
+    DrawablePtr src = pScreen->root ? &pScreen->root->drawable : &dirty->src->drawable;
     int n;
     BoxPtr b;
     GCPtr pGC;
@@ -267,7 +269,13 @@ PixmapDirtyCopyArea(PixmapPtr dst,
     n = RegionNumRects(dirty_region);
     b = RegionRects(dirty_region);
 
-    pGC = GetScratchGC(dirty->src->drawable.depth, pScreen);
+    pGC = GetScratchGC(src->depth, pScreen);
+    if (pScreen->root) {
+        ChangeGCVal subWindowMode;
+
+        subWindowMode.val = IncludeInferiors;
+        ChangeGC(NullClient, pGC, GCSubwindowMode, &subWindowMode);
+    }
     ValidateGC(&dst->drawable, pGC);
 
     while (n--) {
@@ -278,7 +286,7 @@ PixmapDirtyCopyArea(PixmapPtr dst,
         w = dst_box.x2 - dst_box.x1;
         h = dst_box.y2 - dst_box.y1;
 
-        pGC->ops->CopyArea(&dirty->src->drawable, &dst->drawable, pGC,
+        pGC->ops->CopyArea(src, &dst->drawable, pGC,
                            dirty->x + dst_box.x1, dirty->y + dst_box.y1, w, h,
                            dirty->dst_x + dst_box.x1,
                            dirty->dst_y + dst_box.y1);
@@ -301,7 +309,7 @@ PixmapDirtyCompositeRotate(PixmapPtr dst_pixmap,
     int error;
 
     src = CreatePicture(None,
-                        &dirty->src->drawable,
+                        &pScreen->root->drawable,
                         format,
                         CPSubwindowMode,
                         &include_inferiors, serverClient, &error);


More information about the xorg-commit mailing list