Hello community,

here is the log from the commit of package xf86-video-ati for openSUSE:Factory 
checked in at 2016-09-23 11:23:39
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/xf86-video-ati (Old)
 and      /work/SRC/openSUSE:Factory/.xf86-video-ati.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "xf86-video-ati"

Changes:
--------
--- /work/SRC/openSUSE:Factory/xf86-video-ati/xf86-video-ati.changes    
2016-04-12 19:00:17.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.xf86-video-ati.new/xf86-video-ati.changes       
2016-09-23 11:23:40.000000000 +0200
@@ -1,0 +2,8 @@
+Mon Sep 19 13:32:04 UTC 2016 - [email protected]
+
+- Update to version 7.7.1:
+  This release supports xserver versions 1.9-1.18.
+  This is a stable point release containing only fixes for crash/hang/
+  corruption bugs and other minor changes.
+
+-------------------------------------------------------------------

Old:
----
  xf86-video-ati-7.7.0.tar.bz2
  xf86-video-ati-7.7.0.tar.bz2.sig

New:
----
  xf86-video-ati-7.7.1.tar.bz2
  xf86-video-ati-7.7.1.tar.bz2.sig

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ xf86-video-ati.spec ++++++
--- /var/tmp/diff_new_pack.NH2HZu/_old  2016-09-23 11:23:41.000000000 +0200
+++ /var/tmp/diff_new_pack.NH2HZu/_new  2016-09-23 11:23:41.000000000 +0200
@@ -19,7 +19,7 @@
 %define xserver_glamor 1
 
 Name:           xf86-video-ati
-Version:        7.7.0
+Version:        7.7.1
 Release:        0
 Summary:        ATI video driver for the Xorg X server
 License:        MIT

++++++ xf86-video-ati-7.7.0.tar.bz2 -> xf86-video-ati-7.7.1.tar.bz2 ++++++
++++ 1818 lines of diff (skipped)
++++    retrying with extended exclude list
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xf86-video-ati-7.7.0/ChangeLog new/xf86-video-ati-7.7.1/ChangeLog
--- old/xf86-video-ati-7.7.0/ChangeLog  2016-04-07 04:50:28.000000000 +0200
+++ new/xf86-video-ati-7.7.1/ChangeLog  2016-09-15 11:09:39.000000000 +0200
@@ -1,3 +1,245 @@
+commit d6f89352f64f4eff858b671e49b732f9973f6e11
+Author: Michel Dänzer <[email protected]>
+Date:   Thu Sep 15 17:44:21 2016 +0900
+
+    Bump version for 7.7.1 release
+
+commit e890402d14ea7c4b22ef7f19d0679fb45d4eac4e
+Author: Qiang Yu <[email protected]>
+Date:   Thu Sep 15 16:51:00 2016 +0900
+
+    DRI2: Fix radeon_dri2_exchange_buffers width/height copy'n'paste error
+    
+    Signed-off-by: Qiang Yu <[email protected]>
+    (Ported from amdgpu commit 73c8dc000ad6b2b53ba3aa7155f5e8f6b55623b7)
+    Reviewed-by: Alex Deucher <[email protected]>
+    (Cherry picked from commit 12d30eeb9711bd2b1609d6bbb74c4a1760596f72)
+
+commit b95ddb39c1154b3231cefd4e99046e7fb89f1e99
+Author: Michel Dänzer <[email protected]>
+Date:   Thu Sep 15 16:50:24 2016 +0900
+
+    DRI2: Add interpolated_vblanks in radeon_dri2_get_crtc_msc
+    
+    We need that in radeon_dri2_drawable_crtc as well for priv->vblank_delta
+    to work as intended.
+    
+    radeon_dri2_get_msc was already doing this.
+    
+    Fixes hangs in some cases when using VDPAU via DRI2 and moving the
+    window between CRTCs.
+    
+    (Ported from amdgpu commit abd1a7901c95e4bc78415cf1b7923623b9177152)
+    Reviewed-by: Alex Deucher <[email protected]>
+    (Cherry picked from commit 11cc6843aa3b745aa1361f1a65e465e16696b914)
+
+commit 6cca7d529c3bb07bc78a49ae5085028ac743fe1d
+Author: Michel Dänzer <[email protected]>
+Date:   Thu Sep 15 16:49:48 2016 +0900
+
+    Destroy all dedicated scanout buffers during CloseScreen
+    
+    Fixes leaking active scanout buffers across a server reset, which also
+    fixes server reset with glamor and active scanout buffers.
+    
+    (Ported from amdgpu commit d96dabc71b1b32dc4b422a9633cdd4e0e95da052)
+    Reviewed-by: Alex Deucher <[email protected]>
+    (Cherry picked from commit 4a5fa37f74c233c6b9c6a08306688628a8e216e8)
+
+commit 05f3735131e8fa8c2d1adbca70dab7967e3be58c
+Author: Michel Dänzer <[email protected]>
+Date:   Thu Sep 15 16:49:10 2016 +0900
+
+    glamor: Reallocate linear pixmap BO if necessary for DRI2 PRIME
+    
+    Fixes corruption when using DRI2 PRIME render offloading with the master
+    screen using this driver.
+    
+    (Ported from amdgpu commit 0007c2f018ba663303d91d847e7c085269a23062)
+    Reviewed-by: Alex Deucher <[email protected]>
+    (Cherry picked from commit cc2555835cd4c5fd2ae4f999a4bf7c18cdb1dda4)
+
+commit 6babf4d2205543a61fcd62c75fd88e49d0ed7cf1
+Author: Michel Dänzer <[email protected]>
+Date:   Thu Sep 15 16:48:20 2016 +0900
+
+    Move DRI2's local fixup_glamor helper to radeon_glamor_set_pixmap_bo
+    
+    So it can be used outside of the DRI2 code.
+    
+    (Ported from amdgpu commit 5518bf5d793439b5bab369e5fc18de9a4a3b9dd6)
+    Reviewed-by: Alex Deucher <[email protected]>
+    (Cherry picked from commit b3e5259e60157fdbdf46ee59b1b78995c2b15f72)
+
+commit a3d8e717d5dba8495d6b9934b0804342106e90f5
+Author: Michel Dänzer <[email protected]>
+Date:   Thu Sep 15 16:47:54 2016 +0900
+
+    Consolidate get_drawable_pixmap helper
+    
+    There were two static helpers for the same purpose. Consolidate them
+    into a single inline helper which can be used anywhere.
+    
+    (Ported from amdgpu commit 641f4647b7f51dfd2da330376cd10fa9702b6423)
+    Reviewed-by: Alex Deucher <[email protected]>
+    (Cherry picked from commit 38632bbd5ff80a9cf8ce584b2bc499d17d15befe)
+
+commit 00a988a811741ee4e4af265deb68b97cc7e5c985
+Author: Michel Dänzer <[email protected]>
+Date:   Thu Sep 15 16:47:23 2016 +0900
+
+    glamor: Fix radeon_glamor_share_pixmap_backing for priv->bo == NULL
+    
+    Fixes crash when running a compositor and DRI_PRIME client via DRI2.
+    
+    Reported-by: Qiang Yu <[email protected]>
+    (Ported from amdgpu commit b36c77695ba77b59a0ccd868454e3af4fc04d5ff)
+    Reviewed-by: Alex Deucher <[email protected]>
+    (Cherry picked from commit e91858e435672c32f9c4a854b3dec048199d6f7f)
+
+commit 953b4c2cdf3ea2dcf2d7cc0b1fa0fabefcc49afd
+Author: Michel Dänzer <[email protected]>
+Date:   Thu Sep 15 16:46:35 2016 +0900
+
+    Also handle disabled CRTCs in drmmode_clear_pending_flip
+    
+    If disabling a CRTC had to be deferred due to a pending flip in
+    drmmode_crtc_dpms, there may no longer be any outputs associated with
+    the CRTC when we get here. So we have to check for !crtc->enabled and
+    call drmmode_crtc_dpms in that case as well.
+    
+    Fixes: 9090309e057d ("Wait for pending flips to complete before turning
+    off an output or CRTC")
+    Reviewed-by: Alex Deucher <[email protected]>
+    (Cherry picked from commit 4bd2d01552f18153afa03a8947b22eebf3d67c6b)
+
+commit 13f3fe45a4026801f61fb6429ca6e239a1b8c081
+Author: Michel Dänzer <[email protected]>
+Date:   Thu Sep 15 16:46:04 2016 +0900
+
+    Don't override crtc parameter value in drmmode_flip_handler/abort
+    
+    When overriding the crtc parameter value of the last pending CRTC,
+    drmmode_clear_pending_flip would work on the wrong CRTC, and the last
+    pending CRTC's flip_pending flag might never get cleared. This would
+    prevent that CRTC from properly turning off and back on again.
+    
+    Fixes: 9090309e057d ("Wait for pending flips to complete before turning
+    off an output or CRTC")
+    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97392
+    Reviewed-by: Alex Deucher <[email protected]>
+    (Cherry picked from commit a36fdaff40d5b4795a1400c348a80eee94892212)
+
+commit 08672d31a616060d23a2e1543643eafa97bfe236
+Author: Michel Dänzer <[email protected]>
+Date:   Thu Aug 25 18:22:34 2016 +0900
+
+    Also call drmmode_clear_pending_flip from radeon_scanout_flip_abort
+    
+    Not doing so could break DPMS with TearFree.
+    
+    Reported-and-Tested-by: furkan on IRC
+    Fixes: 9090309e057d ("Wait for pending flips to complete before turning
+    off an output or CRTC")
+    Reviewed-by: Alex Deucher <[email protected]>
+    (Cherry picked from commit e520ce0ec0adf91ddce5c932d4b3f9477fd49304)
+
+commit a12ff1c6aec4453a6f64878cc64961488e803ed1
+Author: Michel Dänzer <[email protected]>
+Date:   Thu Sep 15 16:44:13 2016 +0900
+
+    Wait for pending flips to complete before turning off an output or CRTC
+    
+    At least with older kernels, the flip may never complete otherwise,
+    which can result in us hanging in drmmode_set_mode_major.
+    
+    Fixes: 
https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-ati/+bug/1577170
+    
+    Reviewed-by: Alex Deucher <[email protected]>
+    (Cherry picked from commit 9090309e057dc703d1a5bffd88e6cae14108cfc3)
+
+commit 4d377fd007d9a39178e318a8cf8bee5d68415c56
+Author: Michel Dänzer <[email protected]>
+Date:   Thu Sep 15 16:42:05 2016 +0900
+
+    Don't enable micro-tiling for scanout buffers on pre-R600
+    
+    The display engine didn't support it.
+    
+    Fixes display corruption with options "TearFree" and "ShadowPrimary"
+    (and rotation or transforms with current xserver) on pre-R600.
+    
+    Reviewed-by: Alex Deucher <[email protected]>
+    (Cherry picked from commit 6d91fb4fc701895473ff675f440a8eef655e80ca)
+
+commit 16135cc8b5d302cf89e174c52e455b64c2c84237
+Author: Michel Dänzer <[email protected]>
+Date:   Thu Sep 15 16:41:15 2016 +0900
+
+    Only use RandR APIs if RandR is enabled
+    
+    Fixes crash with Xinerama enabled, which disables RandR.
+    
+    Fixes: https://bugs.debian.org/827984
+    
+    Reviewed-by: Alex Deucher <[email protected]>
+    (Cherry picked from commit 3be841d0ae7d505cef325993205b12d15e98dba9)
+
+commit 948f592259f2f0c0ff331b869fb8f73ce0b29193
+Author: Michel Dänzer <[email protected]>
+Date:   Thu Sep 15 16:40:32 2016 +0900
+
+    Explicitly set the fbcon pixmap pitch again
+    
+    The kernel driver returns 0 as the pitch of the fbcon BO via the
+    DRM_RADEON_GEM_GET_TILING ioctl, so we ended up using an incorrect
+    pitch in some cases.
+    
+    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94901
+    
+    Reviewed-by: Alex Deucher <[email protected]>
+    (Cherry picked from commit 040a7b80e1fcbaa93ac17f7113d696d9b853cf8a)
+
+commit d1e74e357278d1227425b12a4a1be2b337a6051d
+Author: Qiang Yu <[email protected]>
+Date:   Thu Sep 15 16:39:37 2016 +0900
+
+    Fix radeon_mode_hotplug crash on multi GPU platform.
+    
+    On multi GPU platform, some screen is created by other GPU DDX.
+    
+    Signed-off-by: Qiang Yu <[email protected]>
+    (Ported from amdgpu commit 978242977e5dc905e1d5a46b1b0d34b356c7af26)
+    Reviewed-by: Alex Deucher <[email protected]>
+    (Cherry picked from commit 380daff43cfefe2a8e4d496eaf65673f2815c878)
+
+commit 3f4cba12b71206aa60271ac435c3709ee335a371
+Author: Michel Dänzer <[email protected]>
+Date:   Thu Sep 15 16:38:52 2016 +0900
+
+    Handle Zaphod mode correctly in radeon_mode_hotplug
+    
+    We need to scan both screens of the entity for existing connectors, and
+    enumerate DVI & HDMI connectors consistently regardless of which screen
+    they're assigned to.
+    
+    Fixes crash when hot-(un)plugging connectors in Zaphod mode.
+    
+    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93415
+    Reviewed-by: Alex Deucher <[email protected]>
+    (Cherry picked from commit c801f9f10a5d72d935faf21e72f7e7808fb4f05f)
+
+commit 470538c354977e2ef5256029433d2e28e4a1f7e8
+Author: Qiang Yu <[email protected]>
+Date:   Thu Sep 15 16:37:57 2016 +0900
+
+    Remove RR_Capability_SinkOutput for GPU without CRTC
+    
+    Signed-off-by: Qiang Yu <[email protected]>
+    (Ported from amdgpu commit a0bbb373f902e0ffc14570c85faec7e44134f62e)
+    Reviewed-by: Alex Deucher <[email protected]>
+    (Cherry picked from commit ba8b6288c8e6fc4be5d7144ecbe9a1f241881674)
+
 commit df6662864b56d1aeeea4c67d9b668e64197afb20
 Author: Michel Dänzer <[email protected]>
 Date:   Thu Apr 7 11:44:05 2016 +0900
@@ -1567,7 +1809,7 @@
     
     Must be enabled with
     
-       Option  "DRI3"
+            Option  "DRI3"
     
     in xorg.conf.
     
@@ -4001,7 +4243,7 @@
     
     Enable at build time with --enable-glamor and runtime with
     
-       Option  "AccelMethod" "glamor"
+            Option  "AccelMethod" "glamor"
     
     The most notable lack of functionality is XVideo. Use something like VDPAU 
for
     now.
@@ -4088,7 +4330,7 @@
       ...
     
     Conflicts:
-       configure.ac
+            configure.ac
 
 commit 6a60fcdf060a0f553d8d4f7939c2a05aa04bedfa
 Author: Dave Airlie <[email protected]>
@@ -10262,7 +10504,7 @@
     
     Conflicts:
     
-       src/drmmode_display.c
+            src/drmmode_display.c
 
 commit a493feb94c0d84aaf5bfd84c6940d7f03974dd86
 Author: Dave Airlie <[email protected]>
@@ -14171,7 +14413,7 @@
     
     Conflicts:
     
-       src/radeon_atombios.c
+            src/radeon_atombios.c
 
 commit 1a62360e8260eaf5f98fa6be3f89f64c8cae7d32
 Author: Alex Deucher <[email protected]>
@@ -14618,7 +14860,7 @@
     
     R5xx:      always use single clipped triangle
     R3xx/R4xx: use single clipped triangle up to guardband limit,
-          then use quad.
+               then use quad.
 
 commit 4d009d14c9c72f6e1bc8100ec8d9b8037ee4e514
 Merge: d52882d 4e96278
@@ -16374,7 +16616,7 @@
     
     See bug 14289
     
-       com_bios_scratch.diff
+            com_bios_scratch.diff
 
 commit 38ce8a984f96056b7345bcc06505ba27e0e6d5b4
 Author: Dave Airlie <[email protected]>
@@ -17037,9 +17279,9 @@
     
     Conflicts:
     
-       src/radeon_commonfuncs.c
-       src/radeon_exa_render.c
-       src/radeon_textured_videofuncs.c
+            src/radeon_commonfuncs.c
+            src/radeon_exa_render.c
+            src/radeon_textured_videofuncs.c
 
 commit 0032c80bf30bab189204e3e6929e18a19d753138
 Author: Alex Deucher <[email protected]>
@@ -17135,8 +17377,8 @@
     
     Conflicts:
     
-       src/radeon.h
-       src/radeon_driver.c
+            src/radeon.h
+            src/radeon_driver.c
     
     This rework seems to have caused more trouble than it was worth.
 
@@ -17150,7 +17392,7 @@
     
     Conflicts:
     
-       src/radeon_driver.c
+            src/radeon_driver.c
 
 commit c40a7aa3989576a8144213e2f31b892d21df8686
 Author: Owen W. Taylor <[email protected]>
@@ -18176,7 +18418,7 @@
     
     Conflicts:
     
-       src/radeon_commonfuncs.c
+            src/radeon_commonfuncs.c
 
 commit 27ddb39b12a0b54e099fd5274c4c91f08e2d2822
 Author: Alex Deucher <alex@samba.(none)>
@@ -19272,8 +19514,8 @@
     
     Conflicts:
     
-       src/radeon_display.c
-       src/radeon_driver.c
+            src/radeon_display.c
+            src/radeon_driver.c
 
 commit eb99c3c5c9a2249cb84920f0f225e525fc3a4144
 Author: Alex Deucher <alex@botch2.(none)>
@@ -19653,10 +19895,10 @@
     
     Conflicts:
     
-       src/radeon.h
-       src/radeon_crtc.c
-       src/radeon_driver.c
-       src/radeon_output.c
+            src/radeon.h
+            src/radeon_crtc.c
+            src/radeon_driver.c
+            src/radeon_output.c
 
 commit 6451ea2dcc4fac762442f699935864f4a8d445f7
 Merge: 0d89556 5896ca4
@@ -19727,7 +19969,7 @@
     
     Conflicts:
     
-       src/radeon_output.c
+            src/radeon_output.c
 
 commit 21ed435398e4a398dd8a0a5d7c1d4cc45e916332
 Author: Alex Deucher <[email protected]>
@@ -20234,9 +20476,9 @@
     
     Conflicts:
     
-       src/radeon_chipset.h
-       src/radeon_driver.c
-       src/radeon_probe.c
+            src/radeon_chipset.h
+            src/radeon_driver.c
+            src/radeon_probe.c
 
 commit 0d1e0c7805b3d8e56ccb49465e6b144afb7bdc51
 Author: Dave Airlie <[email protected]>
@@ -20259,8 +20501,8 @@
     
     Conflicts:
     
-       src/radeon_cursor.c
-       src/radeon_output.c
+            src/radeon_cursor.c
+            src/radeon_output.c
 
 commit 744c8cb6c293fcaa687566f52901644e699baace
 Merge: e258fbe e530af7
@@ -21471,7 +21713,7 @@
     
     Conflicts:
     
-       src/ati.c
+            src/ati.c
 
 commit 673f799729824f4439dd5f681f75dd5aab50947f
 Author: Alex Deucher <alex@botch2.(none)>
@@ -21742,14 +21984,14 @@
     
     Conflicts:
     
-       src/radeon.h
-       src/radeon_bios.c
-       src/radeon_display.c
-       src/radeon_dri.c
-       src/radeon_driver.c
-       src/radeon_modes.c
-       src/radeon_probe.h
-       src/radeon_video.c
+            src/radeon.h
+            src/radeon_bios.c
+            src/radeon_display.c
+            src/radeon_dri.c
+            src/radeon_driver.c
+            src/radeon_modes.c
+            src/radeon_probe.h
+            src/radeon_video.c
 
 commit 53a67e31904bec9a3aa1bd24de8034dcafea1d2a
 Author: Alex Deucher <[email protected]>
@@ -22615,9 +22857,9 @@
     
     Conflicts:
     
-       src/radeon_cursor.c
-       src/radeon_display.c
-       src/radeon_driver.c
+            src/radeon_cursor.c
+            src/radeon_display.c
+            src/radeon_driver.c
 
 commit 800bf53279e2c2bf854682bbfd6fa16d03afed00
 Author: Matthieu Herrb <[email protected]>
@@ -23603,8 +23845,8 @@
     
     Conflicts:
     
-       src/radeon_display.c
-       src/radeon_driver.c
+            src/radeon_display.c
+            src/radeon_driver.c
 
 commit 3b43788c45f51ad2d3e8e64383c412f4ddd97207
 Author: Dave Airlie <[email protected]>
@@ -25114,7 +25356,7 @@
     
     Conflicts:
     
-       src/radeon_driver.c
+            src/radeon_driver.c
 
 commit 9fa176c7989030e7340cc9b85d0b6a7b34303091
 Author: Alex Deucher <alex@samba.(none)>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xf86-video-ati-7.7.0/configure.ac new/xf86-video-ati-7.7.1/configure.ac
--- old/xf86-video-ati-7.7.0/configure.ac       2016-04-07 04:43:03.000000000 
+0200
+++ new/xf86-video-ati-7.7.1/configure.ac       2016-09-15 10:52:47.000000000 
+0200
@@ -23,7 +23,7 @@
 # Initialize Autoconf
 AC_PREREQ([2.60])
 AC_INIT([xf86-video-ati],
-        [7.7.0],
+        [7.7.1],
         [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
         [xf86-video-ati])
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xf86-video-ati-7.7.0/src/drmmode_display.c 
new/xf86-video-ati-7.7.1/src/drmmode_display.c
--- old/xf86-video-ati-7.7.0/src/drmmode_display.c      2016-04-07 
04:40:38.000000000 +0200
+++ new/xf86-video-ati-7.7.1/src/drmmode_display.c      2016-09-15 
10:52:47.000000000 +0200
@@ -36,6 +36,7 @@
 #include "damagestr.h"
 #include "micmap.h"
 #include "xf86cmap.h"
+#include "xf86Priv.h"
 #include "radeon.h"
 #include "radeon_bo_helper.h"
 #include "radeon_glamor.h"
@@ -97,6 +98,7 @@
 static PixmapPtr drmmode_create_bo_pixmap(ScrnInfoPtr pScrn,
                                          int width, int height,
                                          int depth, int bpp,
+                                         int pitch,
                                          struct radeon_bo *bo, struct 
radeon_surface *psurf)
 {
        RADEONInfoPtr info = RADEONPTR(pScrn);
@@ -110,8 +112,16 @@
        if (!pixmap)
                return NULL;
 
+       if (pitch <= 0 &&
+           (radeon_bo_get_tiling(bo, &tiling, (uint32_t*)&pitch) != 0 ||
+            pitch <= 0)) {
+               ErrorF("radeon_bo_get_tiling failed to determine pitch\n");
+               pScreen->DestroyPixmap(pixmap);
+               return NULL;
+       }
+
        if (!(*pScreen->ModifyPixmapHeader)(pixmap, width, height,
-                                           depth, bpp, -1, NULL)) {
+                                           depth, bpp, pitch, NULL)) {
                return NULL;
        }
 
@@ -293,9 +303,15 @@
        CARD64 ust;
        int ret;
 
+       drmmode_crtc->pending_dpms_mode = mode;
+
        if (drmmode_crtc->dpms_mode == DPMSModeOn && mode != DPMSModeOn) {
                drmVBlank vbl;
 
+               /* Wait for any pending flip to finish */
+               if (drmmode_crtc->flip_pending)
+                       return;
+
                /*
                 * On->Off transition: record the last vblank time,
                 * sequence number and frame period.
@@ -353,10 +369,14 @@
        drmmode_ptr drmmode = drmmode_crtc->drmmode;
 
        /* Disable unused CRTCs */
-       if (!crtc->enabled || mode != DPMSModeOn)
+       if (!crtc->enabled || mode != DPMSModeOn) {
+               /* Wait for any pending flip to finish */
+               if (drmmode_crtc->flip_pending)
+                       return;
+
                drmModeSetCrtc(drmmode->fd, drmmode_crtc->mode_crtc->crtc_id,
                               0, 0, 0, NULL, 0, NULL);
-       else if (drmmode_crtc->dpms_mode != DPMSModeOn)
+       } else if (drmmode_crtc->dpms_mode != DPMSModeOn)
                crtc->funcs->set_mode_major(crtc, &crtc->mode, crtc->rotation,
                                            crtc->x, crtc->y);
 }
@@ -400,7 +420,8 @@
        }
 
        pixmap = drmmode_create_bo_pixmap(pScrn, fbcon->width, fbcon->height,
-                                         fbcon->depth, fbcon->bpp, bo, NULL);
+                                         fbcon->depth, fbcon->bpp, 
fbcon->pitch,
+                                         bo, NULL);
        info->fbcon_pixmap = pixmap;
        radeon_bo_unref(bo);
 out_free_fb:
@@ -528,10 +549,11 @@
                              int width, int height)
 {
        ScrnInfoPtr pScrn = crtc->scrn;
+       RADEONInfoPtr info = RADEONPTR(pScrn);
        drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
        drmmode_ptr drmmode = drmmode_crtc->drmmode;
        struct radeon_surface surface;
-       uint32_t tiling;
+       uint32_t tiling = RADEON_CREATE_PIXMAP_TILING_MACRO;
        int ret;
        int pitch;
 
@@ -542,11 +564,11 @@
                drmmode_crtc_scanout_destroy(drmmode, scanout);
        }
 
+       if (info->ChipFamily >= CHIP_FAMILY_R600)
+               tiling |= RADEON_CREATE_PIXMAP_TILING_MICRO;
        scanout->bo = radeon_alloc_pixmap_bo(pScrn, width, height, pScrn->depth,
-                                            RADEON_CREATE_PIXMAP_TILING_MACRO |
-                                            RADEON_CREATE_PIXMAP_TILING_MICRO,
-                                            pScrn->bitsPerPixel, &pitch,
-                                            &surface, &tiling);
+                                            tiling, pScrn->bitsPerPixel,
+                                            &pitch, &surface, &tiling);
        if (scanout->bo == NULL)
                return NULL;
 
@@ -592,7 +614,7 @@
                                                 width, height,
                                                 pScrn->depth,
                                                 pScrn->bitsPerPixel,
-                                                scanout->bo, NULL);
+                                                -1, scanout->bo, NULL);
        if (scanout->pixmap == NULL)
                xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
                           "Couldn't allocate scanout pixmap for CRTC\n");
@@ -1208,6 +1230,7 @@
        drmmode_crtc->mode_crtc = drmModeGetCrtc(drmmode->fd, 
mode_res->crtcs[num]);
        drmmode_crtc->drmmode = drmmode;
        drmmode_crtc->dpms_mode = DPMSModeOff;
+       drmmode_crtc->pending_dpms_mode = DPMSModeOff;
        crtc->driver_private = drmmode_crtc;
        drmmode_crtc_hw_id(crtc);
 
@@ -1333,9 +1356,16 @@
        if (!koutput)
                return;
 
-       if (mode != DPMSModeOn && crtc)
+       if (mode != DPMSModeOn && crtc) {
+               drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
+
                drmmode_do_crtc_dpms(crtc, mode);
 
+               /* Wait for any pending flip to finish */
+               if (drmmode_crtc->flip_pending)
+                       return;
+       }
+
        drmModeConnectorSetProperty(drmmode->fd, koutput->connector_id,
                                    drmmode_output->dpms_enum_id, mode);
 
@@ -2165,26 +2195,50 @@
        drmmode_xf86crtc_resize
 };
 
+void
+drmmode_clear_pending_flip(xf86CrtcPtr crtc)
+{
+       drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
+
+       drmmode_crtc->flip_pending = FALSE;
+
+       if (!crtc->enabled ||
+           (drmmode_crtc->pending_dpms_mode != DPMSModeOn &&
+            drmmode_crtc->dpms_mode != drmmode_crtc->pending_dpms_mode)) {
+               xf86CrtcConfigPtr xf86_config = 
XF86_CRTC_CONFIG_PTR(crtc->scrn);
+               int o;
+
+               for (o = 0; o < xf86_config->num_output; o++) {
+                       xf86OutputPtr output = xf86_config->output[o];
+
+                       if (output->crtc != crtc)
+                               continue;
+
+                       drmmode_output_dpms(output, 
drmmode_crtc->pending_dpms_mode);
+               }
+
+               drmmode_crtc_dpms(crtc, drmmode_crtc->pending_dpms_mode);
+       }
+}
+
 static void
 drmmode_flip_abort(xf86CrtcPtr crtc, void *event_data)
 {
-       drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
        drmmode_flipdata_ptr flipdata = event_data;
 
        if (--flipdata->flip_count == 0) {
-               if (flipdata->fe_crtc)
-                       crtc = flipdata->fe_crtc;
-               flipdata->abort(crtc, flipdata->event_data);
+               if (!flipdata->fe_crtc)
+                       flipdata->fe_crtc = crtc;
+               flipdata->abort(flipdata->fe_crtc, flipdata->event_data);
                free(flipdata);
        }
 
-       drmmode_crtc->flip_pending = FALSE;
+       drmmode_clear_pending_flip(crtc);
 }
 
 static void
 drmmode_flip_handler(xf86CrtcPtr crtc, uint32_t frame, uint64_t usec, void 
*event_data)
 {
-       drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
        RADEONInfoPtr info = RADEONPTR(crtc->scrn);
        drmmode_flipdata_ptr flipdata = event_data;
 
@@ -2196,11 +2250,14 @@
        }
 
        if (--flipdata->flip_count == 0) {
-               /* Deliver cached msc, ust from reference crtc to flip event 
handler */
+               /* Deliver MSC & UST from reference/current CRTC to flip event
+                * handler
+                */
                if (flipdata->fe_crtc)
-                       crtc = flipdata->fe_crtc;
-               flipdata->handler(crtc, flipdata->fe_frame, flipdata->fe_usec,
-                                 flipdata->event_data);
+                       flipdata->handler(flipdata->fe_crtc, flipdata->fe_frame,
+                                         flipdata->fe_usec, 
flipdata->event_data);
+               else
+                       flipdata->handler(crtc, frame, usec, 
flipdata->event_data);
 
                /* Release framebuffer */
                drmModeRmFB(info->drmmode.fd, flipdata->old_fb_id);
@@ -2208,7 +2265,7 @@
                free(flipdata);
        }
 
-       drmmode_crtc->flip_pending = FALSE;
+       drmmode_clear_pending_flip(crtc);
 }
 
 
@@ -2313,8 +2370,10 @@
 
 void drmmode_fini(ScrnInfoPtr pScrn, drmmode_ptr drmmode)
 {
+       xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn);
        RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn);
        RADEONInfoPtr info = RADEONPTR(pScrn);
+       int c;
 
        if (info->dri2.pKernelDRMVersion->version_minor < 4 || 
!info->drmmode_inited)
                return;
@@ -2325,6 +2384,14 @@
                RemoveBlockAndWakeupHandlers((BlockHandlerProcPtr)NoopDDA,
                                drm_wakeup_handler, drmmode);
        }
+
+       for (c = 0; c < config->num_crtc; c++) {
+               xf86CrtcPtr crtc = config->crtc[c];
+               drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
+
+               drmmode_crtc_scanout_destroy(&info->drmmode, 
&drmmode_crtc->scanout[0]);
+               drmmode_crtc_scanout_destroy(&info->drmmode, 
&drmmode_crtc->scanout[1]);
+       }
 }
 
 
@@ -2514,10 +2581,12 @@
 radeon_mode_hotplug(ScrnInfoPtr scrn, drmmode_ptr drmmode)
 {
        xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(scrn);
+       RADEONEntPtr pRADEONEnt = RADEONEntPriv(scrn);
        drmModeResPtr mode_res;
-       int i, j;
+       int i, j, s;
        Bool found;
        Bool changed = FALSE;
+       int num_dvi = 0, num_hdmi = 0;
 
        mode_res = drmModeGetResources(drmmode->fd);
        if (!mode_res)
@@ -2553,24 +2622,47 @@
        for (i = 0; i < mode_res->count_connectors; i++) {
                found = FALSE;
 
-               for (j = 0; j < config->num_output; j++) {
-                       xf86OutputPtr output = config->output[j];
-                       drmmode_output_private_ptr drmmode_output;
+               for (s = 0; !found && s < xf86NumScreens; s++) {
+                       ScrnInfoPtr loop_scrn = xf86Screens[s];
+                       xf86CrtcConfigPtr loop_config =
+                               XF86_CRTC_CONFIG_PTR(loop_scrn);
 
-                       drmmode_output = output->driver_private;
-                       if (mode_res->connectors[i] == 
drmmode_output->output_id) {
-                               found = TRUE;
-                               break;
+                       if (strcmp(loop_scrn->driverName, scrn->driverName) ||
+                           RADEONEntPriv(loop_scrn) != pRADEONEnt)
+                               continue;
+
+                       for (j = 0; !found && j < loop_config->num_output; j++) 
{
+                               xf86OutputPtr output = loop_config->output[j];
+                               drmmode_output_private_ptr drmmode_output;
+
+                               drmmode_output = output->driver_private;
+                               if (mode_res->connectors[i] ==
+                                   drmmode_output->output_id) {
+                                       found = TRUE;
+
+                                       
switch(drmmode_output->mode_output->connector_type) {
+                                       case DRM_MODE_CONNECTOR_DVII:
+                                       case DRM_MODE_CONNECTOR_DVID:
+                                       case DRM_MODE_CONNECTOR_DVIA:
+                                               num_dvi++;
+                                               break;
+                                       case DRM_MODE_CONNECTOR_HDMIA:
+                                       case DRM_MODE_CONNECTOR_HDMIB:
+                                               num_hdmi++;
+                                               break;
+                                       }
+                               }
                        }
                }
                if (found)
                        continue;
 
-               changed = TRUE;
-               drmmode_output_init(scrn, drmmode, mode_res, i, NULL, NULL, 1);
+               if (drmmode_output_init(scrn, drmmode, mode_res, i, &num_dvi,
+                                       &num_hdmi, 1) != 0)
+                       changed = TRUE;
        }
 
-       if (changed) {
+       if (changed && dixPrivateKeyRegistered(rrPrivKey)) {
 #if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,14,99,2,0)
                RRSetChanged(xf86ScrnToScreen(scrn));
 #else
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xf86-video-ati-7.7.0/src/drmmode_display.h 
new/xf86-video-ati-7.7.1/src/drmmode_display.h
--- old/xf86-video-ati-7.7.0/src/drmmode_display.h      2016-04-07 
04:40:38.000000000 +0200
+++ new/xf86-video-ati-7.7.1/src/drmmode_display.h      2016-09-15 
10:52:47.000000000 +0200
@@ -88,6 +88,8 @@
     unsigned scanout_id;
     Bool scanout_update_pending;
     int dpms_mode;
+    /* For when a flip is pending when DPMS off requested */
+    int pending_dpms_mode;
     CARD64 dpms_last_ust;
     uint32_t dpms_last_seq;
     int dpms_last_fps;
@@ -147,6 +149,7 @@
 extern int drmmode_get_height_align(ScrnInfoPtr scrn, uint32_t tiling);
 extern int drmmode_get_pitch_align(ScrnInfoPtr scrn, int bpe, uint32_t tiling);
 extern int drmmode_get_base_align(ScrnInfoPtr scrn, int bpe, uint32_t tiling);
+extern void drmmode_clear_pending_flip(xf86CrtcPtr crtc);
 
 Bool radeon_do_pageflip(ScrnInfoPtr scrn, ClientPtr client,
                        uint32_t new_front_handle, uint64_t id, void *data,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xf86-video-ati-7.7.0/src/radeon.h new/xf86-video-ati-7.7.1/src/radeon.h
--- old/xf86-video-ati-7.7.0/src/radeon.h       2016-04-07 04:40:38.000000000 
+0200
+++ new/xf86-video-ati-7.7.1/src/radeon.h       2016-09-15 10:52:47.000000000 
+0200
@@ -656,8 +656,6 @@
 
 static inline void radeon_set_pixmap_bo(PixmapPtr pPix, struct radeon_bo *bo)
 {
-    ScreenPtr pScreen = pPix->drawable.pScreen;
-
 #ifdef USE_GLAMOR
     RADEONInfoPtr info = RADEONPTR(xf86ScreenToScrn(pPix->drawable.pScreen));
 
@@ -693,9 +691,7 @@
            radeon_bo_ref(bo);
            priv->bo = bo;
 
-           if (radeon_bo_get_tiling(bo, &priv->tiling_flags, &pitch) == 0 &&
-               pitch != pPix->devKind)
-               pScreen->ModifyPixmapHeader(pPix, -1, -1, -1, -1, pitch, NULL);
+           radeon_bo_get_tiling(bo, &priv->tiling_flags, &pitch);
        }
 out:
        radeon_set_pixmap_private(pPix, priv);
@@ -714,9 +710,7 @@
            radeon_bo_ref(bo);
            driver_priv->bo = bo;
 
-           if (radeon_bo_get_tiling(bo, &driver_priv->tiling_flags, &pitch) == 
0 &&
-               pitch != pPix->devKind)
-               pScreen->ModifyPixmapHeader(pPix, -1, -1, -1, -1, pitch, NULL);
+           radeon_bo_get_tiling(bo, &driver_priv->tiling_flags, &pitch);
        }
     }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xf86-video-ati-7.7.0/src/radeon_bo_helper.h 
new/xf86-video-ati-7.7.1/src/radeon_bo_helper.h
--- old/xf86-video-ati-7.7.0/src/radeon_bo_helper.h     2016-04-07 
04:40:38.000000000 +0200
+++ new/xf86-video-ati-7.7.1/src/radeon_bo_helper.h     2016-09-15 
10:51:56.000000000 +0200
@@ -41,4 +41,20 @@
 radeon_set_shared_pixmap_backing(PixmapPtr ppix, void *fd_handle,
                                 struct radeon_surface *surface);
 
+/**
+ * get_drawable_pixmap() returns the backing pixmap for a given drawable.
+ *
+ * @param drawable the drawable being requested.
+ *
+ * This function returns the backing pixmap for a drawable, whether it is a
+ * redirected window, unredirected window, or already a pixmap.
+ */
+static inline PixmapPtr get_drawable_pixmap(DrawablePtr drawable)
+{
+    if (drawable->type == DRAWABLE_PIXMAP)
+       return (PixmapPtr)drawable;
+    else
+       return drawable->pScreen->GetWindowPixmap((WindowPtr)drawable);
+}
+
 #endif /* RADEON_BO_HELPER_H */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xf86-video-ati-7.7.0/src/radeon_dri2.c 
new/xf86-video-ati-7.7.1/src/radeon_dri2.c
--- old/xf86-video-ati-7.7.0/src/radeon_dri2.c  2016-04-07 04:40:38.000000000 
+0200
+++ new/xf86-video-ati-7.7.1/src/radeon_dri2.c  2016-09-15 10:52:47.000000000 
+0200
@@ -78,69 +78,6 @@
      dixLookupPrivate(&(window)->devPrivates, dri2_window_private_key))
 
 
-static PixmapPtr get_drawable_pixmap(DrawablePtr drawable)
-{
-    if (drawable->type == DRAWABLE_PIXMAP)
-       return (PixmapPtr)drawable;
-    else
-       return (*drawable->pScreen->GetWindowPixmap)((WindowPtr)drawable);
-}
-
-
-static PixmapPtr fixup_glamor(DrawablePtr drawable, PixmapPtr pixmap)
-{
-       PixmapPtr old = get_drawable_pixmap(drawable);
-#ifdef USE_GLAMOR
-       ScreenPtr screen = drawable->pScreen;
-       struct radeon_pixmap *priv = radeon_get_pixmap_private(pixmap);
-       GCPtr gc;
-
-       /* With a glamor pixmap, 2D pixmaps are created in texture
-        * and without a static BO attached to it. To support DRI,
-        * we need to create a new textured-drm pixmap and
-        * need to copy the original content to this new textured-drm
-        * pixmap, and then convert the old pixmap to a coherent
-        * textured-drm pixmap which has a valid BO attached to it
-        * and also has a valid texture, thus both glamor and DRI2
-        * can access it.
-        *
-        */
-
-       /* Copy the current contents of the pixmap to the bo. */
-       gc = GetScratchGC(drawable->depth, screen);
-       if (gc) {
-               ValidateGC(&pixmap->drawable, gc);
-               gc->ops->CopyArea(&old->drawable, &pixmap->drawable,
-                                 gc,
-                                 0, 0,
-                                 old->drawable.width,
-                                 old->drawable.height,
-                                 0, 0);
-               FreeScratchGC(gc);
-       }
-
-       radeon_set_pixmap_private(pixmap, NULL);
-
-       /* And redirect the pixmap to the new bo (for 3D). */
-       glamor_egl_exchange_buffers(old, pixmap);
-       radeon_set_pixmap_private(old, priv);
-       old->refcnt++;
-
-       screen->ModifyPixmapHeader(old,
-                                  old->drawable.width,
-                                  old->drawable.height,
-                                  0, 0,
-                                  pixmap->devKind,
-                                  NULL);
-       old->devPrivate.ptr = NULL;
-
-       screen->DestroyPixmap(pixmap);
-
-#endif /* USE_GLAMOR*/
-
-       return old;
-}
-
 /* Get GEM flink name for a pixmap */
 static Bool
 radeon_get_flink_name(RADEONInfoPtr info, PixmapPtr pixmap, uint32_t *name)
@@ -310,10 +247,11 @@
                /* this happen if pixmap is non accelerable */
                goto error;
            }
+       } else if (is_glamor_pixmap) {
+           pixmap = radeon_glamor_set_pixmap_bo(drawable, pixmap);
+           pixmap->refcnt++;
        }
 
-       if (is_glamor_pixmap)
-           pixmap = fixup_glamor(drawable, pixmap);
        if (!radeon_get_flink_name(info, pixmap, &buffers->name))
            goto error;
     }
@@ -578,10 +516,11 @@
  */
 static Bool radeon_dri2_get_crtc_msc(xf86CrtcPtr crtc, CARD64 *ust, CARD64 
*msc)
 {
+    drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
+
     if (!radeon_crtc_is_enabled(crtc) ||
         drmmode_crtc_get_ust_msc(crtc, ust, msc) != Success) {
        /* CRTC is not running, extrapolate MSC and timestamp */
-       drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
        ScrnInfoPtr scrn = crtc->scrn;
        RADEONInfoPtr info = RADEONPTR(scrn);
        CARD64 now, delta_t, delta_seq;
@@ -606,6 +545,8 @@
        *msc += delta_seq;
     }
 
+    *msc += drmmode_crtc->interpolated_vblanks;
+
     return TRUE;
 }
 
@@ -834,7 +775,7 @@
 
     region.extents.x1 = region.extents.y1 = 0;
     region.extents.x2 = front_priv->pixmap->drawable.width;
-    region.extents.y2 = front_priv->pixmap->drawable.width;
+    region.extents.y2 = front_priv->pixmap->drawable.height;
     region.data = NULL;
     DamageRegionAppend(&front_priv->pixmap->drawable, &region);
 
@@ -1053,7 +994,8 @@
     if (!radeon_dri2_get_crtc_msc(crtc, ust, msc))
        return FALSE;
 
-    *msc += radeon_get_msc_delta(draw, crtc);
+    if (draw && draw->type == DRAWABLE_WINDOW)
+       *msc += get_dri2_window_priv((WindowPtr)draw)->vblank_delta;
     *msc &= 0xffffffff;
     return TRUE;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xf86-video-ati-7.7.0/src/radeon_glamor.c 
new/xf86-video-ati-7.7.1/src/radeon_glamor.c
--- old/xf86-video-ati-7.7.0/src/radeon_glamor.c        2016-04-07 
04:40:38.000000000 +0200
+++ new/xf86-video-ati-7.7.1/src/radeon_glamor.c        2016-09-15 
10:51:56.000000000 +0200
@@ -283,18 +283,91 @@
                return fbCreatePixmap(screen, w, h, depth, usage);
 }
 
+PixmapPtr
+radeon_glamor_set_pixmap_bo(DrawablePtr drawable, PixmapPtr pixmap)
+{
+       PixmapPtr old = get_drawable_pixmap(drawable);
+       ScreenPtr screen = drawable->pScreen;
+       struct radeon_pixmap *priv = radeon_get_pixmap_private(pixmap);
+       GCPtr gc;
+
+       /* With a glamor pixmap, 2D pixmaps are created in texture
+        * and without a static BO attached to it. To support DRI,
+        * we need to create a new textured-drm pixmap and
+        * need to copy the original content to this new textured-drm
+        * pixmap, and then convert the old pixmap to a coherent
+        * textured-drm pixmap which has a valid BO attached to it
+        * and also has a valid texture, thus both glamor and DRI2
+        * can access it.
+        *
+        */
+
+       /* Copy the current contents of the pixmap to the bo. */
+       gc = GetScratchGC(drawable->depth, screen);
+       if (gc) {
+               ValidateGC(&pixmap->drawable, gc);
+               gc->ops->CopyArea(&old->drawable, &pixmap->drawable,
+                                 gc,
+                                 0, 0,
+                                 old->drawable.width,
+                                 old->drawable.height, 0, 0);
+               FreeScratchGC(gc);
+       }
+
+       radeon_set_pixmap_private(pixmap, NULL);
+
+       /* And redirect the pixmap to the new bo (for 3D). */
+       glamor_egl_exchange_buffers(old, pixmap);
+       radeon_set_pixmap_private(old, priv);
+
+       screen->ModifyPixmapHeader(old,
+                                  old->drawable.width,
+                                  old->drawable.height,
+                                  0, 0, pixmap->devKind, NULL);
+       old->devPrivate.ptr = NULL;
+
+       screen->DestroyPixmap(pixmap);
+
+       return old;
+}
+
 #ifdef RADEON_PIXMAP_SHARING
 
 static Bool
 radeon_glamor_share_pixmap_backing(PixmapPtr pixmap, ScreenPtr slave,
                                   void **handle_p)
 {
-       struct radeon_pixmap *priv = radeon_get_pixmap_private(pixmap);
+       ScreenPtr screen = pixmap->drawable.pScreen;
+       CARD16 stride;
+       CARD32 size;
+       int fd;
+
+       if ((radeon_get_pixmap_tiling_flags(pixmap) &
+            RADEON_TILING_MASK) != RADEON_TILING_LINEAR) {
+               PixmapPtr linear;
+
+               /* We don't want to re-allocate the screen pixmap as
+                * linear, to avoid trouble with page flipping
+                */
+               if (screen->GetScreenPixmap(screen) == pixmap)
+                       return FALSE;
+
+               linear = screen->CreatePixmap(screen, pixmap->drawable.width,
+                                             pixmap->drawable.height,
+                                             pixmap->drawable.depth,
+                                             CREATE_PIXMAP_USAGE_SHARED);
+               if (!linear)
+                       return FALSE;
+
+               radeon_glamor_set_pixmap_bo(&pixmap->drawable, linear);
+       }
 
-       if (!priv)
+       fd = glamor_fd_from_pixmap(screen, pixmap, &stride, &size);
+       if (fd < 0)
                return FALSE;
 
-       return radeon_share_pixmap_backing(priv->bo, handle_p);
+       *handle_p = (void *)(long)fd;
+       return TRUE;
 }
 
 static Bool
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xf86-video-ati-7.7.0/src/radeon_glamor.h 
new/xf86-video-ati-7.7.1/src/radeon_glamor.h
--- old/xf86-video-ati-7.7.0/src/radeon_glamor.h        2016-04-07 
04:40:38.000000000 +0200
+++ new/xf86-video-ati-7.7.1/src/radeon_glamor.h        2016-09-15 
10:51:56.000000000 +0200
@@ -71,6 +71,7 @@
 
 Bool radeon_glamor_create_textured_pixmap(PixmapPtr pixmap, struct 
radeon_pixmap *priv);
 void radeon_glamor_exchange_buffers(PixmapPtr src, PixmapPtr dst);
+PixmapPtr radeon_glamor_set_pixmap_bo(DrawablePtr drawable, PixmapPtr pixmap);
 
 XF86VideoAdaptorPtr radeon_glamor_xv_init(ScreenPtr pScreen, int num_adapt);
 
@@ -85,6 +86,7 @@
 static inline Bool radeon_glamor_create_textured_pixmap(PixmapPtr pixmap, 
struct radeon_pixmap *priv) { return TRUE; }
 
 static inline void radeon_glamor_exchange_buffers(PixmapPtr src, PixmapPtr 
dst) {}
+static inline PixmapPtr radeon_glamor_set_pixmap_bo(DrawablePtr drawable, 
PixmapPtr pixmap) { return pixmap; }
 
 static inline struct radeon_pixmap *radeon_get_pixmap_private(PixmapPtr 
pixmap) { return NULL; }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xf86-video-ati-7.7.0/src/radeon_glamor_wrappers.c 
new/xf86-video-ati-7.7.1/src/radeon_glamor_wrappers.c
--- old/xf86-video-ati-7.7.0/src/radeon_glamor_wrappers.c       2016-04-07 
04:40:38.000000000 +0200
+++ new/xf86-video-ati-7.7.1/src/radeon_glamor_wrappers.c       2016-09-15 
10:51:56.000000000 +0200
@@ -35,27 +35,10 @@
 #ifdef USE_GLAMOR
 
 #include "radeon.h"
+#include "radeon_bo_helper.h"
 #include "radeon_glamor.h"
 
 
-/**
- * get_drawable_pixmap() returns the backing pixmap for a given drawable.
- *
- * @param pDrawable the drawable being requested.
- *
- * This function returns the backing pixmap for a drawable, whether it is a
- * redirected window, unredirected window, or already a pixmap.
- */
-static PixmapPtr
-get_drawable_pixmap(DrawablePtr pDrawable)
-{
-       if (pDrawable->type == DRAWABLE_WINDOW)
-               return pDrawable->pScreen->
-                   GetWindowPixmap((WindowPtr) pDrawable);
-       else
-               return (PixmapPtr) pDrawable;
-}
-
 /* Are there any outstanding GPU operations for this pixmap? */
 static Bool
 radeon_glamor_gpu_pending(uint_fast32_t gpu_synced, uint_fast32_t gpu_access)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xf86-video-ati-7.7.0/src/radeon_kms.c 
new/xf86-video-ati-7.7.1/src/radeon_kms.c
--- old/xf86-video-ati-7.7.0/src/radeon_kms.c   2016-04-07 04:40:38.000000000 
+0200
+++ new/xf86-video-ati-7.7.1/src/radeon_kms.c   2016-09-15 10:52:47.000000000 
+0200
@@ -241,7 +241,6 @@
 {
     ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr  info   = RADEONPTR(pScrn);
-    rrScrPrivPtr rrScrPriv = rrGetScrPriv(pScreen);
     PixmapPtr pixmap;
     struct radeon_surface *surface;
 
@@ -251,17 +250,21 @@
     pScreen->CreateScreenResources = RADEONCreateScreenResources_KMS;
 
     /* Set the RandR primary output if Xorg hasn't */
-    if (
+    if (dixPrivateKeyRegistered(rrPrivKey)) {
+       rrScrPrivPtr rrScrPriv = rrGetScrPriv(pScreen);
+
+       if (
 #ifdef RADEON_PIXMAP_SHARING
-       !pScreen->isGPU &&
+           !pScreen->isGPU &&
 #endif
-       !rrScrPriv->primaryOutput)
-    {
-       xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
-
-       rrScrPriv->primaryOutput = xf86_config->output[0]->randr_output;
-       RROutputChanged(rrScrPriv->primaryOutput, FALSE);
-       rrScrPriv->layoutChanged = TRUE;
+           !rrScrPriv->primaryOutput)
+       {
+           xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
+
+           rrScrPriv->primaryOutput = xf86_config->output[0]->randr_output;
+           RROutputChanged(rrScrPriv->primaryOutput, FALSE);
+           rrScrPriv->layoutChanged = TRUE;
+       }
     }
 
     if (!drmmode_set_desired_modes(pScrn, &info->drmmode, FALSE))
@@ -368,7 +371,7 @@
     Bool force;
 
     if (!xf86_crtc->enabled ||
-       drmmode_crtc->dpms_mode != DPMSModeOn ||
+       drmmode_crtc->pending_dpms_mode != DPMSModeOn ||
        !drmmode_crtc->scanout[scanout_id].pixmap)
        return FALSE;
 
@@ -502,7 +505,7 @@
     if (!xf86_crtc->enabled ||
        drmmode_crtc->scanout_update_pending ||
        !drmmode_crtc->scanout[0].pixmap ||
-       drmmode_crtc->dpms_mode != DPMSModeOn)
+       drmmode_crtc->pending_dpms_mode != DPMSModeOn)
        return;
 
     pDamage = drmmode_crtc->scanout[0].damage;
@@ -553,7 +556,7 @@
     drmmode_crtc_private_ptr drmmode_crtc = event_data;
 
     drmmode_crtc->scanout_update_pending = FALSE;
-    drmmode_crtc->flip_pending = FALSE;
+    drmmode_clear_pending_flip(crtc);
 }
 
 static void
@@ -1108,8 +1111,11 @@
     if (ret == 0) {
        if (value & DRM_PRIME_CAP_EXPORT)
            pScrn->capabilities |= RR_Capability_SourceOutput | 
RR_Capability_SinkOffload;
-       if (value & DRM_PRIME_CAP_IMPORT)
-           pScrn->capabilities |= RR_Capability_SinkOutput | 
RR_Capability_SourceOffload;
+       if (value & DRM_PRIME_CAP_IMPORT) {
+           pScrn->capabilities |= RR_Capability_SourceOffload;
+           if (info->drmmode.count_crtcs)
+               pScrn->capabilities |= RR_Capability_SinkOutput;
+       }
     }
 #endif
 }
@@ -1228,8 +1234,6 @@
 
     info->allowColorTiling2D = FALSE;
 
-    RADEONSetupCapabilities(pScrn);
-
     /* don't enable tiling if accel is not enabled */
     if (!info->r600_shadow_fb) {
        Bool colorTilingDefault =
@@ -1328,6 +1332,8 @@
        goto fail;
     }
 
+    RADEONSetupCapabilities(pScrn);
+
     if (info->drmmode.count_crtcs == 1)
         pRADEONEnt->HasCRTC2 = FALSE;
     else
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xf86-video-ati-7.7.0/src/radeon_present.c 
new/xf86-video-ati-7.7.1/src/radeon_present.c
--- old/xf86-video-ati-7.7.0/src/radeon_present.c       2016-04-07 
04:40:38.000000000 +0200
+++ new/xf86-video-ati-7.7.1/src/radeon_present.c       2016-09-15 
10:52:47.000000000 +0200
@@ -271,7 +271,7 @@
        if (!drmmode_crtc || drmmode_crtc->rotate.bo != NULL)
            return FALSE;
 
-       if (drmmode_crtc->dpms_mode == DPMSModeOn)
+       if (drmmode_crtc->pending_dpms_mode == DPMSModeOn)
            num_crtcs_on++;
     }
 
@@ -398,7 +398,7 @@
        if (!crtc->enabled)
            continue;
 
-       if (drmmode_crtc->dpms_mode == DPMSModeOn)
+       if (drmmode_crtc->pending_dpms_mode == DPMSModeOn)
            crtc->funcs->set_mode_major(crtc, &crtc->mode, crtc->rotation,
                                        crtc->x, crtc->y);
        else
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xf86-video-ati-7.7.0/src/radeon_video.c 
new/xf86-video-ati-7.7.1/src/radeon_video.c
--- old/xf86-video-ati-7.7.0/src/radeon_video.c 2016-04-07 04:40:38.000000000 
+0200
+++ new/xf86-video-ati-7.7.1/src/radeon_video.c 2016-09-15 10:51:56.000000000 
+0200
@@ -71,7 +71,7 @@
 Bool radeon_crtc_is_enabled(xf86CrtcPtr crtc)
 {
     drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
-    return drmmode_crtc->dpms_mode == DPMSModeOn;
+    return drmmode_crtc->pending_dpms_mode == DPMSModeOn;
 }
 
 xf86CrtcPtr



Reply via email to