<pre style='margin:0'>
Chris Jones (cjones051073) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/6746eecb6c3bbc2de9b553de097feefa3696f1f9">https://github.com/macports/macports-ports/commit/6746eecb6c3bbc2de9b553de097feefa3696f1f9</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 6746eecb6c3bbc2de9b553de097feefa3696f1f9
</span>Author: Chris Jones <jonesc@macports.org>
AuthorDate: Thu Apr 4 17:31:27 2019 +0100

<span style='display:block; white-space:pre;color:#404040;'>    xorg-server-1.18: New port, legacy version of X11 server
</span>---
 x11/xorg-server-1.18/Portfile                      |  150 +++
 ...-the-issue-where-the-h-key-could-be-come-.patch |   42 +
 ...anup-CPPFLAGS-that-are-no-longer-necessar.patch |   28 +
 ...on-Improve-abstraction-for-launchd-secure.patch |   73 +
 ...k-around-an-issue-that-can-occur-on-macOS.patch |   59 +
 .../5000-sdksyms.sh-Use-CPPFLAGS-not-CFLAGS.patch  |   41 +
 ...evert-dix-Restore-PaintWindow-screen-hook.patch |  348 +++++
 ...the-GC-clipping-problem-in-miPaintWindow-.patch |  158 +++
 ...old-miTrapezoids-and-miTriangles-routines.patch |  289 ++++
 ...4-fb-Revert-fb-changes-that-broke-XQuartz.patch |  320 +++++
 ...5-fb-Revert-fb-changes-that-broke-XQuartz.patch |  243 ++++
 .../files/dri/GL/internal/dri_interface.h          | 1409 ++++++++++++++++++++
 x11/xorg-server-1.18/files/include/Xplugin.h       |  592 ++++++++
 13 files changed, 3752 insertions(+)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/x11/xorg-server-1.18/Portfile b/x11/xorg-server-1.18/Portfile
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..f9303ac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/x11/xorg-server-1.18/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,150 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortSystem      1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortGroup       compiler_blacklist_versions 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+name            xorg-server-1.18
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+conflicts       xorg-server xorg-server-devel
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set my_name     xorg-server
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+version         1.18.4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+revision        0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+categories      x11 devel
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+license         X11
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+maintainers     nomaintainer
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+description     The X.org / Xquartz X server.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+homepage        https://www.x.org
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+platforms       darwin macosx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+long_description The X.org X server allows you to run X11 applications on your computer.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#master_sites   http://xquartz.macosforge.org/downloads/src
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+master_sites    http://xorg.freedesktop.org/archive/individual/xserver/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#master_sites    xorg:individual/xserver/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+dist_subdir     ${my_name}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+distname        ${my_name}-${version}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+checksums       rmd160  6f58d84d3bbc59a773e6a2e1eafc208827a5923f \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                sha256  278459b2c31d61a15655d95a72fb79930c480a6bb8cf9226e48a07df8b1d31c8 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                size    6009508
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+use_bzip2       yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+use_parallel_build yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Yes, mesa is a *BUILD* dependency
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+depends_build \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        port:pkgconfig \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        port:mesa \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        port:xorg-xorgproto \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        port:xorg-xtrans
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# This xinit dependency needs to be port: not bin: because we specifically run ${prefix}/bin/startx from bundle-main.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+depends_run \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        port:xinit \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        port:quartz-wm \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        port:xorg-fonts \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        port:xkeyboard-config
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+depends_lib \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        path:lib/pkgconfig/pixman-1.pc:libpixman \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        port:xorg-libxkbfile \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        port:xorg-libXfont \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        port:xorg-libXt \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        port:xorg-libAppleWM \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        port:xorg-libXfixes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://trac.macports.org/ticket/36055
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://llvm.org/bugs/show_bug.cgi?id=30346
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://trac.macports.org/ticket/53910
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+compiler.blacklist gcc-4.0 macports-clang-3.9 macports-clang-devel {clang >= 802 < 900}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+platform darwin {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${os.major} >= 16} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # Remove this once a version of base is released that contains macports-clang-4.0 in the default fallback list
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        compiler.blacklist-append   macports-clang-3.7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        compiler.fallback-append    macports-clang-4.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.args --with-apple-applications-dir=${applications_dir} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        --with-bundle-id-prefix=org.macports \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        --without-dtrace \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        --without-doxygen \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        --without-fop \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        --without-xmlto \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        --disable-devel-docs \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        --with-sha1=CommonCrypto \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        --disable-dri2 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        --disable-dri3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# GL/internal/dri_interface.h is missing in prefix (provided by libdrm for the xorg DDX... not helpful for us)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.cppflags-append -I/usr/include -I${filespath}/dri -F${configure.sdkroot}/System/Library/Frameworks/ApplicationServices.framework/Frameworks
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.env-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        RAWCPP=${configure.cpp}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        0001-XQuartz-Fix-the-issue-where-the-h-key-could-be-come-.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        0002-XQuartz-Cleanup-CPPFLAGS-that-are-no-longer-necessar.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        0003-os-connection-Improve-abstraction-for-launchd-secure.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        1001-XQuartz-Hack-around-an-issue-that-can-occur-on-macOS.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        5000-sdksyms.sh-Use-CPPFLAGS-not-CFLAGS.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        5001-Revert-dix-Restore-PaintWindow-screen-hook.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        5002-Workaround-the-GC-clipping-problem-in-miPaintWindow-.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        5003-Use-old-miTrapezoids-and-miTriangles-routines.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        5004-fb-Revert-fb-changes-that-broke-XQuartz.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        5005-fb-Revert-fb-changes-that-broke-XQuartz.patch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patch.pre_args -p1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+use_autoreconf yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+autoreconf.args -fvi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+build.args V=1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+depends_build-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        port:xorg-util-macros \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        port:xorg-font-util
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+post-destroot {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ln -s Xquartz ${destroot}${prefix}/bin/X
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+platform macosx {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if { ${os.major} < 10 } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                # Xplugin.h is missing on Tiger and incorrect on Leopard
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                configure.cppflags-append -I${filespath}/include
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+variant docs description "Install extra documentation" {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        depends_build-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                port:doxygen \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                port:fop \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                port:xmlto \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                port:xorg-sgml-doctools
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        depends_skip_archcheck-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                doxygen \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                xmlto
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        configure.args-delete \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                --without-doxygen \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                --without-fop \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                --without-xmlto \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                --disable-devel-docs 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        configure.args-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                --with-doxygen \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                --with-fop \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                --with-xmlto \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                --enable-devel-docs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        configure.env-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                DOXYGEN=${prefix}/bin/doxygen \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                FOP=${prefix}/bin/fop \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                XMLTO=${prefix}/bin/xmlto
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+livecheck.type  regex
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+livecheck.url   http://xorg.freedesktop.org/archive/individual/xserver/?C=M&O=D
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+livecheck.regex ${name}-(\\d+\\.\\d+\\.\\d+)\\.tar
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/x11/xorg-server-1.18/files/0001-XQuartz-Fix-the-issue-where-the-h-key-could-be-come-.patch b/x11/xorg-server-1.18/files/0001-XQuartz-Fix-the-issue-where-the-h-key-could-be-come-.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..3998375
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/x11/xorg-server-1.18/files/0001-XQuartz-Fix-the-issue-where-the-h-key-could-be-come-.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,42 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From b1ee5cc0015e702c8e13c3895f4b2344ab2aeacb Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Sun, 29 May 2016 14:01:38 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 1/3] XQuartz: Fix the issue where the h key could be come
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "stuck" after hiding XQuartz with cmd-h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+The issue was that we set a flag to ignore the k key's up event when sent
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+the cmd-h down event, but because the cmd-h keycode hides XQuartz, we
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+became !_x_active by the time the event is delivered which caused us to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+go down a differnet codepath rather than getting a chance to ignore it.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+We then incorrectly ignored the next h up key.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+https://bugs.freedesktop.org/show_bug.cgi?id=92648
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ hw/xquartz/X11Application.m | 9 +++++++++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 9 insertions(+)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index d2c5d30..9a22909 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/hw/xquartz/X11Application.m
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/hw/xquartz/X11Application.m
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -366,6 +366,15 @@ message_kit_thread(SEL selector, NSObject *arg)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     /* No kit window is focused, so send it to X. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     for_appkit = NO;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    /* Reset our swallow state if we're seeing the same keyCode again.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                     * This can happen if we become !_x_active when the keyCode we
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                     * intended to swallow is delivered.  See:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                     * https://bugs.freedesktop.org/show_bug.cgi?id=92648
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                     */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    if ([e keyCode] == swallow_keycode) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        do_swallow = NO;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             else {       /* KeyUp */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-- 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+2.9.3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/x11/xorg-server-1.18/files/0002-XQuartz-Cleanup-CPPFLAGS-that-are-no-longer-necessar.patch b/x11/xorg-server-1.18/files/0002-XQuartz-Cleanup-CPPFLAGS-that-are-no-longer-necessar.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..28bee8a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/x11/xorg-server-1.18/files/0002-XQuartz-Cleanup-CPPFLAGS-that-are-no-longer-necessar.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,28 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From b863c6cc90f9e0d3db361fbc3210c34ed5298203 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Sat, 10 Sep 2016 22:16:11 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 2/3] XQuartz: Cleanup CPPFLAGS that are no longer necessary on
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ darwin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ hw/xquartz/pbproxy/Makefile.am | 5 ++---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 2 insertions(+), 3 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/hw/xquartz/pbproxy/Makefile.am b/hw/xquartz/pbproxy/Makefile.am
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 1b14dff..9429ea2 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/hw/xquartz/pbproxy/Makefile.am
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/hw/xquartz/pbproxy/Makefile.am
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1,7 +1,6 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-AM_CPPFLAGS=-F/System/Library/Frameworks/ApplicationServices.framework/Frameworks \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  -DBUNDLE_ID_PREFIX=\"$(BUNDLE_ID_PREFIX)\"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++AM_CPPFLAGS=-DBUNDLE_ID_PREFIX=\"$(BUNDLE_ID_PREFIX)\"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-AM_CFLAGS=$(XPBPROXY_CFLAGS) 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++AM_CFLAGS=$(XPBPROXY_CFLAGS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ AM_OBJCFLAGS=$(XPBPROXY_CFLAGS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ noinst_LTLIBRARIES = libxpbproxy.la
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-- 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+2.9.3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/x11/xorg-server-1.18/files/0003-os-connection-Improve-abstraction-for-launchd-secure.patch b/x11/xorg-server-1.18/files/0003-os-connection-Improve-abstraction-for-launchd-secure.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..4ff551a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/x11/xorg-server-1.18/files/0003-os-connection-Improve-abstraction-for-launchd-secure.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,73 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 455d862774b791f4ca93f9885e1e899208a5080c Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Sat, 10 Sep 2016 22:32:56 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 3/3] os/connection: Improve abstraction for launchd secure
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sockets
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This changes away from hard-coding the /tmp/launch-* path to now
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+supporting a generic <path to unix socket>[.<screen>] format for
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+$DISPLAY.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+cf-libxcb: d978a4f69b30b630f28d07f1003cf290284d24d8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ os/connection.c | 31 ++++++++++++++++++++++++++-----
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 26 insertions(+), 5 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/os/connection.c b/os/connection.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index a901ebf..ac7d12b 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/os/connection.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/os/connection.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -79,6 +79,8 @@ SOFTWARE.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <stdio.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <stdlib.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <sys/stat.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifndef WIN32
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <sys/socket.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1112,15 +1114,34 @@ MakeClientGrabPervious(ClientPtr client)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ListenOnOpenFD(int fd, int noxauth)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    char port[256];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    char port[PATH_MAX];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     XtransConnInfo ciptr;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     const char *display_env = getenv("DISPLAY");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if (display_env && (strncmp(display_env, "/tmp/launch", 11) == 0)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        /* Make the path the launchd socket if our DISPLAY is set right */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        strcpy(port, display_env);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    /* First check if display_env matches a <path to unix socket>[.<screen number>] scheme (eg: launchd) */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (display_env) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        struct stat sbuf;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        strlcpy(port, display_env, sizeof(port));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        /* If the path exists, we don't have do do anything else.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++         * If it doesn't, we need to check for a .<screen number> to strip off and recheck.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++         */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (0 != stat(port, &sbuf)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            char *dot = strrchr(port, '.');
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if (dot) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                *dot = '\0';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                if (0 != stat(port, &sbuf)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    display_env = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                display_env = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (!display_env) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         /* Just some default so things don't break and die. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         snprintf(port, sizeof(port), ":%d", atoi(display));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-- 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+2.9.3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/x11/xorg-server-1.18/files/1001-XQuartz-Hack-around-an-issue-that-can-occur-on-macOS.patch b/x11/xorg-server-1.18/files/1001-XQuartz-Hack-around-an-issue-that-can-occur-on-macOS.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..16d0ea6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/x11/xorg-server-1.18/files/1001-XQuartz-Hack-around-an-issue-that-can-occur-on-macOS.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,59 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 7c2f104ace0bfdc033145db478f17111fedaa432 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Tue, 18 Jul 2017 21:35:49 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] XQuartz: Hack around an issue that can occur on macOS due to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ background apps incorrectly stealing focus
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Works around <rdar://problem/7150340>.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Tested-by: Tom Lane <tgl@sss.pgh.pa.us>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ hw/xquartz/X11Application.m | 29 ++++++++++++++++++++++++-----
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 24 insertions(+), 5 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 768eecf68..821e1c5a1 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/hw/xquartz/X11Application.m
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/hw/xquartz/X11Application.m
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -275,13 +275,32 @@ message_kit_thread(SEL selector, NSObject *arg)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if (_x_active) [self activateX:NO];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         else if ([self modalWindow] == nil) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            /* Must be an X window. Tell appkit it doesn't have focus. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            /* Must be an X window. Tell appkit windows to resign main/key */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             for_appkit = NO;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            if ([self isActive]) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                [self deactivate];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                if (!_x_active && quartzProcs->IsX11Window([e windowNumber]))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                    [self activateX:YES];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if (!_x_active && quartzProcs->IsX11Window([e windowNumber])) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                if ([self respondsToSelector:@selector(_setKeyWindow:)] && [self respondsToSelector:@selector(_setMainWindow:)]) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    NSWindow *keyWindow = [self keyWindow];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    if (keyWindow) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        [self _setKeyWindow:nil];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        [keyWindow resignKeyWindow];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    NSWindow *mainWindow = [self mainWindow];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    if (mainWindow) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        [self _setMainWindow:nil];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        [mainWindow resignMainWindow];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                   }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                 } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    /* This has a side effect of causing background apps to steal focus from XQuartz.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                     * Unfortunately, there is no public and stable API to do what we want, but this
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                     * is a decent fallback in the off chance that the above selectors get dropped
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                     * in the future.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                     */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    [self deactivate];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                [self activateX:YES];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-- 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+2.13.2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/x11/xorg-server-1.18/files/5000-sdksyms.sh-Use-CPPFLAGS-not-CFLAGS.patch b/x11/xorg-server-1.18/files/5000-sdksyms.sh-Use-CPPFLAGS-not-CFLAGS.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..1d8bf8b
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/x11/xorg-server-1.18/files/5000-sdksyms.sh-Use-CPPFLAGS-not-CFLAGS.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,41 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From da0dc81ea081657dba3ba492359593ba40d7245a Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Jeremy Huddleston <jeremyhu@apple.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Fri, 13 Jan 2012 12:00:57 -0800
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 5000/5005] sdksyms.sh: Use CPPFLAGS, not CFLAGS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+CFLAGS can include flags which are not useful to the preprocessor
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+or can even cause it to fail.  This fixes a build issue on darwin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+when building for more than one architecture.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Reviewed-by: Keith Packard <keithp@keithp.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ hw/xfree86/Makefile.am | 5 ++---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 2 insertions(+), 3 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/hw/xfree86/Makefile.am b/hw/xfree86/Makefile.am
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 85bd0be..6de7c10 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/hw/xfree86/Makefile.am
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/hw/xfree86/Makefile.am
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -48,8 +48,7 @@ DIST_SUBDIRS = common ddc i2c x86emu int10 fbdevhw os-support \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bin_PROGRAMS = Xorg
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ nodist_Xorg_SOURCES = sdksyms.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-AM_CFLAGS = $(DIX_CFLAGS) @XORG_CFLAGS@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-AM_CPPFLAGS = $(XORG_INCS) -I$(srcdir)/parser \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++AM_CPPFLAGS = $(DIX_CFLAGS) @XORG_CFLAGS@ $(XORG_INCS) -I$(srcdir)/parser \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   -I$(srcdir)/ddc -I$(srcdir)/i2c -I$(srcdir)/modes -I$(srcdir)/ramdac \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   -I$(srcdir)/dri -I$(srcdir)/dri2 -I$(top_srcdir)/dri3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -137,7 +136,7 @@ CLEANFILES = sdksyms.c sdksyms.dep Xorg.sh
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ EXTRA_DIST += sdksyms.sh
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sdksyms.dep sdksyms.c: sdksyms.sh
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  $(AM_V_GEN)CPP='$(CPP)' AWK='$(AWK)' $(SHELL) $(srcdir)/sdksyms.sh $(top_srcdir) $(CFLAGS) $(AM_CFLAGS) $(AM_CPPFLAGS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  $(AM_V_GEN)CPP='$(CPP)' AWK='$(AWK)' $(SHELL) $(srcdir)/sdksyms.sh $(top_srcdir) $(CPPFLAGS) $(AM_CPPFLAGS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ SDKSYMS_DEP = sdksyms.dep
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -include $(SDKSYMS_DEP)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-- 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+2.8.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/x11/xorg-server-1.18/files/5001-Revert-dix-Restore-PaintWindow-screen-hook.patch b/x11/xorg-server-1.18/files/5001-Revert-dix-Restore-PaintWindow-screen-hook.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..f944366
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/x11/xorg-server-1.18/files/5001-Revert-dix-Restore-PaintWindow-screen-hook.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,348 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 1d3dba846a7e51608b71797e7510d114555bfcd3 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Sat, 26 Dec 2015 10:56:52 -0800
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 5001/5005] Revert "dix: Restore PaintWindow screen hook"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This reverts commit cbd3cfbad3f07b20e90ea9498110f255813eb441.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ composite/compwindow.c          |  2 +-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dix/window.c                    |  4 ++--
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ hw/xquartz/quartz.c             |  4 ++--
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ hw/xwin/winrandr.c              |  2 +-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ include/scrnintstr.h            |  5 -----
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ mi/miexpose.c                   | 32 +++++++++++++++++++++++++++-----
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ mi/mioverlay.c                  | 11 +++++------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ mi/miscrinit.c                  |  1 -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ mi/miwindow.c                   |  6 ++----
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ miext/rootless/rootlessCommon.h |  1 -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ miext/rootless/rootlessScreen.c |  3 +--
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ miext/rootless/rootlessWindow.c | 23 +----------------------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ miext/rootless/rootlessWindow.h |  1 -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 13 files changed, 42 insertions(+), 53 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/composite/compwindow.c b/composite/compwindow.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 344138a..77bdfa2 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/composite/compwindow.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/composite/compwindow.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -104,7 +104,7 @@ compRepaintBorder(ClientPtr pClient, void *closure)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         RegionNull(&exposed);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         RegionSubtract(&exposed, &pWindow->borderClip, &pWindow->winSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        pWindow->drawable.pScreen->PaintWindow(pWindow, &exposed, PW_BORDER);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        miPaintWindow(pWindow, &exposed, PW_BORDER);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         RegionUninit(&exposed);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return TRUE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/dix/window.c b/dix/window.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index ead4dc2..6f31396 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/dix/window.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/dix/window.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1592,7 +1592,7 @@ ChangeWindowAttributes(WindowPtr pWin, Mask vmask, XID *vlist, ClientPtr client)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         RegionNull(&exposed);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         RegionSubtract(&exposed, &pWin->borderClip, &pWin->winSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        pWin->drawable.pScreen->PaintWindow(pWin, &exposed, PW_BORDER);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        miPaintWindow(pWin, &exposed, PW_BORDER);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         RegionUninit(&exposed);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return error;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -3159,7 +3159,7 @@ dixSaveScreens(ClientPtr client, int on, int mode)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 /* make it look like screen saver is off, so that
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                  * NotClippedByChildren will compute a clip list
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                 * for the root window, so PaintWindow works
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                 * for the root window, so miPaintWindow works
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                  */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 screenIsSaved = SCREEN_SAVER_OFF;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 (*pWin->drawable.pScreen->MoveWindow) (pWin,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/hw/xquartz/quartz.c b/hw/xquartz/quartz.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index c8b6f96..2def8e3 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/hw/xquartz/quartz.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/hw/xquartz/quartz.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -300,8 +300,8 @@ QuartzUpdateScreens(void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     quartzProcs->UpdateScreen(pScreen);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    /* PaintWindow needs to be called after RootlessUpdateScreenPixmap (from xprUpdateScreen) */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    pScreen->PaintWindow(pRoot, &pRoot->borderClip, PW_BACKGROUND);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    /* miPaintWindow needs to be called after RootlessUpdateScreenPixmap (from xprUpdateScreen) */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    miPaintWindow(pRoot, &pRoot->borderClip, PW_BACKGROUND);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     /* Tell RandR about the new size, so new connections get the correct info */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     RRScreenSizeNotify(pScreen);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/hw/xwin/winrandr.c b/hw/xwin/winrandr.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 1560199..73bbc9d 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/hw/xwin/winrandr.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/hw/xwin/winrandr.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -134,7 +134,7 @@ winDoRandRScreenSetSize(ScreenPtr pScreen,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     SetRootClip(pScreen, ROOT_CLIP_FULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     // and arrange for it to be repainted
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    pScreen->PaintWindow(pRoot, &pRoot->borderClip, PW_BACKGROUND);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    miPaintWindow(pRoot, &pRoot->borderClip, PW_BACKGROUND);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     /* Indicate that a screen size change took place */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     RRScreenSizeNotify(pScreen);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/include/scrnintstr.h b/include/scrnintstr.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 2e617c4..a627fe7 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/include/scrnintstr.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/include/scrnintstr.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -158,10 +158,6 @@ typedef void (*PostValidateTreeProcPtr) (WindowPtr /*pParent */ ,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ typedef void (*WindowExposuresProcPtr) (WindowPtr /*pWindow */ ,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                         RegionPtr /*prgn */);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-typedef void (*PaintWindowProcPtr) (WindowPtr /*pWindow*/,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                    RegionPtr /*pRegion*/,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                    int /*what*/);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ typedef void (*CopyWindowProcPtr) (WindowPtr /*pWindow */ ,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    DDXPointRec /*ptOldOrg */ ,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    RegionPtr /*prgnSrc */ );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -502,7 +498,6 @@ typedef struct _Screen {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ClearToBackgroundProcPtr ClearToBackground;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ClipNotifyProcPtr ClipNotify;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     RestackWindowProcPtr RestackWindow;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    PaintWindowProcPtr PaintWindow;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     /* Pixmap procedures */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/mi/miexpose.c b/mi/miexpose.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 148d1a6..f4c6e89 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/mi/miexpose.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/mi/miexpose.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -268,11 +268,10 @@ miHandleExposures(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         RegionTranslate(&rgnExposed, pDstDrawable->x, pDstDrawable->y);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         if (extents) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            /* PaintWindow doesn't clip, so we have to */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            /* miPaintWindow doesn't clip, so we have to */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             RegionIntersect(&rgnExposed, &rgnExposed, &pWin->clipList);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        pDstDrawable->pScreen->PaintWindow((WindowPtr) pDstDrawable,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                           &rgnExposed, PW_BACKGROUND);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        miPaintWindow((WindowPtr) pDstDrawable, &rgnExposed, PW_BACKGROUND);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         if (extents) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             RegionReset(&rgnExposed, &expBox);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -384,14 +383,16 @@ miWindowExposures(WindowPtr pWin, RegionPtr prgn)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+              * work overall, on both client and server.  This is cheating, but
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+              * isn't prohibited by the protocol ("spontaneous combustion" :-).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+              */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            BoxRec box = *RegionExtents(prgn);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            BoxRec box;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            box = *RegionExtents(prgn);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             exposures = &expRec;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             RegionInit(exposures, &box, 1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             RegionReset(prgn, &box);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             /* miPaintWindow doesn't clip, so we have to */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             RegionIntersect(prgn, prgn, &pWin->clipList);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        pWin->drawable.pScreen->PaintWindow(pWin, prgn, PW_BACKGROUND);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        miPaintWindow(pWin, prgn, PW_BACKGROUND);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         if (clientInterested)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             miSendExposures(pWin, exposures,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                             pWin->drawable.x, pWin->drawable.y);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -401,6 +402,14 @@ miWindowExposures(WindowPtr pWin, RegionPtr prgn)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef ROOTLESS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/* Ugly, ugly, but we lost our hooks into miPaintWindow... =/ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++void RootlessSetPixmapOfAncestors(WindowPtr pWin);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++void RootlessStartDrawing(WindowPtr pWin);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++void RootlessDamageRegion(WindowPtr pWin, RegionPtr prgn);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++Bool IsFramedWindow(WindowPtr pWin);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ miPaintWindow(WindowPtr pWin, RegionPtr prgn, int what)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -428,6 +437,19 @@ miPaintWindow(WindowPtr pWin, RegionPtr prgn, int what)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     Bool solid = TRUE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     DrawablePtr drawable = &pWin->drawable;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef ROOTLESS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (IsFramedWindow(pWin)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        RootlessStartDrawing(pWin);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        RootlessDamageRegion(pWin, prgn);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (pWin->backgroundState == ParentRelative) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if ((what == PW_BACKGROUND) ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                (what == PW_BORDER && !pWin->borderIsPixel))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                RootlessSetPixmapOfAncestors(pWin);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (what == PW_BACKGROUND) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         while (pWin->backgroundState == ParentRelative)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             pWin = pWin->parent;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/mi/mioverlay.c b/mi/mioverlay.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index b8b7a5b..a2715e9 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/mi/mioverlay.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/mi/mioverlay.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -844,8 +844,8 @@ miOverlayHandleExposures(WindowPtr pWin)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if ((mival = pTree->valdata)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 if (!((*pPriv->InOverlay) (pTree->pWin))) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     if (RegionNotEmpty(&mival->borderExposed)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                        pScreen->PaintWindow(pTree->pWin, &mival->borderExposed,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                             PW_BORDER);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        miPaintWindow(pTree->pWin, &mival->borderExposed,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                      PW_BORDER);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     RegionUninit(&mival->borderExposed);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -883,8 +883,7 @@ miOverlayHandleExposures(WindowPtr pWin)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 if (RegionNotEmpty(&val->after.borderExposed)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                    pScreen->PaintWindow(pChild, &val->after.borderExposed,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                         PW_BORDER);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    miPaintWindow(pChild, &val->after.borderExposed, PW_BORDER);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 (*WindowExposures) (pChild, &val->after.exposed);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1008,7 +1007,7 @@ miOverlayWindowExposures(WindowPtr pWin, RegionPtr prgn)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 RegionIntersect(prgn, prgn, &pWin->clipList);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        pScreen->PaintWindow(pWin, prgn, PW_BACKGROUND);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        miPaintWindow(pWin, prgn, PW_BACKGROUND);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         if (clientInterested)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             miSendExposures(pWin, exposures,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                             pWin->drawable.x, pWin->drawable.y);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1607,7 +1606,7 @@ miOverlayClearToBackground(WindowPtr pWin,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (generateExposures)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         (*pScreen->WindowExposures) (pWin, &reg);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     else if (pWin->backgroundState != None)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        pScreen->PaintWindow(pWin, &reg, PW_BACKGROUND);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        miPaintWindow(pWin, &reg, PW_BACKGROUND);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     RegionUninit(&reg);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/mi/miscrinit.c b/mi/miscrinit.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 9c6af0d..b53c7e4 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/mi/miscrinit.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/mi/miscrinit.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -253,7 +253,6 @@ miScreenInit(ScreenPtr pScreen, void *pbits,  /* pointer to screen bits */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     pScreen->ClearToBackground = miClearToBackground;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     pScreen->ClipNotify = (ClipNotifyProcPtr) 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     pScreen->RestackWindow = (RestackWindowProcPtr) 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    pScreen->PaintWindow = miPaintWindow;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     /* CreatePixmap, DestroyPixmap */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     /* RealizeFont, UnrealizeFont */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     /* CreateGC */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/mi/miwindow.c b/mi/miwindow.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 39c279e..2fc7cfb 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/mi/miwindow.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/mi/miwindow.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -113,7 +113,7 @@ miClearToBackground(WindowPtr pWin,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (generateExposures)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         (*pWin->drawable.pScreen->WindowExposures) (pWin, &reg);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     else if (pWin->backgroundState != None)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        pWin->drawable.pScreen->PaintWindow(pWin, &reg, PW_BACKGROUND);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        miPaintWindow(pWin, &reg, PW_BACKGROUND);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     RegionUninit(&reg);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -219,9 +219,7 @@ miHandleValidateExposures(WindowPtr pWin)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     while (1) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         if ((val = pChild->valdata)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if (RegionNotEmpty(&val->after.borderExposed))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                pWin->drawable.pScreen->PaintWindow(pChild,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                                    &val->after.borderExposed,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                                    PW_BORDER);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                miPaintWindow(pChild, &val->after.borderExposed, PW_BORDER);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             RegionUninit(&val->after.borderExposed);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             (*WindowExposures) (pChild, &val->after.exposed);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             RegionUninit(&val->after.exposed);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/miext/rootless/rootlessCommon.h b/miext/rootless/rootlessCommon.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index c3fa2a2..7fdea22 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/miext/rootless/rootlessCommon.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/miext/rootless/rootlessCommon.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -94,7 +94,6 @@ typedef struct _RootlessScreenRec {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ChangeBorderWidthProcPtr ChangeBorderWidth;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     PositionWindowProcPtr PositionWindow;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ChangeWindowAttributesProcPtr ChangeWindowAttributes;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    PaintWindowProcPtr PaintWindow;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     CreateGCProcPtr CreateGC;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     CopyWindowProcPtr CopyWindow;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/miext/rootless/rootlessScreen.c b/miext/rootless/rootlessScreen.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 4716564..6226ee8 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/miext/rootless/rootlessScreen.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/miext/rootless/rootlessScreen.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -473,7 +473,7 @@ expose_1(WindowPtr pWin)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (!pWin->realized)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    pWin->drawable.pScreen->PaintWindow(pWin, &pWin->borderClip, PW_BACKGROUND);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    miPaintWindow(pWin, &pWin->borderClip, PW_BACKGROUND);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     /* FIXME: comments in windowstr.h indicate that borderClip doesn't
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        include subwindow visibility. But I'm not so sure.. so we may
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -669,7 +669,6 @@ RootlessWrap(ScreenPtr pScreen)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     WRAP(CloseScreen);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     WRAP(CreateGC);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     WRAP(CopyWindow);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    WRAP(PaintWindow);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     WRAP(GetImage);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     WRAP(SourceValidate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     WRAP(CreateWindow);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/miext/rootless/rootlessWindow.c b/miext/rootless/rootlessWindow.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index e304299..3240acc 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/miext/rootless/rootlessWindow.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/miext/rootless/rootlessWindow.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -720,7 +720,7 @@ RootlessResizeCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  * RootlessCopyWindow
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  *  Update *new* location of window. Old location is redrawn with
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- *  PaintWindow. Cloned from fbCopyWindow.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *  miPaintWindow. Cloned from fbCopyWindow.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  *  The original always draws on the root pixmap, which we don't have.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  *  Instead, draw on the parent window's pixmap.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -794,27 +794,6 @@ RootlessCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     RL_DEBUG_MSG("copywindowFB end\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-void
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-RootlessPaintWindow(WindowPtr pWin, RegionPtr prgn, int what)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    ScreenPtr pScreen = pWin->drawable.pScreen;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if (IsFramedWindow(pWin)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        RootlessStartDrawing(pWin);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        RootlessDamageRegion(pWin, prgn);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        if (pWin->backgroundState == ParentRelative) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            if ((what == PW_BACKGROUND) ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                (what == PW_BORDER && !pWin->borderIsPixel))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                RootlessSetPixmapOfAncestors(pWin);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    SCREEN_UNWRAP(pScreen, PaintWindow);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    pScreen->PaintWindow(pWin, prgn, what);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    SCREEN_WRAP(pScreen, PaintWindow);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  * Window resize procedures
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/miext/rootless/rootlessWindow.h b/miext/rootless/rootlessWindow.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 4fd34d5..d3955fc 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/miext/rootless/rootlessWindow.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/miext/rootless/rootlessWindow.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -48,7 +48,6 @@ Bool RootlessUnrealizeWindow(WindowPtr pWin);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void RootlessRestackWindow(WindowPtr pWin, WindowPtr pOldNextSib);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void RootlessCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                         RegionPtr prgnSrc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-void RootlessPaintWindow(WindowPtr pWin, RegionPtr prgn, int what);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void RootlessMoveWindow(WindowPtr pWin, int x, int y, WindowPtr pSib,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                         VTKind kind);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void RootlessResizeWindow(WindowPtr pWin, int x, int y, unsigned int w,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-- 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+2.8.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/x11/xorg-server-1.18/files/5002-Workaround-the-GC-clipping-problem-in-miPaintWindow-.patch b/x11/xorg-server-1.18/files/5002-Workaround-the-GC-clipping-problem-in-miPaintWindow-.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..7c1ae87
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/x11/xorg-server-1.18/files/5002-Workaround-the-GC-clipping-problem-in-miPaintWindow-.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,158 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From d6058fa4f68b68dff95c5ce826f9b9b498df3951 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Jeremy Huddleston <jeremyhu@apple.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Fri, 30 Apr 2010 13:08:25 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 5002/5005] Workaround the GC clipping problem in miPaintWindow
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ and add some debugging output.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ mi/miexpose.c | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++++------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 90 insertions(+), 9 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/mi/miexpose.c b/mi/miexpose.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index f4c6e89..fe3bcb1 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/mi/miexpose.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/mi/miexpose.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -408,7 +408,8 @@ void RootlessSetPixmapOfAncestors(WindowPtr pWin);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void RootlessStartDrawing(WindowPtr pWin);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void RootlessDamageRegion(WindowPtr pWin, RegionPtr prgn);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Bool IsFramedWindow(WindowPtr pWin);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include "../fb/fb.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ miPaintWindow(WindowPtr pWin, RegionPtr prgn, int what)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -437,20 +438,32 @@ miPaintWindow(WindowPtr pWin, RegionPtr prgn, int what)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     Bool solid = TRUE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     DrawablePtr drawable = &pWin->drawable;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef XQUARTZ_CLIP_DEBUG
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ErrorF("START %d BS %d (pR = %ld)\n", what, pWin->backgroundState, ParentRelative);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ErrorF("      Rgn: %d %d %d %d\n", prgn->extents.x1, prgn->extents.y1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                 prgn->extents.x2 - prgn->extents.x1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                 prgn->extents.y2 - prgn->extents.y1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ErrorF("      Win: %d %d (%d %d) %d %d\n", pWin->origin.x, pWin->origin.y,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                         pWin->winSize.extents.x1, pWin->winSize.extents.y1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                         pWin->winSize.extents.x2 - pWin->winSize.extents.x1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                         pWin->winSize.extents.y2 - pWin->winSize.extents.y1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ErrorF("     Draw: %d %d %d %d\n", pWin->drawable.x, pWin->drawable.y,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                 pWin->drawable.width, pWin->drawable.height);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (what == PW_BACKGROUND)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifdef ROOTLESS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if (IsFramedWindow(pWin)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        RootlessStartDrawing(pWin);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        RootlessDamageRegion(pWin, prgn);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if(IsFramedWindow(pWin)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            RootlessStartDrawing(pWin);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            RootlessDamageRegion(pWin, prgn);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        if (pWin->backgroundState == ParentRelative) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            if ((what == PW_BACKGROUND) ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                (what == PW_BORDER && !pWin->borderIsPixel))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if(pWin->backgroundState == ParentRelative) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 RootlessSetPixmapOfAncestors(pWin);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if (what == PW_BACKGROUND) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         while (pWin->backgroundState == ParentRelative)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             pWin = pWin->parent;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -475,6 +488,18 @@ miPaintWindow(WindowPtr pWin, RegionPtr prgn, int what)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         PixmapPtr pixmap;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef ROOTLESS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if(IsFramedWindow(pWin)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      RootlessStartDrawing(pWin);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      RootlessDamageRegion(pWin, prgn);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      if(!pWin->borderIsPixel &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          pWin->backgroundState == ParentRelative) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          RootlessSetPixmapOfAncestors(pWin);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         fill = pWin->border;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         solid = pWin->borderIsPixel;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -484,6 +509,11 @@ miPaintWindow(WindowPtr pWin, RegionPtr prgn, int what)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         pixmap = (*pScreen->GetWindowPixmap) ((WindowPtr) drawable);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         drawable = &pixmap->drawable;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef XQUARTZ_CLIP_DEBUG
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        ErrorF("     Draw: %d %d %d %d\n",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++               drawable->x, drawable->y, drawable->width, drawable->height);    
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         while (pWin->backgroundState == ParentRelative)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             pWin = pWin->parent;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -550,6 +580,57 @@ miPaintWindow(WindowPtr pWin, RegionPtr prgn, int what)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ChangeGC(NullClient, pGC, gcmask, gcval);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ValidateGC(drawable, pGC);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef XQUARTZ_CLIP_DEBUG
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ErrorF("       GC: %d %d %d %d\n",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++     pGC->pCompositeClip->extents.x1, pGC->pCompositeClip->extents.y1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++     pGC->pCompositeClip->extents.x2 - pGC->pCompositeClip->extents.x1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++     pGC->pCompositeClip->extents.y2 - pGC->pCompositeClip->extents.y1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef XQUARTZ
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    /* Looks like our clipping isn't set right for some reason:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++     * http://xquartz.macosforge.org/trac/ticket/290
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++     */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if(what == PW_BORDER) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if(solid) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      fbFillRegionSolid(&pWin->drawable,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        prgn,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        0,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        fbReplicatePixel(fill.pixel,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                         pWin->drawable.bitsPerPixel));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      fbFillRegionSolid(drawable,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        prgn,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        0,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        fbReplicatePixel(fill.pixel,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                         drawable->bitsPerPixel));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  pGC->pCompositeClip->extents.x1 += prgn->extents.x1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  pGC->pCompositeClip->extents.y1 += prgn->extents.y1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  pGC->pCompositeClip->extents.x2 += prgn->extents.x1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  pGC->pCompositeClip->extents.y2 += prgn->extents.y1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if(pGC->pCompositeClip->extents.x2 > drawable->pScreen->width)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      pGC->pCompositeClip->extents.x2 = drawable->pScreen->width;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if(pGC->pCompositeClip->extents.y2 > drawable->pScreen->height)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      pGC->pCompositeClip->extents.y2 = drawable->pScreen->height;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef XQUARTZ_CLIP_DEBUG
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ErrorF("       GC: %d %d %d %d\n",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++     pGC->pCompositeClip->extents.x1, pGC->pCompositeClip->extents.y1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++     pGC->pCompositeClip->extents.x2 - pGC->pCompositeClip->extents.x1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++     pGC->pCompositeClip->extents.y2 - pGC->pCompositeClip->extents.y1);    
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     numRects = RegionNumRects(prgn);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     pbox = RegionRects(prgn);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     for (i = numRects; --i >= 0; pbox++, prect++) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-- 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+2.8.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/x11/xorg-server-1.18/files/5003-Use-old-miTrapezoids-and-miTriangles-routines.patch b/x11/xorg-server-1.18/files/5003-Use-old-miTrapezoids-and-miTriangles-routines.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..8423ce12
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/x11/xorg-server-1.18/files/5003-Use-old-miTrapezoids-and-miTriangles-routines.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,289 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 2850855f560451bb64dd5af3f005c6988961336e Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Sat, 2 Nov 2013 11:00:23 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 5003/5005] Use old miTrapezoids and miTriangles routines
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Reverts commits:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    788ccb9a8bcf6a4fb4054c507111eec3338fb969
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    566f1931ee2916269e164e114bffaf2da1d039d1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+http://xquartz.macosforge.org/trac/ticket/525
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ fb/fbpict.c     |   2 -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ render/mipict.c |   4 +-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ render/mipict.h |  27 ++++++++++++++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ render/mitrap.c | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ render/mitri.c  |  61 +++++++++++++++++++++++++++++++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 5 files changed, 201 insertions(+), 4 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/fb/fbpict.c b/fb/fbpict.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 7ea0b66..434d890 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/fb/fbpict.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/fb/fbpict.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -508,10 +508,8 @@ fbPictureInit(ScreenPtr pScreen, PictFormatPtr formats, int nformats)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ps->UnrealizeGlyph = fbUnrealizeGlyph;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ps->CompositeRects = miCompositeRects;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ps->RasterizeTrapezoid = fbRasterizeTrapezoid;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    ps->Trapezoids = fbTrapezoids;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ps->AddTraps = fbAddTraps;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ps->AddTriangles = fbAddTriangles;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    ps->Triangles = fbTriangles;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return TRUE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/render/mipict.c b/render/mipict.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 4b85512..a39eb2c 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/render/mipict.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/render/mipict.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -575,8 +575,8 @@ miPictureInit(ScreenPtr pScreen, PictFormatPtr formats, int nformats)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ps->Composite = 0;          /* requires DDX support */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ps->Glyphs = miGlyphs;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ps->CompositeRects = miCompositeRects;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    ps->Trapezoids = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    ps->Triangles = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ps->Trapezoids = miTrapezoids;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ps->Triangles = miTriangles;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ps->RasterizeTrapezoid = 0; /* requires DDX support */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ps->AddTraps = 0;           /* requires DDX support */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/render/mipict.h b/render/mipict.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 3241be4..8ee7a8a 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/render/mipict.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/render/mipict.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -102,9 +102,36 @@ miCompositeRects(CARD8 op,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                  xRenderColor * color, int nRect, xRectangle *rects);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern _X_EXPORT void
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++miTriangles (CARD8            op,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       PicturePtr     pSrc,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       PicturePtr     pDst,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       PictFormatPtr  maskFormat,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       INT16          xSrc,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       INT16          ySrc,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       int            ntri,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       xTriangle      *tris);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++extern _X_EXPORT PicturePtr
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++miCreateAlphaPicture (ScreenPtr            pScreen, 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                     PicturePtr    pDst,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                     PictFormatPtr pPictFormat,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                     CARD16        width,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                     CARD16        height);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++extern _X_EXPORT void
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  miTrapezoidBounds(int ntrap, xTrapezoid * traps, BoxPtr box);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern _X_EXPORT void
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++miTrapezoids (CARD8        op,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++             PicturePtr    pSrc,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++             PicturePtr    pDst,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++             PictFormatPtr maskFormat,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++             INT16         xSrc,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++             INT16         ySrc,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++             int           ntrap,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++             xTrapezoid    *traps);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++extern _X_EXPORT void
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  miPointFixedBounds(int npoint, xPointFixed * points, BoxPtr bounds);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern _X_EXPORT void
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/render/mitrap.c b/render/mitrap.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 17b6dcd..71c1857 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/render/mitrap.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/render/mitrap.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -34,6 +34,55 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "picturestr.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "mipict.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++PicturePtr
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++miCreateAlphaPicture (ScreenPtr       pScreen, 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                PicturePtr    pDst,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                PictFormatPtr pPictFormat,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                CARD16        width,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                CARD16        height)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    PixmapPtr         pPixmap;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    PicturePtr        pPicture;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    GCPtr     pGC;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    int               error;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    xRectangle        rect;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (width > 32767 || height > 32767)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (!pPictFormat)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (pDst->polyEdge == PolyEdgeSharp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      pPictFormat = PictureMatchFormat (pScreen, 1, PICT_a1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      pPictFormat = PictureMatchFormat (pScreen, 8, PICT_a8);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (!pPictFormat)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    pPixmap = (*pScreen->CreatePixmap) (pScreen, width, height, 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                  pPictFormat->depth, 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (!pPixmap)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    pGC = GetScratchGC (pPixmap->drawable.depth, pScreen);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (!pGC)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  (*pScreen->DestroyPixmap) (pPixmap);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ValidateGC (&pPixmap->drawable, pGC);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    rect.x = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    rect.y = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    rect.width = width;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    rect.height = height;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    (*pGC->ops->PolyFillRect)(&pPixmap->drawable, pGC, 1, &rect);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    FreeScratchGC (pGC);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    pPicture = CreatePicture (0, &pPixmap->drawable, pPictFormat,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        0, 0, serverClient, &error);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    (*pScreen->DestroyPixmap) (pPixmap);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return pPicture;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static xFixed
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ miLineFixedX(xLineFixed * l, xFixed y, Bool ceil)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -79,3 +128,65 @@ miTrapezoidBounds(int ntrap, xTrapezoid * traps, BoxPtr box)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             box->x2 = x2;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++void
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++miTrapezoids (CARD8        op,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++             PicturePtr    pSrc,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++             PicturePtr    pDst,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++             PictFormatPtr maskFormat,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++             INT16         xSrc,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++             INT16         ySrc,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++             int           ntrap,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++             xTrapezoid    *traps)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ScreenPtr          pScreen = pDst->pDrawable->pScreen;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    PictureScreenPtr    ps = GetPictureScreen(pScreen);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++     * Check for solid alpha add
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++     */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (op == PictOpAdd && miIsSolidAlpha (pSrc))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       for (; ntrap; ntrap--, traps++)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++           (*ps->RasterizeTrapezoid) (pDst, traps, 0, 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    } 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    else if (maskFormat)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       PicturePtr      pPicture;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       BoxRec          bounds;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       INT16           xDst, yDst;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       INT16           xRel, yRel;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       xDst = traps[0].left.p1.x >> 16;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       yDst = traps[0].left.p1.y >> 16;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       miTrapezoidBounds (ntrap, traps, &bounds);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       if (bounds.y1 >= bounds.y2 || bounds.x1 >= bounds.x2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++           return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       pPicture = miCreateAlphaPicture (pScreen, pDst, maskFormat,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                        bounds.x2 - bounds.x1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                        bounds.y2 - bounds.y1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       if (!pPicture)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++           return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       for (; ntrap; ntrap--, traps++)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++           (*ps->RasterizeTrapezoid) (pPicture, traps, 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                      -bounds.x1, -bounds.y1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       xRel = bounds.x1 + xSrc - xDst;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       yRel = bounds.y1 + ySrc - yDst;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       CompositePicture (op, pSrc, pPicture, pDst,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                         xRel, yRel, 0, 0, bounds.x1, bounds.y1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                         bounds.x2 - bounds.x1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                         bounds.y2 - bounds.y1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       FreePicture (pPicture, 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       if (pDst->polyEdge == PolyEdgeSharp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++           maskFormat = PictureMatchFormat (pScreen, 1, PICT_a1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++           maskFormat = PictureMatchFormat (pScreen, 8, PICT_a8);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       for (; ntrap; ntrap--, traps++)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++           miTrapezoids (op, pSrc, pDst, maskFormat, xSrc, ySrc, 1, traps);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/render/mitri.c b/render/mitri.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 922f22a..bdca9ca 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/render/mitri.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/render/mitri.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -65,3 +65,64 @@ miTriangleBounds(int ntri, xTriangle * tris, BoxPtr bounds)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     miPointFixedBounds(ntri * 3, (xPointFixed *) tris, bounds);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++void
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++miTriangles (CARD8            op,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       PicturePtr     pSrc,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       PicturePtr     pDst,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       PictFormatPtr  maskFormat,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       INT16          xSrc,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       INT16          ySrc,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       int            ntri,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       xTriangle      *tris)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ScreenPtr             pScreen = pDst->pDrawable->pScreen;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    PictureScreenPtr    ps = GetPictureScreen(pScreen);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++     * Check for solid alpha add
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++     */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (op == PictOpAdd && miIsSolidAlpha (pSrc))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  (*ps->AddTriangles) (pDst, 0, 0, ntri, tris);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    else if (maskFormat)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  BoxRec          bounds;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  PicturePtr      pPicture;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  INT16           xDst, yDst;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  INT16           xRel, yRel;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  xDst = tris[0].p1.x >> 16;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  yDst = tris[0].p1.y >> 16;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  miTriangleBounds (ntri, tris, &bounds);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (bounds.x2 <= bounds.x1 || bounds.y2 <= bounds.y1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  pPicture = miCreateAlphaPicture (pScreen, pDst, maskFormat,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                   bounds.x2 - bounds.x1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                   bounds.y2 - bounds.y1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (!pPicture)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  (*ps->AddTriangles) (pPicture, -bounds.x1, -bounds.y1, ntri, tris);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  xRel = bounds.x1 + xSrc - xDst;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  yRel = bounds.y1 + ySrc - yDst;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  CompositePicture (op, pSrc, pPicture, pDst,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    xRel, yRel, 0, 0, bounds.x1, bounds.y1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    bounds.x2 - bounds.x1, bounds.y2 - bounds.y1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  FreePicture (pPicture, 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (pDst->polyEdge == PolyEdgeSharp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      maskFormat = PictureMatchFormat (pScreen, 1, PICT_a1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      maskFormat = PictureMatchFormat (pScreen, 8, PICT_a8);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  for (; ntri; ntri--, tris++)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      miTriangles (op, pSrc, pDst, maskFormat, xSrc, ySrc, 1, tris);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-- 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+2.8.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/x11/xorg-server-1.18/files/5004-fb-Revert-fb-changes-that-broke-XQuartz.patch b/x11/xorg-server-1.18/files/5004-fb-Revert-fb-changes-that-broke-XQuartz.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..8ed90d8
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/x11/xorg-server-1.18/files/5004-fb-Revert-fb-changes-that-broke-XQuartz.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,320 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 055a7bb8f22eb94a35cae6224d109daa435d288d Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Jeremy Huddleston <jeremyhu@apple.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Fri, 12 Feb 2010 19:48:52 -0800
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 5004/5005] fb: Revert fb changes that broke XQuartz
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+http://bugs.freedesktop.org/show_bug.cgi?id=26124
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Revert "Fix source pictures getting random transforms after 2d6a8f668342a5190cdf43b5."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Revert "fb: Adjust transform or composite coordinates for pixman operations"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+http://bugs.freedesktop.org/26124
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This reverts commit a72c65e9176c51de95db2fdbf4c5d946a4911695.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This reverts commit a6bd5d2e482a5aa84acb3d4932e2a166d8670ef1.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ fb/fb.h     |  3 +--
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ fb/fbpict.c | 82 ++++++++++++++++++-------------------------------------------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ fb/fbtrap.c | 43 ++++++++++++++------------------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 3 files changed, 43 insertions(+), 85 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/fb/fb.h b/fb/fb.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index c687aa7..256a1ee 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/fb/fb.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/fb/fb.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1321,8 +1321,7 @@ fbFillRegionSolid(DrawablePtr pDrawable,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                   RegionPtr pRegion, FbBits and, FbBits xor);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern _X_EXPORT pixman_image_t *image_from_pict(PicturePtr pict,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                                 Bool has_clip,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                                 int *xoff, int *yoff);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                                 Bool has_clip);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern _X_EXPORT void free_pixman_pict(PicturePtr, pixman_image_t *);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/fb/fbpict.c b/fb/fbpict.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 434d890..be8274b 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/fb/fbpict.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/fb/fbpict.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -46,23 +46,18 @@ fbComposite(CARD8 op,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             INT16 yMask, INT16 xDst, INT16 yDst, CARD16 width, CARD16 height)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     pixman_image_t *src, *mask, *dest;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    int src_xoff, src_yoff;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    int msk_xoff, msk_yoff;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    int dst_xoff, dst_yoff;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     miCompositeSourceValidate(pSrc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (pMask)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         miCompositeSourceValidate(pMask);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    src = image_from_pict(pSrc, FALSE, &src_xoff, &src_yoff);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    mask = image_from_pict(pMask, FALSE, &msk_xoff, &msk_yoff);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    dest = image_from_pict(pDst, TRUE, &dst_xoff, &dst_yoff);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    src = image_from_pict(pSrc, TRUE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    mask = image_from_pict(pMask, TRUE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    dest = image_from_pict(pDst, TRUE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (src && dest && !(pMask && !mask)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         pixman_image_composite(op, src, mask, dest,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                               xSrc + src_xoff, ySrc + src_yoff,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                               xMask + msk_xoff, yMask + msk_yoff,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                               xDst + dst_xoff, yDst + dst_yoff, width, height);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                               xSrc, ySrc, xMask, yMask, xDst, yDst,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                               width, height);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     free_pixman_pict(pSrc, src);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -289,20 +284,22 @@ create_conical_gradient_image(PictGradient * gradient)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static pixman_image_t *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-create_bits_picture(PicturePtr pict, Bool has_clip, int *xoff, int *yoff)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++create_bits_picture(PicturePtr pict, Bool has_clip)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    PixmapPtr pixmap;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     FbBits *bits;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     FbStride stride;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    int bpp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    int bpp, xoff, yoff;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     pixman_image_t *image;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    fbGetDrawablePixmap(pict->pDrawable, pixmap, *xoff, *yoff);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    fbGetPixmapBitsData(pixmap, bits, stride, bpp);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    fbGetDrawable (pict->pDrawable, bits, stride, bpp, xoff, yoff);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    bits = (FbBits*)((CARD8*)bits +
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                     (pict->pDrawable->y + yoff) * stride * sizeof(FbBits) +
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                     (pict->pDrawable->x + xoff) * (bpp / 8));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     image = pixman_image_create_bits((pixman_format_code_t) pict->format,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                     pixmap->drawable.width,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                     pixmap->drawable.height, (uint32_t *) bits,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                     pict->pDrawable->width,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                     pict->pDrawable->height, (uint32_t *) bits,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                      stride * sizeof(FbStride));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (!image)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -321,28 +318,21 @@ create_bits_picture(PicturePtr pict, Bool has_clip, int *xoff, int *yoff)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         if (pict->clientClip)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             pixman_image_set_has_client_clip(image, TRUE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        if (*xoff || *yoff)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            pixman_region_translate(pict->pCompositeClip, *xoff, *yoff);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        pixman_region_translate (pict->pCompositeClip, - pict->pDrawable->x, - pict->pDrawable->y);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         pixman_image_set_clip_region(image, pict->pCompositeClip);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        if (*xoff || *yoff)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            pixman_region_translate(pict->pCompositeClip, -*xoff, -*yoff);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        pixman_region_translate (pict->pCompositeClip, pict->pDrawable->x, pict->pDrawable->y);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     /* Indexed table */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (pict->pFormat->index.devPrivate)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         pixman_image_set_indexed(image, pict->pFormat->index.devPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    /* Add in drawable origin to position within the image */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    *xoff += pict->pDrawable->x;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    *yoff += pict->pDrawable->y;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return image;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static pixman_image_t *image_from_pict_internal(PicturePtr pict, Bool has_clip,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                                int *xoff, int *yoff,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                                 Bool is_alpha_map);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static void image_destroy(pixman_image_t *image, void *data)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -351,32 +341,13 @@ static void image_destroy(pixman_image_t *image, void *data)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static void
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-set_image_properties(pixman_image_t * image, PicturePtr pict, Bool has_clip,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                     int *xoff, int *yoff, Bool is_alpha_map)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++set_image_properties(pixman_image_t * image, PicturePtr pict, Bool is_alpha_map)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     pixman_repeat_t repeat;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     pixman_filter_t filter;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (pict->transform) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        /* For source images, adjust the transform to account
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-         * for the drawable offset within the pixman image,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-         * then set the offset to 0 as it will be used
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-         * to compute positions within the transformed image.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-         */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        if (!has_clip) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            struct pixman_transform adjusted;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            adjusted = *pict->transform;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            pixman_transform_translate(&adjusted,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                       NULL,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                       pixman_int_to_fixed(*xoff),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                       pixman_int_to_fixed(*yoff));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            pixman_image_set_transform(image, &adjusted);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            *xoff = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            *yoff = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            pixman_image_set_transform(image, pict->transform);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        pixman_image_set_transform(image, pict->transform);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     switch (pict->repeatType) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -404,10 +375,8 @@ set_image_properties(pixman_image_t * image, PicturePtr pict, Bool has_clip,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      * as the alpha map for this operation
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (pict->alphaMap && !is_alpha_map) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        int alpha_xoff, alpha_yoff;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         pixman_image_t *alpha_map =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            image_from_pict_internal(pict->alphaMap, FALSE, &alpha_xoff,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                     &alpha_yoff, TRUE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            image_from_pict_internal(pict->alphaMap, TRUE, TRUE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         pixman_image_set_alpha_map(image, alpha_map, pict->alphaOrigin.x,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    pict->alphaOrigin.y);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -445,8 +414,7 @@ set_image_properties(pixman_image_t * image, PicturePtr pict, Bool has_clip,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static pixman_image_t *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-image_from_pict_internal(PicturePtr pict, Bool has_clip, int *xoff, int *yoff,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                         Bool is_alpha_map)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++image_from_pict_internal(PicturePtr pict, Bool has_clip, Bool is_alpha_map)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     pixman_image_t *image = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -454,7 +422,7 @@ image_from_pict_internal(PicturePtr pict, Bool has_clip, int *xoff, int *yoff,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (pict->pDrawable) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        image = create_bits_picture(pict, has_clip, xoff, yoff);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        image = create_bits_picture(pict, has_clip);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     else if (pict->pSourcePict) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         SourcePict *sp = pict->pSourcePict;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -472,19 +440,17 @@ image_from_pict_internal(PicturePtr pict, Bool has_clip, int *xoff, int *yoff,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             else if (sp->type == SourcePictTypeConical)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 image = create_conical_gradient_image(gradient);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        *xoff = *yoff = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (image)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        set_image_properties(image, pict, has_clip, xoff, yoff, is_alpha_map);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        set_image_properties (image, pict, is_alpha_map);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return image;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ pixman_image_t *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-image_from_pict(PicturePtr pict, Bool has_clip, int *xoff, int *yoff)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++image_from_pict (PicturePtr pict, Bool has_clip)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    return image_from_pict_internal(pict, has_clip, xoff, yoff, FALSE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return image_from_pict_internal (pict, has_clip, FALSE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/fb/fbtrap.c b/fb/fbtrap.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index bf82f8f..0145ce9 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/fb/fbtrap.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/fb/fbtrap.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -36,13 +36,12 @@ fbAddTraps(PicturePtr pPicture,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            INT16 x_off, INT16 y_off, int ntrap, xTrap * traps)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     pixman_image_t *image;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    int dst_xoff, dst_yoff;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if (!(image = image_from_pict(pPicture, FALSE, &dst_xoff, &dst_yoff)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    pixman_add_traps(image, x_off + dst_xoff, y_off + dst_yoff,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                     ntrap, (pixman_trap_t *) traps);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (!(image = image_from_pict (pPicture, FALSE)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    pixman_add_traps(image, x_off, y_off,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                     ntrap, (pixman_trap_t *)traps);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     free_pixman_pict(pPicture, image);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -52,13 +51,12 @@ fbRasterizeTrapezoid(PicturePtr pPicture,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                      xTrapezoid * trap, int x_off, int y_off)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     pixman_image_t *image;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    int dst_xoff, dst_yoff;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if (!(image = image_from_pict(pPicture, FALSE, &dst_xoff, &dst_yoff)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (!(image = image_from_pict (pPicture, FALSE)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    pixman_rasterize_trapezoid(image, (pixman_trapezoid_t *) trap,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                               x_off + dst_xoff, y_off + dst_yoff);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    pixman_rasterize_trapezoid(image, (pixman_trapezoid_t *)trap,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                               x_off, y_off);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     free_pixman_pict(pPicture, image);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -68,14 +66,12 @@ fbAddTriangles(PicturePtr pPicture,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                INT16 x_off, INT16 y_off, int ntri, xTriangle * tris)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     pixman_image_t *image;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    int dst_xoff, dst_yoff;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if (!(image = image_from_pict(pPicture, FALSE, &dst_xoff, &dst_yoff)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (!(image = image_from_pict (pPicture, FALSE)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    pixman_add_triangles(image,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                         dst_xoff + x_off, dst_yoff + y_off,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                         ntri, (pixman_triangle_t *) tris);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    pixman_add_triangles(image, x_off, y_off, ntri,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                         (pixman_triangle_t *)tris);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     free_pixman_pict(pPicture, image);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -98,13 +94,11 @@ fbShapes(CompositeShapesFunc composite,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          int16_t ySrc, int nshapes, int shape_size, const uint8_t * shapes)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     pixman_image_t *src, *dst;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    int src_xoff, src_yoff;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    int dst_xoff, dst_yoff;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     miCompositeSourceValidate(pSrc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    src = image_from_pict(pSrc, FALSE, &src_xoff, &src_yoff);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    dst = image_from_pict(pDst, TRUE, &dst_xoff, &dst_yoff);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    src = image_from_pict(pSrc, FALSE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    dst = image_from_pict(pDst, TRUE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (src && dst) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         pixman_format_code_t format;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -121,9 +115,8 @@ fbShapes(CompositeShapesFunc composite,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             for (i = 0; i < nshapes; ++i) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 composite(op, src, dst, format,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                          xSrc + src_xoff,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                          ySrc + src_yoff,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                          dst_xoff, dst_yoff, 1, shapes + i * shape_size);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          xSrc, ySrc, 0, 0, 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          1, shapes + i * shape_size);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -143,8 +136,8 @@ fbShapes(CompositeShapesFunc composite,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             composite(op, src, dst, format,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                      xSrc + src_xoff,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                      ySrc + src_yoff, dst_xoff, dst_yoff, nshapes, shapes);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                      xSrc, ySrc, 0, 0,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                      nshapes, shapes);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         DamageRegionProcessPending(pDst->pDrawable);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-- 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+2.8.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/x11/xorg-server-1.18/files/5005-fb-Revert-fb-changes-that-broke-XQuartz.patch b/x11/xorg-server-1.18/files/5005-fb-Revert-fb-changes-that-broke-XQuartz.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..1b88f8a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/x11/xorg-server-1.18/files/5005-fb-Revert-fb-changes-that-broke-XQuartz.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,243 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 3475655620bc51071f0ba9cbc30b39587d9b0b44 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Sat, 31 May 2014 13:14:20 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 5005/5005] fb: Revert fb changes that broke XQuartz
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    http://bugs.freedesktop.org/show_bug.cgi?id=26124
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Revert "Use new pixman_glyph_cache_t API that will be in pixman 0.28.0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Revert "fb: Fix origin of source picture in fbGlyphs"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Revert "fb: Publish fbGlyphs and fbUnrealizeGlyph"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This reverts commit 9cbcb5bd6a5360a128d15b77a02d8d3351f74366.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This reverts commit 983e30361f49a67252d0b5d82630e70724d69dbf.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This reverts commit 3c2c59eed3c68c0e5a93c38cf01eedad015e3157.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ fb/fb.h       |   3 --
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ fb/fbpict.c   | 149 +---------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ fb/fbpict.h   |  11 +----
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ fb/fbscreen.c |   1 -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 4 files changed, 2 insertions(+), 162 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/fb/fb.h b/fb/fb.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 256a1ee..8e87498 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/fb/fb.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/fb/fb.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1111,9 +1111,6 @@ extern _X_EXPORT void
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern _X_EXPORT Bool
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  fbPictureInit(ScreenPtr pScreen, PictFormatPtr formats, int nformats);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-extern _X_EXPORT void
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-fbDestroyGlyphCache(void);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  * fbpixmap.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/fb/fbpict.c b/fb/fbpict.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index be8274b..66dd633 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/fb/fbpict.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/fb/fbpict.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -65,152 +65,6 @@ fbComposite(CARD8 op,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     free_pixman_pict(pDst, dest);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-static pixman_glyph_cache_t *glyphCache;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-void
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-fbDestroyGlyphCache(void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if (glyphCache)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  pixman_glyph_cache_destroy (glyphCache);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  glyphCache = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-static void
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-fbUnrealizeGlyph(ScreenPtr pScreen,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-           GlyphPtr pGlyph)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if (glyphCache)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  pixman_glyph_cache_remove (glyphCache, pGlyph, NULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-void
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-fbGlyphs(CARD8 op,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-   PicturePtr pSrc,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-   PicturePtr pDst,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-   PictFormatPtr maskFormat,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-   INT16 xSrc,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-   INT16 ySrc, int nlist,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-   GlyphListPtr list,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-   GlyphPtr *glyphs)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#define N_STACK_GLYPHS 512
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    ScreenPtr pScreen = pDst->pDrawable->pScreen;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    pixman_glyph_t stack_glyphs[N_STACK_GLYPHS];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    pixman_glyph_t *pglyphs = stack_glyphs;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    pixman_image_t *srcImage, *dstImage;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    int srcXoff, srcYoff, dstXoff, dstYoff;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    GlyphPtr glyph;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    int n_glyphs;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    int x, y;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    int i, n;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    int xDst = list->xOff, yDst = list->yOff;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    miCompositeSourceValidate(pSrc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    n_glyphs = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    for (i = 0; i < nlist; ++i)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  n_glyphs += list[i].len;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if (!glyphCache)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  glyphCache = pixman_glyph_cache_create();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    pixman_glyph_cache_freeze (glyphCache);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if (n_glyphs > N_STACK_GLYPHS) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  if (!(pglyphs = xallocarray(n_glyphs, sizeof(pixman_glyph_t))))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      goto out;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    i = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    x = y = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    while (nlist--) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        x += list->xOff;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        y += list->yOff;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        n = list->len;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        while (n--) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      const void *g;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            glyph = *glyphs++;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      if (!(g = pixman_glyph_cache_lookup (glyphCache, glyph, NULL))) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-          pixman_image_t *glyphImage;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-          PicturePtr pPicture;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-          int xoff, yoff;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-          pPicture = GetGlyphPicture(glyph, pScreen);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-          if (!pPicture) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-              n_glyphs--;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-              goto next;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-          }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-          if (!(glyphImage = image_from_pict(pPicture, FALSE, &xoff, &yoff)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-              goto out;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-          g = pixman_glyph_cache_insert(glyphCache, glyph, NULL,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                        glyph->info.x,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                        glyph->info.y,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                        glyphImage);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-          free_pixman_pict(pPicture, glyphImage);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-          if (!g)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-              goto out;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      pglyphs[i].x = x;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      pglyphs[i].y = y;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      pglyphs[i].glyph = g;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      i++;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  next:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            x += glyph->info.xOff;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            y += glyph->info.yOff;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  list++;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if (!(srcImage = image_from_pict(pSrc, FALSE, &srcXoff, &srcYoff)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  goto out;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if (!(dstImage = image_from_pict(pDst, TRUE, &dstXoff, &dstYoff)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  goto out_free_src;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if (maskFormat) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  pixman_format_code_t format;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  pixman_box32_t extents;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  format = maskFormat->format | (maskFormat->depth << 24);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  pixman_glyph_get_extents(glyphCache, n_glyphs, pglyphs, &extents);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  pixman_composite_glyphs(op, srcImage, dstImage, format,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                          xSrc + srcXoff + extents.x1 - xDst, ySrc + srcYoff + extents.y1 - yDst,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                          extents.x1, extents.y1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                          extents.x1 + dstXoff, extents.y1 + dstYoff,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                          extents.x2 - extents.x1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                          extents.y2 - extents.y1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                          glyphCache, n_glyphs, pglyphs);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  pixman_composite_glyphs_no_mask(op, srcImage, dstImage,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                  xSrc + srcXoff - xDst, ySrc + srcYoff - yDst,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                  dstXoff, dstYoff,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                  glyphCache, n_glyphs, pglyphs);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    free_pixman_pict(pDst, dstImage);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-out_free_src:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    free_pixman_pict(pSrc, srcImage);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-out:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    pixman_glyph_cache_thaw(glyphCache);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if (pglyphs != stack_glyphs)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  free(pglyphs);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static pixman_image_t *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ create_solid_fill_image(PicturePtr pict)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -470,8 +324,7 @@ fbPictureInit(ScreenPtr pScreen, PictFormatPtr formats, int nformats)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return FALSE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ps = GetPictureScreen(pScreen);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ps->Composite = fbComposite;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    ps->Glyphs = fbGlyphs;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    ps->UnrealizeGlyph = fbUnrealizeGlyph;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ps->Glyphs = miGlyphs;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ps->CompositeRects = miCompositeRects;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ps->RasterizeTrapezoid = fbRasterizeTrapezoid;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ps->AddTraps = fbAddTraps;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/fb/fbpict.h b/fb/fbpict.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 5cb8663..110f32d 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/fb/fbpict.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/fb/fbpict.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -65,20 +65,11 @@ fbTrapezoids(CARD8 op,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+              INT16 xSrc, INT16 ySrc, int ntrap, xTrapezoid * traps);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern _X_EXPORT void
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ fbTriangles(CARD8 op,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             PicturePtr pSrc,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             PicturePtr pDst,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             PictFormatPtr maskFormat,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             INT16 xSrc, INT16 ySrc, int ntris, xTriangle * tris);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-extern _X_EXPORT void
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-fbGlyphs(CARD8 op,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-   PicturePtr pSrc,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-   PicturePtr pDst,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-   PictFormatPtr maskFormat,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-   INT16 xSrc,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-   INT16 ySrc, int nlist,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-   GlyphListPtr list,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-   GlyphPtr *glyphs);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif                          /* _FBPICT_H_ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/fb/fbscreen.c b/fb/fbscreen.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 71bcc5d..55330fc 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/fb/fbscreen.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/fb/fbscreen.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -32,7 +32,6 @@ fbCloseScreen(ScreenPtr pScreen)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     int d;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     DepthPtr depths = pScreen->allowedDepths;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    fbDestroyGlyphCache();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     for (d = 0; d < pScreen->numDepths; d++)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         free(depths[d].vids);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     free(depths);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-- 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+2.8.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/x11/xorg-server-1.18/files/dri/GL/internal/dri_interface.h b/x11/xorg-server-1.18/files/dri/GL/internal/dri_interface.h
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..b012570
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/x11/xorg-server-1.18/files/dri/GL/internal/dri_interface.h
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,1409 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Copyright 2007-2008 Red Hat, Inc.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * (C) Copyright IBM Corporation 2004
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * All Rights Reserved.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Permission is hereby granted, free of charge, to any person obtaining a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * copy of this software and associated documentation files (the "Software"),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * to deal in the Software without restriction, including without limitation
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * on the rights to use, copy, modify, merge, publish, distribute, sub
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * license, and/or sell copies of the Software, and to permit persons to whom
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * the Software is furnished to do so, subject to the following conditions:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * The above copyright notice and this permission notice (including the next
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * paragraph) shall be included in all copies or substantial portions of the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Software.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * THE COPYRIGHT HOLDERS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * USE OR OTHER DEALINGS IN THE SOFTWARE.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * \file dri_interface.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * This file contains all the types and functions that define the interface
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * between a DRI driver and driver loader.  Currently, the most common driver
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * loader is the XFree86 libGL.so.  However, other loaders do exist, and in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * the future the server-side libglx.a will also be a loader.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * \author Kevin E. Martin <kevin@precisioninsight.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * \author Ian Romanick <idr@us.ibm.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * \author Kristian Høgsberg <krh@redhat.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifndef DRI_INTERFACE_H
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define DRI_INTERFACE_H
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* For archs with no drm.h */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if defined(__APPLE__) || defined(__CYGWIN__) || defined(__GNU__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifndef __NOT_HAVE_DRM_H
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __NOT_HAVE_DRM_H
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifndef __NOT_HAVE_DRM_H
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <drm.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef unsigned int drm_context_t;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef unsigned int drm_drawable_t;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct drm_clip_rect drm_clip_rect_t;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * \name DRI interface structures
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * The following structures define the interface between the GLX client
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * side library and the DRI (direct rendering infrastructure).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*@{*/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRIdisplayRec             __DRIdisplay;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRIscreenRec              __DRIscreen;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRIcontextRec             __DRIcontext;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRIdrawableRec            __DRIdrawable;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRIconfigRec              __DRIconfig;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRIframebufferRec __DRIframebuffer;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRIversionRec             __DRIversion;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRIcoreExtensionRec               __DRIcoreExtension;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRIextensionRec           __DRIextension;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRIcopySubBufferExtensionRec      __DRIcopySubBufferExtension;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRIswapControlExtensionRec        __DRIswapControlExtension;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRIframeTrackingExtensionRec      __DRIframeTrackingExtension;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRImediaStreamCounterExtensionRec __DRImediaStreamCounterExtension;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRItexOffsetExtensionRec  __DRItexOffsetExtension;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRItexBufferExtensionRec  __DRItexBufferExtension;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRIlegacyExtensionRec             __DRIlegacyExtension;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRIswrastExtensionRec             __DRIswrastExtension;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRIbufferRec                      __DRIbuffer;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRIdri2ExtensionRec               __DRIdri2Extension;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRIdri2LoaderExtensionRec __DRIdri2LoaderExtension;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRI2flushExtensionRec     __DRI2flushExtension;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRI2throttleExtensionRec  __DRI2throttleExtension;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRIimageLoaderExtensionRec     __DRIimageLoaderExtension;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRIimageDriverExtensionRec     __DRIimageDriverExtension;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*@}*/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Extension struct.  Drivers 'inherit' from this struct by embedding
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * it as the first element in the extension struct.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * We never break API in for a DRI extension.  If we need to change
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * the way things work in a non-backwards compatible manner, we
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * introduce a new extension.  During a transition period, we can
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * leave both the old and the new extension in the driver, which
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * allows us to move to the new interface without having to update the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * loader(s) in lock step.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * However, we can add entry points to an extension over time as long
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * as we don't break the old ones.  As we add entry points to an
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * extension, we increase the version number.  The corresponding
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * #define can be used to guard code that accesses the new entry
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * points at compile time and the version field in the extension
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * struct can be used at run-time to determine how to use the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * extension.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+struct __DRIextensionRec {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    const char *name;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    int version;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * The first set of extension are the screen extensions, returned by
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * __DRIcore::getExtensions().  This entry point will return a list of
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * extensions and the loader can use the ones it knows about by
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * casting them to more specific extensions and advertising any GLX
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * extensions the DRI extensions enables.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Used by drivers to indicate support for setting the read drawable.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_READ_DRAWABLE "DRI_ReadDrawable"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_READ_DRAWABLE_VERSION 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Used by drivers that implement the GLX_MESA_copy_sub_buffer extension.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_COPY_SUB_BUFFER "DRI_CopySubBuffer"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_COPY_SUB_BUFFER_VERSION 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+struct __DRIcopySubBufferExtensionRec {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIextension base;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    void (*copySubBuffer)(__DRIdrawable *drawable, int x, int y, int w, int h);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Used by drivers that implement the GLX_SGI_swap_control or
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * GLX_MESA_swap_control extension.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_SWAP_CONTROL "DRI_SwapControl"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_SWAP_CONTROL_VERSION 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+struct __DRIswapControlExtensionRec {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIextension base;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    void (*setSwapInterval)(__DRIdrawable *drawable, unsigned int inteval);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    unsigned int (*getSwapInterval)(__DRIdrawable *drawable);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Used by drivers that implement the GLX_MESA_swap_frame_usage extension.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_FRAME_TRACKING "DRI_FrameTracking"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_FRAME_TRACKING_VERSION 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+struct __DRIframeTrackingExtensionRec {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIextension base;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * Enable or disable frame usage tracking.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * \since Internal API version 20030317.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    int (*frameTracking)(__DRIdrawable *drawable, GLboolean enable);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * Retrieve frame usage information.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * \since Internal API version 20030317.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    int (*queryFrameTracking)(__DRIdrawable *drawable,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                         int64_t * sbc, int64_t * missedFrames,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                         float * lastMissedUsage, float * usage);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Used by drivers that implement the GLX_SGI_video_sync extension.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_MEDIA_STREAM_COUNTER "DRI_MediaStreamCounter"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_MEDIA_STREAM_COUNTER_VERSION 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+struct __DRImediaStreamCounterExtensionRec {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIextension base;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * Wait for the MSC to equal target_msc, or, if that has already passed,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * the next time (MSC % divisor) is equal to remainder.  If divisor is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * zero, the function will return as soon as MSC is greater than or equal
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * to target_msc.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    int (*waitForMSC)(__DRIdrawable *drawable,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 int64_t target_msc, int64_t divisor, int64_t remainder,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 int64_t * msc, int64_t * sbc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * Get the number of vertical refreshes since some point in time before
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * this function was first called (i.e., system start up).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    int (*getDrawableMSC)(__DRIscreen *screen, __DRIdrawable *drawable,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     int64_t *msc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_TEX_OFFSET "DRI_TexOffset"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_TEX_OFFSET_VERSION 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+struct __DRItexOffsetExtensionRec {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIextension base;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * Method to override base texture image with a driver specific 'offset'.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * The depth passed in allows e.g. to ignore the alpha channel of texture
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * images where the non-alpha components don't occupy a whole texel.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * For GLX_EXT_texture_from_pixmap with AIGLX.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    void (*setTexOffset)(__DRIcontext *pDRICtx, GLint texname,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    unsigned long long offset, GLint depth, GLuint pitch);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Valid values for format in the setTexBuffer2 function below.  These
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * values match the GLX tokens for compatibility reasons, but we
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * define them here since the DRI interface can't depend on GLX. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_TEXTURE_FORMAT_NONE        0x20D8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_TEXTURE_FORMAT_RGB         0x20D9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_TEXTURE_FORMAT_RGBA        0x20DA
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_TEX_BUFFER "DRI_TexBuffer"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_TEX_BUFFER_VERSION 2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+struct __DRItexBufferExtensionRec {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIextension base;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * Method to override base texture image with the contents of a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * __DRIdrawable. 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * For GLX_EXT_texture_from_pixmap with AIGLX.  Deprecated in favor of
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * setTexBuffer2 in version 2 of this interface
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    void (*setTexBuffer)(__DRIcontext *pDRICtx,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    GLint target,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    __DRIdrawable *pDraw);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * Method to override base texture image with the contents of a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * __DRIdrawable, including the required texture format attribute.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * For GLX_EXT_texture_from_pixmap with AIGLX.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    void (*setTexBuffer2)(__DRIcontext *pDRICtx,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     GLint target,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     GLint format,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     __DRIdrawable *pDraw);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * Method to release texture buffer in case some special platform
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * need this.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * For GLX_EXT_texture_from_pixmap with AIGLX.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    void (*releaseTexBuffer)(__DRIcontext *pDRICtx,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                   GLint target,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                   __DRIdrawable *pDraw);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Used by drivers that implement DRI2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI2_FLUSH "DRI2_Flush"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI2_FLUSH_VERSION 4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI2_FLUSH_DRAWABLE (1 << 0) /* the drawable should be flushed. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI2_FLUSH_CONTEXT  (1 << 1) /* glFlush should be called */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+enum __DRI2throttleReason {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRI2_THROTTLE_SWAPBUFFER,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRI2_THROTTLE_COPYSUBBUFFER,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRI2_THROTTLE_FLUSHFRONT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+struct __DRI2flushExtensionRec {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIextension base;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    void (*flush)(__DRIdrawable *drawable);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * Ask the driver to call getBuffers/getBuffersWithFormat before
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * it starts rendering again.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * \param drawable the drawable to invalidate
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * \since 3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    void (*invalidate)(__DRIdrawable *drawable);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * This function reduces the number of flushes in the driver by combining
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * several operations into one call.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * It can:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * - throttle
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * - flush a drawable
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * - flush a context
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * \param context           the context
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * \param drawable          the drawable to flush
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * \param flags             a combination of _DRI2_FLUSH_xxx flags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * \param throttle_reason   the reason for throttling, 0 = no throttling
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * \since 4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    void (*flush_with_flags)(__DRIcontext *ctx,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                             __DRIdrawable *drawable,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                             unsigned flags,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                             enum __DRI2throttleReason throttle_reason);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Extension that the driver uses to request
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * throttle callbacks.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI2_THROTTLE "DRI2_Throttle"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI2_THROTTLE_VERSION 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+struct __DRI2throttleExtensionRec {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRIextension base;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   void (*throttle)(__DRIcontext *ctx,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               __DRIdrawable *drawable,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               enum __DRI2throttleReason reason);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*@}*/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * The following extensions describe loader features that the DRI
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * driver can make use of.  Some of these are mandatory, such as the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * getDrawableInfo extension for DRI and the DRI Loader extensions for
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * DRI2, while others are optional, and if present allow the driver to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * expose certain features.  The loader pass in a NULL terminated
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * array of these extensions to the driver in the createNewScreen
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * constructor.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRIgetDrawableInfoExtensionRec __DRIgetDrawableInfoExtension;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRIsystemTimeExtensionRec __DRIsystemTimeExtension;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRIdamageExtensionRec __DRIdamageExtension;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRIloaderExtensionRec __DRIloaderExtension;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRIswrastLoaderExtensionRec __DRIswrastLoaderExtension;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Callback to getDrawableInfo protocol
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_GET_DRAWABLE_INFO "DRI_GetDrawableInfo"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_GET_DRAWABLE_INFO_VERSION 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+struct __DRIgetDrawableInfoExtensionRec {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIextension base;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * This function is used to get information about the position, size, and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * clip rects of a drawable.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    GLboolean (* getDrawableInfo) ( __DRIdrawable *drawable,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   unsigned int * index, unsigned int * stamp,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        int * x, int * y, int * width, int * height,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        int * numClipRects, drm_clip_rect_t ** pClipRects,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        int * backX, int * backY,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   int * numBackClipRects, drm_clip_rect_t ** pBackClipRects,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   void *loaderPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Callback to get system time for media stream counter extensions.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_SYSTEM_TIME "DRI_SystemTime"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_SYSTEM_TIME_VERSION 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+struct __DRIsystemTimeExtensionRec {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIextension base;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * Get the 64-bit unadjusted system time (UST).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    int (*getUST)(int64_t * ust);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * Get the media stream counter (MSC) rate.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * Matching the definition in GLX_OML_sync_control, this function returns
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * the rate of the "media stream counter".  In practical terms, this is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * the frame refresh rate of the display.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    GLboolean (*getMSCRate)(__DRIdrawable *draw,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                       int32_t * numerator, int32_t * denominator,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                       void *loaderPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Damage reporting
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_DAMAGE "DRI_Damage"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_DAMAGE_VERSION 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+struct __DRIdamageExtensionRec {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIextension base;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * Reports areas of the given drawable which have been modified by the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * driver.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * \param drawable which the drawing was done to.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * \param rects rectangles affected, with the drawable origin as the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     *           origin.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * \param x X offset of the drawable within the screen (used in the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     *           front_buffer case)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * \param y Y offset of the drawable within the screen.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * \param front_buffer boolean flag for whether the drawing to the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     *           drawable was actually done directly to the front buffer (instead
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     *           of backing storage, for example)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * \param loaderPrivate the data passed in at createNewDrawable time
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    void (*reportDamage)(__DRIdrawable *draw,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    int x, int y,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    drm_clip_rect_t *rects, int num_rects,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    GLboolean front_buffer,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    void *loaderPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_SWRAST_IMAGE_OP_DRAW 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_SWRAST_IMAGE_OP_CLEAR        2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_SWRAST_IMAGE_OP_SWAP 3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * SWRast Loader extension.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_SWRAST_LOADER "DRI_SWRastLoader"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_SWRAST_LOADER_VERSION 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+struct __DRIswrastLoaderExtensionRec {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIextension base;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * Drawable position and size
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    void (*getDrawableInfo)(__DRIdrawable *drawable,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                       int *x, int *y, int *width, int *height,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                       void *loaderPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * Put image to drawable
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    void (*putImage)(__DRIdrawable *drawable, int op,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                int x, int y, int width, int height,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                char *data, void *loaderPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * Get image from readable
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    void (*getImage)(__DRIdrawable *readable,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                int x, int y, int width, int height,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                char *data, void *loaderPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Invalidate loader extension.  The presence of this extension
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * indicates to the DRI driver that the loader will call invalidate in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * the __DRI2_FLUSH extension, whenever the needs to query for new
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * buffers.  This means that the DRI driver can drop the polling in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * glViewport().
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * The extension doesn't provide any functionality, it's only use to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * indicate to the driver that it can use the new semantics.  A DRI
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * driver can use this to switch between the different semantics or
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * just refuse to initialize if this extension isn't present.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_USE_INVALIDATE "DRI_UseInvalidate"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_USE_INVALIDATE_VERSION 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRIuseInvalidateExtensionRec __DRIuseInvalidateExtension;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+struct __DRIuseInvalidateExtensionRec {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRIextension base;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * The remaining extensions describe driver extensions, immediately
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * available interfaces provided by the driver.  To start using the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * driver, dlsym() for the __DRI_DRIVER_EXTENSIONS symbol and look for
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * the extension you need in the array.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_DRIVER_EXTENSIONS "__driDriverExtensions"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * This symbol replaces the __DRI_DRIVER_EXTENSIONS symbol, and will be
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * suffixed by "_drivername", allowing multiple drivers to be built into one
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * library, and also giving the driver the chance to return a variable driver
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * extensions struct depending on the driver name being loaded or any other
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * system state.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * The function prototype is:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * const __DRIextension **__driDriverGetExtensions_drivername(void);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_DRIVER_GET_EXTENSIONS "__driDriverGetExtensions"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Tokens for __DRIconfig attribs.  A number of attributes defined by
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * GLX or EGL standards are not in the table, as they must be provided
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * by the loader.  For example, FBConfig ID or visual ID, drawable type.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_BUFFER_SIZE            1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_LEVEL                  2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_RED_SIZE                       3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_GREEN_SIZE                     4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_BLUE_SIZE                      5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_LUMINANCE_SIZE                 6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_ALPHA_SIZE                     7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_ALPHA_MASK_SIZE                8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_DEPTH_SIZE                     9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_STENCIL_SIZE          10
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_ACCUM_RED_SIZE                11
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_ACCUM_GREEN_SIZE              12
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_ACCUM_BLUE_SIZE               13
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_ACCUM_ALPHA_SIZE              14
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_SAMPLE_BUFFERS                15
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_SAMPLES                       16
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_RENDER_TYPE           17
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_CONFIG_CAVEAT         18
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_CONFORMANT                    19
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_DOUBLE_BUFFER         20
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_STEREO                        21
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_AUX_BUFFERS           22
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_TRANSPARENT_TYPE              23
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_TRANSPARENT_INDEX_VALUE       24
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_TRANSPARENT_RED_VALUE 25
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_TRANSPARENT_GREEN_VALUE       26
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_TRANSPARENT_BLUE_VALUE        27
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_TRANSPARENT_ALPHA_VALUE       28
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_FLOAT_MODE                    29
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_RED_MASK                      30
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_GREEN_MASK                    31
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_BLUE_MASK                     32
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_ALPHA_MASK                    33
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_MAX_PBUFFER_WIDTH             34
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_MAX_PBUFFER_HEIGHT            35
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_MAX_PBUFFER_PIXELS            36
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_OPTIMAL_PBUFFER_WIDTH 37
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_OPTIMAL_PBUFFER_HEIGHT        38
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_VISUAL_SELECT_GROUP   39
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_SWAP_METHOD           40
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_MAX_SWAP_INTERVAL             41
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_MIN_SWAP_INTERVAL             42
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_BIND_TO_TEXTURE_RGB   43
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_BIND_TO_TEXTURE_RGBA  44
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_BIND_TO_MIPMAP_TEXTURE        45
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_BIND_TO_TEXTURE_TARGETS       46
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_YINVERTED                     47
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_FRAMEBUFFER_SRGB_CAPABLE      48
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* __DRI_ATTRIB_RENDER_TYPE */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_RGBA_BIT                      0x01    
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_COLOR_INDEX_BIT               0x02
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_LUMINANCE_BIT         0x04
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_FLOAT_BIT                     0x08
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_UNSIGNED_FLOAT_BIT            0x10
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* __DRI_ATTRIB_CONFIG_CAVEAT */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_SLOW_BIT                      0x01
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_NON_CONFORMANT_CONFIG 0x02
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* __DRI_ATTRIB_TRANSPARENT_TYPE */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_TRANSPARENT_RGB               0x00
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_TRANSPARENT_INDEX             0x01
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* __DRI_ATTRIB_BIND_TO_TEXTURE_TARGETS     */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_TEXTURE_1D_BIT                0x01
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_TEXTURE_2D_BIT                0x02
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_ATTRIB_TEXTURE_RECTANGLE_BIT 0x04
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * This extension defines the core DRI functionality.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_CORE "DRI_Core"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_CORE_VERSION 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+struct __DRIcoreExtensionRec {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIextension base;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIscreen *(*createNewScreen)(int screen, int fd,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                               unsigned int sarea_handle,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                               const __DRIextension **extensions,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                               const __DRIconfig ***driverConfigs,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                               void *loaderPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    void (*destroyScreen)(__DRIscreen *screen);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    const __DRIextension **(*getExtensions)(__DRIscreen *screen);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    int (*getConfigAttrib)(const __DRIconfig *config,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                      unsigned int attrib,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                      unsigned int *value);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    int (*indexConfigAttrib)(const __DRIconfig *config, int index,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        unsigned int *attrib, unsigned int *value);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIdrawable *(*createNewDrawable)(__DRIscreen *screen,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                   const __DRIconfig *config,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                   unsigned int drawable_id,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                   unsigned int head,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                   void *loaderPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    void (*destroyDrawable)(__DRIdrawable *drawable);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    void (*swapBuffers)(__DRIdrawable *drawable);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIcontext *(*createNewContext)(__DRIscreen *screen,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                 const __DRIconfig *config,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                 __DRIcontext *shared,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                 void *loaderPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    int (*copyContext)(__DRIcontext *dest,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                  __DRIcontext *src,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                  unsigned long mask);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    void (*destroyContext)(__DRIcontext *context);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    int (*bindContext)(__DRIcontext *ctx,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                  __DRIdrawable *pdraw,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                  __DRIdrawable *pread);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    int (*unbindContext)(__DRIcontext *ctx);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Stored version of some component (i.e., server-side DRI module, kernel-side
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * DRM, etc.).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * \todo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * There are several data structures that explicitly store a major version,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * minor version, and patch level.  These structures should be modified to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * have a \c __DRIversionRec instead.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+struct __DRIversionRec {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    int    major;        /**< Major version number. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    int    minor;        /**< Minor version number. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    int    patch;        /**< Patch-level. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Framebuffer information record.  Used by libGL to communicate information
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * about the framebuffer to the driver's \c __driCreateNewScreen function.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * In XFree86, most of this information is derrived from data returned by
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * calling \c XF86DRIGetDeviceInfo.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * \sa XF86DRIGetDeviceInfo __DRIdisplayRec::createNewScreen
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *     __driUtilCreateNewScreen CallCreateNewScreen
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * \bug This structure could be better named.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+struct __DRIframebufferRec {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    unsigned char *base;    /**< Framebuffer base address in the CPU's
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        * address space.  This value is calculated by
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        * calling \c drmMap on the framebuffer handle
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        * returned by \c XF86DRIGetDeviceInfo (or a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        * similar function).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    int size;               /**< Framebuffer size, in bytes. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    int stride;             /**< Number of bytes from one line to the next. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    int width;              /**< Pixel width of the framebuffer. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    int height;             /**< Pixel height of the framebuffer. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    int dev_priv_size;      /**< Size of the driver's dev-priv structure. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    void *dev_priv;         /**< Pointer to the driver's dev-priv structure. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * This extension provides alternative screen, drawable and context
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * constructors for legacy DRI functionality.  This is used in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * conjunction with the core extension.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_LEGACY "DRI_Legacy"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_LEGACY_VERSION 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+struct __DRIlegacyExtensionRec {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIextension base;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIscreen *(*createNewScreen)(int screen,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                               const __DRIversion *ddx_version,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                               const __DRIversion *dri_version,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                               const __DRIversion *drm_version,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                               const __DRIframebuffer *frame_buffer,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                               void *pSAREA, int fd, 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                               const __DRIextension **extensions,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                               const __DRIconfig ***driver_configs,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                               void *loaderPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIdrawable *(*createNewDrawable)(__DRIscreen *screen,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                   const __DRIconfig *config,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                   drm_drawable_t hwDrawable,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                   int renderType, const int *attrs,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                   void *loaderPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIcontext *(*createNewContext)(__DRIscreen *screen,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                 const __DRIconfig *config,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                 int render_type,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                 __DRIcontext *shared,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                 drm_context_t hwContext,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                 void *loaderPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * This extension provides alternative screen, drawable and context
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * constructors for swrast DRI functionality.  This is used in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * conjunction with the core extension.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_SWRAST "DRI_SWRast"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_SWRAST_VERSION 4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+struct __DRIswrastExtensionRec {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIextension base;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIscreen *(*createNewScreen)(int screen,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                               const __DRIextension **extensions,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                               const __DRIconfig ***driver_configs,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                               void *loaderPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIdrawable *(*createNewDrawable)(__DRIscreen *screen,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                   const __DRIconfig *config,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                   void *loaderPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   /* Since version 2 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRIcontext *(*createNewContextForAPI)(__DRIscreen *screen,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                           int api,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                           const __DRIconfig *config,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                           __DRIcontext *shared,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                           void *data);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   /**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * Create a context for a particular API with a set of attributes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * \since version 3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * \sa __DRIdri2ExtensionRec::createContextAttribs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRIcontext *(*createContextAttribs)(__DRIscreen *screen,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    int api,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    const __DRIconfig *config,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    __DRIcontext *shared,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    unsigned num_attribs,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    const uint32_t *attribs,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    unsigned *error,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    void *loaderPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   /**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * createNewScreen() with the driver extensions passed in.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * \since version 4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRIscreen *(*createNewScreen2)(int screen,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    const __DRIextension **loader_extensions,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    const __DRIextension **driver_extensions,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    const __DRIconfig ***driver_configs,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    void *loaderPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/** Common DRI function definitions, shared among DRI2 and Image extensions
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef __DRIscreen *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+(*__DRIcreateNewScreen2Func)(int screen, int fd,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                             const __DRIextension **extensions,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                             const __DRIextension **driver_extensions,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                             const __DRIconfig ***driver_configs,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                             void *loaderPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef __DRIdrawable *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+(*__DRIcreateNewDrawableFunc)(__DRIscreen *screen,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                              const __DRIconfig *config,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                              void *loaderPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef __DRIcontext *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+(*__DRIcreateContextAttribsFunc)(__DRIscreen *screen,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                 int api,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                 const __DRIconfig *config,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                 __DRIcontext *shared,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                 unsigned num_attribs,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                 const uint32_t *attribs,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                 unsigned *error,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                 void *loaderPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef unsigned int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+(*__DRIgetAPIMaskFunc)(__DRIscreen *screen);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * DRI2 Loader extension.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_BUFFER_FRONT_LEFT            0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_BUFFER_BACK_LEFT             1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_BUFFER_FRONT_RIGHT   2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_BUFFER_BACK_RIGHT            3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_BUFFER_DEPTH         4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_BUFFER_STENCIL               5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_BUFFER_ACCUM         6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_BUFFER_FAKE_FRONT_LEFT       7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_BUFFER_FAKE_FRONT_RIGHT      8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_BUFFER_DEPTH_STENCIL 9  /**< Only available with DRI2 1.1 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_BUFFER_HIZ           10
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Inofficial and for internal use. Increase when adding a new buffer token. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_BUFFER_COUNT         11
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+struct __DRIbufferRec {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    unsigned int attachment;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    unsigned int name;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    unsigned int pitch;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    unsigned int cpp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    unsigned int flags;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_DRI2_LOADER "DRI_DRI2Loader"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_DRI2_LOADER_VERSION 3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+struct __DRIdri2LoaderExtensionRec {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIextension base;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIbuffer *(*getBuffers)(__DRIdrawable *driDrawable,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                          int *width, int *height,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                          unsigned int *attachments, int count,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                          int *out_count, void *loaderPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * Flush pending front-buffer rendering
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * Any rendering that has been performed to the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * \c __DRI_BUFFER_FAKE_FRONT_LEFT will be flushed to the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * \c __DRI_BUFFER_FRONT_LEFT.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * \param driDrawable    Drawable whose front-buffer is to be flushed
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * \param loaderPrivate  Loader's private data that was previously passed
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     *                       into __DRIdri2ExtensionRec::createNewDrawable
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    void (*flushFrontBuffer)(__DRIdrawable *driDrawable, void *loaderPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * Get list of buffers from the server
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * Gets a list of buffer for the specified set of attachments.  Unlike
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * \c ::getBuffers, this function takes a list of attachments paired with
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * opaque \c unsigned \c int value describing the format of the buffer.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * It is the responsibility of the caller to know what the service that
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * allocates the buffers will expect to receive for the format.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * \param driDrawable    Drawable whose buffers are being queried.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * \param width          Output where the width of the buffers is stored.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * \param height         Output where the height of the buffers is stored.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * \param attachments    List of pairs of attachment ID and opaque format
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     *                       requested for the drawable.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * \param count          Number of attachment / format pairs stored in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     *                       \c attachments.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * \param loaderPrivate  Loader's private data that was previously passed
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     *                       into __DRIdri2ExtensionRec::createNewDrawable.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIbuffer *(*getBuffersWithFormat)(__DRIdrawable *driDrawable,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    int *width, int *height,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    unsigned int *attachments, int count,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    int *out_count, void *loaderPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * This extension provides alternative screen, drawable and context
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * constructors for DRI2.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_DRI2 "DRI_DRI2"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_DRI2_VERSION 4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_API_OPENGL   0       /**< OpenGL compatibility profile */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_API_GLES             1       /**< OpenGL ES 1.x */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_API_GLES2            2       /**< OpenGL ES 2.x */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_API_OPENGL_CORE      3       /**< OpenGL 3.2+ core profile */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_API_GLES3            4       /**< OpenGL ES 3.x */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_CTX_ATTRIB_MAJOR_VERSION             0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_CTX_ATTRIB_MINOR_VERSION             1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_CTX_ATTRIB_FLAGS                     2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * \requires __DRI2_ROBUSTNESS.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_CTX_ATTRIB_RESET_STRATEGY            3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_CTX_FLAG_DEBUG                       0x00000001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_CTX_FLAG_FORWARD_COMPATIBLE  0x00000002
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * \requires __DRI2_ROBUSTNESS.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS        0x00000004
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * \name Context reset strategies.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*@{*/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_CTX_RESET_NO_NOTIFICATION            0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_CTX_RESET_LOSE_CONTEXT               1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*@}*/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * \name Reasons that __DRIdri2Extension::createContextAttribs might fail
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*@{*/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/** Success! */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_CTX_ERROR_SUCCESS                    0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/** Memory allocation failure */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_CTX_ERROR_NO_MEMORY          1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/** Client requested an API (e.g., OpenGL ES 2.0) that the driver can't do. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_CTX_ERROR_BAD_API                    2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/** Client requested an API version that the driver can't do. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_CTX_ERROR_BAD_VERSION                3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/** Client requested a flag or combination of flags the driver can't do. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_CTX_ERROR_BAD_FLAG           4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/** Client requested an attribute the driver doesn't understand. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_CTX_ERROR_UNKNOWN_ATTRIBUTE  5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/** Client requested a flag the driver doesn't understand. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_CTX_ERROR_UNKNOWN_FLAG               6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*@}*/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+struct __DRIdri2ExtensionRec {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIextension base;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIscreen *(*createNewScreen)(int screen, int fd,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                               const __DRIextension **extensions,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                               const __DRIconfig ***driver_configs,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                               void *loaderPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRIcreateNewDrawableFunc   createNewDrawable;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRIcontext *(*createNewContext)(__DRIscreen *screen,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                     const __DRIconfig *config,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                     __DRIcontext *shared,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                     void *loaderPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   /* Since version 2 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRIgetAPIMaskFunc          getAPIMask;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRIcontext *(*createNewContextForAPI)(__DRIscreen *screen,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                      int api,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                      const __DRIconfig *config,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                      __DRIcontext *shared,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                      void *data);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRIbuffer *(*allocateBuffer)(__DRIscreen *screen,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                             unsigned int attachment,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                             unsigned int format,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                             int width,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                             int height);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   void (*releaseBuffer)(__DRIscreen *screen,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    __DRIbuffer *buffer);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   /**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * Create a context for a particular API with a set of attributes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * \since version 3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * \sa __DRIswrastExtensionRec::createContextAttribs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRIcreateContextAttribsFunc        createContextAttribs;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   /**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * createNewScreen with the driver's extension list passed in.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * \since version 4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRIcreateNewScreen2Func            createNewScreen2;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * This extension provides functionality to enable various EGLImage
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * extensions.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE "DRI_IMAGE"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_VERSION 8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * These formats correspond to the similarly named MESA_FORMAT_*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * tokens, except in the native endian of the CPU.  For example, on
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * little endian __DRI_IMAGE_FORMAT_XRGB8888 corresponds to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * MESA_FORMAT_XRGB8888, but MESA_FORMAT_XRGB8888_REV on big endian.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * __DRI_IMAGE_FORMAT_NONE is for images that aren't directly usable
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * by the driver (YUV planar formats) but serve as a base image for
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * creating sub-images for the different planes within the image.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * R8, GR88 and NONE should not be used with createImageFormName or
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * createImage, and are returned by query from sub images created with
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * createImageFromNames (NONE, see above) and fromPlane (R8 & GR88).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_FORMAT_RGB565       0x1001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_FORMAT_XRGB8888     0x1002
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_FORMAT_ARGB8888     0x1003
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_FORMAT_ABGR8888     0x1004
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_FORMAT_XBGR8888     0x1005
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_FORMAT_R8           0x1006 /* Since version 5 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_FORMAT_GR88         0x1007
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_FORMAT_NONE         0x1008
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_FORMAT_XRGB2101010  0x1009
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_FORMAT_ARGB2101010  0x100a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_FORMAT_SARGB8       0x100b
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_USE_SHARE              0x0001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_USE_SCANOUT            0x0002
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_USE_CURSOR             0x0004 /* Depricated */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_USE_LINEAR             0x0008
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Four CC formats that matches with WL_DRM_FORMAT_* from wayland_drm.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * and GBM_FORMAT_* from gbm.h, used with createImageFromNames.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * \since 5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_FOURCC_RGB565  0x36314752
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_FOURCC_ARGB8888        0x34325241
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_FOURCC_XRGB8888        0x34325258
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_FOURCC_ABGR8888        0x34324241
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_FOURCC_XBGR8888        0x34324258
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_FOURCC_YUV410  0x39565559
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_FOURCC_YUV411  0x31315559
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_FOURCC_YUV420  0x32315559
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_FOURCC_YUV422  0x36315559
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_FOURCC_YUV444  0x34325559
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_FOURCC_NV12            0x3231564e
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_FOURCC_NV16            0x3631564e
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_FOURCC_YUYV            0x56595559
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Queryable on images created by createImageFromNames.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * RGB and RGBA are may be usable directly as images but its still
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * recommended to call fromPlanar with plane == 0.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Y_U_V, Y_UV and Y_XUXV all requires call to fromPlanar to create
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * usable sub-images, sampling from images return raw YUV data and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * color conversion needs to be done in the shader.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * \since 5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_COMPONENTS_RGB 0x3001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_COMPONENTS_RGBA        0x3002
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_COMPONENTS_Y_U_V       0x3003
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_COMPONENTS_Y_UV        0x3004
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_COMPONENTS_Y_XUXV      0x3005
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * queryImage attributes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_ATTRIB_STRIDE  0x2000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_ATTRIB_HANDLE  0x2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_ATTRIB_NAME            0x2002
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_ATTRIB_FORMAT  0x2003 /* available in versions 3+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_ATTRIB_WIDTH   0x2004 /* available in versions 4+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_ATTRIB_HEIGHT  0x2005
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_ATTRIB_COMPONENTS      0x2006 /* available in versions 5+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_ATTRIB_FD           0x2007 /* available in versions
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                                * 7+. Each query will return a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                                * new fd. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+enum __DRIYUVColorSpace {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRI_YUV_COLOR_SPACE_UNDEFINED = 0,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRI_YUV_COLOR_SPACE_ITU_REC601 = 0x327F,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRI_YUV_COLOR_SPACE_ITU_REC709 = 0x3280,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRI_YUV_COLOR_SPACE_ITU_REC2020 = 0x3281
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+enum __DRISampleRange {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRI_YUV_RANGE_UNDEFINED = 0,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRI_YUV_FULL_RANGE = 0x3282,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRI_YUV_NARROW_RANGE = 0x3283
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+enum __DRIChromaSiting {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRI_YUV_CHROMA_SITING_UNDEFINED = 0,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRI_YUV_CHROMA_SITING_0 = 0x3284,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRI_YUV_CHROMA_SITING_0_5 = 0x3285
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * \name Reasons that __DRIimageExtensionRec::createImageFromTexture might fail
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*@{*/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/** Success! */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_ERROR_SUCCESS       0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/** Memory allocation failure */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_ERROR_BAD_ALLOC     1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/** Client requested an invalid attribute for a texture object  */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_ERROR_BAD_MATCH     2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/** Client requested an invalid texture object */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_ERROR_BAD_PARAMETER 3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*@}*/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRIimageRec          __DRIimage;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRIimageExtensionRec __DRIimageExtension;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+struct __DRIimageExtensionRec {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIextension base;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIimage *(*createImageFromName)(__DRIscreen *screen,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                  int width, int height, int format,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                  int name, int pitch,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                  void *loaderPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIimage *(*createImageFromRenderbuffer)(__DRIcontext *context,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                          int renderbuffer,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                          void *loaderPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    void (*destroyImage)(__DRIimage *image);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIimage *(*createImage)(__DRIscreen *screen,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                          int width, int height, int format,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                          unsigned int use,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                          void *loaderPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   GLboolean (*queryImage)(__DRIimage *image, int attrib, int *value);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   /**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * The new __DRIimage will share the content with the old one, see dup(2).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRIimage *(*dupImage)(__DRIimage *image, void *loaderPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   /**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * Validate that a __DRIimage can be used a certain way.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * \since 2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   GLboolean (*validateUsage)(__DRIimage *image, unsigned int use);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   /**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * Unlike createImageFromName __DRI_IMAGE_FORMAT is not but instead
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * __DRI_IMAGE_FOURCC and strides are in bytes not pixels. Stride is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * also per block and not per pixel (for non-RGB, see gallium blocks).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * \since 5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRIimage *(*createImageFromNames)(__DRIscreen *screen,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                       int width, int height, int fourcc,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                       int *names, int num_names,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                       int *strides, int *offsets,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                       void *loaderPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   /**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * Create an image out of a sub-region of a parent image.  This
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * entry point lets us create individual __DRIimages for different
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * planes in a planar buffer (typically yuv), for example.  While a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * sub-image shares the underlying buffer object with the parent
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * image and other sibling sub-images, the life times of parent and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * sub-images are not dependent.  Destroying the parent or a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * sub-image doesn't affect other images.  The underlying buffer
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * object is free when no __DRIimage remains that references it.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * Sub-images may overlap, but rendering to overlapping sub-images
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * is undefined.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * \since 5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIimage *(*fromPlanar)(__DRIimage *image, int plane,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                              void *loaderPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * Create image from texture.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * \since 6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRIimage *(*createImageFromTexture)(__DRIcontext *context,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                         int target,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                         unsigned texture,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                         int depth,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                         int level,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                         unsigned *error,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                         void *loaderPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   /**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * Like createImageFromNames, but takes a prime fd instead.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * \since 7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRIimage *(*createImageFromFds)(__DRIscreen *screen,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                     int width, int height, int fourcc,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                     int *fds, int num_fds,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                     int *strides, int *offsets,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                     void *loaderPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   /**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * Like createImageFromFds, but takes additional attributes.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * For EGL_EXT_image_dma_buf_import.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * \since 8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRIimage *(*createImageFromDmaBufs)(__DRIscreen *screen,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                         int width, int height, int fourcc,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                         int *fds, int num_fds,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                         int *strides, int *offsets,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                         enum __DRIYUVColorSpace color_space,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                         enum __DRISampleRange sample_range,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                         enum __DRIChromaSiting horiz_siting,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                         enum __DRIChromaSiting vert_siting,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                         unsigned *error,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                         void *loaderPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * This extension must be implemented by the loader and passed to the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * driver at screen creation time.  The EGLImage entry points in the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * various client APIs take opaque EGLImage handles and use this
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * extension to map them to a __DRIimage.  At version 1, this
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * extensions allows mapping EGLImage pointers to __DRIimage pointers,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * but future versions could support other EGLImage-like, opaque types
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * with new lookup functions.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_LOOKUP "DRI_IMAGE_LOOKUP"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_LOOKUP_VERSION 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRIimageLookupExtensionRec __DRIimageLookupExtension;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+struct __DRIimageLookupExtensionRec {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIextension base;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIimage *(*lookupEGLImage)(__DRIscreen *screen, void *image,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                             void *loaderPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * This extension allows for common DRI2 options
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI2_CONFIG_QUERY "DRI_CONFIG_QUERY"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI2_CONFIG_QUERY_VERSION 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRI2configQueryExtensionRec __DRI2configQueryExtension;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+struct __DRI2configQueryExtensionRec {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRIextension base;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   int (*configQueryb)(__DRIscreen *screen, const char *var, GLboolean *val);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   int (*configQueryi)(__DRIscreen *screen, const char *var, GLint *val);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   int (*configQueryf)(__DRIscreen *screen, const char *var, GLfloat *val);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Robust context driver extension.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Existence of this extension means the driver can accept the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * \c __DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS flag and the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * \c __DRI_CTX_ATTRIB_RESET_STRATEGY attribute in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * \c __DRIdri2ExtensionRec::createContextAttribs.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI2_ROBUSTNESS "DRI_Robustness"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI2_ROBUSTNESS_VERSION 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRIrobustnessExtensionRec __DRIrobustnessExtension;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+struct __DRIrobustnessExtensionRec {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRIextension base;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * DRI config options extension.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * This extension provides the XML string containing driver options for use by
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * the loader in supporting the driconf application.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_CONFIG_OPTIONS "DRI_ConfigOptions"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_CONFIG_OPTIONS_VERSION 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRIconfigOptionsExtensionRec {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRIextension base;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   const char *xml;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} __DRIconfigOptionsExtension;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * This extension provides a driver vtable to a set of common driver helper
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * functions (driCoreExtension, driDRI2Extension) within the driver
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * implementation, as opposed to having to pass them through a global
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * variable.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * It is not intended to be public API to the actual loader, and the vtable
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * layout may change at any time.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_DRIVER_VTABLE "DRI_DriverVtable"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_DRIVER_VTABLE_VERSION 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRIDriverVtableExtensionRec {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIextension base;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    const struct __DriverAPIRec *vtable;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} __DRIDriverVtableExtension;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Query renderer driver extension
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * This allows the window system layer (either EGL or GLX) to query aspects of
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * hardware and driver support without creating a context.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI2_RENDERER_QUERY "DRI_RENDERER_QUERY"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI2_RENDERER_QUERY_VERSION 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI2_RENDERER_VENDOR_ID                             0x0000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI2_RENDERER_DEVICE_ID                             0x0001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI2_RENDERER_VERSION                               0x0002
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI2_RENDERER_ACCELERATED                           0x0003
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI2_RENDERER_VIDEO_MEMORY                          0x0004
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI2_RENDERER_UNIFIED_MEMORY_ARCHITECTURE           0x0005
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI2_RENDERER_PREFERRED_PROFILE                     0x0006
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI2_RENDERER_OPENGL_CORE_PROFILE_VERSION           0x0007
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI2_RENDERER_OPENGL_COMPATIBILITY_PROFILE_VERSION  0x0008
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI2_RENDERER_OPENGL_ES_PROFILE_VERSION             0x0009
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI2_RENDERER_OPENGL_ES2_PROFILE_VERSION            0x000a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct __DRI2rendererQueryExtensionRec __DRI2rendererQueryExtension;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+struct __DRI2rendererQueryExtensionRec {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRIextension base;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   int (*queryInteger)(__DRIscreen *screen, int attribute, unsigned int *val);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   int (*queryString)(__DRIscreen *screen, int attribute, const char **val);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Image Loader extension. Drivers use this to allocate color buffers
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+enum __DRIimageBufferMask {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRI_IMAGE_BUFFER_BACK = (1 << 0),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRI_IMAGE_BUFFER_FRONT = (1 << 1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+struct __DRIimageList {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   uint32_t image_mask;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRIimage *back;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRIimage *front;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_LOADER "DRI_IMAGE_LOADER"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_LOADER_VERSION 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+struct __DRIimageLoaderExtensionRec {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    __DRIextension base;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   /**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * Allocate color buffers.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * \param driDrawable
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * \param width              Width of allocated buffers
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * \param height             Height of allocated buffers
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * \param format             one of __DRI_IMAGE_FORMAT_*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * \param stamp              Address of variable to be updated when
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    *                           getBuffers must be called again
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * \param loaderPrivate      The loaderPrivate for driDrawable
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * \param buffer_mask        Set of buffers to allocate
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    * \param buffers            Returned buffers
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   int (*getBuffers)(__DRIdrawable *driDrawable,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     unsigned int format,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     uint32_t *stamp,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     void *loaderPrivate,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     uint32_t buffer_mask,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     struct __DRIimageList *buffers);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * Flush pending front-buffer rendering
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * Any rendering that has been performed to the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * fake front will be flushed to the front
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * \param driDrawable    Drawable whose front-buffer is to be flushed
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     * \param loaderPrivate  Loader's private data that was previously passed
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     *                       into __DRIdri2ExtensionRec::createNewDrawable
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    void (*flushFrontBuffer)(__DRIdrawable *driDrawable, void *loaderPrivate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * DRI extension.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_DRIVER           "DRI_IMAGE_DRIVER"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DRI_IMAGE_DRIVER_VERSION   1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+struct __DRIimageDriverExtensionRec {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRIextension               base;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   /* Common DRI functions, shared with DRI2 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRIcreateNewScreen2Func            createNewScreen2;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRIcreateNewDrawableFunc           createNewDrawable;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRIcreateContextAttribsFunc        createContextAttribs;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DRIgetAPIMaskFunc                  getAPIMask;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/x11/xorg-server-1.18/files/include/Xplugin.h b/x11/xorg-server-1.18/files/include/Xplugin.h
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..543ba2d
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/x11/xorg-server-1.18/files/include/Xplugin.h
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,592 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Xplugin.h -- windowing API for rootless X11 server
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   $Id: Xplugin.h,v 1.4 2003-03-03 23:30:53 jharper Exp $
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   Copyright (c) 2002 Apple Computer, Inc. All rights reserved.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   Permission is hereby granted, free of charge, to any person
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   obtaining a copy of this software and associated documentation files
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   (the "Software"), to deal in the Software without restriction,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   including without limitation the rights to use, copy, modify, merge,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   publish, distribute, sublicense, and/or sell copies of the Software,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   and to permit persons to whom the Software is furnished to do so,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   subject to the following conditions:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   The above copyright notice and this permission notice shall be
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   included in all copies or substantial portions of the Software.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   NONINFRINGEMENT.  IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   DEALINGS IN THE SOFTWARE.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   Except as contained in this notice, the name(s) of the above
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   copyright holders shall not be used in advertising or otherwise to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   promote the sale, use or other dealings in this Software without
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   prior written authorization.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   Note that these interfaces are provided solely for the use of the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   X11 server. Any other uses are unsupported and strongly discouraged. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifndef XPLUGIN_H
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define XPLUGIN_H 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define XPLUGIN_VERSION 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <stdint.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* By default we use the X server definition of BoxRec to define xp_box,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   so that the compiler can silently convert between the two. But if
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   XP_NO_X_HEADERS is defined, we'll define it ourselves. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifndef XP_NO_X_HEADERS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# include "miscstruct.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  typedef BoxRec xp_box;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  struct xp_box_struct {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      short x1, y1, x2, y2;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  typedef struct xp_box_struct xp_box;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef unsigned int xp_resource_id;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef xp_resource_id xp_window_id;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef xp_resource_id xp_surface_id;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef unsigned int xp_client_id;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef unsigned int xp_request_type;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef int xp_error;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef int xp_bool;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Error codes that the functions declared here may return. They all
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   numerically match their X equivalents, i.e. the XP_ can be dropped
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   if <X11/X.h> has been included. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+enum xp_error_enum {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_Success                     = 0,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_BadRequest          = 1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_BadValue                    = 2,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_BadWindow           = 3,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_BadMatch                    = 8,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_BadAccess           = 10,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_BadImplementation   = 17,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};    
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Event types generated by the plugin. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+enum xp_event_type_enum {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /* The global display configuration changed somehow. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_EVENT_DISPLAY_CHANGED       = 1 << 0,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /* A window changed state. Argument is xp_window_state_event */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_EVENT_WINDOW_STATE_CHANGED = 1 << 1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /* An async request encountered an error. Argument is of type
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       xp_async_error_event */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_EVENT_ASYNC_ERROR   = 1 << 2,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /* Sent when a surface is destroyed as a side effect of destroying
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       a window. Arg is of type xp_surface_id. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_EVENT_SURFACE_DESTROYED     = 1 << 3,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /* Sent when any GL contexts pointing at the given surface need to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       call xp_update_gl_context () to refresh their state (because the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       window moved or was resized. Arg is of type xp_surface_id. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_EVENT_SURFACE_CHANGED       = 1 << 4,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /* Sent when a window has been moved. Arg is of type xp_window_id. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_EVENT_WINDOW_MOVED  = 1 << 5,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Function type used to receive events. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef void (xp_event_fun) (unsigned int type, const void *arg,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        unsigned int arg_size, void *user_data);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Operation types. Used when reporting errors asynchronously. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+enum xp_request_type_enum {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_REQUEST_NIL = 0,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_REQUEST_DESTROY_WINDOW = 1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_REQUEST_CONFIGURE_WINDOW = 2,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_REQUEST_FLUSH_WINDOW = 3,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_REQUEST_COPY_WINDOW = 4,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_REQUEST_UNLOCK_WINDOW = 5,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_REQUEST_DISABLE_UPDATE = 6,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_REQUEST_REENABLE_UPDATE = 7,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_REQUEST_HIDE_CURSOR = 8,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_REQUEST_SHOW_CURSOR = 9,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_REQUEST_FRAME_DRAW = 10,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Structure used to report an error asynchronously. Passed as the "arg"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   of an XP_EVENT_ASYNC_ERROR event. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+struct xp_async_error_event_struct {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    xp_request_type request_type;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    xp_resource_id id;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    xp_error error;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct xp_async_error_event_struct xp_async_error_event;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Possible window states. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+enum xp_window_state_enum {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /* The window is not in the global list of possibly-visible windows. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_WINDOW_STATE_OFFSCREEN      = 1 << 0,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /* Parts of the window may be obscured by other windows. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_WINDOW_STATE_OBSCURED       = 1 << 1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Structure passed as argument of an XP_EVENT_WINDOW_STATE_CHANGED event. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+struct xp_window_state_event_struct {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    xp_window_id id;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    unsigned int state;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct xp_window_state_event_struct xp_window_state_event;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Function type used to supply a colormap for indexed drawables. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef xp_error (xp_colormap_fun) (void *data, int first_color,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                               int n_colors, uint32_t *colors);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Window attributes structure. Used when creating and configuring windows.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   Also used when configuring surfaces attached to windows. Functions that
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   take one of these structures also take a bit mask defining which
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   fields are set to meaningful values. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+enum xp_window_changes_enum {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_ORIGIN                      = 1 << 0,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_SIZE                        = 1 << 1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_BOUNDS                      = XP_ORIGIN | XP_SIZE,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_SHAPE                       = 1 << 2,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_STACKING                    = 1 << 3,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_DEPTH                       = 1 << 4,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_COLORMAP                    = 1 << 5,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_WINDOW_LEVEL                = 1 << 6,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+struct xp_window_changes_struct {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /* XP_ORIGIN */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    int x, y;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /* XP_SIZE */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    unsigned int width, height;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    int bit_gravity;                       /* how to resize the backing store */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /* XP_SHAPE */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    int shape_nrects;                      /* -1 = remove shape */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    xp_box *shape_rects;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    int shape_tx, shape_ty;                /* translation for shape */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /* XP_STACKING */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    int stack_mode;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    xp_window_id sibling;          /* may be zero; in ABOVE/BELOW modes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                      it may specify a relative window */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /* XP_DEPTH, window-only */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    unsigned int depth;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /* XP_COLORMAP, window-only */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    xp_colormap_fun *colormap;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    void *colormap_data;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /* XP_WINDOW_LEVEL, window-only */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    int window_level;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+typedef struct xp_window_changes_struct xp_window_changes;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Values for bit_gravity field */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+enum xp_bit_gravity_enum {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_GRAVITY_NONE                = 0,    /* no gravity, fill everything */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_GRAVITY_NORTH_WEST  = 1,    /* anchor to top-left corner */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_GRAVITY_NORTH_EAST  = 2,    /* anchor to top-right corner */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_GRAVITY_SOUTH_EAST  = 3,    /* anchor to bottom-right corner */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_GRAVITY_SOUTH_WEST  = 4,    /* anchor to bottom-left corner */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Values for stack_mode field */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+enum xp_window_stack_mode_enum {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_UNMAPPED                    = 0,    /* remove the window */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_MAPPED_ABOVE                = 1,    /* display the window on top */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_MAPPED_BELOW                = 2,    /* display the window at bottom */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Data formats for depth field and composite functions */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+enum xp_depth_enum {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_DEPTH_NIL = 0,                      /* null source when compositing */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_DEPTH_ARGB8888,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_DEPTH_RGB555,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_DEPTH_A8,                   /* for masks when compositing */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_DEPTH_INDEX8,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Options that may be passed to the xp_init () function. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+enum xp_init_options_enum {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /* Don't mark that this process can be in the foreground. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_IN_BACKGROUND               = 1 << 0,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /* Deliver background pointer events to this process. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_BACKGROUND_EVENTS   = 1 << 1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Miscellaneous functions */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Initialize the plugin library. Only the copy/fill/composite functions
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   may be called without having previously called xp_init () */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern xp_error xp_init (unsigned int options);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Sets the current set of requested notifications to MASK. When any of
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   these arrive, CALLBACK will be invoked with CALLBACK-DATA. Note that
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   calling this function cancels any previously requested notifications
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   that aren't set in MASK. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern xp_error xp_select_events (unsigned int mask,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                             xp_event_fun *callback,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                             void *callback_data);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Waits for all initiated operations to complete. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern xp_error xp_synchronize (void);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Causes any display update initiated through the plugin libary to be
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   queued until update is reenabled. Note that calls to these functions
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   nest. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern xp_error xp_disable_update (void);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern xp_error xp_reenable_update (void);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Cursor functions. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Installs the specified cursor. ARGB-DATA should point to 32-bit
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   premultiplied big-endian ARGB data. The HOT-X,HOT-Y parameters
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   specify the offset to the cursor's hot spot from its top-left
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   corner. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern xp_error xp_set_cursor (unsigned int width, unsigned int height,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                          unsigned int hot_x, unsigned int hot_y,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                          const uint32_t *argb_data,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                          unsigned int rowbytes);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Hide and show the cursor if it's owned by the current process. Calls
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   to these functions nest. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern xp_error xp_hide_cursor (void);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern xp_error xp_show_cursor (void);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Window functions. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Create a new window as defined by MASK and VALUES. MASK must contain
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   XP_BOUNDS or an error is raised. The id of the newly created window
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   is stored in *RET-ID if this function returns XP_Success. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern xp_error xp_create_window (unsigned int mask,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                             const xp_window_changes *values,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                             xp_window_id *ret_id);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Destroys the window identified by ID. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern xp_error xp_destroy_window (xp_window_id id);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Reconfigures the given window according to MASK and VALUES. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern xp_error xp_configure_window (xp_window_id id, unsigned int mask,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                const xp_window_changes *values);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Returns true if NATIVE-ID is a window created by the plugin library.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   If so and RET-ID is non-null, stores the id of the window in *RET-ID. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern xp_bool xp_lookup_native_window (unsigned int native_id,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                   xp_window_id *ret_id);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* If ID names a window created by the plugin library, stores it's native
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   window id in *RET-NATIVE-ID. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern xp_error xp_get_native_window (xp_window_id id,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                 unsigned int *ret_native_id);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Locks the rectangle IN-RECT (or, if null, the entire window) of the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   given window's backing store. Any other non-null parameters are filled
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   in as follows:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   DEPTH = format of returned data. Currently either XP_DEPTH_ARGB8888
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   or XP_DEPTH_RGB565 (possibly with 8 bit planar alpha). Data is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   always stored in native byte order.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   BITS[0] = pointer to top-left pixel of locked color data
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   BITS[1] = pointer to top-left of locked alpha data, or null if window
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   has no alpha. If the alpha data is meshed, then BITS[1] = BITS[0].
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   ROWBYTES[0,1] = size in bytes of each row of color,alpha data
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   OUT-RECT = rectangle specifying the current position and size of the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   locked region relative to the window origin.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   Note that an error is raised when trying to lock an already locked
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   window. While the window is locked, the only operations that may
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   be performed on it are to modify, access or flush its marked region. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern xp_error xp_lock_window (xp_window_id id,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           const xp_box *in_rect,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           unsigned int *depth,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           void *bits[2],
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           unsigned int rowbytes[2],
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           xp_box *out_rect);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Mark that the region specified by SHAPE-NRECTS, SHAPE-RECTS,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   SHAPE-TX, and SHAPE-TY in the specified window has been updated, and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   will need to subsequently be redisplayed. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern xp_error xp_mark_window (xp_window_id id, int shape_nrects,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           const xp_box *shape_rects,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           int shape_tx, int shape_ty);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Unlocks the specified window. If FLUSH is true, then any marked
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   regions are immediately redisplayed. Note that it's an error to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   unlock an already unlocked window. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern xp_error xp_unlock_window (xp_window_id id, xp_bool flush);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* If anything is marked in the given window for redisplay, do it now. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern xp_error xp_flush_window (xp_window_id id);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Moves the contents of the region DX,DY pixels away from that specified
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   by DST_RECTS and DST_NRECTS in the window with SRC-ID to the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   destination region in the window DST-ID. Note that currently source
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   and destination windows must be the same. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern xp_error xp_copy_window (xp_window_id src_id, xp_window_id dst_id,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           int dst_nrects, const xp_box *dst_rects,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           int dx, int dy);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Returns true if the given window has any regions marked for
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   redisplay. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern xp_bool xp_is_window_marked (xp_window_id id);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* If successful returns a superset of the region marked for update in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   the given window. Use xp_free_region () to release the returned data. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern xp_error xp_get_marked_shape (xp_window_id id,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                int *ret_nrects, xp_box **ret_rects);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern void xp_free_shape (int nrects, xp_box *rects);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Searches for the first window below ABOVE-ID containing the point X,Y,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   and returns it's window id in *RET-ID. If no window is found, *RET-ID
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   is set to zero. If ABOVE-ID is zero, finds the topmost window
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   containing the given point. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern xp_error xp_find_window (int x, int y, xp_window_id above_id,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           xp_window_id *ret_id);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Returns the current origin and size of the window ID in *BOUNDS-RET if
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   successful. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern xp_error xp_get_window_bounds (xp_window_id id, xp_box *bounds_ret);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Window surface functions. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Create a new VRAM surface on the specified window. If successful,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   returns the identifier of the new surface in *RET-SID. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern xp_error xp_create_surface (xp_window_id id, xp_surface_id *ret_sid);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Destroys the specified surface. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern xp_error xp_destroy_surface (xp_surface_id sid);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Reconfigures the specified surface as defined by MASK and VALUES.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   Note that specifying XP_DEPTH is an error. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern xp_error xp_configure_surface (xp_surface_id sid, unsigned int mask,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                 const xp_window_changes *values);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* If successful, places the client identifier of the current process
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   in *RET-CLIENT. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern xp_error xp_get_client_id (xp_client_id *ret_client);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Given a valid window,surface combination created by the current
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   process, attempts to allow the specified external client access
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   to that surface. If successful, returns two integers in RET-KEY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   which the client can use to import the surface into their process. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern xp_error xp_export_surface (xp_window_id wid, xp_surface_id sid,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                              xp_client_id client,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                              unsigned int ret_key[2]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Given a two integer key returned from xp_export_surface (), tries
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   to import the surface into the current process. If successful the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   local surface identifier is stored in *SID-RET. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern xp_error xp_import_surface (const unsigned int key[2],
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                              xp_surface_id *sid_ret);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* If successful, stores the number of surfaces attached to the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   specified window in *RET. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern xp_error xp_get_window_surface_count (xp_window_id id,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                        unsigned int *ret);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Attaches the CGLContextObj CGL-CTX to the specified surface. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern xp_error xp_attach_gl_context (void *cgl_ctx, xp_surface_id sid);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Updates the CGLContextObj CGL-CTX to reflect any recent changes to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   the surface it's attached to. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern xp_error xp_update_gl_context (void *cgl_ctx);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Window frame functions. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Possible arguments to xp_frame_get_rect (). */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+enum xp_frame_rect_enum {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_FRAME_RECT_TITLEBAR         = 1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_FRAME_RECT_TRACKING         = 2,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_FRAME_RECT_GROWBOX          = 3,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Classes of window frame. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+enum xp_frame_class_enum {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_FRAME_CLASS_DOCUMENT                = 1 << 0,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_FRAME_CLASS_DIALOG          = 1 << 1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_FRAME_CLASS_MODAL_DIALOG            = 1 << 2,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_FRAME_CLASS_SYSTEM_MODAL_DIALOG     = 1 << 3,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_FRAME_CLASS_UTILITY         = 1 << 4,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_FRAME_CLASS_TOOLBAR         = 1 << 5,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_FRAME_CLASS_MENU                    = 1 << 6,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_FRAME_CLASS_SPLASH          = 1 << 7,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_FRAME_CLASS_BORDERLESS              = 1 << 8,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Attributes of window frames. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+enum xp_frame_attr_enum {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_FRAME_ACTIVE                        = 0x0001,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_FRAME_URGENT                        = 0x0002,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_FRAME_TITLE                 = 0x0004,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_FRAME_PRELIGHT                      = 0x0008,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_FRAME_SHADED                        = 0x0010,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_FRAME_CLOSE_BOX                     = 0x0100,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_FRAME_COLLAPSE                      = 0x0200,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_FRAME_ZOOM                  = 0x0400,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_FRAME_ANY_BUTTON                    = 0x0700,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_FRAME_CLOSE_BOX_CLICKED             = 0x0800,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_FRAME_COLLAPSE_BOX_CLICKED  = 0x1000,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_FRAME_ZOOM_BOX_CLICKED              = 0x2000,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_FRAME_ANY_CLICKED           = 0x3800,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_FRAME_GROW_BOX                      = 0x4000,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define XP_FRAME_ATTR_IS_SET(a,b)  (((a) & (b)) == (b))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define XP_FRAME_ATTR_IS_CLICKED(a,m)      ((a) & ((m) << 3))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define XP_FRAME_ATTR_SET_CLICKED(a,m)     ((a) |= ((m) << 3))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define XP_FRAME_ATTR_UNSET_CLICKED(a,m) ((a) &= ~((m) << 3))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define XP_FRAME_POINTER_ATTRS             (XP_FRAME_PRELIGHT              \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    | XP_FRAME_ANY_BUTTON          \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    | XP_FRAME_ANY_CLICKED)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern xp_error xp_frame_get_rect (int type, int class, const xp_box *outer,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                              const xp_box *inner, xp_box *ret);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern xp_error xp_frame_hit_test (int class, int x, int y,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                              const xp_box *outer,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                              const xp_box *inner, int *ret);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern xp_error xp_frame_draw (xp_window_id wid, int class, unsigned int attr,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                          const xp_box *outer, const xp_box *inner,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                          unsigned int title_len,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                          const unsigned char *title_bytes);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Memory manipulation functions. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+enum xp_composite_op_enum {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_COMPOSITE_SRC = 0,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    XP_COMPOSITE_OVER,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define XP_COMPOSITE_FUNCTION(op, src_depth, mask_depth, dest_depth) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    (((op) << 24) | ((src_depth) << 16) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     | ((mask_depth) << 8) | ((dest_depth) << 0))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define XP_COMPOSITE_FUNCTION_OP(f)         (((f) >> 24) & 255)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define XP_COMPOSITE_FUNCTION_SRC_DEPTH(f)  (((f) >> 16) & 255)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define XP_COMPOSITE_FUNCTION_MASK_DEPTH(f) (((f) >>  8) & 255)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define XP_COMPOSITE_FUNCTION_DEST_DEPTH(f) (((f) >>  0) & 255)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Composite WIDTH by HEIGHT pixels from source and mask to destination
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   using a specified function (if source and destination overlap,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   undefined behavior results).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   For SRC and DEST, the first element of the array is the color data. If
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   the second element is non-null it implies that there is alpha data
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   (which may be meshed or planar). Data without alpha is assumed to be
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   opaque.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   Passing a null SRC-ROWBYTES pointer implies that the data SRC points
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   to is a single element.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   Operations that are not supported will return XP_BadImplementation. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern xp_error xp_composite_pixels (unsigned int width, unsigned int height,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                unsigned int function,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                void *src[2], unsigned int src_rowbytes[2],
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                void *mask, unsigned int mask_rowbytes,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                void *dest[2], unsigned int dest_rowbytes[2]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Fill HEIGHT rows of data starting at DST. Each row will have WIDTH
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   bytes filled with the 32-bit pattern VALUE. Each row is DST-ROWBYTES
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   wide in total. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern void xp_fill_bytes (unsigned int width,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                      unsigned int height, uint32_t value,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                      void *dst, unsigned int dst_rowbytes);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Copy HEIGHT rows of bytes from SRC to DST. Each row will have WIDTH
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   bytes copied. SRC and DST may overlap, and the right thing will happen. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern void xp_copy_bytes (unsigned int width, unsigned int height,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                      const void *src, unsigned int src_rowbytes,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                      void *dst, unsigned int dst_rowbytes);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Suggestions for the minimum number of bytes or pixels for which it
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   makes sense to use some of the xp_ functions */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extern unsigned int xp_fill_bytes_threshold, xp_copy_bytes_threshold,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    xp_composite_area_threshold, xp_scroll_area_threshold;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Set the state for disabled hotkeys */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+xp_error xp_disable_hot_keys(xp_bool state);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* XPLUGIN_H */
</span></pre><pre style='margin:0'>

</pre>