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, [email protected] wrote: > From: Tom Zanussi <[email protected]> > > 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 <[email protected]> > --- > .../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 <[email protected]> > +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 <[email protected]> > +--- > + 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 <[email protected]> > + > +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 <[email protected]> > +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 <[email protected]> > +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 _______________________________________________ yocto mailing list [email protected] https://lists.yoctoproject.org/listinfo/yocto
