xorg-server: Changes to 'ubuntu'
debian/changelog | 17
debian/control | 21
debian/patches/xmir.patch | 8267 +++++++++++++++++++++++++++++++--------
debian/xmir.install | 1
debian/xserver-xorg-xmir.install | 1
5 files changed, 6810 insertions(+), 1497 deletions(-)
New commits:
commit 9b443b87d14e528732e090eb9611812e22cb60e7
Author: Timo Aaltonen <tjaalton@debian.org>
Date: Wed Jun 3 11:53:48 2015 +0300
xserver-xorg-xmir.install: Removed, not used anymore.
diff --git a/debian/changelog b/debian/changelog
index b1328e6..743d57b 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+xorg-server (2:1.17.1-0ubuntu5) UNRELEASED; urgency=medium
+
+ * xserver-xorg-xmir.install: Removed, not used anymore.
+
+ -- Timo Aaltonen <tjaalton@debian.org> Wed, 03 Jun 2015 11:41:03 +0300
+
xorg-server (2:1.17.1-0ubuntu4) wily; urgency=medium
* debian/control:
diff --git a/debian/xserver-xorg-xmir.install b/debian/xserver-xorg-xmir.install
deleted file mode 100644
index d710363..0000000
--- a/debian/xserver-xorg-xmir.install
+++ /dev/null
@@ -1 +0,0 @@
-main/usr/lib/xorg/modules/extensions/libxmir.so usr/lib/xorg/modules/extensions
commit 1f9a32c290ba5744c6ec46c6afd0137a281ecbf7
Author: Timo Aaltonen <tjaalton@debian.org>
Date: Wed Jun 3 11:40:14 2015 +0300
import 1.17.1-0ubuntu4
diff --git a/debian/changelog b/debian/changelog
index 66888c3..b1328e6 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,14 @@
+xorg-server (2:1.17.1-0ubuntu4) wily; urgency=medium
+
+ * debian/control:
+ - Rename xserver-xorg-xmir to xmir
+ - Build build-depends on libmirclient to 0.13.1
+ * debian/xmir.install:
+ * debian/patches/xmir.patch:
+ - Use new XMir implementation
+
+ -- Robert Ancell <robert.ancell@canonical.com> Wed, 03 Jun 2015 14:21:10 +1200
+
xorg-server (2:1.17.1-0ubuntu3) vivid; urgency=medium
* Add a patch to fix vesa int10 failure. (LP: #1433198)
diff --git a/debian/control b/debian/control
index 1f23b0c..3fe7c76 100644
--- a/debian/control
+++ b/debian/control
@@ -96,7 +96,7 @@ Build-Depends:
# xwayland
libwayland-dev [linux-any],
# XMir
- libmirclient-dev (>= 0.4.0) [!arm64 !powerpc !ppc64el],
+ libmirclient-dev (>= 0.13.1) [!arm64 !powerpc !ppc64el],
libatomic-ops-dev,
Standards-Version: 3.9.2
Vcs-Git: git://git.debian.org/git/pkg-xorg/xserver/xorg-server
@@ -363,15 +363,24 @@ Recommends:
Description: common files used by various X servers
This package provides files necessary for all X.Org based X servers.
-Package: xserver-xorg-xmir
+Package: xmir
Architecture: amd64 armhf i386
Depends:
${shlibs:Depends},
${misc:Depends},
- xserver-xorg-core (= ${binary:Version}),
-Description: Xorg - the X.Org X server (module for running nested in Mir)
- xserver-xorg-xmir provides an extension module to support running an
- Xorg as a client of an existing Mir compositor.
+Description: Xmir X server
+ This package provides an X server running on top of Mir, using Mir
+ input devices for input and forwarding either the root window or individual
+ top-level windows as wayland surfaces.
+
+Package: xserver-xorg-xmir
+Architecture: all
+Depends: ${shlibs:Depends},
+ ${misc:Depends},
+ xmir,
+Description: Xmir X server (transitional package)
+ This is a transitional package to ease upgrades to xmir.
+ It can be safely removed.
Package: xorg-server-source
Architecture: all
diff --git a/debian/patches/xmir.patch b/debian/patches/xmir.patch
index eb90f59..ad40d3a 100644
--- a/debian/patches/xmir.patch
+++ b/debian/patches/xmir.patch
@@ -1,299 +1,307 @@
+From da18c3b8c7bd4ce3a2a1210d425272cbded19246 Mon Sep 17 00:00:00 2001
+From: Robert Ancell <robert.ancell@canonical.com>
+Date: Fri, 15 May 2015 14:58:59 +1200
+Subject: [PATCH 4/5] Add XMir
+
+---
+ composite/compalloc.c | 6 +
+ composite/compositeext.h | 3 +
+ configure.ac | 25 +
+ glx/glxdri2.c | 16 +-
+ hw/Makefile.am | 9 +-
+ hw/xmir/.gitignore | 1 +
+ hw/xmir/Makefile.am | 61 ++
+ hw/xmir/dri2/Makefile.am | 14 +
+ hw/xmir/dri2/dri2.c | 1398 +++++++++++++++++++++++++++++++++++++++++++
+ hw/xmir/dri2/dri2.h | 364 +++++++++++
+ hw/xmir/dri2/dri2ext.c | 683 +++++++++++++++++++++
+ hw/xmir/dri2/dri2int.h | 26 +
+ hw/xmir/xmir-cursor.c | 214 +++++++
+ hw/xmir/xmir-cvt.c | 304 ++++++++++
+ hw/xmir/xmir-dri2.c | 473 +++++++++++++++
+ hw/xmir/xmir-glamor.c | 1229 +++++++++++++++++++++++++++++++++++++
+ hw/xmir/xmir-input.c | 539 +++++++++++++++++
+ hw/xmir/xmir-output.c | 454 ++++++++++++++
+ hw/xmir/xmir-thread-proxy.c | 132 ++++
+ hw/xmir/xmir.c | 1013 +++++++++++++++++++++++++++++++
+ hw/xmir/xmir.h | 211 +++++++
+ 21 files changed, 7167 insertions(+), 8 deletions(-)
+ create mode 100644 hw/xmir/.gitignore
+ create mode 100644 hw/xmir/Makefile.am
+ create mode 100644 hw/xmir/dri2/Makefile.am
+ create mode 100644 hw/xmir/dri2/dri2.c
+ create mode 100644 hw/xmir/dri2/dri2.h
+ create mode 100644 hw/xmir/dri2/dri2ext.c
+ create mode 100644 hw/xmir/dri2/dri2int.h
+ create mode 100644 hw/xmir/xmir-cursor.c
+ create mode 100644 hw/xmir/xmir-cvt.c
+ create mode 100644 hw/xmir/xmir-dri2.c
+ create mode 100644 hw/xmir/xmir-glamor.c
+ create mode 100644 hw/xmir/xmir-input.c
+ create mode 100644 hw/xmir/xmir-output.c
+ create mode 100644 hw/xmir/xmir-thread-proxy.c
+ create mode 100644 hw/xmir/xmir.c
+ create mode 100644 hw/xmir/xmir.h
+
+diff --git a/composite/compalloc.c b/composite/compalloc.c
+index 8daded0..fb1b476 100644
+--- a/composite/compalloc.c
++++ b/composite/compalloc.c
+@@ -46,6 +46,7 @@
+ #endif
+
+ #include "compint.h"
++#include "compositeext.h"
+
+ static void
+ compScreenUpdate(ScreenPtr pScreen)
+@@ -411,6 +412,11 @@ compRedirectSubwindows(ClientPtr pClient, WindowPtr pWin, int update)
+ return Success;
+ }
+
++int CompositeRedirectSubwindows (WindowPtr pWin, int update)
++{
++ return compRedirectSubwindows (serverClient, pWin, update);
++}
++
+ /*
+ * Free one of the per-client per-subwindows resources,
+ * which frees one redirect per subwindow
+diff --git a/composite/compositeext.h b/composite/compositeext.h
+index b96cb1d..f279013 100644
+--- a/composite/compositeext.h
++++ b/composite/compositeext.h
+@@ -35,6 +35,9 @@ extern _X_EXPORT Bool CompositeRegisterAlternateVisuals(ScreenPtr pScreen,
+ VisualID * vids,
+ int nVisuals);
+
++extern _X_EXPORT int CompositeRedirectSubwindows(WindowPtr pWin,
++ int update);
++
+ extern _X_EXPORT Bool CompositeRegisterImplicitRedirectionException(ScreenPtr pScreen,
+ VisualID parentVisual,
+ VisualID winVisual);
+diff --git a/configure.ac b/configure.ac
+index 4e47bbc..7a42775 100644
--- a/configure.ac
+++ b/configure.ac
-@@ -621,6 +621,7 @@
- AC_ARG_ENABLE(linux_apm, AS_HELP_STRING([--disable-linux-apm], [Disable building APM support on Linux (if available).]), [enable_linux_apm=$enableval], [enable_linux_apm=yes])
- AC_ARG_ENABLE(systemd-logind, AS_HELP_STRING([--enable-systemd-logind], [Build systemd-logind support (default: auto)]), [SYSTEMD_LOGIND=$enableval], [SYSTEMD_LOGIND=auto])
- AC_ARG_ENABLE(suid-wrapper, AS_HELP_STRING([--enable-suid-wrapper], [Build suid-root wrapper for legacy driver support on rootless xserver systems (default: no)]), [SUID_WRAPPER=$enableval], [SUID_WRAPPER=no])
-+AC_ARG_ENABLE(xmir, AS_HELP_STRING([--enable-xmir], [Build support for nesting in Mir (default: auto)]), [XMIR=$enableval], [XMIR=auto])
+@@ -624,6 +624,7 @@ AC_ARG_ENABLE(xvfb, AS_HELP_STRING([--enable-xvfb], [Build Xvfb server
+ AC_ARG_ENABLE(xnest, AS_HELP_STRING([--enable-xnest], [Build Xnest server (default: auto)]), [XNEST=$enableval], [XNEST=auto])
+ AC_ARG_ENABLE(xquartz, AS_HELP_STRING([--enable-xquartz], [Build Xquartz server for OS-X (default: auto)]), [XQUARTZ=$enableval], [XQUARTZ=auto])
+ AC_ARG_ENABLE(xwayland, AS_HELP_STRING([--enable-xwayland], [Build Xwayland server (default: auto)]), [XWAYLAND=$enableval], [XWAYLAND=auto])
++AC_ARG_ENABLE(xmir, AS_HELP_STRING([--enable-xmir], [Build Xmir server (default: auto)]), [XMIR=$enableval], [XMIR=auto])
+ AC_ARG_ENABLE(standalone-xpbproxy, AS_HELP_STRING([--enable-standalone-xpbproxy], [Build a standalone xpbproxy (in addition to the one integrated into Xquartz as a separate thread) (default: no)]), [STANDALONE_XPBPROXY=$enableval], [STANDALONE_XPBPROXY=no])
+ AC_ARG_ENABLE(xwin, AS_HELP_STRING([--enable-xwin], [Build XWin server (default: auto)]), [XWIN=$enableval], [XWIN=auto])
+ AC_ARG_ENABLE(glamor, AS_HELP_STRING([--enable-glamor], [Build glamor dix module (default: no)]), [GLAMOR=$enableval], [GLAMOR=no])
+@@ -745,6 +746,7 @@ case $host_os in
+ XVFB=no
+ XNEST=no
+ XWAYLAND=no
++ XMIR=no
- dnl DDXes.
- AC_ARG_ENABLE(xorg, AS_HELP_STRING([--enable-xorg], [Build Xorg server (default: auto)]), [XORG=$enableval], [XORG=auto])
-@@ -1368,6 +1369,15 @@
- SDK_REQUIRED_MODULES="$SDK_REQUIRED_MODULES $XINERAMAPROTO"
+ COMPOSITE=no
+ DGA=no
+@@ -2472,6 +2474,27 @@ if test "x$XWAYLAND" = xyes; then
+ [${WAYLAND_PREFIX}/bin$PATH_SEPARATOR$PATH])
fi
-+if test "x$XMIR" != xno; then
-+ PKG_CHECK_MODULES([XMIR], [mirclient], [XMIR=yes], [XMIR=no])
-+ AC_SUBST([XMIR_LIBS])
-+ AC_SUBST([XMIR_CFLAGS])
-+ AC_DEFINE(XMIR, 1, [Support wayland mode])
-+ SDK_REQUIRED_MODULES="$SDK_REQUIRED_MODULES mirclient"
++dnl Xmir DDX
++
++PKG_CHECK_MODULES(XMIRMODULES, [mirclient >= 0.13.1 libdrm epoxy], [have_xmir=yes], [have_xmir=no])
++AC_MSG_CHECKING([whether to build Xmir DDX])
++if test "x$XMIR" = xauto; then
++ XMIR="$have_xmir"
+fi
++AC_MSG_RESULT([$XMIR])
+AM_CONDITIONAL(XMIR, [test "x$XMIR" = xyes])
+
- AM_CONDITIONAL(XACE, [test "x$XACE" = xyes])
- if test "x$XACE" = xyes; then
- AC_DEFINE(XACE, 1, [Build X-ACE extension])
-@@ -2608,6 +2618,7 @@
- hw/xfree86/utils/man/Makefile
- hw/xfree86/utils/cvt/Makefile
- hw/xfree86/utils/gtf/Makefile
-+hw/xfree86/xmir/Makefile
- hw/dmx/config/Makefile
- hw/dmx/config/man/Makefile
- hw/dmx/doc/Makefile
---- a/hw/xfree86/Makefile.am
-+++ b/hw/xfree86/Makefile.am
-@@ -34,11 +34,15 @@
- INT10_SUBDIR = int10
- endif
-
-+if XMIR
-+XMIR_SUBDIR = xmir
-+endif
++if test "x$XMIR" = xyes; then
++ if test "x$have_xmir" = xno; then
++ AC_MSG_ERROR([Xmir build explicitly requested, but required modules not found.])
++ fi
++
++ XMIR_LIBS="$FB_LIB $FIXES_LIB $MI_LIB $XEXT_LIB $DBE_LIB $RECORD_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $DRI3_LIB $PRESENT_LIB $MIEXT_SYNC_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $MAIN_LIB $DIX_LIB $OS_LIB"
++ XMIR_SYS_LIBS="$XMIRMODULES_LIBS $GLX_SYS_LIBS"
++ AC_SUBST([XMIR_LIBS])
++ AC_SUBST([XMIR_SYS_LIBS])
++fi
+
- SUBDIRS = common ddc x86emu $(INT10_SUBDIR) os-support parser \
- ramdac $(VGAHW_SUBDIR) loader modes $(DRI_SUBDIR) \
- $(DRI2_SUBDIR) . $(VBE_SUBDIR) i2c dixmods \
- fbdevhw shadowfb exa $(XF86UTILS_SUBDIR) doc man \
-- $(GLAMOR_EGL_SUBDIR) drivers
-+ $(GLAMOR_EGL_SUBDIR) $(XMIR_SUBDIR) drivers
-
- DIST_SUBDIRS = common ddc i2c x86emu int10 fbdevhw os-support \
- parser ramdac shadowfb vbe vgahw \
---- a/hw/xfree86/common/xf86Config.c
-+++ b/hw/xfree86/common/xf86Config.c
-@@ -118,6 +118,7 @@
- {.name = "fb",.toLoad = TRUE,.load_opt = NULL},
- {.name = "shadow",.toLoad = TRUE,.load_opt = NULL},
- #endif
-+ {.name = "xmir", .toLoad = FALSE, .load_opt = NULL},
- {.name = NULL,.toLoad = FALSE,.load_opt = NULL}
- };
-@@ -272,6 +273,17 @@
- return NULL;
+ dnl and the rest of these are generic, so they're in config.h
+ dnl
+@@ -2620,6 +2643,8 @@ hw/kdrive/fbdev/Makefile
+ hw/kdrive/linux/Makefile
+ hw/kdrive/src/Makefile
+ hw/xwayland/Makefile
++hw/xmir/Makefile
++hw/xmir/dri2/Makefile
+ test/Makefile
+ test/xi1/Makefile
+ test/xi2/Makefile
+diff --git a/glx/glxdri2.c b/glx/glxdri2.c
+index bcd57a4..32bfb1b 100644
+--- a/glx/glxdri2.c
++++ b/glx/glxdri2.c
+@@ -361,8 +361,10 @@ __glXDRIscreenDestroy(__GLXscreen * baseScreen)
+ free(screen->driConfigs);
}
-+ /*
-+ * Set the xmir module to autoload if requested.
-+ */
-+ if (xorgMir) {
-+ for (i=0 ; ModuleDefaults[i].name != NULL ; i++) {
-+ if (strcmp(ModuleDefaults[i].name, "xmir") == 0) {
-+ ModuleDefaults[i].toLoad = TRUE;
-+ }
-+ }
+- pScrn->EnterVT = screen->enterVT;
+- pScrn->LeaveVT = screen->leaveVT;
++ if (pScrn) {
++ pScrn->EnterVT = screen->enterVT;
++ pScrn->LeaveVT = screen->leaveVT;
+ }
-+
- if (xf86configptr->conf_modules) {
- /* Walk the disable list and let people know what we've parsed to
- * not be loaded
---- a/hw/xfree86/common/xf86Events.c
-+++ b/hw/xfree86/common/xf86Events.c
-@@ -613,6 +613,10 @@
- {
- DebugF("xf86VTSwitch()\n");
-+ /* Host Mir server handles VTs for XMir */
-+ if (xorgMir)
-+ return;
-+
- #ifdef XFreeXDGA
- if (!DGAVTSwitch())
- return;
---- a/hw/xfree86/common/xf86Globals.c
-+++ b/hw/xfree86/common/xf86Globals.c
-@@ -206,3 +206,6 @@
- #endif
- RootWinPropPtr *xf86RegisteredPropertiesTable = NULL;
- Bool xorgHWAccess = FALSE;
-+Bool xorgMir = FALSE;
-+const char *mirID = NULL;
-+const char *mirSocket = NULL;
---- a/hw/xfree86/common/xf86Helper.c
-+++ b/hw/xfree86/common/xf86Helper.c
-@@ -100,7 +100,14 @@
- if (xf86DriverList[drvIndex]->module)
- UnloadModule(xf86DriverList[drvIndex]->module);
- free(xf86DriverList[drvIndex]);
-- xf86DriverList[drvIndex] = NULL;
-+
-+ /* Compact xf86DriverList array, update xf86NumDrivers */
-+ xf86NumDrivers--;
-+ if(drvIndex != xf86NumDrivers)
-+ memmove(xf86DriverList + drvIndex,
-+ xf86DriverList + drvIndex + 1,
-+ sizeof(DriverPtr) * (xf86NumDrivers - drvIndex));
-+ xf86DriverList = realloc(xf86DriverList, xf86NumDrivers * sizeof(DriverPtr));
- }
+ free(screen);
}
+@@ -1007,10 +1009,12 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
+ screen->base.GLXmajor = 1;
+ screen->base.GLXminor = 4;
---- a/hw/xfree86/common/xf86Init.c
-+++ b/hw/xfree86/common/xf86Init.c
-@@ -541,7 +541,7 @@
- * needed at this early stage.
- */
-
-- for (i = 0; i < xf86NumDrivers; i++) {
-+ for (i = 0; i < xf86NumDrivers; ) {
- xorgHWFlags flags = HW_IO;
-
- if (xf86DriverList[i]->Identify != NULL)
-@@ -552,12 +552,22 @@
- GET_REQUIRED_HW_INTERFACES,
- &flags);
-
-+ if (xorgMir &&
-+ (NEED_IO_ENABLED(flags) || !(flags & HW_SKIP_CONSOLE))) {
-+
-+ ErrorF("Driver needs flags %lu, incompatible with nested, deleting.\n", flags);
-+ xf86DeleteDriver(i);
-+ continue;
-+ }
-+
- if (NEED_IO_ENABLED(flags))
- want_hw_access = TRUE;
-
- /* Non-seat0 X servers should not open console */
- if (!(flags & HW_SKIP_CONSOLE) && !ServerIsNotSeat0())
- xorgHWOpenConsole = TRUE;
-+
-+ i++;
- }
-
- if (xorgHWOpenConsole)
-@@ -652,9 +662,13 @@
- }
-
- /* Remove (unload) drivers that are not required */
-- for (i = 0; i < xf86NumDrivers; i++)
-- if (xf86DriverList[i] && xf86DriverList[i]->refCount <= 0)
-+ for (i = 0; i < xf86NumDrivers; )
-+ if (xf86DriverList[i] &&
-+ !xf86DriverHasEntities(xf86DriverList[i]) &&
-+ xf86DriverList[i]->refCount <= 0)
- xf86DeleteDriver(i);
-+ else
-+ i++;
-
- /*
- * At this stage we know how many screens there are.
-@@ -1492,6 +1506,17 @@
- xf86Info.ShareVTs = TRUE;
- return 1;
- }
-+ if (!strcmp(argv[i], "-mir")) {
-+ CHECK_FOR_REQUIRED_ARGUMENT();
-+ mirID = argv[++i];
-+ xorgMir = TRUE;
-+ return 2;
-+ }
-+ if (!strcmp(argv[i], "-mirSocket")) {
-+ CHECK_FOR_REQUIRED_ARGUMENT();
-+ mirSocket = argv[++i];
-+ return 2;
+- screen->enterVT = pScrn->EnterVT;
+- pScrn->EnterVT = glxDRIEnterVT;
+- screen->leaveVT = pScrn->LeaveVT;
+- pScrn->LeaveVT = glxDRILeaveVT;
++ if (pScrn) {
++ screen->enterVT = pScrn->EnterVT;
++ pScrn->EnterVT = glxDRIEnterVT;
++ screen->leaveVT = pScrn->LeaveVT;
++ pScrn->LeaveVT = glxDRILeaveVT;
+ }
- /* OS-specific processing */
- return xf86ProcessArgument(argc, argv, i);
-@@ -1565,6 +1590,8 @@
- ErrorF
- ("-novtswitch don't automatically switch VT at reset & exit\n");
- ErrorF("-sharevts share VTs with another X server\n");
-+ ErrorF
-+ ("-mir MirID run nested in a Mir compositor with app id MirID\n");
- /* OS-specific usage */
- xf86UseMsg();
- ErrorF("\n");
---- a/hw/xfree86/common/xf86Priv.h
-+++ b/hw/xfree86/common/xf86Priv.h
-@@ -93,6 +93,9 @@
- extern _X_EXPORT const char *xf86VisualNames[];
- extern _X_EXPORT int xf86Verbose; /* verbosity level */
- extern _X_EXPORT int xf86LogVerbose; /* log file verbosity level */
-+extern _X_EXPORT Bool xorgMir;
-+extern _X_EXPORT const char *mirID;
-+extern _X_EXPORT const char *mirSocket;
+ __glXsetGetProcAddress(glXGetProcAddressARB);
- extern _X_EXPORT RootWinPropPtr *xf86RegisteredPropertiesTable;
-
-@@ -150,6 +153,7 @@
- int num);
- extern _X_EXPORT pmWait (*xf86PMConfirmEventToOs) (int fd, pmEvent event);
+diff --git a/hw/Makefile.am b/hw/Makefile.am
+index 19895dc..b7b958c 100644
+--- a/hw/Makefile.am
++++ b/hw/Makefile.am
+@@ -30,6 +30,10 @@ if XWAYLAND
+ XWAYLAND_SUBDIRS = xwayland
+ endif
++if XMIR
++XMIR_SUBDIRS = xmir
++endif
+
- /* xf86Helper.c */
- extern _X_EXPORT void
- xf86LogInit(void);
---- a/hw/xfree86/ramdac/xf86Cursor.c
-+++ b/hw/xfree86/ramdac/xf86Cursor.c
-@@ -58,7 +58,12 @@
- xf86CursorScreenPtr ScreenPriv;
- miPointerScreenPtr PointPriv;
-
-- if (!xf86InitHardwareCursor(pScreen, infoPtr))
-+ infoPtr->pScrn = xf86ScreenToScrn(pScreen);
-+
-+ /* If we can't create a hardware cursor don't bother initialising HW cursor support */
-+ if (infoPtr->MaxWidth != 0 &&
-+ infoPtr->MaxHeight != 0 &&
-+ !xf86InitHardwareCursor(pScreen, infoPtr))
- return FALSE;
-
- if (!dixRegisterPrivateKey(&xf86CursorScreenKeyRec, PRIVATE_SCREEN, 0))
---- a/hw/xfree86/ramdac/xf86HWCurs.c
-+++ b/hw/xfree86/ramdac/xf86HWCurs.c
-@@ -114,8 +114,6 @@
- infoPtr->RealizeCursor = RealizeCursorInterleave0;
- }
+ SUBDIRS = \
+ $(XORG_SUBDIRS) \
+ $(XWIN_SUBDIRS) \
+@@ -38,9 +42,10 @@ SUBDIRS = \
+ $(DMX_SUBDIRS) \
+ $(KDRIVE_SUBDIRS) \
+ $(XQUARTZ_SUBDIRS) \
+- $(XWAYLAND_SUBDIRS)
++ $(XWAYLAND_SUBDIRS) \
++ $(XMIR_SUBDIRS)
-- infoPtr->pScrn = xf86ScreenToScrn(pScreen);
--
- return TRUE;
- }
+-DIST_SUBDIRS = dmx xfree86 vfb xnest xwin xquartz kdrive xwayland
++DIST_SUBDIRS = dmx xfree86 vfb xnest xwin xquartz kdrive xwayland xmir
+ relink:
+ $(AM_V_at)for i in $(SUBDIRS) ; do $(MAKE) -C $$i relink || exit 1 ; done
+diff --git a/hw/xmir/.gitignore b/hw/xmir/.gitignore
+new file mode 100644
+index 0000000..b6a16d4
--- /dev/null
-+++ b/hw/xfree86/xmir/#xmir.h#
-@@ -0,0 +1,14 @@
++++ b/hw/xmir/.gitignore
+@@ -0,0 +1 @@
++Xmir
+diff --git a/hw/xmir/Makefile.am b/hw/xmir/Makefile.am
+new file mode 100644
+index 0000000..e494091
+--- /dev/null
++++ b/hw/xmir/Makefile.am
+@@ -0,0 +1,61 @@
++bin_PROGRAMS = Xmir
+
-+typedef struct MirBufferInfo {
-+ uint32_t name;
-+ uint32_t stride;
-+} MirBufferInfo;
++if DRI2
++SUBDIRS = dri2
++endif
+
-+typedef void (*XMirBufferReceivedProcPtr)(WindowPtr window,
-+ MirBufferInfo *info);
++Xmir_CFLAGS = \
++ -I$(top_srcdir)/glamor \
++ -I$(srcdir)/dri2 \
++ -I$(top_srcdir)/glx \
++ -DHAVE_DIX_CONFIG_H \
++ $(XMIRMODULES_CFLAGS) \
++ $(DIX_CFLAGS) \
++ $(GLAMOR_CFLAGS) \
++ $(GBM_CFLAGS)
++
++Xmir_SOURCES = \
++ xmir.c \
++ xmir-cursor.c \
++ xmir-input.c \
++ xmir-output.c \
++ xmir-cvt.c \
++ xmir-thread-proxy.c \
++ xmir.h \
++ $(top_srcdir)/Xi/stubs.c \
++ $(top_srcdir)/mi/miinitext.c
++
++Xmir_LDADD = \
++ $(glamor_lib) \
++ $(aiglx_lib) \
++ $(XMIR_LIBS) \
++ $(XMIR_SYS_LIBS) \
++ $(XSERVER_SYS_LIBS)
++Xmir_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG)
++
++if GLAMOR_EGL
++Xmir_SOURCES += xmir-glamor.c
++
++glamor_lib = $(top_builddir)/glamor/libglamor.la
++
++if DRI2
++Xmir_SOURCES += xmir-dri2.c
++endif
+
-+typedef struct xmir_screen {
-+ XMirBufferReceivedProcPtr BufferNotify;
-+ MirSurface *root_surf;
-+ RealizeWindowProcPtr RealizeWindow;
-+} xmir_screen;
++Xmir_LDADD += $(GLAMOR_LIBS) $(GBM_LIBS) -lEGL -lGL
++endif
++
++if DRI2
++Xmir_LDADD += dri2/libdri2.la
++endif
++
++#dnl FIXME: Needed?
++if AIGLX_DRI_LOADER
++aiglx_lib = $(top_builddir)/glx/libglxdri.la
++if NO_UNDEFINED
++aiglx_lib += $(LIBDRM_LIBS) $(PIXMAN_LIBS)
++endif
++endif
++
++relink:
++ $(AM_V_at)rm -f Xmir$(EXEEXT) && $(MAKE) Xmir$(EXEEXT)
+diff --git a/hw/xmir/dri2/Makefile.am b/hw/xmir/dri2/Makefile.am
+new file mode 100644
+index 0000000..696240c
--- /dev/null
-+++ b/hw/xfree86/xmir/Makefile.am
-@@ -0,0 +1,26 @@
-+INCLUDES = \
-+ $(XORG_INCS) \
-+ -I$(srcdir)/../ddc \
-+ -I$(srcdir)/../ramdac \
-+ -I$(srcdir)/../i2c \
-+ -I$(srcdir)/../parser \
-+ -I$(srcdir)/../modes
-+
-+libxmir_la_LTLIBRARIES = libxmir.la
-+libxmir_la_CFLAGS = \
-+ -DHAVE_XORG_CONFIG_H \
-+ $(DRI_CFLAGS) \
-+ $(DIX_CFLAGS) $(XORG_CFLAGS) $(LIBDRM_CFLAGS) \
-+ $(XMIR_CFLAGS)
-+
-+libxmir_la_LDFLAGS = -module -avoid-version $(LIBDRM_LIBS) $(XMIR_LIBS)
-+libxmir_ladir = $(moduledir)/extensions
-+libxmir_la_SOURCES = \
-+ xmir.c \
-+ xmir-window.c \
-+ xmir-output.c \
-+ xmir-thread-proxy.c \
-+ xmir.h \
-+ xmir-private.h
-+
-+sdk_HEADERS = xmir.h
++++ b/hw/xmir/dri2/Makefile.am
+@@ -0,0 +1,14 @@
++noinst_LTLIBRARIES = libdri2.la
++
++AM_CFLAGS = \
++ -DHAVE_DIX_CONFIG_H \
++ -I$(top_srcdir)/hw/xmir \
++ $(DIX_CFLAGS) \
++ $(XMIRMODULES_CFLAGS)
++
++libdri2_la_SOURCES = \
++ dri2.c \
++ dri2.h \
++ dri2ext.c \
++ dri2int.h
++
+diff --git a/hw/xmir/dri2/dri2.c b/hw/xmir/dri2/dri2.c
+new file mode 100644
+index 0000000..6aa19ba
--- /dev/null
-+++ b/hw/xfree86/xmir/xmir-output.c
-@@ -0,0 +1,678 @@
++++ b/hw/xmir/dri2/dri2.c
+@@ -0,0 +1,1398 @@
+/*
-+ * Copyright © 2012 Canonical, Inc
++ * Copyright © 2007, 2008 Red Hat, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Soft-
@@ -321,768 +329,5723 @@
+ * the copyright holder.
+ *
+ * Authors:
-+ * Christopher James Halse Rogers (christopher.halse.rogers@canonical.com)
++ * Kristian Høgsberg (krh@redhat.com)
+ */
+
-+#include <stdlib.h>
-+#include <stdio.h>
-+#include <math.h>
++#include <dix-config.h>
+
-+#include <xorg-config.h>
-+#include "xmir.h"
-+#include "xmir-private.h"
-+#include "xf86Crtc.h"
-+#include "xf86Priv.h"
-+
-+struct xmir_crtc {
-+ xmir_screen *xmir;
-+ xmir_window *root_fragment;
-+ MirDisplayConfiguration *config;
-+};
++#include <errno.h>
++#include "list.h"
++#include "scrnintstr.h"
++#include "windowstr.h"
++#include "dixstruct.h"
++#include "dri2.h"
++#include "dri2int.h"
++#include "damage.h"
++
++CARD8 dri2_major; /* version of DRI2 supported by DDX */
++CARD8 dri2_minor;
++
++static DevPrivateKeyRec dri2ScreenPrivateKeyRec;
++
++#define dri2ScreenPrivateKey (&dri2ScreenPrivateKeyRec)
++
++static DevPrivateKeyRec dri2WindowPrivateKeyRec;
++
++#define dri2WindowPrivateKey (&dri2WindowPrivateKeyRec)
++
++static DevPrivateKeyRec dri2PixmapPrivateKeyRec;
++
++#define dri2PixmapPrivateKey (&dri2PixmapPrivateKeyRec)
++
++static RESTYPE dri2DrawableRes;
++
++typedef struct _DRI2Screen *DRI2ScreenPtr;
++
++typedef struct _DRI2Drawable {
++ DRI2ScreenPtr dri2_screen;
++ DrawablePtr drawable;
++ struct xorg_list reference_list;
++ int width;
++ int height;
++ DRI2BufferPtr *buffers;
++ int bufferCount;
++ unsigned int swapsPending;
++ ClientPtr blockedClient;
++ Bool blockedOnMsc;
++ int swap_interval;
++ CARD64 swap_count;
++ int64_t target_sbc; /* -1 means no SBC wait outstanding */
++ CARD64 last_swap_target; /* most recently queued swap target */
++ CARD64 last_swap_msc; /* msc at completion of most recent swap */
++ CARD64 last_swap_ust; /* ust at completion of most recent swap */
++ int swap_limit; /* for N-buffering */
++ Bool needInvalidate;
++} DRI2DrawableRec, *DRI2DrawablePtr;
++
++typedef struct _DRI2Screen {
++ ScreenPtr screen;
++ int refcnt;
++ unsigned int numDrivers;
++ const char **driverNames;
++ const char *deviceName;
++ int fd;
++ unsigned int lastSequence;
++
++ DRI2CreateBufferProcPtr CreateBuffer;
++ DRI2DestroyBufferProcPtr DestroyBuffer;
++ DRI2CopyRegionProcPtr CopyRegion;
++ DRI2ScheduleSwapProcPtr ScheduleSwap;
++ DRI2GetMSCProcPtr GetMSC;
++ DRI2ScheduleWaitMSCProcPtr ScheduleWaitMSC;
++ DRI2AuthMagic2ProcPtr AuthMagic;
++ DRI2AuthMagicProcPtr LegacyAuthMagic;
++ DRI2ReuseBufferNotifyProcPtr ReuseBufferNotify;
++ DRI2SwapLimitValidateProcPtr SwapLimitValidate;
++ DRI2GetParamProcPtr GetParam;
++
++ ConfigNotifyProcPtr ConfigNotify;
++ SetWindowPixmapProcPtr SetWindowPixmap;
++ DRI2CreateBuffer2ProcPtr CreateBuffer2;
++ DRI2DestroyBuffer2ProcPtr DestroyBuffer2;
++ DRI2CopyRegion2ProcPtr CopyRegion2;
++} DRI2ScreenRec;
+
-+static const char *
-+xmir_mir_dpms_mode_description(MirPowerMode mode)
++static void
++destroy_buffer(DrawablePtr pDraw, DRI2BufferPtr buffer);
++
++static DRI2ScreenPtr
++DRI2GetScreen(ScreenPtr pScreen)
+{
-+ switch (mode)
-+ {
-+ case mir_power_mode_on:
-+ return "mir_power_mode_on";
-+ case mir_power_mode_standby:
-+ return "mir_power_mode_standby";
-+ case mir_power_mode_suspend:
-+ return "mir_power_mode_suspend";
-+ case mir_power_mode_off:
-+ return "mir_power_mode_off";
++ return dixLookupPrivate(&pScreen->devPrivates, dri2ScreenPrivateKey);
++}
++
++static DRI2DrawablePtr
++DRI2GetDrawable(DrawablePtr pDraw)
++{
++ WindowPtr pWin;
++ PixmapPtr pPixmap;
++
++ switch (pDraw->type) {
++ case DRAWABLE_WINDOW:
++ pWin = (WindowPtr) pDraw;
++ return dixLookupPrivate(&pWin->devPrivates, dri2WindowPrivateKey);
++ case DRAWABLE_PIXMAP:
++ pPixmap = (PixmapPtr) pDraw;
++ return dixLookupPrivate(&pPixmap->devPrivates, dri2PixmapPrivateKey);
+ default:
-+ return "OMGUNKNOWN!";
++ return NULL;
+ }
+}
+
-+static void
-+xmir_crtc_dpms(xf86CrtcPtr crtc, int mode)
-+{
-+ xf86CrtcConfigPtr crtc_cfg = XF86_CRTC_CONFIG_PTR(crtc->scrn);
-+ struct xmir_crtc *xmir_crtc = crtc->driver_private;
-+
-+ for (int i = 0; i < crtc_cfg->num_output; i++) {
-+ /* If this output should be driven by our "CRTC", set DPMS mode */
-+ MirDisplayOutput *output = crtc_cfg->output[i]->driver_private;
-+ if (crtc_cfg->output[i]->crtc == crtc) {
-+ xf86Msg(X_INFO, "Setting DPMS mode for output %d to %d\n", i, mode);
-+ switch (mode) {
-+ case DPMSModeOn:
-+ output->power_mode = mir_power_mode_on;
-+ xmir_crtc->xmir->dpms_on = TRUE;
-+ break;
-+ case DPMSModeStandby:
-+ output->power_mode = mir_power_mode_standby;
-+ xmir_crtc->xmir->dpms_on = FALSE;
-+ break;
-+ case DPMSModeSuspend:
-+ output->power_mode = mir_power_mode_suspend;
-+ xmir_crtc->xmir->dpms_on = FALSE;
-+ break;
-+ case DPMSModeOff:
-+ output->power_mode = mir_power_mode_off;
-+ xmir_crtc->xmir->dpms_on = FALSE;
-+ break;
-+ }
-+ }
++static DRI2DrawablePtr
++DRI2AllocateDrawable(DrawablePtr pDraw)
++{
++ DRI2ScreenPtr ds = DRI2GetScreen(pDraw->pScreen);
++ DRI2DrawablePtr pPriv;
++ CARD64 ust;
++ WindowPtr pWin;
++ PixmapPtr pPixmap;
++
++ pPriv = malloc(sizeof *pPriv);
++ if (pPriv == NULL)
++ return NULL;
++
++ pPriv->dri2_screen = ds;
++ pPriv->drawable = pDraw;
++ pPriv->width = pDraw->width;
++ pPriv->height = pDraw->height;
++ pPriv->buffers = NULL;
++ pPriv->bufferCount = 0;
++ pPriv->swapsPending = 0;
++ pPriv->blockedClient = NULL;
++ pPriv->blockedOnMsc = FALSE;
++ pPriv->swap_count = 0;
++ pPriv->target_sbc = -1;
++ pPriv->swap_interval = 1;
++ /* Initialize last swap target from DDX if possible */
++ if (!ds->GetMSC || !(*ds->GetMSC) (pDraw, &ust, &pPriv->last_swap_target))
++ pPriv->last_swap_target = 0;
++
++ pPriv->swap_limit = 1; /* default to double buffering */
++ pPriv->last_swap_msc = 0;
++ pPriv->last_swap_ust = 0;
++ xorg_list_init(&pPriv->reference_list);
++ pPriv->needInvalidate = FALSE;
++ if (pDraw->type == DRAWABLE_WINDOW) {
++ pWin = (WindowPtr) pDraw;
++ dixSetPrivate(&pWin->devPrivates, dri2WindowPrivateKey, pPriv);
++ }
++ else {
++ pPixmap = (PixmapPtr) pDraw;
++ dixSetPrivate(&pPixmap->devPrivates, dri2PixmapPrivateKey, pPriv);
+ }
-+ mir_wait_for(mir_connection_apply_display_config(xmir_connection_get(),
-+ xmir_crtc->config));
++
++ return pPriv;
+}
+
-+static const char*
-+xmir_get_output_type_str(MirDisplayOutput *mir_output)
++Bool
++DRI2SwapLimit(DrawablePtr pDraw, int swap_limit)
+{
-+ const char *str = "Invalid";
++ DRI2DrawablePtr pPriv = DRI2GetDrawable(pDraw);
++ DRI2ScreenPtr ds;
+
-+ switch(mir_output->type)
-+ {
-+ case mir_display_output_type_vga: str = "VGA"; break;
-+ case mir_display_output_type_dvii: str = "DVI"; break;
-+ case mir_display_output_type_dvid: str = "DVI"; break;
-+ case mir_display_output_type_dvia: str = "DVI"; break;
-+ case mir_display_output_type_composite: str = "Composite"; break;
-+ case mir_display_output_type_svideo: str = "TV"; break;
-+ case mir_display_output_type_lvds: str = "LVDS"; break;
-+ case mir_display_output_type_component: str = "CTV"; break;
-+ case mir_display_output_type_ninepindin: str = "DIN"; break;
-+ case mir_display_output_type_displayport: str = "DP"; break;
-+ case mir_display_output_type_hdmia: str = "HDMI"; break;
-+ case mir_display_output_type_hdmib: str = "HDMI"; break;
-+ case mir_display_output_type_tv: str = "TV"; break;
-+ case mir_display_output_type_edp: str = "eDP"; break;
++ if (!pPriv)
++ return FALSE;
+
-+ case mir_display_output_type_unknown: str = "None"; break;
-+ default: break;
++ ds = pPriv->dri2_screen;
++
++ if (!ds->SwapLimitValidate || !ds->SwapLimitValidate(pDraw, swap_limit))
++ return FALSE;
++
++ pPriv->swap_limit = swap_limit;
++
++ /* Check throttling */
++ if (pPriv->swapsPending >= pPriv->swap_limit)
++ return TRUE;
++
++ if (pPriv->target_sbc == -1 && !pPriv->blockedOnMsc) {
++ if (pPriv->blockedClient) {
++ AttendClient(pPriv->blockedClient);
++ pPriv->blockedClient = NULL;
++ }
+ }
+
-+ return str;
++ return TRUE;
+}
+
-+static void
-+xmir_output_populate(xf86OutputPtr xf86output, MirDisplayOutput *output)
++typedef struct DRI2DrawableRefRec {
++ XID id;
++ XID dri2_id;
++ DRI2InvalidateProcPtr invalidate;
++ void *priv;
++ struct xorg_list link;
++} DRI2DrawableRefRec, *DRI2DrawableRefPtr;
++
++static DRI2DrawableRefPtr
++DRI2LookupDrawableRef(DRI2DrawablePtr pPriv, XID id)
+{
-+ /* We can always arbitrarily clone and output */
-+ xf86output->possible_crtcs = 0xffffffff;
-+ xf86output->possible_clones = 0xffffffff;
++ DRI2DrawableRefPtr ref;
+
-+ xf86output->driver_private = output;
++ xorg_list_for_each_entry(ref, &pPriv->reference_list, link) {
++ if (ref->id == id)
++ return ref;
++ }
+
-+ xf86output->interlaceAllowed = FALSE;
-+ xf86output->doubleScanAllowed = FALSE;
-+ xf86output->mm_width = output->physical_width_mm;
-+ xf86output->mm_height = output->physical_height_mm;
-+ /* TODO: Subpixel order from Mir */
-+ xf86output->subpixel_order = SubPixelUnknown;
++ return NULL;
+}
+
-+static DisplayModePtr
-+xmir_create_xf86mode(const struct MirDisplayMode *mir_mode)
++static int
++DRI2AddDrawableRef(DRI2DrawablePtr pPriv, XID id, XID dri2_id,
++ DRI2InvalidateProcPtr invalidate, void *priv)
+{
-+ DisplayModePtr mode;
++ DRI2DrawableRefPtr ref;
+
-+ mode = xf86CVTMode(mir_mode->horizontal_resolution,
-+ mir_mode->vertical_resolution,
-+ mir_mode->refresh_rate,
-+ FALSE, FALSE);
++ ref = malloc(sizeof *ref);
Reply to: