[yocto] [PATCH 2/6] meta-intel: add xserver-xf86-dri-lite_1.9.3 to common
Darren Hart
dvhart at linux.intel.com
Wed Jun 1 13:21:40 PDT 2011
Hi Tom,
A quick glance suggests most of these patches need the upstream status
fields added to them.
http://wiki.yoctoproject.org/wiki/Best_Known_Methods_%28BKMs%29_for_Package_Updating#Patch_Comments
Per Saul's email to the poky list on 04/05/2011 "Patch Comments and
Upstream-Status"
--
Darren
On 06/01/2011 12:55 PM, tom.zanussi at intel.com wrote:
> From: Tom Zanussi <tom.zanussi at intel.com>
>
> emgd 1.6 requires xserver 1.9.3, which is no longer in meta, and it
> needs to be shared by multiple BSPs, so add it to common.
>
> Signed-off-by: Tom Zanussi <tom.zanussi at intel.com>
> ---
> .../cache-xkbcomp-output-for-fast-start-up.patch | 358 ++++++++++++++++++++
> .../xserver-xf86-dri-lite/crosscompile.patch | 20 ++
> .../xserver-xf86-dri-lite/doublefix.patch | 13 +
> .../xserver-xf86-dri-lite/drmfix.patch | 13 +
> .../xserver-xf86-dri-lite/fix_macros.patch | 21 ++
> .../xserver-xf86-dri-lite/fix_macros1.patch | 22 ++
> .../fix_open_max_preprocessor_error.patch | 13 +
> .../libdri-xinerama-symbol.patch | 50 +++
> .../xserver-xf86-dri-lite/macro_tweak.patch | 28 ++
> .../xserver-xf86-dri-lite/nodolt.patch | 12 +
> .../xorg-server-disable-dri_sarea.patch | 12 +
> .../xorg-server-enable-dri2.patch | 23 ++
> .../xserver-1.5.0-bg-none-root.patch | 156 +++++++++
> .../xserver-DRI2Swapbuffer.patch | 179 ++++++++++
> .../xserver-xf86-dri-lite/xserver-boottime.patch | 38 ++
> .../xserver-xf86-dri-lite/xserver-no-root-2.patch | 105 ++++++
> .../xorg-xserver/xserver-xf86-dri-lite_1.9.3.bb | 19 +
> 17 files changed, 1082 insertions(+), 0 deletions(-)
> create mode 100644 common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/cache-xkbcomp-output-for-fast-start-up.patch
> create mode 100644 common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/crosscompile.patch
> create mode 100644 common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/doublefix.patch
> create mode 100644 common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/drmfix.patch
> create mode 100644 common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/fix_macros.patch
> create mode 100644 common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/fix_macros1.patch
> create mode 100644 common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/fix_open_max_preprocessor_error.patch
> create mode 100644 common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/libdri-xinerama-symbol.patch
> create mode 100644 common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/macro_tweak.patch
> create mode 100644 common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/nodolt.patch
> create mode 100755 common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/xorg-server-disable-dri_sarea.patch
> create mode 100755 common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/xorg-server-enable-dri2.patch
> create mode 100644 common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/xserver-1.5.0-bg-none-root.patch
> create mode 100644 common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/xserver-DRI2Swapbuffer.patch
> create mode 100644 common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/xserver-boottime.patch
> create mode 100644 common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/xserver-no-root-2.patch
> create mode 100644 common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite_1.9.3.bb
>
> diff --git a/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/cache-xkbcomp-output-for-fast-start-up.patch b/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/cache-xkbcomp-output-for-fast-start-up.patch
> new file mode 100644
> index 0000000..b121bba
> --- /dev/null
> +++ b/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/cache-xkbcomp-output-for-fast-start-up.patch
> @@ -0,0 +1,358 @@
> +From 0f70ba9d3412b17ac4e08e33e1be3c226c06ea54 Mon Sep 17 00:00:00 2001
> +From: Yan Li <yan.i.li at intel.com>
> +Date: Tue, 12 May 2009 17:49:07 +0800
> +Subject: [PATCH] XKB: cache xkbcomp output for fast start-up v5 for 1.6.1
> +Organization: Intel
> +
> +xkbcomp outputs will be cached in files with hashed keymap as
> +names. This saves boot time for around 1s on commodity netbooks.
> +
> +Signed-off-by: Yan Li <yan.i.li at intel.com>
> +---
> + configure.ac | 6 +-
> + xkb/README.compiled | 8 +-
> + xkb/ddxLoad.c | 192 +++++++++++++++++++++++++++++++++++++++++---------
> + 3 files changed, 164 insertions(+), 42 deletions(-)
> +
> +diff --git a/configure.ac b/configure.ac
> +index 4c4c797..7a5020a 100644
> +--- a/configure.ac
> ++++ b/configure.ac
> +@@ -476,9 +476,9 @@ AC_ARG_WITH(default-font-path, AS_HELP_STRING([--with-default-font-path=PATH], [
> + AC_ARG_WITH(xkb-path, AS_HELP_STRING([--with-xkb-path=PATH], [Path to XKB base dir (default: ${datadir}/X11/xkb)]),
> + [ XKBPATH="$withval" ],
> + [ XKBPATH="${datadir}/X11/xkb" ])
> +-AC_ARG_WITH(xkb-output, AS_HELP_STRING([--with-xkb-output=PATH], [Path to XKB output dir (default: ${datadir}/X11/xkb/compiled)]),
> ++AC_ARG_WITH(xkb-output, AS_HELP_STRING([--with-xkb-output=PATH], [Path to XKB output dir (default: ${localstatedir}/cache/xkb)]),
> + [ XKBOUTPUT="$withval" ],
> +- [ XKBOUTPUT="compiled" ])
> ++ [ XKBOUTPUT="${localstatedir}/cache/xkb" ])
> + AC_ARG_WITH(serverconfig-path, AS_HELP_STRING([--with-serverconfig-path=PATH],
> + [Directory where ancillary server config files are installed (default: ${libdir}/xorg)]),
> + [ SERVERCONFIG="$withval" ],
> +@@ -1757,7 +1757,7 @@ AC_DEFINE_DIR(XKB_BIN_DIRECTORY, bindir, [Path to XKB bin dir])
> + XKBOUTPUT_FIRSTCHAR=`echo $XKBOUTPUT | cut -b 1`
> +
> + if [[ x$XKBOUTPUT_FIRSTCHAR != x/ ]] ; then
> +- XKBOUTPUT="$XKB_BASE_DIRECTORY/$XKBOUTPUT"
> ++ AC_MSG_ERROR([xkb-output must be an absolute path.])
> + fi
> +
> + # XKM_OUTPUT_DIR (used in code) must end in / or file names get hosed
> +diff --git a/xkb/README.compiled b/xkb/README.compiled
> +index 71caa2f..a4a2ae0 100644
> +--- a/xkb/README.compiled
> ++++ b/xkb/README.compiled
> +@@ -4,10 +4,10 @@ current keymap and/or any scratch keymaps used by clients. The X server
> + or some other tool might destroy or replace the files in this directory,
> + so it is not a safe place to store compiled keymaps for long periods of
> + time. The default keymap for any server is usually stored in:
> +- X<num>-default.xkm
> +-where <num> is the display number of the server in question, which makes
> +-it possible for several servers *on the same host* to share the same
> +-directory.
> ++ server-<SHA1>.xkm
> ++
> ++where <SHA1> is the SHA1 hash of keymap source, so that compiled
> ++keymap of different keymap sources are stored in different files.
> +
> + Unless the X server is modified, sharing this directory between servers on
> + different hosts could cause problems.
> +diff --git a/xkb/ddxLoad.c b/xkb/ddxLoad.c
> +index 4d5dfb6..60a68af 100644
> +--- a/xkb/ddxLoad.c
> ++++ b/xkb/ddxLoad.c
> +@@ -32,6 +32,12 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
> + #include <xkb-config.h>
> + #endif
> +
> ++#ifdef HAVE_SHA1_IN_LIBMD /* Use libmd for SHA1 */
> ++# include <sha1.h>
> ++#else /* Use OpenSSL's libcrypto */
> ++# include <stddef.h> /* buggy openssl/sha.h wants size_t */
> ++# include <openssl/sha.h>
> ++#endif
> + #include <stdio.h>
> + #include <ctype.h>
> + #define NEED_EVENTS 1
> +@@ -46,24 +52,13 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
> + #define XKBSRV_NEED_FILE_FUNCS
> + #include <xkbsrv.h>
> + #include <X11/extensions/XI.h>
> ++#include <errno.h>
> + #include "xkb.h"
> +
> + #if defined(CSRG_BASED) || defined(linux) || defined(__GNU__)
> + #include <paths.h>
> + #endif
> +
> +- /*
> +- * If XKM_OUTPUT_DIR specifies a path without a leading slash, it is
> +- * relative to the top-level XKB configuration directory.
> +- * Making the server write to a subdirectory of that directory
> +- * requires some work in the general case (install procedure
> +- * has to create links to /var or somesuch on many machines),
> +- * so we just compile into /usr/tmp for now.
> +- */
> +-#ifndef XKM_OUTPUT_DIR
> +-#define XKM_OUTPUT_DIR "compiled/"
> +-#endif
> +-
> + #define PRE_ERROR_MSG "\"The XKEYBOARD keymap compiler (xkbcomp) reports:\""
> + #define ERROR_PREFIX "\"> \""
> + #define POST_ERROR_MSG1 "\"Errors from xkbcomp are not fatal to the X server\""
> +@@ -179,6 +174,45 @@ OutputDirectory(
> + }
> +
> + static Bool
> ++Sha1Asc(char sha1Asc[SHA_DIGEST_LENGTH*2+1], const char * input)
> ++{
> ++ int i;
> ++ unsigned char sha1[SHA_DIGEST_LENGTH];
> ++
> ++#ifdef HAVE_SHA1_IN_LIBMD /* Use libmd for SHA1 */
> ++ SHA1_CTX ctx;
> ++
> ++ SHA1Init (&ctx);
> ++ SHA1Update (&ctx, input, strlen(input));
> ++ SHA1Final (sha1, &ctx);
> ++#else /* Use OpenSSL's libcrypto */
> ++ SHA_CTX ctx;
> ++ int success;
> ++
> ++ success = SHA1_Init (&ctx);
> ++ if (! success)
> ++ return BadAlloc;
> ++
> ++ success = SHA1_Update (&ctx, input, strlen(input));
> ++ if (! success)
> ++ return BadAlloc;
> ++
> ++ success = SHA1_Final (sha1, &ctx);
> ++ if (! success)
> ++ return BadAlloc;
> ++#endif
> ++
> ++ /* convert sha1 to sha1_asc */
> ++ for(i=0; i<SHA_DIGEST_LENGTH; ++i) {
> ++ sprintf(sha1Asc+i*2, "%02X", sha1[i]);
> ++ }
> ++
> ++ return Success;
> ++}
> ++
> ++/* call xkbcomp and compile XKB keymap, return xkm file name in
> ++ nameRtrn */
> ++static Bool
> + XkbDDXCompileKeymapByNames( XkbDescPtr xkb,
> + XkbComponentNamesPtr names,
> + unsigned want,
> +@@ -187,7 +221,11 @@ XkbDDXCompileKeymapByNames( XkbDescPtr xkb,
> + int nameRtrnLen)
> + {
> + FILE * out;
> +- char *buf = NULL, keymap[PATH_MAX], xkm_output_dir[PATH_MAX];
> ++ char * buf = NULL, xkmfile[PATH_MAX], xkm_output_dir[PATH_MAX];
> ++ char * tmpXkmFile = NULL;
> ++ char * canonicalXkmFileName = NULL;
> ++ char sha1Asc[SHA_DIGEST_LENGTH*2+1], xkbKeyMapBuf[100*1024];
> ++ int ret, result;
> +
> + const char *emptystring = "";
> + const char *xkbbasedirflag = emptystring;
> +@@ -198,16 +236,70 @@ XkbDDXCompileKeymapByNames( XkbDescPtr xkb,
> + /* WIN32 has no popen. The input must be stored in a file which is
> + used as input for xkbcomp. xkbcomp does not read from stdin. */
> + char tmpname[PATH_MAX];
> +- const char *xkmfile = tmpname;
> ++ const char *xkbfile = tmpname;
> + #else
> +- const char *xkmfile = "-";
> ++ const char *xkbfile = "-";
> + #endif
> +
> +- snprintf(keymap, sizeof(keymap), "server-%s", display);
> ++ /* Write keymap source (xkbfile) to memory buffer `xkbKeyMapBuf',
> ++ of which SHA1 is generated and used as result xkm file name */
> ++ memset(xkbKeyMapBuf, 0, sizeof(xkbKeyMapBuf));
> ++ out = fmemopen(xkbKeyMapBuf, sizeof(xkbKeyMapBuf), "w");
> ++ if (NULL == out) {
> ++ ErrorF("[xkb] Open xkbKeyMapBuf for writing failed\n");
> ++ return False;
> ++ }
> ++ ret = XkbWriteXKBKeymapForNames(out, names, xkb, want, need);
> ++ if (fclose(out) !=0)
> ++ {
> ++ ErrorF("[xkb] XkbWriteXKBKeymapForNames error, perhaps xkbKeyMapBuf is too small\n");
> ++ return False;
> ++ }
> ++#ifdef DEBUG
> ++ if (xkbDebugFlags) {
> ++ ErrorF("[xkb] XkbDDXCompileKeymapByNames compiling keymap:\n");
> ++ fputs(xkbKeyMapBuf, stderr);
> ++ }
> ++#endif
> ++ if (!ret) {
> ++ ErrorF("[xkb] Generating XKB Keymap failed, giving up compiling keymap\n");
> ++ return False;
> ++ }
> ++
> ++ DebugF("[xkb] computing SHA1 of keymap\n");
> ++ if (Success == Sha1Asc(sha1Asc, xkbKeyMapBuf)) {
> ++ snprintf(xkmfile, sizeof(xkmfile), "server-%s", sha1Asc);
> ++ }
> ++ else {
> ++ ErrorF("[xkb] Computing SHA1 of keymap failed, "
> ++ "using display name instead as xkm file name\n");
> ++ snprintf(xkmfile, sizeof(xkmfile), "server-%s", display);
> ++ }
> +
> +- XkbEnsureSafeMapName(keymap);
> ++ XkbEnsureSafeMapName(xkmfile);
> + OutputDirectory(xkm_output_dir, sizeof(xkm_output_dir));
> +
> ++ /* set nameRtrn, fail if it's too small */
> ++ if ((strlen(xkmfile)+1 > nameRtrnLen) && nameRtrn) {
> ++ ErrorF("[xkb] nameRtrn too small to hold xkmfile name\n");
> ++ return False;
> ++ }
> ++ strncpy(nameRtrn, xkmfile, nameRtrnLen);
> ++
> ++ /* if the xkm file already exists, reuse it */
> ++ canonicalXkmFileName = Xprintf("%s%s.xkm", xkm_output_dir, xkmfile);
> ++ if (access(canonicalXkmFileName, R_OK) == 0) {
> ++ /* yes, we can reuse the old xkm file */
> ++ LogMessage(X_INFO, "XKB: reuse xkmfile %s\n", canonicalXkmFileName);
> ++ result = True;
> ++ goto _ret;
> ++ }
> ++ LogMessage(X_INFO, "XKB: generating xkmfile %s\n", canonicalXkmFileName);
> ++
> ++ /* continue to call xkbcomp to compile the keymap. to avoid race
> ++ condition, we compile it to a tmpfile then rename it to
> ++ xkmfile */
> ++
> + #ifdef WIN32
> + strcpy(tmpname, Win32TempDir());
> + strcat(tmpname, "\\xkb_XXXXXX");
> +@@ -230,19 +322,30 @@ XkbDDXCompileKeymapByNames( XkbDescPtr xkb,
> + }
> + }
> +
> ++ if ( (tmpXkmFile = tempnam(xkm_output_dir, NULL)) == NULL ) {
> ++ ErrorF("[xkb] Can't generate temp xkm file name");
> ++ result = False;
> ++ goto _ret;
> ++ }
> ++
> + buf = Xprintf("\"%s%sxkbcomp\" -w %d %s -xkm \"%s\" "
> +- "-em1 %s -emp %s -eml %s \"%s%s.xkm\"",
> ++ "-em1 %s -emp %s -eml %s \"%s\"",
> + xkbbindir, xkbbindirsep,
> + ( (xkbDebugFlags < 2) ? 1 :
> + ((xkbDebugFlags > 10) ? 10 : (int)xkbDebugFlags) ),
> +- xkbbasedirflag, xkmfile,
> ++ xkbbasedirflag, xkbfile,
> + PRE_ERROR_MSG, ERROR_PREFIX, POST_ERROR_MSG1,
> +- xkm_output_dir, keymap);
> ++ tmpXkmFile);
> +
> + if (xkbbasedirflag != emptystring) {
> + xfree(xkbbasedirflag);
> + }
> +
> ++ /* there's a potential race condition between calling tempnam()
> ++ and invoking xkbcomp to write the result file (potential temp
> ++ file name conflicts), but since xkbcomp is a standalone
> ++ program, we have to live with this */
> ++
> + #ifndef WIN32
> + out= Popen(buf,"w");
> + #else
> +@@ -250,31 +353,43 @@ XkbDDXCompileKeymapByNames( XkbDescPtr xkb,
> + #endif
> +
> + if (out!=NULL) {
> +-#ifdef DEBUG
> +- if (xkbDebugFlags) {
> +- ErrorF("[xkb] XkbDDXCompileKeymapByNames compiling keymap:\n");
> +- XkbWriteXKBKeymapForNames(stderr,names,xkb,want,need);
> ++ /* write XKBKeyMapBuf to xkbcomp */
> ++ if (EOF==fputs(xkbKeyMapBuf, out))
> ++ {
> ++ ErrorF("[xkb] Sending keymap to xkbcomp failed\n");
> ++ result = False;
> ++ goto _ret;
> + }
> +-#endif
> +- XkbWriteXKBKeymapForNames(out,names,xkb,want,need);
> + #ifndef WIN32
> + if (Pclose(out)==0)
> + #else
> + if (fclose(out)==0 && System(buf) >= 0)
> + #endif
> + {
> ++ /* xkbcomp success */
> + if (xkbDebugFlags)
> + DebugF("[xkb] xkb executes: %s\n",buf);
> +- if (nameRtrn) {
> +- strncpy(nameRtrn,keymap,nameRtrnLen);
> +- nameRtrn[nameRtrnLen-1]= '\0';
> ++
> ++ /* if canonicalXkmFileName already exists now, we simply
> ++ overwrite it, this is OK */
> ++ ret = rename(tmpXkmFile, canonicalXkmFileName);
> ++ if (0 != ret) {
> ++ ErrorF("[xkb] Can't rename %s to %s, error: %s\n",
> ++ tmpXkmFile, canonicalXkmFileName,
> ++ strerror(errno));
> ++
> ++ /* in case of error, don't unlink tmpXkmFile, leave it
> ++ for debugging */
> ++
> ++ result = False;
> ++ goto _ret;
> + }
> +- if (buf != NULL)
> +- xfree (buf);
> +- return True;
> ++
> ++ result = True;
> ++ goto _ret;
> + }
> + else
> +- LogMessage(X_ERROR, "Error compiling keymap (%s)\n", keymap);
> ++ LogMessage(X_ERROR, "Error compiling keymap (%s)\n", xkbfile);
> + #ifdef WIN32
> + /* remove the temporary file */
> + unlink(tmpname);
> +@@ -289,9 +404,17 @@ XkbDDXCompileKeymapByNames( XkbDescPtr xkb,
> + }
> + if (nameRtrn)
> + nameRtrn[0]= '\0';
> ++ result = False;
> ++
> ++_ret:
> ++ if (tmpXkmFile)
> ++ free(tmpXkmFile);
> ++ if (canonicalXkmFileName)
> ++ xfree(canonicalXkmFileName);
> + if (buf != NULL)
> + xfree (buf);
> +- return False;
> ++
> ++ return result;
> + }
> +
> + static FILE *
> +@@ -375,7 +498,6 @@ unsigned missing;
> + DebugF("Loaded XKB keymap %s, defined=0x%x\n",fileName,(*xkbRtrn)->defined);
> + }
> + fclose(file);
> +- (void) unlink (fileName);
> + return (need|want)&(~missing);
> + }
> +
> +--
> +1.5.6.5
> +
> diff --git a/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/crosscompile.patch b/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/crosscompile.patch
> new file mode 100644
> index 0000000..8b82de2
> --- /dev/null
> +++ b/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/crosscompile.patch
> @@ -0,0 +1,20 @@
> +diff --git a/configure.ac b/configure.ac
> +index b3b752c..600500b 100644
> +--- a/configure.ac
> ++++ b/configure.ac
> +@@ -523,13 +523,9 @@ dnl Uses --default-font-path if set, otherwise checks for /etc/X11/fontpath.d,
> + dnl otherwise uses standard subdirectories of FONTROOTDIR. When cross
> + dnl compiling, assume default font path uses standard FONTROOTDIR directories.
> + DEFAULT_FONT_PATH="${FONTMISCDIR}/,${FONTTTFDIR}/,${FONTOTFDIR}/,${FONTTYPE1DIR}/,${FONT100DPIDIR}/,${FONT75DPIDIR}/"
> +-if test "$cross_compiling" != yes; then
> +- AC_CHECK_FILE([${sysconfdir}/X11/fontpath.d],
> +- [DEFAULT_FONT_PATH='catalogue:${sysconfdir}/X11/fontpath.d'],
> +- [case $host_os in
> ++ case $host_os in
> + darwin*) DEFAULT_FONT_PATH="${DEFAULT_FONT_PATH},/Library/Fonts,/System/Library/Fonts" ;;
> +- esac])
> +-fi
> ++ esac
> + AC_ARG_WITH(default-font-path, AS_HELP_STRING([--with-default-font-path=PATH], [Comma separated list of font dirs]),
> + [ FONTPATH="$withval" ],
> + [ FONTPATH="${DEFAULT_FONT_PATH}" ])
> diff --git a/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/doublefix.patch b/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/doublefix.patch
> new file mode 100644
> index 0000000..092a712
> --- /dev/null
> +++ b/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/doublefix.patch
> @@ -0,0 +1,13 @@
> +Index: xorg-server-1.6.0/hw/xfree86/common/Makefile.am
> +===================================================================
> +--- xorg-server-1.6.0.orig/hw/xfree86/common/Makefile.am 2010-02-01 14:04:53.247789918 +0000
> ++++ xorg-server-1.6.0/hw/xfree86/common/Makefile.am 2010-02-01 14:05:27.787817002 +0000
> +@@ -46,7 +46,7 @@
> + sdk_HEADERS = compiler.h fourcc.h xf86.h xf86Module.h xf86Opt.h \
> + xf86PciInfo.h xf86Priv.h xf86Privstr.h xf86Resources.h \
> + xf86cmap.h xf86fbman.h xf86str.h xf86RAC.h xf86Xinput.h xisb.h \
> +- $(XVSDKINCS) xorgVersion.h \
> ++ xorgVersion.h \
> + xf86sbusBus.h xf86xv.h xf86xvmc.h xf86xvpriv.h
> +
> + DISTCLEANFILES = xf86Build.h
> diff --git a/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/drmfix.patch b/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/drmfix.patch
> new file mode 100644
> index 0000000..a62a767
> --- /dev/null
> +++ b/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/drmfix.patch
> @@ -0,0 +1,13 @@
> +Index: xorg-server-1.4/hw/xfree86/os-support/linux/Makefile.am
> +===================================================================
> +--- xorg-server-1.4.orig/hw/xfree86/os-support/linux/Makefile.am 2007-08-23 21:04:53.000000000 +0200
> ++++ xorg-server-1.4/hw/xfree86/os-support/linux/Makefile.am 2008-03-13 18:27:23.000000000 +0100
> +@@ -41,7 +41,7 @@
> +
> + AM_CFLAGS = -DUSESTDRES -DHAVE_SYSV_IPC $(DIX_CFLAGS) $(XORG_CFLAGS) $(PLATFORM_DEFINES)
> +
> +-INCLUDES = $(XORG_INCS) $(PLATFORM_INCLUDES) -I/usr/include/drm # FIXME this last part is crack
> ++INCLUDES = $(XORG_INCS) $(PLATFORM_INCLUDES) $(LIBDRM_CFLAGS)
> +
> + # FIXME: These need to be added to the build
> + LNX_EXTRA_SRCS = \
> diff --git a/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/fix_macros.patch b/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/fix_macros.patch
> new file mode 100644
> index 0000000..eed491b
> --- /dev/null
> +++ b/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/fix_macros.patch
> @@ -0,0 +1,21 @@
> +We need to insert the sysroot path into compiler commandlines for this
> +kind of variable use, otherwise we're looking into /usr/include/.
> +
> +RP - 26/11/09
> +
> +Index: git/xorg-server.m4
> +===================================================================
> +--- git.orig/xorg-server.m4 2009-11-10 12:04:34.000000000 +0000
> ++++ git/xorg-server.m4 2009-11-27 00:05:02.000000000 +0000
> +@@ -28,9 +28,10 @@
> + # Checks for the $1 define in xorg-server.h (from the sdk). If it
> + # is defined, then add $1 to $REQUIRED_MODULES.
> +
> ++m4_pattern_allow([^PKG_CONFIG_SYSROOT_DIR$])
> + AC_DEFUN([XORG_DRIVER_CHECK_EXT],[
> + SAVE_CFLAGS="$CFLAGS"
> +- CFLAGS="$CFLAGS -I`pkg-config --variable=sdkdir xorg-server`"
> ++ CFLAGS="$CFLAGS -I$PKG_CONFIG_SYSROOT_DIR`pkg-config --variable=sdkdir xorg-server`"
> + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
> + #include "xorg-server.h"
> + #if !defined $1
> diff --git a/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/fix_macros1.patch b/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/fix_macros1.patch
> new file mode 100644
> index 0000000..94852f0
> --- /dev/null
> +++ b/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/fix_macros1.patch
> @@ -0,0 +1,22 @@
> +We need to insert the sysroot path into compiler commandlines for this
> +kind of variable use, otherwise we're looking into /usr/include/.
> +
> +RP - 26/11/09
> +
> +Index: git/xorg-server.m4
> +===================================================================
> +--- git.orig/xorg-server.m4 2010-02-05 10:00:55.000000000 +0000
> ++++ git/xorg-server.m4 2010-02-05 10:02:12.000000000 +0000
> +@@ -28,10 +28,11 @@
> + # Checks for the $1 define in xorg-server.h (from the sdk). If it
> + # is defined, then add $1 to $REQUIRED_MODULES.
> +
> ++m4_pattern_allow([^PKG_CONFIG_SYSROOT_DIR$])
> + AC_DEFUN([XORG_DRIVER_CHECK_EXT],[
> + AC_REQUIRE([PKG_PROG_PKG_CONFIG])
> + SAVE_CFLAGS="$CFLAGS"
> +- CFLAGS="$CFLAGS -I`$PKG_CONFIG --variable=sdkdir xorg-server`"
> ++ CFLAGS="$CFLAGS -I$PKG_CONFIG_SYSROOT_DIR`$PKG_CONFIG --variable=sdkdir xorg-server`"
> + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
> + #include "xorg-server.h"
> + #if !defined $1
> diff --git a/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/fix_open_max_preprocessor_error.patch b/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/fix_open_max_preprocessor_error.patch
> new file mode 100644
> index 0000000..565832e
> --- /dev/null
> +++ b/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/fix_open_max_preprocessor_error.patch
> @@ -0,0 +1,13 @@
> +Index: git/os/osdep.h
> +===================================================================
> +--- git.orig/os/osdep.h 2008-10-07 18:38:21.000000000 +0100
> ++++ git/os/osdep.h 2008-10-07 18:39:36.000000000 +0100
> +@@ -92,7 +92,7 @@
> + * like sysconf(_SC_OPEN_MAX) is not supported.
> + */
> +
> +-#if OPEN_MAX <= 256
> ++#if 0
> + #define MAXSOCKS (OPEN_MAX - 1)
> + #else
> + #define MAXSOCKS 256
> diff --git a/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/libdri-xinerama-symbol.patch b/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/libdri-xinerama-symbol.patch
> new file mode 100644
> index 0000000..db29da9
> --- /dev/null
> +++ b/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/libdri-xinerama-symbol.patch
> @@ -0,0 +1,50 @@
> +Index: xorg-server-1.5.0/hw/xfree86/dri/dri.c
> +===================================================================
> +--- xorg-server-1.5.0.orig/hw/xfree86/dri/dri.c 2008-09-24 17:43:04.000000000 +0100
> ++++ xorg-server-1.5.0/hw/xfree86/dri/dri.c 2008-09-24 17:46:38.000000000 +0100
> +@@ -73,10 +73,6 @@
> +
> + #define PCI_BUS_NO_DOMAIN(bus) ((bus) & 0xffu)
> +
> +-#if !defined(PANORAMIX)
> +-extern Bool noPanoramiXExtension;
> +-#endif
> +-
> + static int DRIEntPrivIndex = -1;
> + static DevPrivateKey DRIScreenPrivKey = &DRIScreenPrivKey;
> + static DevPrivateKey DRIWindowPrivKey = &DRIWindowPrivKey;
> +@@ -307,7 +303,6 @@
> + drm_context_t * reserved;
> + int reserved_count;
> + int i;
> +- Bool xineramaInCore = FALSE;
> + DRIEntPrivPtr pDRIEntPriv;
> + ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
> + DRIContextFlags flags = 0;
> +@@ -320,20 +315,13 @@
> + return FALSE;
> + }
> +
> +- /*
> +- * If Xinerama is on, don't allow DRI to initialise. It won't be usable
> +- * anyway.
> +- */
> +- if (xf86LoaderCheckSymbol("noPanoramiXExtension"))
> +- xineramaInCore = TRUE;
> +-
> +- if (xineramaInCore) {
> +- if (!noPanoramiXExtension) {
> +- DRIDrvMsg(pScreen->myNum, X_WARNING,
> +- "Direct rendering is not supported when Xinerama is enabled\n");
> +- return FALSE;
> +- }
> ++#if defined(PANORAMIX)
> ++ if (!noPanoramiXExtension) {
> ++ DRIDrvMsg(pScreen->myNum, X_WARNING,
> ++ "Direct rendering is not supported when Xinerama is enabled\n");
> ++ return FALSE;
> + }
> ++#endif
> +
> + if (!DRIOpenDRMMaster(pScrn, pDRIInfo->SAREASize,
> + pDRIInfo->busIdString,
> diff --git a/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/macro_tweak.patch b/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/macro_tweak.patch
> new file mode 100644
> index 0000000..cd408c7
> --- /dev/null
> +++ b/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/macro_tweak.patch
> @@ -0,0 +1,28 @@
> +This is the revised version of files/macro_tweak.patch for
> +xorg-server 1.8.99.904.
> +
> +the files/macro_tweak.patch can not removed now since it is used by
> +xserver-kdrive-1.7.99.2 and xserver-xf86-lite_1.7.99.2. Once they
> +are all upgraded to 1.8.99.904, the the files/macro_tweak.patch
> +can be safely replace by this patch.
> +
> +Signed-off-by: Yu Ke <ke.yu at intel.com>
> +
> +diff --git a/xorg-server.m4 b/xorg-server.m4
> +index bdecf62..040fdb8 100644
> +--- a/xorg-server.m4
> ++++ b/xorg-server.m4
> +@@ -28,10 +28,12 @@ dnl
> + # Checks for the $1 define in xorg-server.h (from the sdk). If it
> + # is defined, then add $1 to $REQUIRED_MODULES.
> +
> ++m4_pattern_allow(PKG_CONFIG_SYSROOT_DIR)
> ++
> + AC_DEFUN([XORG_DRIVER_CHECK_EXT],[
> + AC_REQUIRE([PKG_PROG_PKG_CONFIG])
> + SAVE_CFLAGS="$CFLAGS"
> +- CFLAGS="$CFLAGS -I`$PKG_CONFIG --variable=sdkdir xorg-server`"
> ++ CFLAGS="$CFLAGS -I$PKG_CONFIG_SYSROOT_DIR`$PKG_CONFIG --variable=sdkdir xorg-server`"
> + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
> + #include "xorg-server.h"
> + #if !defined $1
> diff --git a/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/nodolt.patch b/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/nodolt.patch
> new file mode 100644
> index 0000000..6b34032
> --- /dev/null
> +++ b/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/nodolt.patch
> @@ -0,0 +1,12 @@
> +Index: git/configure.ac
> +===================================================================
> +--- git.orig/configure.ac 2009-01-15 20:35:31.000000000 +0000
> ++++ git/configure.ac 2009-01-15 20:35:38.000000000 +0000
> +@@ -62,7 +62,6 @@
> + AC_LIBTOOL_WIN32_DLL
> + AC_DISABLE_STATIC
> + AC_PROG_LIBTOOL
> +-DOLT
> + AC_PROG_MAKE_SET
> + PKG_PROG_PKG_CONFIG
> + AC_PROG_LEX
> diff --git a/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/xorg-server-disable-dri_sarea.patch b/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/xorg-server-disable-dri_sarea.patch
> new file mode 100755
> index 0000000..3d2fa16
> --- /dev/null
> +++ b/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/xorg-server-disable-dri_sarea.patch
> @@ -0,0 +1,12 @@
> +diff -urN xorg-server-1.5.99.1/hw/xfree86/dri2/dri2.c xorg-server-1.5.99.1.new/hw/xfree86/dri2/dri2.c
> +--- xorg-server-1.5.99.1/hw/xfree86/dri2/dri2.c 2008-09-01 03:26:37.000000000 +0800
> ++++ xorg-server-1.5.99.1.new/hw/xfree86/dri2/dri2.c 2008-09-18 00:28:16.000000000 +0800
> +@@ -39,7 +39,7 @@
> + #include "scrnintstr.h"
> + #include "windowstr.h"
> + #include "dri2.h"
> +-#include <GL/internal/dri_sarea.h>
> ++//#include <GL/internal/dri_sarea.h>
> +
> + #include "xf86.h"
> +
> diff --git a/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/xorg-server-enable-dri2.patch b/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/xorg-server-enable-dri2.patch
> new file mode 100755
> index 0000000..7ff3658
> --- /dev/null
> +++ b/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/xorg-server-enable-dri2.patch
> @@ -0,0 +1,23 @@
> +commit 67b9b3a77a8b86eef03af36a0f4be3a07411efee
> +Author: Eric Anholt <eric at anholt.net>
> +Date: Thu Sep 11 16:18:17 2008 -0700
> +
> + Enable DRI2 build.
> +
> +diff --git a/hw/xfree86/Makefile.am b/hw/xfree86/Makefile.am
> +index eff2c31..98d7ec8 100644
> +--- a/hw/xfree86/Makefile.am
> ++++ b/hw/xfree86/Makefile.am
> +@@ -4,9 +4,9 @@ if DRI
> + DRI_SUBDIR = dri
> + endif
> +
> +-#if DRI2
> +-#DRI2_SUBDIR = dri2
> +-#endif
> ++if DRI2
> ++DRI2_SUBDIR = dri2
> ++endif
> +
> + if XF86UTILS
> + XF86UTILS_SUBDIR = utils
> diff --git a/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/xserver-1.5.0-bg-none-root.patch b/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/xserver-1.5.0-bg-none-root.patch
> new file mode 100644
> index 0000000..ef53689
> --- /dev/null
> +++ b/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/xserver-1.5.0-bg-none-root.patch
> @@ -0,0 +1,156 @@
> +From a3e15680da24cb8259f6a83dee0c930dab024290 Mon Sep 17 00:00:00 2001
> +From: Kristian <krh at redhat.com>
> +Date: Fri, 15 Aug 2008 15:15:14 +1000
> +Subject: [PATCH] Add nr for background=none root
> +
> +---
> + dix/globals.c | 1 +
> + dix/window.c | 22 ++++++++++++----------
> + hw/xfree86/common/xf86Init.c | 11 +++++++++++
> + hw/xfree86/common/xf86str.h | 5 ++++-
> + include/opaque.h | 1 +
> + os/utils.c | 3 +++
> + 6 files changed, 32 insertions(+), 11 deletions(-)
> +
> +diff --git a/dix/globals.c b/dix/globals.c
> +index 973dc43..dbd76bb 100644
> +--- a/dix/globals.c
> ++++ b/dix/globals.c
> +@@ -141,6 +141,7 @@ FontPtr defaultFont; /* not declared in dix.h to avoid including font.h in
> + CursorPtr rootCursor;
> + Bool party_like_its_1989 = FALSE;
> + Bool whiteRoot = FALSE;
> ++Bool bgNoneRoot = FALSE;
> +
> + int cursorScreenDevPriv[MAXSCREENS];
> +
> +diff --git a/dix/window.c b/dix/window.c
> +index c31fa87..8bb178d 100644
> +--- a/dix/window.c
> ++++ b/dix/window.c
> +@@ -482,23 +482,24 @@ InitRootWindow(WindowPtr pWin)
> + pWin->cursorIsNone = FALSE;
> + pWin->optional->cursor = rootCursor;
> + rootCursor->refcnt++;
> +-
> ++ pWin->backingStore = defaultBackingStore;
> ++ pWin->forcedBS = (defaultBackingStore != NotUseful);
> +
> + if (party_like_its_1989) {
> + MakeRootTile(pWin);
> + backFlag |= CWBackPixmap;
> ++ pScreen->ChangeWindowAttributes(pWin, backFlag);
> ++ } else if (bgNoneRoot) {
> ++ /* nothing, handled in xf86CreateRootWindow */
> + } else {
> + if (whiteRoot)
> + pWin->background.pixel = pScreen->whitePixel;
> + else
> + pWin->background.pixel = pScreen->blackPixel;
> + backFlag |= CWBackPixel;
> +- }
> +
> +- pWin->backingStore = defaultBackingStore;
> +- pWin->forcedBS = (defaultBackingStore != NotUseful);
> +- /* We SHOULD check for an error value here XXX */
> +- (*pScreen->ChangeWindowAttributes)(pWin, backFlag);
> ++ pScreen->ChangeWindowAttributes(pWin, backFlag);
> ++ }
> +
> + MapWindow(pWin, serverClient);
> + }
> +diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
> +index 236c00b..083a6ac 100644
> +--- a/hw/xfree86/common/xf86Init.c
> ++++ b/hw/xfree86/common/xf86Init.c
> +@@ -79,6 +79,7 @@
> + #ifdef RENDER
> + #include "picturestr.h"
> + #endif
> ++#include "xace.h"
> +
> + #include "globals.h"
> +
> +@@ -328,6 +329,7 @@ xf86CreateRootWindow(WindowPtr pWin)
> + int ret = TRUE;
> + int err = Success;
> + ScreenPtr pScreen = pWin->drawable.pScreen;
> ++ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
> + RootWinPropPtr pProp;
> + CreateWindowProcPtr CreateWindow = (CreateWindowProcPtr)
> + dixLookupPrivate(&pScreen->devPrivates, xf86CreateRootWindowKey);
> +@@ -381,6 +383,15 @@ xf86CreateRootWindow(WindowPtr pWin)
> + }
> + }
> +
> ++ if (bgNoneRoot && pScrn->canDoBGNoneRoot || 1) {
> ++ pWin->backgroundState = XaceBackgroundNoneState(pWin);
> ++ pWin->background.pixel = pScreen->whitePixel;
> ++ pScreen->ChangeWindowAttributes(pWin, CWBackPixmap | CWBorderPixel | CWCursor | CWBackingStore);
> ++ } else {
> ++ pWin->background.pixel = pScreen->blackPixel;
> ++ pScreen->ChangeWindowAttributes(pWin, CWBackPixel | CWBorderPixel | CWCursor | CWBackingStore);
> ++ }
> ++
> + #ifdef DEBUG
> + ErrorF("xf86CreateRootWindow() returns %d\n", ret);
> + #endif
> +diff --git a/hw/xfree86/common/xf86str.h b/hw/xfree86/common/xf86str.h
> +index 904c369..8c38f69 100644
> +--- a/hw/xfree86/common/xf86str.h
> ++++ b/hw/xfree86/common/xf86str.h
> +@@ -531,7 +531,7 @@ typedef struct _confdrirec {
> + } confDRIRec, *confDRIPtr;
> +
> + /* These values should be adjusted when new fields are added to ScrnInfoRec */
> +-#define NUM_RESERVED_INTS 16
> ++#define NUM_RESERVED_INTS 15
> + #define NUM_RESERVED_POINTERS 15
> + #define NUM_RESERVED_FUNCS 11
> +
> +@@ -959,6 +959,9 @@ typedef struct _ScrnInfoRec {
> + ClockRangesPtr clockRanges;
> + int adjustFlags;
> +
> ++ /* -nr support */
> ++ int canDoBGNoneRoot;
> ++
> + /*
> + * These can be used when the minor ABI version is incremented.
> + * The NUM_* parameters must be reduced appropriately to keep the
> +diff --git a/include/opaque.h b/include/opaque.h
> +index 07a0715..be1577b 100644
> +--- a/include/opaque.h
> ++++ b/include/opaque.h
> +@@ -71,6 +71,7 @@ extern Bool defeatAccessControl;
> + extern long maxBigRequestSize;
> + extern Bool party_like_its_1989;
> + extern Bool whiteRoot;
> ++extern Bool bgNoneRoot;
> +
> + extern Bool CoreDump;
> +
> +diff --git a/os/utils.c b/os/utils.c
> +index b100949..c41b45b 100644
> +--- a/os/utils.c
> ++++ b/os/utils.c
> +@@ -515,6 +515,7 @@ void UseMsg(void)
> + #endif
> + ErrorF("-nolisten string don't listen on protocol\n");
> + ErrorF("-noreset don't reset after last client exists\n");
> ++ ErrorF("-nr create root window with no background\n");
> + ErrorF("-reset reset after last client exists\n");
> + ErrorF("-p # screen-saver pattern duration (minutes)\n");
> + ErrorF("-pn accept failure to listen on all ports\n");
> +@@ -859,6 +860,8 @@ ProcessCommandLine(int argc, char *argv[])
> + defaultBackingStore = WhenMapped;
> + else if ( strcmp( argv[i], "-wr") == 0)
> + whiteRoot = TRUE;
> ++ else if ( strcmp( argv[i], "-nr") == 0)
> ++ bgNoneRoot = TRUE;
> + else if ( strcmp( argv[i], "-maxbigreqsize") == 0) {
> + if(++i < argc) {
> + long reqSizeArg = atol(argv[i]);
> +--
> +1.5.3.4
> +
> diff --git a/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/xserver-DRI2Swapbuffer.patch b/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/xserver-DRI2Swapbuffer.patch
> new file mode 100644
> index 0000000..2754170
> --- /dev/null
> +++ b/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/xserver-DRI2Swapbuffer.patch
> @@ -0,0 +1,179 @@
> +diff --git a/glx/glxdri2.c b/glx/glxdri2.c
> +index 146ea82..3b5338b 100644
> +--- a/glx/glxdri2.c
> ++++ b/glx/glxdri2.c
> +@@ -70,6 +70,7 @@ struct __GLXDRIscreen {
> +
> + const __DRIcoreExtension *core;
> + const __DRIdri2Extension *dri2;
> ++ const __DRI2flushExtension *flush;
> + const __DRIcopySubBufferExtension *copySubBuffer;
> + const __DRIswapControlExtension *swapControl;
> + const __DRItexBufferExtension *texBuffer;
> +@@ -135,10 +136,14 @@ __glXDRIdrawableCopySubBuffer(__GLXdrawable *drawable,
> + static GLboolean
> + __glXDRIdrawableSwapBuffers(__GLXdrawable *drawable)
> + {
> +- __GLXDRIdrawable *private = (__GLXDRIdrawable *) drawable;
> ++ __GLXDRIdrawable *priv = (__GLXDRIdrawable *) drawable;
> ++ __GLXDRIscreen *screen = priv->screen;
> ++
> ++ if (!DRI2SwapBuffers(drawable->pDraw))
> ++ return FALSE;
> +
> +- __glXDRIdrawableCopySubBuffer(drawable, 0, 0,
> +- private->width, private->height);
> ++ if (screen->flush->flushInvalidate)
> ++ (*screen->flush->flushInvalidate)(priv->driDrawable);
> +
> + return TRUE;
> + }
> +diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c
> +index 580383d..23e6467 100644
> +--- a/hw/xfree86/dri2/dri2.c
> ++++ b/hw/xfree86/dri2/dri2.c
> +@@ -70,6 +70,7 @@ typedef struct _DRI2Screen {
> + DRI2CreateBufferProcPtr CreateBuffer;
> + DRI2DestroyBufferProcPtr DestroyBuffer;
> + DRI2CopyRegionProcPtr CopyRegion;
> ++ DRI2SwapBuffersProcPtr SwapBuffers;
> +
> + HandleExposuresProcPtr HandleExposures;
> + } DRI2ScreenRec, *DRI2ScreenPtr;
> +@@ -422,6 +423,49 @@ DRI2CopyRegion(DrawablePtr pDraw, RegionPtr pRegion,
> + return Success;
> + }
> +
> ++Bool
> ++DRI2SwapBuffers(DrawablePtr pDraw)
> ++{
> ++ DRI2ScreenPtr ds = DRI2GetScreen(pDraw->pScreen);
> ++ DRI2DrawablePtr pPriv;
> ++ DRI2BufferPtr pDestBuffer, pSrcBuffer;
> ++ int i;
> ++
> ++ pPriv = DRI2GetDrawable(pDraw);
> ++ if (pPriv == NULL)
> ++ return FALSE;
> ++
> ++ pDestBuffer = NULL;
> ++ pSrcBuffer = NULL;
> ++ for (i = 0; i < pPriv->bufferCount; i++)
> ++ {
> ++ if (pPriv->buffers[i]->attachment == DRI2BufferFrontLeft)
> ++ pDestBuffer = (DRI2BufferPtr) pPriv->buffers[i];
> ++ if (pPriv->buffers[i]->attachment == DRI2BufferBackLeft)
> ++ pSrcBuffer = (DRI2BufferPtr) pPriv->buffers[i];
> ++ }
> ++ if (pSrcBuffer == NULL || pDestBuffer == NULL)
> ++ return FALSE;
> ++
> ++ if (ds->SwapBuffers) {
> ++ if ((*ds->SwapBuffers)(pDraw, pDestBuffer, pSrcBuffer))
> ++ return TRUE;
> ++ }
> ++
> ++ BoxRec box;
> ++ RegionRec region;
> ++
> ++ box.x1 = 0;
> ++ box.y1 = 0;
> ++ box.x2 = pDraw->width;
> ++ box.y2 = pDraw->height;
> ++ REGION_INIT(drawable->pDraw->pScreen, ®ion, &box, 0);
> ++ if (DRI2CopyRegion(pDraw, ®ion, DRI2BufferFrontLeft, DRI2BufferBackLeft) != Success)
> ++ return FALSE;
> ++
> ++ return TRUE;
> ++}
> ++
> + void
> + DRI2DestroyDrawable(DrawablePtr pDraw)
> + {
> +@@ -538,6 +582,9 @@ DRI2ScreenInit(ScreenPtr pScreen, DRI2InfoPtr info)
> + }
> + ds->CopyRegion = info->CopyRegion;
> +
> ++ if (info->version >= 3)
> ++ ds->SwapBuffers = info->SwapBuffers;
> ++
> + dixSetPrivate(&pScreen->devPrivates, dri2ScreenPrivateKey, ds);
> +
> + xf86DrvMsg(pScreen->myNum, X_INFO, "[DRI2] Setup complete\n");
> +diff --git a/hw/xfree86/dri2/dri2.h b/hw/xfree86/dri2/dri2.h
> +index f369267..e2784dd 100644
> +--- a/hw/xfree86/dri2/dri2.h
> ++++ b/hw/xfree86/dri2/dri2.h
> +@@ -67,6 +67,10 @@ typedef void (*DRI2CopyRegionProcPtr)(DrawablePtr pDraw,
> + DRI2BufferPtr pDestBuffer,
> + DRI2BufferPtr pSrcBuffer);
> +
> ++typedef Bool (*DRI2SwapBuffersProcPtr)(DrawablePtr pDraw,
> ++ DRI2BufferPtr pFrontBuffer,
> ++ DRI2BufferPtr pBackBuffer);
> ++
> + typedef void (*DRI2WaitProcPtr)(WindowPtr pWin,
> + unsigned int sequence);
> +
> +@@ -90,6 +94,7 @@ typedef struct {
> + DRI2CreateBuffersProcPtr CreateBuffers;
> + DRI2DestroyBuffersProcPtr DestroyBuffers;
> + DRI2CopyRegionProcPtr CopyRegion;
> ++ DRI2SwapBuffersProcPtr SwapBuffers;
> + DRI2WaitProcPtr Wait;
> +
> + /**
> +@@ -153,4 +158,6 @@ extern _X_EXPORT DRI2Buffer2Ptr *DRI2GetBuffersWithFormat(DrawablePtr pDraw,
> + int *width, int *height, unsigned int *attachments, int count,
> + int *out_count);
> +
> ++extern _X_EXPORT Bool DRI2SwapBuffers(DrawablePtr pDraw);
> ++
> + #endif
> +diff --git a/hw/xfree86/dri2/dri2ext.c b/hw/xfree86/dri2/dri2ext.c
> +index 3c06174..67b419b 100644
> +--- a/hw/xfree86/dri2/dri2ext.c
> ++++ b/hw/xfree86/dri2/dri2ext.c
> +@@ -81,7 +81,7 @@ ProcDRI2QueryVersion(ClientPtr client)
> + rep.length = 0;
> + rep.sequenceNumber = client->sequence;
> + rep.majorVersion = 1;
> +- rep.minorVersion = 1;
> ++ rep.minorVersion = 2;
> +
> + if (client->swapped) {
> + swaps(&rep.sequenceNumber, n);
> +@@ -323,6 +323,24 @@ ProcDRI2CopyRegion(ClientPtr client)
> + }
> +
> + static int
> ++ProcDRI2SwapBuffers(ClientPtr client)
> ++{
> ++ REQUEST(xDRI2SwapBuffersReq);
> ++ DrawablePtr pDrawable;
> ++ int status;
> ++
> ++ REQUEST_SIZE_MATCH(xDRI2SwapBuffersReq);
> ++
> ++ if (!validDrawable(client, stuff->drawable, &pDrawable, &status))
> ++ return status;
> ++
> ++ if (!DRI2SwapBuffers(pDrawable))
> ++ return BadAlloc;
> ++
> ++ return client->noClientException;
> ++}
> ++
> ++static int
> + ProcDRI2Dispatch (ClientPtr client)
> + {
> + REQUEST(xReq);
> +@@ -350,6 +368,8 @@ ProcDRI2Dispatch (ClientPtr client)
> + return ProcDRI2CopyRegion(client);
> + case X_DRI2GetBuffersWithFormat:
> + return ProcDRI2GetBuffersWithFormat(client);
> ++ case X_DRI2SwapBuffers:
> ++ return ProcDRI2SwapBuffers(client);
> + default:
> + return BadRequest;
> + }
> diff --git a/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/xserver-boottime.patch b/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/xserver-boottime.patch
> new file mode 100644
> index 0000000..efc85a4
> --- /dev/null
> +++ b/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/xserver-boottime.patch
> @@ -0,0 +1,38 @@
> +diff --git a/os/log.c b/os/log.c
> +index 0860847..2c46f1a 100644
> +--- a/os/log.c
> ++++ b/os/log.c
> +@@ -255,6 +255,33 @@ LogVWrite(int verb, const char *f, va_list args)
> + static char tmpBuffer[1024];
> + int len = 0;
> +
> ++ struct timeval time;
> ++ time_t tv_sec;
> ++ suseconds_t tv_usec;
> ++ static Bool first = TRUE;
> ++ static time_t start_tv_sec;
> ++ static suseconds_t start_usec;
> ++ int diff_sec, diff_usec;
> ++
> ++ gettimeofday(&time, NULL);
> ++ tv_sec = time.tv_sec;
> ++ tv_usec = time.tv_usec;
> ++ if (first == TRUE) {
> ++ start_tv_sec = tv_sec;
> ++ start_usec = tv_usec;
> ++ first = FALSE;
> ++ }
> ++ diff_sec = (int)difftime(tv_sec, start_tv_sec);
> ++ diff_usec = (tv_usec - start_usec);
> ++ if (diff_usec < 0) {
> ++ diff_sec--;
> ++ diff_usec += 1000000;
> ++ }
> ++ sprintf(tmpBuffer, "[%d sec: %06d usec]", diff_sec , diff_usec);
> ++ len = strlen(tmpBuffer);
> ++ if (logFile)
> ++ fwrite(tmpBuffer, len, 1, logFile);
> ++
> + /*
> + * Since a va_list can only be processed once, write the string to a
> + * buffer, and then write the buffer out to the appropriate output
> diff --git a/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/xserver-no-root-2.patch b/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/xserver-no-root-2.patch
> new file mode 100644
> index 0000000..afc94dc
> --- /dev/null
> +++ b/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite/xserver-no-root-2.patch
> @@ -0,0 +1,105 @@
> +diff --git a/hw/xfree86/os-support/linux/lnx_init.c b/hw/xfree86/os-support/linux/lnx_init.c
> +index 7f40857..cf58c01 100644
> +--- a/hw/xfree86/os-support/linux/lnx_init.c
> ++++ b/hw/xfree86/os-support/linux/lnx_init.c
> +@@ -49,6 +49,7 @@ static Bool KeepTty = FALSE;
> + static int VTnum = -1;
> + static Bool VTSwitch = TRUE;
> + static Bool ShareVTs = FALSE;
> ++Bool NoHwAccess = FALSE;
> + static int activeVT = -1;
> +
> + static int vtPermSave[4];
> +@@ -80,9 +81,11 @@ saveVtPerms(void)
> + static void
> + restoreVtPerms(void)
> + {
> +- /* Set the terminal permissions back to before we started. */
> +- chown("/dev/tty0", vtPermSave[0], vtPermSave[1]);
> +- chown(vtname, vtPermSave[2], vtPermSave[3]);
> ++ if (geteuid() == 0) {
> ++ /* Set the terminal permissions back to before we started. */
> ++ (void)chown("/dev/tty0", vtPermSave[0], vtPermSave[1]);
> ++ (void)chown(vtname, vtPermSave[2], vtPermSave[3]);
> ++ }
> + }
> +
> + static void *console_handler;
> +@@ -210,20 +213,22 @@ xf86OpenConsole(void)
> + xf86Msg(X_WARNING,
> + "xf86OpenConsole: Could not save ownership of VT\n");
> +
> +- /* change ownership of the vt */
> +- if (chown(vtname, getuid(), getgid()) < 0)
> +- xf86Msg(X_WARNING,"xf86OpenConsole: chown %s failed: %s\n",
> +- vtname, strerror(errno));
> +-
> +- /*
> +- * the current VT device we're running on is not "console", we want
> +- * to grab all consoles too
> +- *
> +- * Why is this needed??
> +- */
> +- if (chown("/dev/tty0", getuid(), getgid()) < 0)
> +- xf86Msg(X_WARNING,"xf86OpenConsole: chown /dev/tty0 failed: %s\n",
> +- strerror(errno));
> ++ if (geteuid() == 0) {
> ++ /* change ownership of the vt */
> ++ if (chown(vtname, getuid(), getgid()) < 0)
> ++ xf86Msg(X_WARNING,"xf86OpenConsole: chown %s failed: %s\n",
> ++ vtname, strerror(errno));
> ++
> ++ /*
> ++ * the current VT device we're running on is not
> ++ * "console", we want to grab all consoles too
> ++ *
> ++ * Why is this needed??
> ++ */
> ++ if (chown("/dev/tty0", getuid(), getgid()) < 0)
> ++ xf86Msg(X_WARNING,"xf86OpenConsole: chown /dev/tty0 failed: %s\n",
> ++ strerror(errno));
> ++ }
> + }
> +
> + /*
> +@@ -433,6 +438,11 @@ xf86ProcessArgument(int argc, char *argv[], int i)
> + ShareVTs = TRUE;
> + return(1);
> + }
> ++ if (!strcmp(argv[i], "-nohwaccess"))
> ++ {
> ++ NoHwAccess = TRUE;
> ++ return(1);
> ++ }
> + if ((argv[i][0] == 'v') && (argv[i][1] == 't'))
> + {
> + if (sscanf(argv[i], "vt%2d", &VTnum) == 0)
> +@@ -454,5 +464,6 @@ xf86UseMsg()
> + ErrorF("don't detach controlling tty (for debugging only)\n");
> + ErrorF("-novtswitch don't immediately switch to new VT\n");
> + ErrorF("-sharevts share VTs with another X server\n");
> ++ ErrorF("-nohwaccess don't access hardware ports directly\n");
> + return;
> + }
> +diff --git a/hw/xfree86/os-support/linux/lnx_video.c b/hw/xfree86/os-support/linux/lnx_video.c
> +index 688106a..34a845b 100644
> +--- a/hw/xfree86/os-support/linux/lnx_video.c
> ++++ b/hw/xfree86/os-support/linux/lnx_video.c
> +@@ -51,6 +51,7 @@
> + #define MAP_FAILED ((void *)-1)
> + #endif
> +
> ++extern Bool NoHwAccess;
> + static Bool ExtendedEnabled = FALSE;
> +
> + #ifdef __ia64__
> +@@ -509,6 +510,9 @@ xf86EnableIO(void)
> + int fd;
> + unsigned int ioBase_phys;
> + #endif
> ++ /* Fake it... */
> ++ if (NoHwAccess)
> ++ return TRUE;
> +
> + if (ExtendedEnabled)
> + return TRUE;
> diff --git a/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite_1.9.3.bb b/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite_1.9.3.bb
> new file mode 100644
> index 0000000..81d70bc
> --- /dev/null
> +++ b/common/recipes-graphics/xorg-xserver/xserver-xf86-dri-lite_1.9.3.bb
> @@ -0,0 +1,19 @@
> +require recipes-graphics/xorg-xserver/xserver-xf86-dri-lite.inc
> +
> +PROTO_DEPS += "xf86driproto dri2proto"
> +
> +DEPENDS += "font-util"
> +
> +PE = "1"
> +PR = "r0"
> +
> +SRC_URI += "file://nodolt.patch \
> + file://crosscompile.patch"
> +
> +# Misc build failure for master HEAD
> +SRC_URI += "file://fix_open_max_preprocessor_error.patch"
> +
> +SRC_URI[md5sum] = "5bef6839a76d029204ab31aa2fcb5201"
> +SRC_URI[sha256sum] = "864831f51e841ff37f2445d1c85b86b559c8860a435fb496aead4f256a2b141d"
> +
> +EXTRA_OECONF += "--enable-dri --enable-dri2 --enable-dga"
--
Darren Hart
Intel Open Source Technology Center
Yocto Project - Linux Kernel
More information about the yocto
mailing list