[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

xorg-server: Changes to 'ubuntu'



 Xext/panoramiXprocs.c                                               |    4 
 Xext/saver.c                                                        |    2 
 Xext/shm.c                                                          |   17 
 Xi/exevents.c                                                       |    3 
 configure.ac                                                        |   28 
 debian/changelog                                                    |   22 
 debian/patches/glamor-disable-logic-ops-when-doing-compositing.diff |   57 -
 debian/patches/os-treat-ssh-as-a-non-local-client.diff              |   97 --
 debian/patches/series                                               |    4 
 debian/xserver-xorg-core.NEWS                                       |   14 
 dix/cursor.c                                                        |   23 
 dix/devices.c                                                       |    3 
 dix/enterleave.c                                                    |   20 
 dix/ptrveloc.c                                                      |   10 
 exa/exa_glyphs.c                                                    |    8 
 exa/exa_render.c                                                    |    3 
 glamor/glamor.c                                                     |   45 +
 glamor/glamor.h                                                     |    1 
 glamor/glamor_composite_glyphs.c                                    |    5 
 glamor/glamor_compositerects.c                                      |   18 
 glamor/glamor_copy.c                                                |    8 
 glamor/glamor_dash.c                                                |    3 
 glamor/glamor_egl.c                                                 |   11 
 glamor/glamor_fbo.c                                                 |    4 
 glamor/glamor_priv.h                                                |   28 
 glamor/glamor_program.c                                             |    8 
 glamor/glamor_render.c                                              |   94 +-
 glamor/glamor_spans.c                                               |    3 
 glamor/glamor_text.c                                                |   13 
 glamor/glamor_transfer.c                                            |    3 
 glamor/glamor_transform.c                                           |   12 
 glamor/glamor_transform.h                                           |    4 
 glx/glxext.c                                                        |    6 
 hw/kdrive/linux/keyboard.c                                          |  441 ----------
 hw/xfree86/common/xf86Config.c                                      |   68 +
 hw/xfree86/common/xf86Configure.c                                   |    2 
 hw/xfree86/common/xf86Init.c                                        |    4 
 hw/xfree86/common/xf86Privstr.h                                     |    1 
 hw/xfree86/drivers/modesetting/Makefile.am                          |    2 
 hw/xfree86/drivers/modesetting/driver.c                             |   85 +
 hw/xfree86/drivers/modesetting/drmmode_display.c                    |   99 +-
 hw/xfree86/drivers/modesetting/drmmode_display.h                    |    2 
 hw/xfree86/drivers/modesetting/present.c                            |    9 
 hw/xfree86/drivers/modesetting/sh3224.c                             |  140 +++
 hw/xfree86/drivers/modesetting/sh3224.h                             |    7 
 hw/xfree86/int10/xf86x86emu.c                                       |    2 
 hw/xfree86/man/xorg.conf.man                                        |    4 
 hw/xfree86/modes/xf86Crtc.c                                         |    3 
 hw/xfree86/os-support/linux/lnx_init.c                              |   10 
 hw/xfree86/x86emu/x86emu/regs.h                                     |    8 
 hw/xquartz/bundle/Info.plist.cpp                                    |   23 
 hw/xquartz/bundle/Makefile.am                                       |    6 
 hw/xwayland/xwayland-cursor.c                                       |   15 
 hw/xwayland/xwayland-glamor-xv.c                                    |    2 
 hw/xwayland/xwayland-glamor.c                                       |    3 
 hw/xwayland/xwayland-output.c                                       |   17 
 hw/xwayland/xwayland-shm.c                                          |   10 
 hw/xwayland/xwayland.h                                              |    2 
 include/xkbsrv.h                                                    |    4 
 os/access.c                                                         |   44 
 present/present.c                                                   |   33 
 randr/rrprovider.c                                                  |    2 
 render/picture.h                                                    |    2 
 xkb/xkb.c                                                           |    5 
 xkb/xkbEvents.c                                                     |    2 
 xkb/xkbLEDs.c                                                       |    2 
 66 files changed, 801 insertions(+), 839 deletions(-)

New commits:
commit ff1e68160300e54849fc30e4747d30fc8d75b9f0
Author: Timo Aaltonen <tjaalton@debian.org>
Date:   Wed Jul 20 08:24:29 2016 +0300

    release to yak

diff --git a/debian/changelog b/debian/changelog
index b0dad8e..73cfddf 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+xorg-server (2:1.18.4-1ubuntu1) yakkety; urgency=medium
+
+  * Merge from debian.
+  * glamor-disable-logic-ops-when-doing-compositing.diff: Dropped,
+    upstream.
+
+ -- Timo Aaltonen <tjaalton@debian.org>  Wed, 20 Jul 2016 08:22:32 +0300
+
 xorg-server (2:1.18.4-1) unstable; urgency=medium
 
   * New upstream stable release.
@@ -6,14 +14,6 @@ xorg-server (2:1.18.4-1) unstable; urgency=medium
 
  -- Timo Aaltonen <tjaalton@debian.org>  Wed, 20 Jul 2016 06:00:21 +0300
 
-xorg-server (2:1.18.3-2ubuntu1) UNRELEASED; urgency=medium
-
-  * Merge from debian.
-  * glamor-disable-logic-ops-when-doing-compositing.diff: Dropped,
-    included in upstream-fixes.diff.
-
- -- Timo Aaltonen <tjaalton@debian.org>  Tue, 19 Jul 2016 09:52:09 +0300
-
 xorg-server (2:1.18.3-2) unstable; urgency=medium
 
   * Drop 08_xfree86_fix_ia64_inx_outx.diff from the tree, it wasn't

commit d61c7f31d336a8b55aa09623d6b44b3fd3320d55
Author: Timo Aaltonen <tjaalton@debian.org>
Date:   Wed Jul 20 06:00:44 2016 +0300

    release to unstable

diff --git a/debian/changelog b/debian/changelog
index cfd0a4a..26f41bf 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,10 +1,10 @@
-xorg-server (2:1.18.4-1) UNRELEASED; urgency=medium
+xorg-server (2:1.18.4-1) unstable; urgency=medium
 
   * New upstream stable release.
   * os-treat-ssh-as-a-non-local-client.diff, upstream-fixes.diff:
     Dropped, upstream.
 
- -- Timo Aaltonen <tjaalton@debian.org>  Wed, 20 Jul 2016 05:55:42 +0300
+ -- Timo Aaltonen <tjaalton@debian.org>  Wed, 20 Jul 2016 06:00:21 +0300
 
 xorg-server (2:1.18.3-2) unstable; urgency=medium
 

commit 15dd24a2f379d779f2f9f72485d5d2ef54766916
Author: Timo Aaltonen <tjaalton@debian.org>
Date:   Wed Jul 20 06:00:05 2016 +0300

    os-treat-ssh-as-a-non-local-client.diff, upstream-fixes.diff: Dropped, upstream.

diff --git a/debian/changelog b/debian/changelog
index aa12670..cfd0a4a 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,6 +1,8 @@
 xorg-server (2:1.18.4-1) UNRELEASED; urgency=medium
 
   * New upstream stable release.
+  * os-treat-ssh-as-a-non-local-client.diff, upstream-fixes.diff:
+    Dropped, upstream.
 
  -- Timo Aaltonen <tjaalton@debian.org>  Wed, 20 Jul 2016 05:55:42 +0300
 
diff --git a/debian/patches/os-treat-ssh-as-a-non-local-client.diff b/debian/patches/os-treat-ssh-as-a-non-local-client.diff
deleted file mode 100644
index 0b879bf..0000000
--- a/debian/patches/os-treat-ssh-as-a-non-local-client.diff
+++ /dev/null
@@ -1,97 +0,0 @@
-commit adefbaee499b9679c6cac21f52ec6545af2b36b5
-Author: Adam Jackson <ajax@redhat.com>
-Date:   Mon Mar 28 18:11:09 2016 +0900
-
-    os: Treat ssh as a non-local client (v4)
-    
-    By the time we get to ComputeLocalClient, we've already done
-    NextAvailableClient → ReserveClientIds → DetermineClientCmd (assuming
-    we're built with #define CLIENTIDS), so we can look up the name of the
-    client process and refuse to treat ssh's X forwarding as if it were
-    local.
-    
-    v2: (Michel Dänzer)
-        * Only match "ssh" itself, not other executable names starting with
-          that prefix.
-        * Ignore executable path for the match.
-    v3: (Michel Dänzer)
-        * Use GetClientCmdName (Mark Kettenis)
-        * Perform check on Windows as well, but only ignore path on Cygwin
-          (Martin Peres, Emil Velikov, Jon Turney)
-    v4: (Michel Dänzer)
-        * Cut of any colon and whatever comes after it. (Adam Jackson)
-        * Add bugzilla reference.
-    
-    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93261
-    
-    Signed-off-by: Adam Jackson <ajax@redhat.com>
-    Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
-
-diff --git a/os/access.c b/os/access.c
-index 8b2177f..58f95a9 100644
---- a/os/access.c
-+++ b/os/access.c
-@@ -173,6 +173,10 @@ SOFTWARE.
- 
- #endif                          /* WIN32 */
- 
-+#if !defined(WIN32) || defined(__CYGWIN__)
-+#include <libgen.h>
-+#endif
-+
- #define X_INCLUDE_NETDB_H
- #include <X11/Xos_r.h>
- 
-@@ -1080,9 +1084,8 @@ ResetHosts(const char *display)
-     }
- }
- 
--/* Is client on the local host */
--Bool
--ComputeLocalClient(ClientPtr client)
-+static Bool
-+xtransLocalClient(ClientPtr client)
- {
-     int alen, family, notused;
-     Xtransaddr *from = NULL;
-@@ -1115,6 +1118,40 @@ ComputeLocalClient(ClientPtr client)
-     return FALSE;
- }
- 
-+/* Is client on the local host */
-+Bool
-+ComputeLocalClient(ClientPtr client)
-+{
-+    const char *cmdname = GetClientCmdName(client);
-+
-+    if (!xtransLocalClient(client))
-+        return FALSE;
-+
-+    /* If the executable name is "ssh", assume that this client connection
-+     * is forwarded from another host via SSH
-+     */
-+    if (cmdname) {
-+        char **cmd;
-+        Bool ret;
-+
-+        /* Cut off any colon and whatever comes after it, see
-+         * https://lists.freedesktop.org/archives/xorg-devel/2015-December/048164.html
-+         */
-+        cmd = xstrtokenize(cmdname, ":");
-+
-+#if !defined(WIN32) || defined(__CYGWIN__)
-+        cmd[0] = basename(cmd[0]);
-+#endif
-+
-+        ret = strcmp(cmd[0], "ssh") != 0;
-+        free(cmd);
-+
-+        return ret;
-+    }
-+
-+    return TRUE;
-+}
-+
- /*
-  * Return the uid and all gids of a connected local client
-  * Allocates a LocalClientCredRec - caller must call FreeLocalClientCreds
diff --git a/debian/patches/series b/debian/patches/series
index ec71c11..55da92c 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -5,5 +5,3 @@
 03_static-nettle.diff
 05_Revert-Unload-submodules.diff
 06_use-intel-only-on-pre-gen4.diff
-os-treat-ssh-as-a-non-local-client.diff
-upstream-fixes.diff
diff --git a/debian/patches/upstream-fixes.diff b/debian/patches/upstream-fixes.diff
deleted file mode 100644
index ea25501..0000000
--- a/debian/patches/upstream-fixes.diff
+++ /dev/null
@@ -1,2089 +0,0 @@
-diff --git a/Xext/panoramiXprocs.c b/Xext/panoramiXprocs.c
-index 9eb29bd..18f3ac7 100644
---- a/Xext/panoramiXprocs.c
-+++ b/Xext/panoramiXprocs.c
-@@ -106,7 +106,7 @@ PanoramiXCreateWindow(ClientPtr client)
-     if ((Mask) stuff->mask & CWColormap) {
-         cmap_offset = Ones((Mask) stuff->mask & (CWColormap - 1));
-         tmp = *((CARD32 *) &stuff[1] + cmap_offset);
--        if ((tmp != CopyFromParent) && (tmp != None)) {
-+        if (tmp != CopyFromParent) {
-             result = dixLookupResourceByType((void **) &cmap, tmp,
-                                              XRT_COLORMAP, client,
-                                              DixReadAccess);
-@@ -210,7 +210,7 @@ PanoramiXChangeWindowAttributes(ClientPtr client)
-     if ((Mask) stuff->valueMask & CWColormap) {
-         cmap_offset = Ones((Mask) stuff->valueMask & (CWColormap - 1));
-         tmp = *((CARD32 *) &stuff[1] + cmap_offset);
--        if ((tmp != CopyFromParent) && (tmp != None)) {
-+        if (tmp != CopyFromParent) {
-             result = dixLookupResourceByType((void **) &cmap, tmp,
-                                              XRT_COLORMAP, client,
-                                              DixReadAccess);
-diff --git a/Xext/saver.c b/Xext/saver.c
-index 0e20467..750b8b9 100644
---- a/Xext/saver.c
-+++ b/Xext/saver.c
-@@ -1143,7 +1143,7 @@ ProcScreenSaverSetAttributes(ClientPtr client)
-         if ((Mask) stuff->mask & CWColormap) {
-             cmap_offset = Ones((Mask) stuff->mask & (CWColormap - 1));
-             tmp = *((CARD32 *) &stuff[1] + cmap_offset);
--            if ((tmp != CopyFromParent) && (tmp != None)) {
-+            if (tmp != CopyFromParent) {
-                 status = dixLookupResourceByType((void **) &cmap, tmp,
-                                                  XRT_COLORMAP, client,
-                                                  DixReadAccess);
-diff --git a/Xi/exevents.c b/Xi/exevents.c
-index e728310..52b91e8 100644
---- a/Xi/exevents.c
-+++ b/Xi/exevents.c
-@@ -1379,6 +1379,9 @@ DeliverTouchEmulatedEvent(DeviceIntPtr dev, TouchPointInfoPtr ti,
-     if (!TouchResourceIsOwner(ti, listener->listener))
-         return !Success;
- 
-+    if (!ti->emulate_pointer)
-+        return !Success;
-+
-     nevents = TouchConvertToPointerEvent(ev, &motion, &button);
-     BUG_RETURN_VAL(nevents == 0, BadValue);
- 
-diff --git a/configure.ac b/configure.ac
-index 77cf234..cfffcd8 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -555,17 +555,27 @@ AC_ARG_WITH(apple-application-name,AS_HELP_STRING([--with-apple-application-name
- 				[ APPLE_APPLICATION_NAME="${withval}" ],
- 				[ APPLE_APPLICATION_NAME="X11" ])
- AC_SUBST([APPLE_APPLICATION_NAME])
--AC_ARG_WITH(launchd-id-prefix,  AS_HELP_STRING([--with-launchd-id-prefix=PATH], [Deprecated: Use --with-bundle-id-prefix.]),
--                                [ BUNDLE_ID_PREFIX="${withval}" ],
--                                [ BUNDLE_ID_PREFIX="org.x" ])
--AC_ARG_WITH(bundle-id-prefix,  AS_HELP_STRING([--with-bundle-id-prefix=PATH], [Prefix to use for bundle identifiers (default: org.x)]),
-+AC_ARG_WITH(bundle-id-prefix,  AS_HELP_STRING([--with-bundle-id-prefix=RDNS_PREFIX], [Prefix to use for bundle identifiers (default: org.x)]),
-                                [ BUNDLE_ID_PREFIX="${withval}" ])
- AC_SUBST([BUNDLE_ID_PREFIX])
- AC_DEFINE_UNQUOTED(BUNDLE_ID_PREFIX, "$BUNDLE_ID_PREFIX", [Prefix to use for bundle identifiers])
-+m4_define(DEFAULT_BUNDLE_VERSION, m4_esyscmd([echo ]AC_PACKAGE_VERSION[ | cut -f1-3 -d. | tr -d '\n']))
-+AC_ARG_WITH(bundle-version,    AS_HELP_STRING([--with-bundle-version=VERSION], [Version to use for X11.app's CFBundleVersion (default: ]DEFAULT_BUNDLE_VERSION[)]),
-+                               [ BUNDLE_VERSION="${withval}" ],
-+                               [ BUNDLE_VERSION="DEFAULT_BUNDLE_VERSION" ])
-+AC_SUBST([BUNDLE_VERSION])
-+AC_ARG_WITH(bundle-version-string, AS_HELP_STRING([--with-bundle-version-string=VERSION], [Version to use for X11.app's CFBundleShortVersionString (default: ]AC_PACKAGE_VERSION[)]),
-+                               [ BUNDLE_VERSION_STRING="${withval}" ],
-+                               [ BUNDLE_VERSION_STRING="${PACKAGE_VERSION}" ])
-+AC_SUBST([BUNDLE_VERSION_STRING])
- AC_ARG_ENABLE(sparkle,AS_HELP_STRING([--enable-sparkle], [Enable updating of X11.app using the Sparkle Framework (default: disabled)]),
- 				[ XQUARTZ_SPARKLE="${enableval}" ],
- 				[ XQUARTZ_SPARKLE="no" ])
- AC_SUBST([XQUARTZ_SPARKLE])
-+AC_ARG_WITH(sparkle-feed-url,  AS_HELP_STRING([--with-sparkle-feed-url=URL], [URL for the Sparkle feed (default: https://www.xquartz.org/releases/sparkle/release.xml)]),
-+                               [ XQUARTZ_SPARKLE_FEED_URL="${withval}" ],
-+                               [ XQUARTZ_SPARKLE_FEED_URL="https://www.xquartz.org/releases/sparkle/release.xml"; ])
-+AC_SUBST([XQUARTZ_SPARKLE_FEED_URL])
- AC_ARG_ENABLE(visibility,     AS_HELP_STRING([--enable-visibility], [Enable symbol visibility (default: auto)]),
- 				[SYMBOL_VISIBILITY=$enableval],
- 				[SYMBOL_VISIBILITY=auto])
-@@ -880,7 +890,7 @@ if test "x$CONFIG_UDEV" = xyes; then
- 	fi
- 	SAVE_LIBS=$LIBS
- 	SAVE_CFLAGS=$CFLAGS
--	CFLAGS=$UDEV_CFLAGS
-+	CFLAGS="$CFLAGS $UDEV_CFLAGS"
- 	LIBS=$UDEV_LIBS
- 	AC_CHECK_FUNCS([udev_monitor_filter_add_match_tag])
- 	AC_CHECK_FUNCS([udev_enumerate_add_match_tag])
-@@ -1293,7 +1303,7 @@ fi
- 
- if test "x$DRI2" = xyes; then
- 	save_CFLAGS=$CFLAGS
--	CFLAGS="$GL_CFLAGS $LIBDRM_CFLAGS"
-+	CFLAGS="$CFLAGS $GL_CFLAGS $LIBDRM_CFLAGS"
- 	AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <GL/gl.h>
- #include <GL/internal/dri_interface.h>
- #ifndef __DRI_DRI2
-diff --git a/dix/devices.c b/dix/devices.c
-index 9b0c7d2..a532dcf 100644
---- a/dix/devices.c
-+++ b/dix/devices.c
-@@ -1682,8 +1682,7 @@ ProcSetModifierMapping(ClientPtr client)
-                        stuff->numKeyPerModifier);
-     if (rc == MappingFailed || rc == -1)
-         return BadValue;
--    if (rc != Success && rc != MappingSuccess && rc != MappingFailed &&
--        rc != MappingBusy)
-+    if (rc != MappingSuccess && rc != MappingFailed && rc != MappingBusy)
-         return rc;
- 
-     rep.success = rc;
-diff --git a/dix/enterleave.c b/dix/enterleave.c
-index f0b1572..1b341f2 100644
---- a/dix/enterleave.c
-+++ b/dix/enterleave.c
-@@ -1446,19 +1446,25 @@ DeviceFocusEvents(DeviceIntPtr dev, WindowPtr from, WindowPtr to, int mode)
- 
-     if ((to == NullWindow) || (to == PointerRootWin)) {
-         if ((from == NullWindow) || (from == PointerRootWin)) {
--            if (from == PointerRootWin)
-+            if (from == PointerRootWin) {
-+                DeviceFocusEvent(dev, XI_FocusOut, mode, NotifyPointer,
-+                                 sprite->win);
-                 DeviceFocusOutEvents(dev, sprite->win,
-                                      GetCurrentRootWindow(dev), mode,
-                                      NotifyPointer);
-+            }
-             /* Notify all the roots */
-             for (i = 0; i < nscreens; i++)
-                 DeviceFocusEvent(dev, XI_FocusOut, mode, out,
-                                  screenInfo.screens[i]->root);
-         }
-         else {
--            if (IsParent(from, sprite->win))
-+            if (IsParent(from, sprite->win)) {
-+                DeviceFocusEvent(dev, XI_FocusOut, mode, NotifyPointer,
-+                                 sprite->win);
-                 DeviceFocusOutEvents(dev, sprite->win, from, mode,
-                                      NotifyPointer);
-+            }
-             DeviceFocusEvent(dev, XI_FocusOut, mode, NotifyNonlinear, from);
-             /* next call catches the root too, if the screen changed */
-             DeviceFocusOutEvents(dev, from, NullWindow, mode,
-@@ -1476,10 +1482,13 @@ DeviceFocusEvents(DeviceIntPtr dev, WindowPtr from, WindowPtr to, int mode)
-     }
-     else {
-         if ((from == NullWindow) || (from == PointerRootWin)) {
--            if (from == PointerRootWin)
-+            if (from == PointerRootWin) {
-+                DeviceFocusEvent(dev, XI_FocusOut, mode, NotifyPointer,
-+                                 sprite->win);
-                 DeviceFocusOutEvents(dev, sprite->win,
-                                      GetCurrentRootWindow(dev), mode,
-                                      NotifyPointer);
-+            }
-             for (i = 0; i < nscreens; i++)
-                 DeviceFocusEvent(dev, XI_FocusOut, mode, out,
-                                  screenInfo.screens[i]->root);
-@@ -1506,9 +1515,12 @@ DeviceFocusEvents(DeviceIntPtr dev, WindowPtr from, WindowPtr to, int mode)
-                 if ((IsParent(from, sprite->win)) &&
-                     (sprite->win != from) &&
-                     (!IsParent(to, sprite->win)) &&
--                    (!IsParent(sprite->win, to)))
-+                    (!IsParent(sprite->win, to))) {
-+                    DeviceFocusEvent(dev, XI_FocusOut, mode, NotifyPointer,
-+                                     sprite->win);
-                     DeviceFocusOutEvents(dev, sprite->win, from, mode,
-                                          NotifyPointer);
-+                }
-                 DeviceFocusEvent(dev, XI_FocusOut, mode, NotifyInferior, from);
-                 DeviceFocusInEvents(dev, from, to, mode, NotifyVirtual);
-                 DeviceFocusEvent(dev, XI_FocusIn, mode, NotifyAncestor, to);
-diff --git a/dix/ptrveloc.c b/dix/ptrveloc.c
-index e75300a..050c12a 100644
---- a/dix/ptrveloc.c
-+++ b/dix/ptrveloc.c
-@@ -134,13 +134,19 @@ InitPredictableAccelerationScheme(DeviceIntPtr dev,
-     scheme = *protoScheme;
-     vel = calloc(1, sizeof(DeviceVelocityRec));
-     schemeData = calloc(1, sizeof(PredictableAccelSchemeRec));
--    if (!vel || !schemeData)
-+    if (!vel || !schemeData) {
-+        free(vel);
-+        free(schemeData);
-         return FALSE;
-+    }
-     InitVelocityData(vel);
-     schemeData->vel = vel;
-     scheme.accelData = schemeData;
--    if (!InitializePredictableAccelerationProperties(dev, vel, schemeData))
-+    if (!InitializePredictableAccelerationProperties(dev, vel, schemeData)) {
-+        free(vel);
-+        free(schemeData);
-         return FALSE;
-+    }
-     /* all fine, assign scheme to device */
-     dev->valuator->accelScheme = scheme;
-     return TRUE;
-diff --git a/exa/exa_glyphs.c b/exa/exa_glyphs.c
-index cf21ea9..192a643 100644
---- a/exa/exa_glyphs.c
-+++ b/exa/exa_glyphs.c
-@@ -618,9 +618,9 @@ exaGlyphsToMask(PicturePtr pMask, ExaGlyphBufferPtr buffer)
- }
- 
- static void
--exaGlyphsToDst(PicturePtr pSrc, PicturePtr pDst, ExaGlyphBufferPtr buffer)
-+exaGlyphsToDst(CARD8 op, PicturePtr pSrc, PicturePtr pDst, ExaGlyphBufferPtr buffer)
- {
--    exaCompositeRects(PictOpOver, pSrc, buffer->mask, pDst, buffer->count,
-+    exaCompositeRects(op, pSrc, buffer->mask, pDst, buffer->count,
-                       buffer->rects);
- 
-     buffer->count = 0;
-@@ -801,7 +801,7 @@ exaGlyphs(CARD8 op,
-                                        0, 0, x - glyph->info.x,
-                                        y - glyph->info.y)
-                         == ExaGlyphNeedFlush) {
--                        exaGlyphsToDst(pSrc, pDst, &buffer);
-+                        exaGlyphsToDst(op, pSrc, pDst, &buffer);
-                         exaBufferGlyph(pScreen, &buffer, glyph, pSrc, pDst,
-                                        xSrc + (x - glyph->info.x) - first_xOff,
-                                        ySrc + (y - glyph->info.y) - first_yOff,
-@@ -821,7 +821,7 @@ exaGlyphs(CARD8 op,
-         if (maskFormat)
-             exaGlyphsToMask(pMask, &buffer);
-         else
--            exaGlyphsToDst(pSrc, pDst, &buffer);
-+            exaGlyphsToDst(op, pSrc, pDst, &buffer);
-     }
- 
-     if (maskFormat) {
-diff --git a/exa/exa_render.c b/exa/exa_render.c
-index fc3ddea..b24bec0 100644
---- a/exa/exa_render.c
-+++ b/exa/exa_render.c
-@@ -1141,7 +1141,8 @@ exaTrapezoids(CARD8 op, PicturePtr pSrc, PicturePtr pDst,
- 
-         exaPrepareAccess(pPicture->pDrawable, EXA_PREPARE_DEST);
-         for (; ntrap; ntrap--, traps++)
--            (*ps->RasterizeTrapezoid) (pPicture, traps, -bounds.x1, -bounds.y1);
-+            if (xTrapezoidValid(traps))
-+                (*ps->RasterizeTrapezoid) (pPicture, traps, -bounds.x1, -bounds.y1);
-         exaFinishAccess(pPicture->pDrawable, EXA_PREPARE_DEST);
- 
-         xRel = bounds.x1 + xSrc - xDst;
-diff --git a/glamor/glamor.c b/glamor/glamor.c
-index 9c6a0d1..0cb73c4 100644
---- a/glamor/glamor.c
-+++ b/glamor/glamor.c
-@@ -140,6 +140,42 @@ glamor_get_pixmap_texture(PixmapPtr pixmap)
-     return pixmap_priv->fbo->tex;
- }
- 
-+void
-+glamor_bind_texture(glamor_screen_private *glamor_priv, GLenum texture,
-+                    glamor_pixmap_fbo *fbo, Bool destination_red)
-+{
-+    glActiveTexture(texture);
-+    glBindTexture(GL_TEXTURE_2D, fbo->tex);
-+
-+    /* If we're pulling data from a GL_RED texture, then whether we
-+     * want to make it an A,0,0,0 result or a 0,0,0,R result depends
-+     * on whether the destination is also a GL_RED texture.
-+     *
-+     * For GL_RED destinations, we need to leave the bits in the R
-+     * channel. For all other destinations, we need to clear out the R
-+     * channel so that it returns zero for R, G and B.
-+     *
-+     * Note that we're leaving the SWIZZLE_A value alone; for GL_RED
-+     * destinations, that means we'll actually be returning R,0,0,R,
-+     * but it doesn't matter as the bits in the alpha channel aren't
-+     * going anywhere.
-+     */
-+
-+    /* Is the operand a GL_RED fbo?
-+     */
-+
-+    if (glamor_fbo_red_is_alpha(glamor_priv, fbo)) {
-+
-+        /* If destination is also GL_RED, then preserve the bits in
-+         * the R channel */
-+
-+        if (destination_red)
-+            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, GL_RED);
-+        else
-+            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, GL_ZERO);
-+    }
-+}
-+
- PixmapPtr
- glamor_create_pixmap(ScreenPtr screen, int w, int h, int depth,
-                      unsigned int usage)
-@@ -816,3 +852,12 @@ glamor_name_from_pixmap(PixmapPtr pixmap, CARD16 *stride, CARD32 *size)
-     }
-     return -1;
- }
-+
-+void
-+glamor_finish(ScreenPtr screen)
-+{
-+    glamor_screen_private *glamor_priv = glamor_get_screen_private(screen);
-+
-+    glamor_make_current(glamor_priv);
-+    glFinish();
-+}
-diff --git a/glamor/glamor.h b/glamor/glamor.h
-index 0aa6d56..250dc83 100644
---- a/glamor/glamor.h
-+++ b/glamor/glamor.h
-@@ -342,6 +342,7 @@ extern _X_EXPORT void glamor_destroy_gc(GCPtr gc);
- extern Bool _X_EXPORT glamor_change_window_attributes(WindowPtr pWin, unsigned long mask);
- extern void _X_EXPORT glamor_copy_window(WindowPtr window, DDXPointRec old_origin, RegionPtr src_region);
- 
-+extern _X_EXPORT void glamor_finish(ScreenPtr screen);
- #define HAS_GLAMOR_TEXT 1
- 
- #ifdef GLAMOR_FOR_XORG
-diff --git a/glamor/glamor_composite_glyphs.c b/glamor/glamor_composite_glyphs.c
-index f51ff6d..cc0aa6f 100644
---- a/glamor/glamor_composite_glyphs.c
-+++ b/glamor/glamor_composite_glyphs.c
-@@ -246,8 +246,7 @@ glamor_glyphs_flush(CARD8 op, PicturePtr src, PicturePtr dst,
-     glamor_put_vbo_space(drawable->pScreen);
- 
-     glEnable(GL_SCISSOR_TEST);
--    glActiveTexture(GL_TEXTURE1);
--    glBindTexture(GL_TEXTURE_2D, atlas_fbo->tex);
-+    glamor_bind_texture(glamor_priv, GL_TEXTURE1, atlas_fbo, FALSE);
- 
-     for (;;) {
-         if (!glamor_use_program_render(prog, op, src, dst))
-@@ -558,7 +557,7 @@ glamor_free_glyph_atlas(struct glamor_glyph_atlas *atlas)
-     if (!atlas)
-         return;
-     if (atlas->atlas)
--        FreePicture(atlas->atlas, 0);
-+        (*atlas->atlas->drawable.pScreen->DestroyPixmap)(atlas->atlas);
-     free (atlas);
- }
- 
-diff --git a/glamor/glamor_compositerects.c b/glamor/glamor_compositerects.c
-index 885a6c0..199e627 100644
---- a/glamor/glamor_compositerects.c
-+++ b/glamor/glamor_compositerects.c
-@@ -107,7 +107,6 @@ glamor_composite_rectangles(CARD8 op,
-     struct glamor_pixmap_private *priv;
-     pixman_region16_t region;
-     pixman_box16_t *boxes;
--    int dst_x, dst_y;
-     int num_boxes;
-     PicturePtr source = NULL;
-     Bool need_free_region = FALSE;
-@@ -225,17 +224,18 @@ glamor_composite_rectangles(CARD8 op,
-            RegionExtents(&region)->x2, RegionExtents(&region)->y2,
-            RegionNumRects(&region));
- 
--    glamor_get_drawable_deltas(dst->pDrawable, pixmap, &dst_x, &dst_y);
--    pixman_region_translate(&region, dst_x, dst_y);
--
--    DEBUGF("%s: pixmap +(%d, %d) extents (%d, %d),(%d, %d)\n",
--           __FUNCTION__, dst_x, dst_y,
--           RegionExtents(&region)->x1, RegionExtents(&region)->y1,
--           RegionExtents(&region)->x2, RegionExtents(&region)->y2);
--
-     boxes = pixman_region_rectangles(&region, &num_boxes);
-     if (op == PictOpSrc || op == PictOpClear) {
-         CARD32 pixel;
-+        int dst_x, dst_y;
-+
-+        glamor_get_drawable_deltas(dst->pDrawable, pixmap, &dst_x, &dst_y);
-+        pixman_region_translate(&region, dst_x, dst_y);
-+
-+        DEBUGF("%s: pixmap +(%d, %d) extents (%d, %d),(%d, %d)\n",
-+               __FUNCTION__, dst_x, dst_y,
-+               RegionExtents(&region)->x1, RegionExtents(&region)->y1,
-+               RegionExtents(&region)->x2, RegionExtents(&region)->y2);
- 
-         if (op == PictOpClear)
-             pixel = 0;
-diff --git a/glamor/glamor_copy.c b/glamor/glamor_copy.c
-index 5fed89f..3501a0d 100644
---- a/glamor/glamor_copy.c
-+++ b/glamor/glamor_copy.c
-@@ -38,8 +38,8 @@ use_copyarea(PixmapPtr dst, GCPtr gc, glamor_program *prog, void *arg)
-     struct copy_args *args = arg;
-     glamor_pixmap_fbo *src = args->src;
- 
--    glActiveTexture(GL_TEXTURE0);
--    glBindTexture(GL_TEXTURE_2D, src->tex);
-+    glamor_bind_texture(glamor_get_screen_private(dst->drawable.pScreen),
-+                        GL_TEXTURE0, src, TRUE);
- 
-     glUniform2f(prog->fill_offset_uniform, args->dx, args->dy);
-     glUniform2f(prog->fill_size_inv_uniform, 1.0f/src->width, 1.0f/src->height);
-@@ -67,8 +67,8 @@ use_copyplane(PixmapPtr dst, GCPtr gc, glamor_program *prog, void *arg)
-     struct copy_args *args = arg;
-     glamor_pixmap_fbo *src = args->src;
- 
--    glActiveTexture(GL_TEXTURE0);
--    glBindTexture(GL_TEXTURE_2D, src->tex);
-+    glamor_bind_texture(glamor_get_screen_private(dst->drawable.pScreen),
-+                        GL_TEXTURE0, src, TRUE);
- 
-     glUniform2f(prog->fill_offset_uniform, args->dx, args->dy);
-     glUniform2f(prog->fill_size_inv_uniform, 1.0f/src->width, 1.0f/src->height);
-diff --git a/glamor/glamor_dash.c b/glamor/glamor_dash.c
-index a6a11c1..3c19dba 100644
---- a/glamor/glamor_dash.c
-+++ b/glamor/glamor_dash.c
-@@ -188,8 +188,7 @@ glamor_dash_setup(DrawablePtr drawable, GCPtr gc)
- 
-     /* Set the dash pattern as texture 1 */
- 
--    glActiveTexture(GL_TEXTURE1);
--    glBindTexture(GL_TEXTURE_2D, dash_priv->fbo->tex);
-+    glamor_bind_texture(glamor_priv, GL_TEXTURE1, dash_priv->fbo, FALSE);
-     glUniform1i(prog->dash_uniform, 1);
-     glUniform1f(prog->dash_length_uniform, dash_pixmap->drawable.width);
- 
-diff --git a/glamor/glamor_egl.c b/glamor/glamor_egl.c
-index 80a97f7..5aacbed 100644
---- a/glamor/glamor_egl.c
-+++ b/glamor/glamor_egl.c
-@@ -823,11 +823,6 @@ glamor_egl_init(ScrnInfoPtr scrn, int fd)
- 
-     glamor_egl->has_gem = glamor_egl_check_has_gem(fd);
- 
--#ifndef GLAMOR_GLES2
--    eglBindAPI(EGL_OPENGL_API);
--#else
--    eglBindAPI(EGL_OPENGL_ES_API);
--#endif
-     if (!eglInitialize
-         (glamor_egl->display, &glamor_egl->major, &glamor_egl->minor)) {
-         xf86DrvMsg(scrn->scrnIndex, X_ERROR, "eglInitialize() failed\n");
-@@ -835,6 +830,12 @@ glamor_egl_init(ScrnInfoPtr scrn, int fd)
-         goto error;
-     }
- 
-+#ifndef GLAMOR_GLES2
-+    eglBindAPI(EGL_OPENGL_API);
-+#else
-+    eglBindAPI(EGL_OPENGL_ES_API);
-+#endif
-+
-     version = eglQueryString(glamor_egl->display, EGL_VERSION);
-     xf86Msg(X_INFO, "%s: EGL version %s:\n", glamor_name, version);
- 
-diff --git a/glamor/glamor_fbo.c b/glamor/glamor_fbo.c
-index c6ba095..5bfffe5 100644
---- a/glamor/glamor_fbo.c
-+++ b/glamor/glamor_fbo.c
-@@ -340,10 +340,8 @@ _glamor_create_tex(glamor_screen_private *glamor_priv,
-     glBindTexture(GL_TEXTURE_2D, tex);
-     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
-     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
--    if (format == glamor_priv->one_channel_format && format == GL_RED) {
--        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, GL_ZERO);
-+    if (format == glamor_priv->one_channel_format && format == GL_RED)
-         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, GL_RED);
--    }
-     glamor_priv->suppress_gl_out_of_memory_logging = true;
-     glTexImage2D(GL_TEXTURE_2D, 0, format, w, h, 0,
-                  format, GL_UNSIGNED_BYTE, NULL);
-diff --git a/glamor/glamor_priv.h b/glamor/glamor_priv.h
-index a70f10e..9d40397 100644
---- a/glamor/glamor_priv.h
-+++ b/glamor/glamor_priv.h
-@@ -593,6 +593,34 @@ void glamor_fini_pixmap_fbo(ScreenPtr screen);
- Bool glamor_pixmap_fbo_fixup(ScreenPtr screen, PixmapPtr pixmap);
- void glamor_fbo_expire(glamor_screen_private *glamor_priv);
- 
-+/* Return whether 'picture' is alpha-only */
-+static inline Bool glamor_picture_is_alpha(PicturePtr picture)
-+{
-+    return picture->format == PICT_a1 || picture->format == PICT_a8;
-+}
-+
-+/* Return whether 'fbo' is storing alpha bits in the red channel */
-+static inline Bool
-+glamor_fbo_red_is_alpha(glamor_screen_private *glamor_priv, glamor_pixmap_fbo *fbo)
-+{
-+    /* True when the format is GL_RED (that can only happen when our one channel format is GL_RED */
-+    return fbo->format == GL_RED;
-+}
-+
-+/* Return whether 'picture' is storing alpha bits in the red channel */
-+static inline Bool
-+glamor_picture_red_is_alpha(PicturePtr picture)
-+{
-+    /* True when the picture is alpha only and the screen is using GL_RED for alpha pictures */
-+    return glamor_picture_is_alpha(picture) &&
-+        glamor_get_screen_private(picture->pDrawable->pScreen)->one_channel_format == GL_RED;
-+}
-+
-+void glamor_bind_texture(glamor_screen_private *glamor_priv,
-+                         GLenum texture,
-+                         glamor_pixmap_fbo *fbo,
-+                         Bool destination_red);
-+
- glamor_pixmap_fbo *glamor_create_fbo_array(glamor_screen_private *glamor_priv,
-                                            int w, int h, GLenum format,
-                                            int flag, int block_w, int block_h,
-diff --git a/glamor/glamor_program.c b/glamor/glamor_program.c
-index 0a94de6..dec116c 100644
---- a/glamor/glamor_program.c
-+++ b/glamor/glamor_program.c
-@@ -445,6 +445,7 @@ static struct blendinfo composite_op_info[] = {
- static void
- glamor_set_blend(CARD8 op, glamor_program_alpha alpha, PicturePtr dst)
- {
-+    glamor_screen_private *glamor_priv = glamor_get_screen_private(dst->pDrawable->pScreen);
-     GLenum src_blend, dst_blend;
-     struct blendinfo *op_info;
- 
-@@ -459,6 +460,9 @@ glamor_set_blend(CARD8 op, glamor_program_alpha alpha, PicturePtr dst)
-         break;
-     }
- 
-+    if (glamor_priv->gl_flavor != GLAMOR_GL_ES2)
-+        glDisable(GL_COLOR_LOGIC_OP);
-+
-     if (op == PictOpSrc)
-         return;
- 
-@@ -527,6 +531,7 @@ use_source_picture(CARD8 op, PicturePtr src, PicturePtr dst, glamor_program *pro
-     glamor_set_blend(op, prog->alpha, dst);
- 
-     return glamor_set_texture((PixmapPtr) src->pDrawable,
-+                              glamor_picture_red_is_alpha(dst),
-                               0, 0,
-                               prog->fill_offset_uniform,
-                               prog->fill_size_inv_uniform);
-@@ -545,7 +550,8 @@ use_source_1x1_picture(CARD8 op, PicturePtr src, PicturePtr dst, glamor_program
- {
-     glamor_set_blend(op, prog->alpha, dst);
- 
--    return glamor_set_texture_pixmap((PixmapPtr) src->pDrawable);
-+    return glamor_set_texture_pixmap((PixmapPtr) src->pDrawable,
-+                                     glamor_picture_red_is_alpha(dst));
- }
- 
- static const glamor_facet glamor_source_1x1_picture = {
-diff --git a/glamor/glamor_render.c b/glamor/glamor_render.c
-index 73ac831..d70316d 100644
---- a/glamor/glamor_render.c
-+++ b/glamor/glamor_render.c
-@@ -105,7 +105,7 @@ glamor_create_composite_fs(struct shader_key *key)
-     /* The texture and the pixmap size is not match eaxctly, so can't sample it directly.
-      * rel_sampler will recalculate the texture coords.*/
-     const char *rel_sampler =
--        " vec4 rel_sampler(sampler2D tex_image, vec2 tex, vec4 wh, int repeat)\n"
-+        " vec4 rel_sampler_rgba(sampler2D tex_image, vec2 tex, vec4 wh, int repeat)\n"
-         "{\n"
-         "	if (repeat >= RepeatFix) {\n"
-         "		tex = rel_tex_coord(tex, wh, repeat);\n"
-@@ -117,6 +117,19 @@ glamor_create_composite_fs(struct shader_key *key)
-         "		}\n"
-         "	}\n"
-         "	return texture2D(tex_image, tex);\n"
-+        "}\n"
-+        " vec4 rel_sampler_rgbx(sampler2D tex_image, vec2 tex, vec4 wh, int repeat)\n"
-+        "{\n"
-+        "	if (repeat >= RepeatFix) {\n"
-+        "		tex = rel_tex_coord(tex, wh, repeat);\n"
-+        "		if (repeat == RepeatFix + RepeatNone) {\n"
-+        "			if (tex.x < 0.0 || tex.x >= 1.0 || \n"
-+        "			    tex.y < 0.0 || tex.y >= 1.0)\n"
-+        "				return vec4(0.0, 0.0, 0.0, 0.0);\n"
-+        "			tex = (fract(tex) / wh.xy);\n"
-+        "		}\n"
-+        "	}\n"
-+        "	return vec4(texture2D(tex_image, tex).rgb, 1.0);\n"
-         "}\n";
- 
-     const char *source_solid_fetch =
-@@ -131,8 +144,8 @@ glamor_create_composite_fs(struct shader_key *key)
-         "uniform vec4 source_wh;"
-         "vec4 get_source()\n"
-         "{\n"
--        "	return rel_sampler(source_sampler, source_texture,\n"
--        "			   source_wh, source_repeat_mode);\n"
-+        "	return rel_sampler_rgba(source_sampler, source_texture,\n"
-+        "			        source_wh, source_repeat_mode);\n"
-         "}\n";
-     const char *source_pixmap_fetch =
-         "varying vec2 source_texture;\n"
-@@ -140,9 +153,8 @@ glamor_create_composite_fs(struct shader_key *key)
-         "uniform vec4 source_wh;\n"
-         "vec4 get_source()\n"
-         "{\n"
--        "	return vec4(rel_sampler(source_sampler, source_texture,\n"
--        "				source_wh, source_repeat_mode).rgb,\n"
--        "				1.0);\n"
-+        "	return rel_sampler_rgbx(source_sampler, source_texture,\n"
-+        "				source_wh, source_repeat_mode);\n"
-         "}\n";
-     const char *mask_none =
-         "vec4 get_mask()\n"
-@@ -161,8 +173,8 @@ glamor_create_composite_fs(struct shader_key *key)
-         "uniform vec4 mask_wh;\n"
-         "vec4 get_mask()\n"
-         "{\n"
--        "	return rel_sampler(mask_sampler, mask_texture,\n"
--        "			   mask_wh, mask_repeat_mode);\n"
-+        "	return rel_sampler_rgba(mask_sampler, mask_texture,\n"
-+        "			        mask_wh, mask_repeat_mode);\n"
-         "}\n";
-     const char *mask_pixmap_fetch =
-         "varying vec2 mask_texture;\n"
-@@ -170,8 +182,8 @@ glamor_create_composite_fs(struct shader_key *key)
-         "uniform vec4 mask_wh;\n"
-         "vec4 get_mask()\n"
-         "{\n"
--        "	return vec4(rel_sampler(mask_sampler, mask_texture,\n"
--        "				mask_wh, mask_repeat_mode).rgb, 1.0);\n"
-+        "	return rel_sampler_rgbx(mask_sampler, mask_texture,\n"
-+        "				mask_wh, mask_repeat_mode);\n"
-         "}\n";
- 
-     const char *dest_swizzle_default =
-@@ -500,15 +512,24 @@ static void
- glamor_set_composite_texture(glamor_screen_private *glamor_priv, int unit,
-                              PicturePtr picture,
-                              PixmapPtr pixmap,
--                             GLuint wh_location, GLuint repeat_location)
-+                             GLuint wh_location, GLuint repeat_location,
-+                             glamor_pixmap_private *dest_priv)
- {
-     glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap);
-+    glamor_pixmap_fbo *fbo = pixmap_priv->fbo;
-     float wh[4];
-     int repeat_type;
- 
-     glamor_make_current(glamor_priv);
--    glActiveTexture(GL_TEXTURE0 + unit);
--    glBindTexture(GL_TEXTURE_2D, pixmap_priv->fbo->tex);
-+
-+    /* The red channel swizzling doesn't depend on whether we're using
-+     * 'fbo' as source or mask as we must have the same answer in case
-+     * the same fbo is being used for both. That means the mask
-+     * channel will sometimes get red bits in the R channel, and
-+     * sometimes get zero bits in the R channel, which is harmless.
-+     */
-+    glamor_bind_texture(glamor_priv, GL_TEXTURE0 + unit, fbo,
-+                        glamor_fbo_red_is_alpha(glamor_priv, dest_priv->fbo));
-     repeat_type = picture->repeatType;
-     switch (picture->repeatType) {
-     case RepeatNone:
-@@ -557,8 +578,8 @@ glamor_set_composite_texture(glamor_screen_private *glamor_priv, int unit,
-      *
-      **/
-     if (glamor_pixmap_priv_is_large(pixmap_priv) ||
--        (glamor_priv->gl_flavor == GLAMOR_GL_ES2 && repeat_type == RepeatNone &&
--         picture->transform)) {
-+        ((!PICT_FORMAT_A(picture->format) || glamor_priv->gl_flavor == GLAMOR_GL_ES2) &&
-+         repeat_type == RepeatNone && picture->transform)) {
-         glamor_pixmap_fbo_fix_wh_ratio(wh, pixmap, pixmap_priv);
-         glUniform4fv(wh_location, 1, wh);
- 
-@@ -1068,7 +1089,8 @@ glamor_composite_set_shader_blend(glamor_screen_private *glamor_priv,
-         glamor_set_composite_texture(glamor_priv, 0,
-                                      shader->source,
-                                      shader->source_pixmap, shader->source_wh,
--                                     shader->source_repeat_mode);
-+                                     shader->source_repeat_mode,
-+                                     dest_priv);
-     }
- 
-     if (key->mask != SHADER_MASK_NONE) {
-@@ -1080,10 +1102,14 @@ glamor_composite_set_shader_blend(glamor_screen_private *glamor_priv,
-             glamor_set_composite_texture(glamor_priv, 1,
-                                          shader->mask,
-                                          shader->mask_pixmap, shader->mask_wh,
--                                         shader->mask_repeat_mode);
-+                                         shader->mask_repeat_mode,
-+                                         dest_priv);
-         }
-     }
- 
-+    if (glamor_priv->gl_flavor != GLAMOR_GL_ES2)
-+        glDisable(GL_COLOR_LOGIC_OP);
-+
-     if (op_info->source_blend == GL_ONE && op_info->dest_blend == GL_ZERO) {
-         glDisable(GL_BLEND);
-     }
-@@ -1144,12 +1170,12 @@ glamor_composite_with_shader(CARD8 op,
-         }
-     }
- 
-+    glamor_make_current(glamor_priv);
-+
-     glamor_set_destination_pixmap_priv_nc(glamor_priv, dest_pixmap, dest_pixmap_priv);
-     glamor_composite_set_shader_blend(glamor_priv, dest_pixmap_priv, &key, shader, &op_info);
-     glamor_set_alu(screen, GXcopy);
- 
--    glamor_make_current(glamor_priv);
--
-     glamor_priv->has_source_coords = key.source != SHADER_SOURCE_SOLID;
-     glamor_priv->has_mask_coords = (key.mask != SHADER_MASK_NONE &&
-                                     key.mask != SHADER_MASK_SOLID);
-@@ -1392,6 +1418,36 @@ glamor_composite_clipped_region(CARD8 op,
-     DEBUGF("clipped (%d %d) (%d %d) (%d %d) width %d height %d \n",
-            x_source, y_source, x_mask, y_mask, x_dest, y_dest, width, height);
- 
-+    /* Is the composite operation equivalent to a copy? */
-+    if (!mask && !source->alphaMap && !dest->alphaMap
-+        && source->pDrawable && !source->transform
-+        && ((op == PictOpSrc
-+             && (source->format == dest->format
-+                 || (PICT_FORMAT_COLOR(dest->format)
-+                     && PICT_FORMAT_COLOR(source->format)
-+                     && dest->format == PICT_FORMAT(PICT_FORMAT_BPP(source->format),
-+                                                    PICT_FORMAT_TYPE(source->format),
-+                                                    0,
-+                                                    PICT_FORMAT_R(source->format),
-+                                                    PICT_FORMAT_G(source->format),
-+                                                    PICT_FORMAT_B(source->format)))))
-+            || (op == PictOpOver
-+                && source->format == dest->format
-+                && !PICT_FORMAT_A(source->format)))
-+        && x_source >= 0 && y_source >= 0
-+        && (x_source + width) <= source->pDrawable->width
-+        && (y_source + height) <= source->pDrawable->height) {


Reply to: