diff options
61 files changed, 4209 insertions, 162 deletions
diff --git a/community-testing/dee/PKGBUILD b/community-testing/dee/PKGBUILD index e65c2d80c..0b9480261 100644 --- a/community-testing/dee/PKGBUILD +++ b/community-testing/dee/PKGBUILD @@ -1,8 +1,8 @@ -# $Id: PKGBUILD 69158 2012-04-09 22:02:32Z bgyorgy $ +# $Id: PKGBUILD 69402 2012-04-15 21:43:27Z bgyorgy $ # Maintainer: Balló György <ballogyor+arch at gmail dot com> pkgname=dee -pkgver=1.0.8 +pkgver=1.0.10 pkgrel=1 pkgdesc="Library to provide objects allowing to create Model-View-Controller type programs across DBus" arch=('i686' 'x86_64') @@ -11,14 +11,11 @@ license=('LGPL') depends=('glib2' 'icu') makedepends=('python2' 'gobject-introspection' 'vala') options=('!libtool') -source=(http://launchpad.net/$pkgname/1.0/$pkgver/+download/$pkgname-$pkgver.tar.gz - fix-crash.patch) -md5sums=('e9dbf5526ac4aca5a001e87e8cea516d' - 'e6e95a783dd1f3aa0accc7410a5783e1') +source=(http://launchpad.net/$pkgname/1.0/$pkgver/+download/$pkgname-$pkgver.tar.gz) +md5sums=('17b715147e1721ce9624557949408d15') build() { cd "$srcdir/$pkgname-$pkgver" - patch -Np0 -i "$srcdir/fix-crash.patch" ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \ --disable-static --disable-tests \ diff --git a/community-testing/gnote/PKGBUILD b/community-testing/gnote/PKGBUILD new file mode 100644 index 000000000..04a2ec7de --- /dev/null +++ b/community-testing/gnote/PKGBUILD @@ -0,0 +1,33 @@ +# $Id: PKGBUILD 69398 2012-04-15 18:10:39Z ibiru $ +# Maintainer: Ionut Biru <ibiru@archlinux.org> +# Contributor: uastasi <uastasi@archlinux.us> +pkgname=gnote +pkgver=0.8.3 +pkgrel=1 +pkgdesc="A note taking application." +arch=('i686' 'x86_64') +url="http://live.gnome.org/Gnote" +license=('GPL3') +depends=('gtkmm3' 'libxslt' 'hicolor-icon-theme' 'desktop-file-utils' 'dconf') +makedepends=('intltool' 'gnome-doc-utils' 'boost') +options=('!libtool') +install=gnote.install +source=(http://ftp.gnome.org/pub/gnome/sources/$pkgname/0.8/$pkgname-$pkgver.tar.xz) +sha256sums=('41308f957b9cb6f885adb61a607b93ec969be069676e7d518c007ecf35f474ab') + +build() { + cd "$pkgname-$pkgver" + ./configure --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --libexecdir=/usr/lib/gnote \ + --disable-scrollkeeper \ + --disable-schemas-compile \ + --disable-static + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" install +} diff --git a/community-testing/gnote/gnote.install b/community-testing/gnote/gnote.install new file mode 100644 index 000000000..0f8eb1012 --- /dev/null +++ b/community-testing/gnote/gnote.install @@ -0,0 +1,21 @@ +pkgname=gnote + +post_install() { + glib-compile-schemas usr/share/glib-2.0/schemas + gtk-update-icon-cache -q -t -f usr/share/icons/hicolor + update-desktop-database -q +} + +pre_upgrade() { + if [ -f usr/share/gconf/schemas/${pkgname}.schemas ]; then + usr/sbin/gconfpkg --uninstall ${pkgname} + fi +} + +post_upgrade() { + post_install +} + +post_remove() { + post_install +} diff --git a/community-testing/openttd/PKGBUILD b/community-testing/openttd/PKGBUILD index c546a3db3..4be724378 100644 --- a/community-testing/openttd/PKGBUILD +++ b/community-testing/openttd/PKGBUILD @@ -1,9 +1,8 @@ -# $Id: PKGBUILD 69106 2012-04-09 13:50:09Z tdziedzic $ +# $Id: PKGBUILD 69388 2012-04-15 14:15:44Z lcarlier $ # Maintainer: Vesa Kaihlavirta <vegai@iki.fi> pkgname=openttd -pkgver=1.2.0rc4 -_realpkgver=1.2.0-RC4 +pkgver=1.2.0 pkgrel=1 pkgdesc='An engine for running Transport Tycoon Deluxe.' arch=('i686' 'x86_64') @@ -13,11 +12,11 @@ depends=('libpng' 'sdl' 'icu' 'fontconfig' 'lzo2' 'hicolor-icon-theme' 'desktop- install=openttd.install optdepends=('openttd-opengfx: free graphics' 'openttd-opensfx: free soundset') -source=("http://binaries.openttd.org/releases/${_realpkgver}/${pkgname}-${_realpkgver}-source.tar.xz") -md5sums=('b8692deb951dc3a88c321a9e4b254dd2') +source=("http://binaries.openttd.org/releases/${pkgver}/${pkgname}-${pkgver}-source.tar.xz") +md5sums=('7f5181fdd5119336ccbe08f47eab78c1') build() { - cd ${pkgname}-${_realpkgver} + cd ${pkgname}-${pkgver} ./configure \ --prefix-dir=/usr \ @@ -33,7 +32,7 @@ build() { } package() { - cd ${pkgname}-${_realpkgver} + cd ${pkgname}-${pkgver} make install } diff --git a/community/acpid/PKGBUILD b/community/acpid/PKGBUILD index 66537479d..53ff54a87 100644 --- a/community/acpid/PKGBUILD +++ b/community/acpid/PKGBUILD @@ -1,11 +1,11 @@ -# $Id: PKGBUILD 68371 2012-03-23 10:07:50Z seblu $ +# $Id: PKGBUILD 69396 2012-04-15 17:01:41Z seblu $ # Maintainer: Sébastien Luttringer <seblu@aur.archlinux.org> # Contributor: xduugu # Contributor: Manolis Tzanidakis # Contributor: Jonathan Schmidt <j.schmidt@archlinux.us pkgname=acpid -pkgver=2.0.15 +pkgver=2.0.16 pkgrel=1 pkgdesc='A daemon for delivering ACPI power management events with netlink support' arch=('i686' 'x86_64') @@ -20,7 +20,7 @@ source=("http://www.tedfelix.com/linux/$pkgname-$pkgver.tar.xz" 'anything' 'handler.sh' 'acpid.conf.d') -md5sums=('1b1c8775adab6a994a386c45af6b86dc' +md5sums=('d59fc02c9c34f0d5c137495302e2c074' 'd69203a032c4583f9abaafcf21a7ed84' '2d37b98d6e74bab815604b8b48c6cfd4' '615439f4a89716c747907d4fc3c8df75' diff --git a/community/assimp/PKGBUILD b/community/assimp/PKGBUILD new file mode 100644 index 000000000..8dc5bff69 --- /dev/null +++ b/community/assimp/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Sven-Hendrik Haase <sh@lutzhaase.com> +# Contributor: jepaan <jepaan at hotmail dot com> + +pkgname=assimp +pkgver=2.0.863 +pkgrel=1 +pkgdesc="Portable Open Source library to import various well-known 3D model formats in an uniform manner" +arch=('i686' 'x86_64') +license=('BSD') +makedepends=('cmake' 'boost') +url=('http://assimp.sourceforge.net/index.html') +source=("http://downloads.sourceforge.net/assimp/assimp--${pkgver}-sdk.zip") +md5sums=('9f41662501bd9d9533c4cf03b7c25d5b') + +build() { + cd ${srcdir} + mkdir build + cd build + cmake ../${pkgname}--${pkgver}-sdk \ + -DCMAKE_INSTALL_PREFIX=/usr + make +} + +package() { + cd ${srcdir}/build + + make DESTDIR=$pkgdir install + install -Dm644 ${srcdir}/${pkgname}--${pkgver}-sdk/LICENSE ${pkgdir}/usr/share/licenses/${pkgname}/LICENSE +} diff --git a/community/bitcoin/PKGBUILD b/community/bitcoin/PKGBUILD new file mode 100644 index 000000000..00d2cc85f --- /dev/null +++ b/community/bitcoin/PKGBUILD @@ -0,0 +1,62 @@ +# $Id: PKGBUILD 69400 2012-04-15 20:25:26Z tredaelli $ +# Maintainer: Timothy Redaelli <timothy.redaelli@gmail.com> +# Contributor: shahid <helllamer@gmail.com> + +pkgbase=bitcoin +pkgname=('bitcoin-daemon' 'bitcoin-qt') +pkgver=0.6.0 +pkgrel=1 +arch=('i686' 'x86_64') +url="http://www.bitcoin.org/" +makedepends=('boost' 'automoc4' 'miniupnpc') +conflicts=('bitcoin' 'bitcoin-bin' 'bitcoin-git') +replaces=('bitcoin' 'bitcoin-bin' 'bitcoin-git') +license=('MIT') +source=("http://downloads.sourceforge.net/sourceforge/${pkgbase}/${pkgbase}-${pkgver}-linux.tar.gz") +sha256sums=('13faa8b7c8c9ce3518ebe31ff2d97920f4feb4f06c1d08455b272fdaaeeb1f97') + +build() { + cd "$srcdir/$pkgbase-$pkgver-linux/src" + + # FIXME GCC 4.7.0 is too strict + echo "QMAKE_CXXFLAGS += $CXXFLAGS -fpermissive" >> bitcoin-qt.pro + + # and make qt gui + qmake + make + + # make bitcoind + make -f makefile.unix -C src CXXFLAGS="$CXXFLAGS -fpermissive" USE_UPNP=1 +} + + +package_bitcoin-qt() { + pkgdesc="Bitcoin is a peer-to-peer network based digital currency - QT" + depends=(boost-libs qt miniupnpc) + install=bitcoin-qt.install + + cd "$srcdir/$pkgbase-$pkgver-linux/src" + install -Dm755 bitcoin-qt "$pkgdir"/usr/bin/bitcoin-qt + install -Dm644 contrib/debian/bitcoin-qt.desktop \ + "$pkgdir"/usr/share/applications/bitcoin.desktop + install -Dm644 share/pixmaps/bitcoin80.xpm \ + "$pkgdir"/usr/share/pixmaps/bitcoin80.xpm + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} + +package_bitcoin-daemon() { + pkgdesc="Bitcoin is a peer-to-peer network based digital currency - daemon" + depends=(boost-libs miniupnpc openssl) + + cd "$srcdir/$pkgbase-$pkgver-linux/src" + install -Dm755 src/bitcoind "$pkgdir"/usr/bin/bitcoind + install -Dm644 contrib/debian/examples/bitcoin.conf \ + "$pkgdir/usr/share/doc/$pkgname/examples/bitcoin.conf" + install -Dm644 contrib/debian/manpages/bitcoind.1 \ + "$pkgdir"/usr/share/man/man1/bitcoind.1 + install -Dm644 contrib/debian/manpages/bitcoin.conf.5 \ + "$pkgdir"/usr/share/man/man5/bitcoin.conf.5 + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} + diff --git a/community/bitcoin/bitcoin-qt.install b/community/bitcoin/bitcoin-qt.install new file mode 100644 index 000000000..f98ba7338 --- /dev/null +++ b/community/bitcoin/bitcoin-qt.install @@ -0,0 +1,11 @@ +post_install() { + update-desktop-database -q +} + +post_upgrade() { + post_install $1 +} + +post_remove() { + post_install $1 +} diff --git a/community/desmume/PKGBUILD b/community/desmume/PKGBUILD index 5138954fd..187177a00 100644 --- a/community/desmume/PKGBUILD +++ b/community/desmume/PKGBUILD @@ -1,4 +1,4 @@ -# $Id: PKGBUILD 67526 2012-03-13 10:38:03Z giovanni $ +# $Id: PKGBUILD 69392 2012-04-15 16:03:24Z schuay $ # Maintainer: Jonathan Conder <jonno dot conder at gmail dot com> # Maintainer: Brad Fanella <bradfanella@archlinux.us> # Contributor: Arkham <arkham at archlinux dot us> @@ -11,27 +11,22 @@ # Contributor: Asher256 <achrafcherti at gmail dot com> pkgname=desmume -pkgver=0.9.7 -pkgrel=4 +pkgver=0.9.8 +pkgrel=1 pkgdesc="Nintendo DS emulator" arch=('i686' 'x86_64') url="http://desmume.org/" license=('GPL') -depends=('agg' 'gtkglext' 'libglade' 'desktop-file-utils' 'libpcap') +depends=('agg' 'gtkglext' 'libglade' 'desktop-file-utils' 'libpcap' + 'soundtouch' 'alsa-lib' 'zziplib') makedepends=('intltool') -replaces=('desmume-core' 'desmume-cli' 'desmume-gtk' 'desmume-glade') install=desmume.install -source=("http://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.gz" - 'desmume-0.9.7-zlib.1.2.6-fix.patch') -sha256sums=('0a0f7ef3cc76ff0bbc6f3df47c3689653617074ea7ffc354e9fa1240c5336523' - 'baaf68be32f09690975d6309af6988c038e708ef322ed7e4b370d87087c7b6ba') +source=("http://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.gz") build() { cd "$srcdir/$pkgname-$pkgver" - patch -Np1 -i "${srcdir}/desmume-0.9.7-zlib.1.2.6-fix.patch" - ./configure --prefix=/usr \ - --enable-wifi + ./configure --prefix=/usr --enable-wifi make } @@ -40,3 +35,5 @@ package() { make DESTDIR="$pkgdir/" install } + +sha256sums=('f405b44e2d7ab3578d6be91a6546bbaa0afc60b2a8d193e4415fea5c5332d585') diff --git a/community/glfw/PKGBUILD b/community/glfw/PKGBUILD index 452f0cb2e..dda84c6ff 100644 --- a/community/glfw/PKGBUILD +++ b/community/glfw/PKGBUILD @@ -1,4 +1,4 @@ -# $Id: PKGBUILD 68357 2012-03-22 23:04:26Z svenstaro $ +# $Id: PKGBUILD 69414 2012-04-16 00:32:44Z svenstaro $ # Maintainer: Sven-Hendrik Haase <sh@lutzhaase.com> # Contributor: philefou <tuxication AT gmail DOT com> # Contributor: lindquist <tomas@famolsen.dk> @@ -7,7 +7,7 @@ # Contributor: SpepS <dreamspepser at yahoo dot it> pkgname=glfw -pkgver=2.7.4 +pkgver=2.7.5 pkgrel=1 pkgdesc="A free, open source, portable framework for OpenGL application development" arch=('i686' 'x86_64') @@ -16,7 +16,7 @@ license=('custom:ZLIB') depends=('libgl' 'libxrandr') makedepends=('mesa') source=("http://switch.dl.sourceforge.net/sourceforge/$pkgname/$pkgname-$pkgver.tar.bz2") -md5sums=('cf3843ff6b4324a3e8003252f6b20cd0') +md5sums=('b9ef11d08b6283b1b4a274fcf995fd79') build() { cd "$srcdir/$pkgname-$pkgver" diff --git a/community/midori/PKGBUILD b/community/midori/PKGBUILD index de185bc66..22da899e8 100644 --- a/community/midori/PKGBUILD +++ b/community/midori/PKGBUILD @@ -1,10 +1,10 @@ -# $Id: PKGBUILD 67337 2012-03-09 05:57:19Z bpiotrowski $ +# $Id: PKGBUILD 69383 2012-04-15 05:22:45Z bpiotrowski $ # Maintainer: Andreas Radke <andyrtr@archlinux.org> # Contributor: rabyte <rabyte.at.gmail.dot.com> # Contributor: Johannes Krampf <wuischke.at.amule.dot.org> pkgname=midori -pkgver=0.4.4 +pkgver=0.4.5 pkgrel=1 pkgdesc="A lightweight web browser based on Gtk WebKit" arch=('i686' 'x86_64') @@ -15,7 +15,7 @@ depends=('libwebkit>=1.3.13' 'libunique' 'hicolor-icon-theme' 'desktop-file-util makedepends=('libxml2' 'intltool' 'gtk-doc' 'librsvg' 'python2>=2.7.1' 'vala') # 'git' optdepends=('vala: for use in extensions') source=(http://archive.xfce.org/src/apps/$pkgname/${pkgver%.*}/$pkgname-$pkgver.tar.bz2) -md5sums=('a6578ebfd237c0f22cce49113b95f70c') +md5sums=('14288197a1e2251b7c0803e1448daa0e') build() { cd "${srcdir}/${pkgname}-${pkgver}" diff --git a/community/mythtv/PKGBUILD b/community/mythtv/PKGBUILD index 37a58eecd..108d6605c 100644 --- a/community/mythtv/PKGBUILD +++ b/community/mythtv/PKGBUILD @@ -1,4 +1,4 @@ -# $Id: PKGBUILD 69262 2012-04-11 06:53:29Z jconder $ +# $Id: PKGBUILD 69416 2012-04-16 01:26:19Z jconder $ # Maintainer: Jonathan Conder <jonno.conder@gmail.com> # Contributor: Giovanni Scafora <giovanni@archlinux.org> # Contributor: Juergen Hoetzel <juergen@archlinux.org> @@ -7,7 +7,7 @@ pkgname=mythtv pkgver=0.25 -pkgrel=1 +pkgrel=2 epoch=1 pkgdesc="A Homebrew PVR project" arch=('i686' 'x86_64') @@ -24,6 +24,8 @@ optdepends=('glew: for GPU commercial flagging' 'libxml2: to read blu-ray metadata' 'openssl: for AirTunes (RAOP) support' 'xmltv: to download tv listings') +conflicts=('myththemes') +replaces=('myththemes') backup=('etc/conf.d/mythbackend') install='mythtv.install' source=("ftp://ftp.osuosl.org/pub/$pkgname/$pkgname-$pkgver.tar.bz2" @@ -33,7 +35,7 @@ source=("ftp://ftp.osuosl.org/pub/$pkgname/$pkgname-$pkgver.tar.bz2" md5sums=('e49c81de40e279c83dcb1b2aa9a45748' '6090f5f22a8584db80b76cf19869ee41' '62fd98347c56b1d9b795792f83269d25' - '1f72db0586f97a7c3fd3155dfa9a6c6f') + 'ab962d83614cbd0ac11ce3fcc929829d') build() { cd "$srcdir/$pkgname-$pkgver" diff --git a/community/mythtv/mythbackend.conf b/community/mythtv/mythbackend.conf index 15a248450..49bbca877 100644 --- a/community/mythtv/mythbackend.conf +++ b/community/mythtv/mythbackend.conf @@ -1,4 +1,3 @@ -#!/bin/bash # # Copyright (c) by the MythTV Development Team. # diff --git a/community/naev/PKGBUILD b/community/naev/PKGBUILD index 415e48c0c..d9481a878 100644 --- a/community/naev/PKGBUILD +++ b/community/naev/PKGBUILD @@ -1,9 +1,9 @@ -# $Id: PKGBUILD 68487 2012-03-26 07:00:35Z svenstaro $ +# $Id: PKGBUILD 69406 2012-04-15 22:34:54Z svenstaro $ # Maintainer: Sven-Hendrik Haase <sh@lutzhaase.com> # Contributor: Johan Rehnberg <cleanrock@gmail.com> pkgname=naev -pkgver=0.5.2 +pkgver=0.5.3 pkgrel=1 pkgdesc='2D action/rpg space game' arch=('i686' 'x86_64') @@ -12,7 +12,7 @@ license=('GPL3') depends=('openal' 'libvorbis' 'sdl_image' 'sdl_mixer' 'libgl' 'libxml2' 'freetype2' 'libpng' 'naev-data') makedepends=('freeglut') source=("http://downloads.sourceforge.net/sourceforge/${pkgname}/${pkgname}-${pkgver}.tar.bz2") -md5sums=('c23a2ca80553a7d1d75497dc6672e61b') +md5sums=('bec719b3daa33ec190d785120a7b0159') build() { cd "$srcdir/$pkgname-$pkgver" diff --git a/community/sslh/PKGBUILD b/community/sslh/PKGBUILD index d4e795cc7..51667b8c6 100644 --- a/community/sslh/PKGBUILD +++ b/community/sslh/PKGBUILD @@ -1,22 +1,24 @@ -# $Id$ -# Maintainer: Sebastien Luttringer <seblu+arch@seblu.net> +# $Id: PKGBUILD 69412 2012-04-15 23:37:55Z seblu $ +# Maintainer: Sébastien Luttringer <seblu@aur.archlinux.org> # Contributor: Le_suisse <lesuisse.dev+aur at gmail dot com> # Contributor: Jason Rodriguez <jason-aur@catloaf.net> pkgname=sslh pkgver=1.10 -pkgrel=5 +pkgrel=6 pkgdesc='SSL/SSH/OpenVPN/XMPP/tinc port multiplexer' arch=('i686' 'x86_64') url='http://www.rutschle.net/tech/sslh.shtml' license=('GPL2') backup=('etc/conf.d/sslh') -source=("http://www.rutschle.net/tech/${pkgname}-${pkgver}.tar.gz" +source=("http://www.rutschle.net/tech/$pkgname-$pkgver.tar.gz" 'sslh.rc' - 'sslh.conf') + 'sslh.conf' + 'sslh.service') md5sums=('bc34e9a4770d634633e70589c72708cc' - '0680f09267c33205acf16ac6d4adf926' - '808199410bd6ab67421bf3544f805d1a') + 'f64da291e97f1a99c33cb6ebf939b95b' + '808199410bd6ab67421bf3544f805d1a' + 'ee8a4fcfc1f6839f7c93deb6f59f7fd6') build() { cd $pkgname-$pkgver @@ -27,10 +29,17 @@ build() { } package() { - install -D -m 755 sslh.rc "${pkgdir}/etc/rc.d/sslh" - install -D -m 644 sslh.conf "${pkgdir}/etc/conf.d/sslh" + # install initscripts + install -Dm 755 sslh.rc "$pkgdir/etc/rc.d/sslh" + install -Dm 644 sslh.conf "$pkgdir/etc/conf.d/sslh" + # install systemd service + install -Dm 644 sslh.service "$pkgdir/usr/lib/systemd/system/sslh.service" + # manually install to have both ssl-fork and ssl-select cd $pkgname-$pkgver - make PREFIX="$pkgdir/usr" install + install -Dm 0755 sslh-fork "$pkgdir/usr/bin/sslh-fork" + install -Dm 0755 sslh-select "$pkgdir/usr/bin/sslh-select" + ln -s sslh-fork "$pkgdir/usr/bin/sslh" + install -Dm 0644 sslh.8.gz "$pkgdir/usr/share/man/man8/sslh.8.gz" } # vim:set ts=2 sw=2 ft=sh et: diff --git a/community/sslh/sslh.rc b/community/sslh/sslh.rc index 05b03bc3e..9c31435a0 100644 --- a/community/sslh/sslh.rc +++ b/community/sslh/sslh.rc @@ -5,7 +5,7 @@ . /etc/conf.d/${0##*/} NAME=sslh -DAEMON=/usr/sbin/sslh +DAEMON=/usr/bin/sslh PID=$(pidof -o %PPID $DAEMON) case "$1" in @@ -24,7 +24,7 @@ case "$1" in $0 start exit 0 ;; - *) + *) echo "usage: ${0##*/} {start|stop|restart}" >&2 ;; esac diff --git a/community/sslh/sslh.service b/community/sslh/sslh.service new file mode 100644 index 000000000..7ccad70e9 --- /dev/null +++ b/community/sslh/sslh.service @@ -0,0 +1,9 @@ +[Unit] +Description=SSL/SSH multiplexer + +[Service] +EnvironmentFile=/etc/conf.d/sslh +ExecStart=/usr/bin/sslh --foreground $DAEMON_OPTS + +[Install] +WantedBy=multi-user.target diff --git a/community/uget/PKGBUILD b/community/uget/PKGBUILD index 01eb6df30..bf103729d 100644 --- a/community/uget/PKGBUILD +++ b/community/uget/PKGBUILD @@ -1,26 +1,23 @@ -# $Id: PKGBUILD 68396 2012-03-24 05:49:50Z bgyorgy $ +# $Id: PKGBUILD 69404 2012-04-15 22:27:21Z bgyorgy $ # Maintainer: Balló György <ballogyor+arch at gmail dot com> pkgname=uget -pkgver=1.8.0 -pkgrel=3 +pkgver=1.8.1 +pkgrel=1 pkgdesc="GTK+ download manager featuring download classification and HTML import" arch=('i686' 'x86_64') url="http://urlget.sourceforge.net/" -license=('GPL') +license=('LGPL') depends=('libnotify' 'gtk3' 'gstreamer0.10' 'curl' 'hicolor-icon-theme' 'xdg-utils') makedepends=('intltool') optdepends=('aria2: alternative backend') install=$pkgname.install source=(http://downloads.sourceforge.net/urlget/$pkgname-$pkgver.tar.gz) -md5sums=('2e0ad66ecdd0104b8fb27b29fdb44df1') +md5sums=('e3fc14042820f0496f12c85c3847c6f8') build() { cd "$srcdir/$pkgname-$pkgver" - # Fix aria2 arguments - sed -i 's/\"--enable-xml-rpc\"/"--enable-rpc"/' uget-gtk/UgSetting.c - ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \ --disable-appindicator --with-gtk3 make diff --git a/core/expat/PKGBUILD b/core/expat/PKGBUILD index 3a1951a2f..73688e009 100644 --- a/core/expat/PKGBUILD +++ b/core/expat/PKGBUILD @@ -1,4 +1,4 @@ -# $Id: PKGBUILD 155403 2012-04-03 11:10:06Z allan $ +# $Id: PKGBUILD 156201 2012-04-16 03:41:12Z allan $ # Maintainer: Allan McRae <allan@archlinux.org> # Committer: Judd Vinet <jvinet@zeroflux.org> diff --git a/core/gmp/PKGBUILD b/core/gmp/PKGBUILD index 6ed8e0298..15158aa16 100644 --- a/core/gmp/PKGBUILD +++ b/core/gmp/PKGBUILD @@ -1,4 +1,4 @@ -# $Id: PKGBUILD 150226 2012-02-15 09:53:48Z allan $ +# $Id: PKGBUILD 156203 2012-04-16 03:46:32Z allan $ # Maintainer: Allan McRae <allan@archlinux.org> # Maintainer: Jan de Groot <jgc@archlinux.org> diff --git a/core/pkg-config/PKGBUILD b/core/pkg-config/PKGBUILD index ce42fd9b7..b671db33e 100644 --- a/core/pkg-config/PKGBUILD +++ b/core/pkg-config/PKGBUILD @@ -1,4 +1,4 @@ -# $Id: PKGBUILD 142076 2011-11-04 23:36:11Z allan $ +# $Id: PKGBUILD 156205 2012-04-16 03:57:28Z allan $ # Maintainer: Allan McRae <allan@archlinux.org> # Committer: Judd Vinet <jvinet@zeroflux.org> diff --git a/extra/llvm/PKGBUILD b/extra/llvm/PKGBUILD index 89ecadbd6..634e997de 100644 --- a/extra/llvm/PKGBUILD +++ b/extra/llvm/PKGBUILD @@ -1,4 +1,4 @@ -# $Id: PKGBUILD 156067 2012-04-12 16:34:12Z foutrelis $ +# $Id: PKGBUILD 156168 2012-04-15 04:29:31Z heftig $ # Maintainer: Evangelos Foutras <evangelos@foutrelis.com> # Contributor: Jan "heftig" Steffens <jan.steffens@gmail.com> # Contributor: Sebastian Nowicki <sebnow@gmail.com> @@ -11,7 +11,7 @@ pkgname=('llvm' 'llvm-ocaml' 'clang' 'clang-analyzer') pkgver=3.0 -pkgrel=2 +pkgrel=3 arch=('i686' 'x86_64') url="http://llvm.org/" license=('custom:University of Illinois/NCSA Open Source License') diff --git a/extra/tomcat-native/PKGBUILD b/extra/tomcat-native/PKGBUILD index 62e1d8555..98952ae13 100644 --- a/extra/tomcat-native/PKGBUILD +++ b/extra/tomcat-native/PKGBUILD @@ -2,16 +2,16 @@ # Contributor: Vitaliy Berdinskikh ur6lad[at]i.ua pkgname=tomcat-native -pkgver=1.1.22 +pkgver=1.1.23 pkgrel=1 pkgdesc="The Apache Tomcat Native Library" arch=('i686' 'x86_64') url="http://tomcat.apache.org/" -license="Apache" +license=("Apache") depends=('apr' 'openssl') makedepends=('java-environment') source=(http://www.apache.org/dist/tomcat/tomcat-connectors/native/${pkgver}/source/${pkgname}-${pkgver}-src.tar.gz) -md5sums=('44d764f8d99d0454c7337ba9701558ee') +md5sums=('f2a55b5a19adbe491edc98e0c11d9028') build() { cd "${srcdir}/tomcat-native-${pkgver}-src/jni/native" diff --git a/extra/xf86-video-intel/0001-uxa-gen3-Remove-special-casing-of-solid-pictures.patch b/extra/xf86-video-intel/0001-uxa-gen3-Remove-special-casing-of-solid-pictures.patch new file mode 100644 index 000000000..5c3b1d7d6 --- /dev/null +++ b/extra/xf86-video-intel/0001-uxa-gen3-Remove-special-casing-of-solid-pictures.patch @@ -0,0 +1,533 @@ +From fbee314a4194671bfc6dfaa90141498a2f45de4e Mon Sep 17 00:00:00 2001 +From: Chris Wilson <chris@chris-wilson.co.uk> +Date: Mon, 27 Feb 2012 16:29:38 +0000 +Subject: [PATCH 1/5] uxa/gen3: Remove special casing of solid pictures + +Fixes use of alpha-groups and opacity masks in cairo. + +Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> +--- + src/i915_render.c | 366 ++++++++++++++++++----------------------------------- + 1 file changed, 122 insertions(+), 244 deletions(-) + +diff --git a/src/i915_render.c b/src/i915_render.c +index 87d2336..6210035 100644 +--- a/src/i915_render.c ++++ b/src/i915_render.c +@@ -257,11 +257,8 @@ i915_check_composite_texture(ScreenPtr screen, PicturePtr picture) + return FALSE; + } + +- if (picture->pSourcePict) { +- SourcePict *source = picture->pSourcePict; +- if (source->type == SourcePictTypeSolidFill) +- return TRUE; +- } ++ if (picture->pSourcePict) ++ return FALSE; + + if (picture->pDrawable) { + int w, h, i; +@@ -387,23 +384,6 @@ static Bool i915_texture_setup(PicturePtr picture, PixmapPtr pixmap, int unit) + } + + static void +-i915_emit_composite_primitive_constant(intel_screen_private *intel, +- int srcX, int srcY, +- int maskX, int maskY, +- int dstX, int dstY, +- int w, int h) +-{ +- OUT_VERTEX(dstX + w); +- OUT_VERTEX(dstY + h); +- +- OUT_VERTEX(dstX); +- OUT_VERTEX(dstY + h); +- +- OUT_VERTEX(dstX); +- OUT_VERTEX(dstY); +-} +- +-static void + i915_emit_composite_primitive_identity_source(intel_screen_private *intel, + int srcX, int srcY, + int maskX, int maskY, +@@ -470,29 +450,6 @@ i915_emit_composite_primitive_affine_source(intel_screen_private *intel, + } + + static void +-i915_emit_composite_primitive_constant_identity_mask(intel_screen_private *intel, +- int srcX, int srcY, +- int maskX, int maskY, +- int dstX, int dstY, +- int w, int h) +-{ +- OUT_VERTEX(dstX + w); +- OUT_VERTEX(dstY + h); +- OUT_VERTEX((maskX + w) * intel->scale_units[0][0]); +- OUT_VERTEX((maskY + h) * intel->scale_units[0][1]); +- +- OUT_VERTEX(dstX); +- OUT_VERTEX(dstY + h); +- OUT_VERTEX(maskX * intel->scale_units[0][0]); +- OUT_VERTEX((maskY + h) * intel->scale_units[0][1]); +- +- OUT_VERTEX(dstX); +- OUT_VERTEX(dstY); +- OUT_VERTEX(maskX * intel->scale_units[0][0]); +- OUT_VERTEX(maskY * intel->scale_units[0][1]); +-} +- +-static void + i915_emit_composite_primitive_identity_source_mask(intel_screen_private *intel, + int srcX, int srcY, + int maskX, int maskY, +@@ -536,63 +493,61 @@ i915_emit_composite_primitive(intel_screen_private *intel, + + per_vertex = 2; /* dest x/y */ + +- if (! intel->render_source_is_solid) { +- src_unit = tex_unit++; +- +- is_affine_src = intel_transform_is_affine(intel->transform[src_unit]); +- if (is_affine_src) { +- if (!intel_get_transformed_coordinates(srcX, srcY, +- intel-> +- transform[src_unit], +- &src_x[0], +- &src_y[0])) +- return; +- +- if (!intel_get_transformed_coordinates(srcX, srcY + h, +- intel-> +- transform[src_unit], +- &src_x[1], +- &src_y[1])) +- return; +- +- if (!intel_get_transformed_coordinates(srcX + w, srcY + h, +- intel-> +- transform[src_unit], +- &src_x[2], +- &src_y[2])) +- return; +- +- per_vertex += 2; /* src x/y */ +- } else { +- if (!intel_get_transformed_coordinates_3d(srcX, srcY, +- intel-> +- transform[src_unit], +- &src_x[0], +- &src_y[0], +- &src_w[0])) +- return; +- +- if (!intel_get_transformed_coordinates_3d(srcX, srcY + h, +- intel-> +- transform[src_unit], +- &src_x[1], +- &src_y[1], +- &src_w[1])) +- return; +- +- if (!intel_get_transformed_coordinates_3d(srcX + w, srcY + h, +- intel-> +- transform[src_unit], +- &src_x[2], +- &src_y[2], +- &src_w[2])) +- return; +- +- per_vertex += 4; /* src x/y/z/w */ +- } ++ src_unit = tex_unit++; ++ ++ is_affine_src = intel_transform_is_affine(intel->transform[src_unit]); ++ if (is_affine_src) { ++ if (!intel_get_transformed_coordinates(srcX, srcY, ++ intel-> ++ transform[src_unit], ++ &src_x[0], ++ &src_y[0])) ++ return; ++ ++ if (!intel_get_transformed_coordinates(srcX, srcY + h, ++ intel-> ++ transform[src_unit], ++ &src_x[1], ++ &src_y[1])) ++ return; ++ ++ if (!intel_get_transformed_coordinates(srcX + w, srcY + h, ++ intel-> ++ transform[src_unit], ++ &src_x[2], ++ &src_y[2])) ++ return; ++ ++ per_vertex += 2; /* src x/y */ ++ } else { ++ if (!intel_get_transformed_coordinates_3d(srcX, srcY, ++ intel-> ++ transform[src_unit], ++ &src_x[0], ++ &src_y[0], ++ &src_w[0])) ++ return; ++ ++ if (!intel_get_transformed_coordinates_3d(srcX, srcY + h, ++ intel-> ++ transform[src_unit], ++ &src_x[1], ++ &src_y[1], ++ &src_w[1])) ++ return; ++ ++ if (!intel_get_transformed_coordinates_3d(srcX + w, srcY + h, ++ intel-> ++ transform[src_unit], ++ &src_x[2], ++ &src_y[2], ++ &src_w[2])) ++ return; ++ ++ per_vertex += 4; /* src x/y/z/w */ + } + +- if (intel->render_mask && ! intel->render_mask_is_solid) { ++ if (intel->render_mask) { + mask_unit = tex_unit++; + + is_affine_mask = intel_transform_is_affine(intel->transform[mask_unit]); +@@ -650,15 +605,13 @@ i915_emit_composite_primitive(intel_screen_private *intel, + + OUT_VERTEX(dstX + w); + OUT_VERTEX(dstY + h); +- if (! intel->render_source_is_solid) { +- OUT_VERTEX(src_x[2] * intel->scale_units[src_unit][0]); +- OUT_VERTEX(src_y[2] * intel->scale_units[src_unit][1]); +- if (!is_affine_src) { ++ OUT_VERTEX(src_x[2] * intel->scale_units[src_unit][0]); ++ OUT_VERTEX(src_y[2] * intel->scale_units[src_unit][1]); ++ if (!is_affine_src) { + OUT_VERTEX(0.0); + OUT_VERTEX(src_w[2]); +- } + } +- if (intel->render_mask && ! intel->render_mask_is_solid) { ++ if (intel->render_mask) { + OUT_VERTEX(mask_x[2] * intel->scale_units[mask_unit][0]); + OUT_VERTEX(mask_y[2] * intel->scale_units[mask_unit][1]); + if (!is_affine_mask) { +@@ -669,15 +622,13 @@ i915_emit_composite_primitive(intel_screen_private *intel, + + OUT_VERTEX(dstX); + OUT_VERTEX(dstY + h); +- if (! intel->render_source_is_solid) { +- OUT_VERTEX(src_x[1] * intel->scale_units[src_unit][0]); +- OUT_VERTEX(src_y[1] * intel->scale_units[src_unit][1]); +- if (!is_affine_src) { ++ OUT_VERTEX(src_x[1] * intel->scale_units[src_unit][0]); ++ OUT_VERTEX(src_y[1] * intel->scale_units[src_unit][1]); ++ if (!is_affine_src) { + OUT_VERTEX(0.0); + OUT_VERTEX(src_w[1]); +- } + } +- if (intel->render_mask && ! intel->render_mask_is_solid) { ++ if (intel->render_mask) { + OUT_VERTEX(mask_x[1] * intel->scale_units[mask_unit][0]); + OUT_VERTEX(mask_y[1] * intel->scale_units[mask_unit][1]); + if (!is_affine_mask) { +@@ -688,15 +639,13 @@ i915_emit_composite_primitive(intel_screen_private *intel, + + OUT_VERTEX(dstX); + OUT_VERTEX(dstY); +- if (! intel->render_source_is_solid) { +- OUT_VERTEX(src_x[0] * intel->scale_units[src_unit][0]); +- OUT_VERTEX(src_y[0] * intel->scale_units[src_unit][1]); +- if (!is_affine_src) { ++ OUT_VERTEX(src_x[0] * intel->scale_units[src_unit][0]); ++ OUT_VERTEX(src_y[0] * intel->scale_units[src_unit][1]); ++ if (!is_affine_src) { + OUT_VERTEX(0.0); + OUT_VERTEX(src_w[0]); +- } + } +- if (intel->render_mask && ! intel->render_mask_is_solid) { ++ if (intel->render_mask) { + OUT_VERTEX(mask_x[0] * intel->scale_units[mask_unit][0]); + OUT_VERTEX(mask_y[0] * intel->scale_units[mask_unit][1]); + if (!is_affine_mask) { +@@ -729,29 +678,11 @@ i915_prepare_composite(int op, PicturePtr source_picture, + intel->render_dest_picture = dest_picture; + intel->render_dest = dest; + +- intel->render_source_is_solid = FALSE; +- if (source_picture->pSourcePict) { +- SourcePict *source = source_picture->pSourcePict; +- if (source->type == SourcePictTypeSolidFill) { +- intel->render_source_is_solid = TRUE; +- intel->render_source_solid = source->solidFill.color; +- } +- } +- if (!intel->render_source_is_solid && !intel_check_pitch_3d(source)) ++ if (!intel_check_pitch_3d(source)) + return FALSE; + +- intel->render_mask_is_solid = FALSE; +- if (mask) { +- if (mask_picture->pSourcePict) { +- SourcePict *source = mask_picture->pSourcePict; +- if (source->type == SourcePictTypeSolidFill) { +- intel->render_mask_is_solid = TRUE; +- intel->render_mask_solid = source->solidFill.color; +- } +- } +- if (!intel->render_mask_is_solid && !intel_check_pitch_3d(mask)) +- return FALSE; +- } ++ if (mask && !intel_check_pitch_3d(mask)) ++ return FALSE; + + if (!intel_check_pitch_3d(dest)) + return FALSE; +@@ -787,31 +718,27 @@ i915_prepare_composite(int op, PicturePtr source_picture, + intel->scale_units[1][1] = -1; + + floats_per_vertex = 2; /* dest x/y */ +- if (! intel->render_source_is_solid) { +- if (!i915_texture_setup(source_picture, source, tex_unit++)) { +- intel_debug_fallback(scrn, "fail to setup src texture\n"); +- return FALSE; +- } +- +- if (intel_transform_is_affine(source_picture->transform)) +- floats_per_vertex += 2; /* src x/y */ +- else +- floats_per_vertex += 4; /* src x/y/z/w */ ++ if (!i915_texture_setup(source_picture, source, tex_unit++)) { ++ intel_debug_fallback(scrn, "fail to setup src texture\n"); ++ return FALSE; + } + +- if (mask != NULL) { +- if (! intel->render_mask_is_solid) { +- if (!i915_texture_setup(mask_picture, mask, tex_unit++)) { +- intel_debug_fallback(scrn, +- "fail to setup mask texture\n"); +- return FALSE; +- } ++ if (intel_transform_is_affine(source_picture->transform)) ++ floats_per_vertex += 2; /* src x/y */ ++ else ++ floats_per_vertex += 4; /* src x/y/z/w */ + +- if (intel_transform_is_affine(mask_picture->transform)) +- floats_per_vertex += 2; /* mask x/y */ +- else +- floats_per_vertex += 4; /* mask x/y/z/w */ ++ if (mask != NULL) { ++ if (!i915_texture_setup(mask_picture, mask, tex_unit++)) { ++ intel_debug_fallback(scrn, ++ "fail to setup mask texture\n"); ++ return FALSE; + } ++ ++ if (intel_transform_is_affine(mask_picture->transform)) ++ floats_per_vertex += 2; /* mask x/y */ ++ else ++ floats_per_vertex += 4; /* mask x/y/z/w */ + } + + intel->i915_render_state.op = op; +@@ -827,17 +754,13 @@ i915_prepare_composite(int op, PicturePtr source_picture, + + intel->prim_emit = i915_emit_composite_primitive; + if (!mask) { +- if (intel->render_source_is_solid) +- intel->prim_emit = i915_emit_composite_primitive_constant; +- else if (intel->transform[0] == NULL) ++ if (intel->transform[0] == NULL) + intel->prim_emit = i915_emit_composite_primitive_identity_source; + else if (intel_transform_is_affine(intel->transform[0])) + intel->prim_emit = i915_emit_composite_primitive_affine_source; + } else { + if (intel->transform[0] == NULL) { +- if (intel->render_source_is_solid) +- intel->prim_emit = i915_emit_composite_primitive_constant_identity_mask; +- else if (intel->transform[1] == NULL) ++ if (intel->transform[1] == NULL) + intel->prim_emit = i915_emit_composite_primitive_identity_source_mask; + } + } +@@ -856,39 +779,25 @@ i915_composite_emit_shader(intel_screen_private *intel, CARD8 op) + PicturePtr mask_picture = intel->render_mask_picture; + PixmapPtr mask = intel->render_mask; + int src_reg, mask_reg; +- Bool is_solid_src, is_solid_mask; + Bool dest_is_alpha = PIXMAN_FORMAT_RGB(intel->render_dest_picture->format) == 0; +- int tex_unit, t; + FS_LOCALS(); + +- is_solid_src = intel->render_source_is_solid; +- is_solid_mask = intel->render_mask_is_solid; +- + FS_BEGIN(); + + /* Declare the registers necessary for our program. */ +- t = 0; +- if (is_solid_src) { +- i915_fs_dcl(FS_T8); +- src_reg = FS_T8; +- } else { +- i915_fs_dcl(FS_T0); +- i915_fs_dcl(FS_S0); +- t++; +- } ++ i915_fs_dcl(FS_T0); ++ i915_fs_dcl(FS_S0); + if (!mask) { + /* No mask, so load directly to output color */ +- if (! is_solid_src) { +- if (dest_is_alpha) +- src_reg = FS_R0; +- else +- src_reg = FS_OC; ++ if (dest_is_alpha) ++ src_reg = FS_R0; ++ else ++ src_reg = FS_OC; + +- if (intel_transform_is_affine(intel->transform[0])) +- i915_fs_texld(src_reg, FS_S0, FS_T0); +- else +- i915_fs_texldp(src_reg, FS_S0, FS_T0); +- } ++ if (intel_transform_is_affine(intel->transform[0])) ++ i915_fs_texld(src_reg, FS_S0, FS_T0); ++ else ++ i915_fs_texldp(src_reg, FS_S0, FS_T0); + + if (src_reg != FS_OC) { + if (dest_is_alpha) +@@ -897,35 +806,24 @@ i915_composite_emit_shader(intel_screen_private *intel, CARD8 op) + i915_fs_mov(FS_OC, i915_fs_operand_reg(src_reg)); + } + } else { +- if (is_solid_mask) { +- i915_fs_dcl(FS_T9); +- mask_reg = FS_T9; +- } else { +- i915_fs_dcl(FS_T0 + t); +- i915_fs_dcl(FS_S0 + t); +- } ++ i915_fs_dcl(FS_T1); ++ i915_fs_dcl(FS_S1); + +- tex_unit = 0; +- if (! is_solid_src) { +- /* Load the source_picture texel */ +- if (intel_transform_is_affine(intel->transform[tex_unit])) +- i915_fs_texld(FS_R0, FS_S0, FS_T0); +- else +- i915_fs_texldp(FS_R0, FS_S0, FS_T0); ++ /* Load the source_picture texel */ ++ if (intel_transform_is_affine(intel->transform[0])) ++ i915_fs_texld(FS_R0, FS_S0, FS_T0); ++ else ++ i915_fs_texldp(FS_R0, FS_S0, FS_T0); + +- src_reg = FS_R0; +- tex_unit++; +- } ++ src_reg = FS_R0; + +- if (! is_solid_mask) { +- /* Load the mask_picture texel */ +- if (intel_transform_is_affine(intel->transform[tex_unit])) +- i915_fs_texld(FS_R1, FS_S0 + t, FS_T0 + t); +- else +- i915_fs_texldp(FS_R1, FS_S0 + t, FS_T0 + t); ++ /* Load the mask_picture texel */ ++ if (intel_transform_is_affine(intel->transform[1])) ++ i915_fs_texld(FS_R1, FS_S1, FS_T1); ++ else ++ i915_fs_texldp(FS_R1, FS_S1, FS_T1); + +- mask_reg = FS_R1; +- } ++ mask_reg = FS_R1; + + if (dest_is_alpha) { + i915_fs_mul(FS_OC, +@@ -972,7 +870,6 @@ static void i915_emit_composite_setup(ScrnInfoPtr scrn) + PicturePtr dest_picture = intel->render_dest_picture; + PixmapPtr mask = intel->render_mask; + PixmapPtr dest = intel->render_dest; +- Bool is_solid_src, is_solid_mask; + int tex_count, t; + + intel->needs_render_state_emit = FALSE; +@@ -980,12 +877,7 @@ static void i915_emit_composite_setup(ScrnInfoPtr scrn) + IntelEmitInvarientState(scrn); + intel->last_3d = LAST_3D_RENDER; + +- is_solid_src = intel->render_source_is_solid; +- is_solid_mask = intel->render_mask_is_solid; +- +- tex_count = 0; +- tex_count += ! is_solid_src; +- tex_count += mask && ! is_solid_mask; ++ tex_count = 1 + (mask != NULL); + + assert(intel->in_batch_atomic); + +@@ -1007,15 +899,6 @@ static void i915_emit_composite_setup(ScrnInfoPtr scrn) + } + } + +- if (is_solid_src) { +- OUT_BATCH (_3DSTATE_DFLT_DIFFUSE_CMD); +- OUT_BATCH (intel->render_source_solid); +- } +- if (mask && is_solid_mask) { +- OUT_BATCH (_3DSTATE_DFLT_SPEC_CMD); +- OUT_BATCH (intel->render_mask_solid); +- } +- + /* BUF_INFO is an implicit flush, so avoid if the target has not changed. + * XXX However for reasons unfathomed, correct rendering in KDE requires + * at least a MI_FLUSH | INHIBIT_RENDER_CACHE_FLUSH here. +@@ -1058,20 +941,15 @@ static void i915_emit_composite_setup(ScrnInfoPtr scrn) + uint32_t ss2; + + ss2 = ~0; +- t = 0; +- if (! is_solid_src) { +- ss2 &= ~S2_TEXCOORD_FMT(t, TEXCOORDFMT_NOT_PRESENT); +- ss2 |= S2_TEXCOORD_FMT(t, +- intel_transform_is_affine(intel->transform[t]) ? +- TEXCOORDFMT_2D : TEXCOORDFMT_4D); +- t++; +- } +- if (mask && ! is_solid_mask) { +- ss2 &= ~S2_TEXCOORD_FMT(t, TEXCOORDFMT_NOT_PRESENT); +- ss2 |= S2_TEXCOORD_FMT(t, +- intel_transform_is_affine(intel->transform[t]) ? ++ ss2 &= ~S2_TEXCOORD_FMT(0, TEXCOORDFMT_NOT_PRESENT); ++ ss2 |= S2_TEXCOORD_FMT(0, ++ intel_transform_is_affine(intel->transform[0]) ? ++ TEXCOORDFMT_2D : TEXCOORDFMT_4D); ++ if (mask) { ++ ss2 &= ~S2_TEXCOORD_FMT(1, TEXCOORDFMT_NOT_PRESENT); ++ ss2 |= S2_TEXCOORD_FMT(1, ++ intel_transform_is_affine(intel->transform[1]) ? + TEXCOORDFMT_2D : TEXCOORDFMT_4D); +- t++; + } + + if (intel->needs_render_ca_pass) { +-- +1.7.10 + diff --git a/extra/xf86-video-intel/0002-uxa-Defer-the-call-to-EnterVT-till-after-outputs-are.patch b/extra/xf86-video-intel/0002-uxa-Defer-the-call-to-EnterVT-till-after-outputs-are.patch new file mode 100644 index 000000000..89f43459d --- /dev/null +++ b/extra/xf86-video-intel/0002-uxa-Defer-the-call-to-EnterVT-till-after-outputs-are.patch @@ -0,0 +1,50 @@ +From fd25a4586b0667b1591d85b23daaa99464e9b0d8 Mon Sep 17 00:00:00 2001 +From: Chris Wilson <chris@chris-wilson.co.uk> +Date: Mon, 19 Mar 2012 15:51:43 +0000 +Subject: [PATCH 2/5] uxa: Defer the call to EnterVT till after outputs are + initialised + +We need to do this apparently or else we never perform the VT switch. +However, we can not do it too early, especially not before we have +finished intialising the outputs. + +Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=47395 +Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> +--- + src/intel_driver.c | 13 +++++-------- + 1 file changed, 5 insertions(+), 8 deletions(-) + +diff --git a/src/intel_driver.c b/src/intel_driver.c +index e2e43fa..ff29754 100644 +--- a/src/intel_driver.c ++++ b/src/intel_driver.c +@@ -1013,13 +1013,6 @@ I830ScreenInit(int scrnIndex, ScreenPtr screen, int argc, char **argv) + "Hardware cursor initialization failed\n"); + } + +- /* Must force it before EnterVT, so we are in control of VT and +- * later memory should be bound when allocating, e.g rotate_mem */ +- scrn->vtSema = TRUE; +- +- if (!I830EnterVT(scrnIndex, 0)) +- return FALSE; +- + intel->BlockHandler = screen->BlockHandler; + screen->BlockHandler = I830BlockHandler; + +@@ -1092,7 +1085,11 @@ I830ScreenInit(int scrnIndex, ScreenPtr screen, int argc, char **argv) + I830UeventInit(scrn); + #endif + +- return TRUE; ++ /* Must force it before EnterVT, so we are in control of VT and ++ * later memory should be bound when allocating, e.g rotate_mem */ ++ scrn->vtSema = TRUE; ++ ++ return I830EnterVT(scrnIndex, 0); + } + + static void i830AdjustFrame(int scrnIndex, int x, int y, int flags) +-- +1.7.10 + diff --git a/extra/xf86-video-intel/0003-uxa-Remove-hook-for-CompositeRectangles.patch b/extra/xf86-video-intel/0003-uxa-Remove-hook-for-CompositeRectangles.patch new file mode 100644 index 000000000..c1c4d55e8 --- /dev/null +++ b/extra/xf86-video-intel/0003-uxa-Remove-hook-for-CompositeRectangles.patch @@ -0,0 +1,255 @@ +From b669f171adece9df7f0c340c664b70e94118a55e Mon Sep 17 00:00:00 2001 +From: Chris Wilson <chris@chris-wilson.co.uk> +Date: Fri, 23 Mar 2012 14:56:06 +0000 +Subject: [PATCH 3/5] uxa: Remove hook for CompositeRectangles + +It was broken and not flushing damage correctly. With the +improvements made to the kernel, it is no longer a significant advantage +per se and not worth its additional complexity. + +Reported-by: Tilman Sauerbeck <tilman@code-monkey.de> +Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=32547 +Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> +--- + uxa/uxa-priv.h | 1 - + uxa/uxa-render.c | 189 ------------------------------------------------------ + uxa/uxa.c | 4 -- + 3 files changed, 194 deletions(-) + +diff --git a/uxa/uxa-priv.h b/uxa/uxa-priv.h +index 0de45f5..b24ec4f 100644 +--- a/uxa/uxa-priv.h ++++ b/uxa/uxa-priv.h +@@ -123,7 +123,6 @@ typedef struct { + BitmapToRegionProcPtr SavedBitmapToRegion; + #ifdef RENDER + CompositeProcPtr SavedComposite; +- CompositeRectsProcPtr SavedCompositeRects; + TrianglesProcPtr SavedTriangles; + GlyphsProcPtr SavedGlyphs; + TrapezoidsProcPtr SavedTrapezoids; +diff --git a/uxa/uxa-render.c b/uxa/uxa-render.c +index 877b286..1e88c5d 100644 +--- a/uxa/uxa-render.c ++++ b/uxa/uxa-render.c +@@ -947,195 +947,6 @@ uxa_acquire_mask(ScreenPtr screen, + out_x, out_y); + } + +-static Bool +-_pixman_region_init_rectangles(pixman_region16_t *region, +- int num_rects, +- xRectangle *rects, +- int tx, int ty) +-{ +- pixman_box16_t stack_boxes[64], *boxes = stack_boxes; +- pixman_bool_t ret; +- int i; +- +- if (num_rects > sizeof(stack_boxes) / sizeof(stack_boxes[0])) { +- boxes = malloc(sizeof(pixman_box16_t) * num_rects); +- if (boxes == NULL) +- return FALSE; +- } +- +- for (i = 0; i < num_rects; i++) { +- boxes[i].x1 = rects[i].x + tx; +- boxes[i].y1 = rects[i].y + ty; +- boxes[i].x2 = rects[i].x + tx + rects[i].width; +- boxes[i].y2 = rects[i].y + ty + rects[i].height; +- } +- +- ret = pixman_region_init_rects(region, boxes, num_rects); +- +- if (boxes != stack_boxes) +- free(boxes); +- +- return ret; +-} +- +-void +-uxa_solid_rects (CARD8 op, +- PicturePtr dst, +- xRenderColor *color, +- int num_rects, +- xRectangle *rects) +-{ +- ScreenPtr screen = dst->pDrawable->pScreen; +- uxa_screen_t *uxa_screen = uxa_get_screen(screen); +- PixmapPtr dst_pixmap, src_pixmap = NULL; +- pixman_region16_t region; +- pixman_box16_t *boxes, *extents; +- PicturePtr src; +- int dst_x, dst_y; +- int num_boxes; +- +- if (!pixman_region_not_empty(dst->pCompositeClip)) +- return; +- +- if (uxa_screen->info->flags & UXA_USE_GLAMOR) { +- int ok; +- +- uxa_picture_prepare_access(dst, UXA_GLAMOR_ACCESS_RW); +- ok = glamor_composite_rects_nf(op, dst, color, +- num_rects, rects); +- uxa_picture_finish_access(dst, UXA_GLAMOR_ACCESS_RW); +- +- if (!ok) +- goto fallback; +- +- return; +- } +- +- if (dst->alphaMap) +- goto fallback; +- +- dst_pixmap = uxa_get_offscreen_pixmap(dst->pDrawable, &dst_x, &dst_y); +- if (!dst_pixmap) +- goto fallback; +- +- if (!_pixman_region_init_rectangles(®ion, +- num_rects, rects, +- dst->pDrawable->x, dst->pDrawable->y)) +- goto fallback; +- +- if (!pixman_region_intersect(®ion, ®ion, dst->pCompositeClip)) { +- pixman_region_fini(®ion); +- return; +- } +- +- pixman_region_translate(®ion, dst_x, dst_y); +- boxes = pixman_region_rectangles(®ion, &num_boxes); +- extents = pixman_region_extents (®ion); +- +- if (op == PictOpClear) +- color->red = color->green = color->blue = color->alpha = 0; +- if (color->alpha >= 0xff00 && op == PictOpOver) { +- color->alpha = 0xffff; +- op = PictOpSrc; +- } +- +- /* Using GEM, the relocation costs outweigh the advantages of the blitter */ +- if (num_boxes == 1 && (op == PictOpSrc || op == PictOpClear)) { +- CARD32 pixel; +- +-try_solid: +- if (uxa_screen->info->check_solid && +- !uxa_screen->info->check_solid(&dst_pixmap->drawable, GXcopy, FB_ALLONES)) +- goto err_region; +- +- if (!uxa_get_pixel_from_rgba(&pixel, +- color->red, +- color->green, +- color->blue, +- color->alpha, +- dst->format)) +- goto err_region; +- +- if (!uxa_screen->info->prepare_solid(dst_pixmap, GXcopy, FB_ALLONES, pixel)) +- goto err_region; +- +- while (num_boxes--) { +- uxa_screen->info->solid(dst_pixmap, +- boxes->x1, boxes->y1, +- boxes->x2, boxes->y2); +- boxes++; +- } +- +- uxa_screen->info->done_solid(dst_pixmap); +- } else { +- int error; +- +- src = CreateSolidPicture(0, color, &error); +- if (!src) +- goto err_region; +- +- if (!uxa_screen->info->check_composite(op, src, NULL, dst, +- extents->x2 - extents->x1, +- extents->y2 - extents->y1)) { +- if (op == PictOpSrc || op == PictOpClear) { +- FreePicture(src, 0); +- goto try_solid; +- } +- +- goto err_src; +- } +- +- if (!uxa_screen->info->check_composite_texture || +- !uxa_screen->info->check_composite_texture(screen, src)) { +- PicturePtr solid; +- int src_off_x, src_off_y; +- +- solid = uxa_acquire_solid(screen, src->pSourcePict); +- if (!solid) +- goto err_src; +- FreePicture(src, 0); +- +- src = solid; +- src_pixmap = uxa_get_offscreen_pixmap(src->pDrawable, +- &src_off_x, &src_off_y); +- if (!src_pixmap) +- goto err_src; +- } +- +- if (!uxa_screen->info->prepare_composite(op, src, NULL, dst, src_pixmap, NULL, dst_pixmap)) +- goto err_src; +- +- while (num_boxes--) { +- uxa_screen->info->composite(dst_pixmap, +- 0, 0, 0, 0, +- boxes->x1, +- boxes->y1, +- boxes->x2 - boxes->x1, +- boxes->y2 - boxes->y1); +- boxes++; +- } +- +- uxa_screen->info->done_composite(dst_pixmap); +- FreePicture(src, 0); +- } +- +- /* XXX xserver-1.8: CompositeRects is not tracked by Damage, so we must +- * manually append the damaged regions ourselves. +- */ +- pixman_region_translate(®ion, -dst_x, -dst_y); +- DamageRegionAppend(dst->pDrawable, ®ion); +- +- pixman_region_fini(®ion); +- return; +- +-err_src: +- FreePicture(src, 0); +-err_region: +- pixman_region_fini(®ion); +-fallback: +- uxa_screen->SavedCompositeRects(op, dst, color, num_rects, rects); +-} +- + static int + uxa_try_driver_composite(CARD8 op, + PicturePtr pSrc, +diff --git a/uxa/uxa.c b/uxa/uxa.c +index eb2ae03..b4a1da6 100644 +--- a/uxa/uxa.c ++++ b/uxa/uxa.c +@@ -407,7 +407,6 @@ static Bool uxa_close_screen(int i, ScreenPtr pScreen) + #ifdef RENDER + if (ps) { + ps->Composite = uxa_screen->SavedComposite; +- ps->CompositeRects = uxa_screen->SavedCompositeRects; + ps->Glyphs = uxa_screen->SavedGlyphs; + ps->Trapezoids = uxa_screen->SavedTrapezoids; + ps->AddTraps = uxa_screen->SavedAddTraps; +@@ -536,9 +535,6 @@ Bool uxa_driver_init(ScreenPtr screen, uxa_driver_t * uxa_driver) + uxa_screen->SavedComposite = ps->Composite; + ps->Composite = uxa_composite; + +- uxa_screen->SavedCompositeRects = ps->CompositeRects; +- ps->CompositeRects = uxa_solid_rects; +- + uxa_screen->SavedGlyphs = ps->Glyphs; + ps->Glyphs = uxa_glyphs; + +-- +1.7.10 + diff --git a/extra/xf86-video-intel/0004-uxa-Remove-broken-render-glyphs-to-dst.patch b/extra/xf86-video-intel/0004-uxa-Remove-broken-render-glyphs-to-dst.patch new file mode 100644 index 000000000..3bf15c1a1 --- /dev/null +++ b/extra/xf86-video-intel/0004-uxa-Remove-broken-render-glyphs-to-dst.patch @@ -0,0 +1,391 @@ +From 1aee0af6d8296c108b6b4eb1bcf583aae385d22d Mon Sep 17 00:00:00 2001 +From: Chris Wilson <chris@chris-wilson.co.uk> +Date: Fri, 30 Mar 2012 12:47:21 +0100 +Subject: [PATCH 4/5] uxa: Remove broken render glyphs-to-dst + +Reported-by: Vincent Untz <vuntz@gnome.org> +Reported-by: Robert Bradford <robert.bradford@intel.com> +Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=48045 +Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> +--- + uxa/uxa-glyphs.c | 330 +++--------------------------------------------------- + 1 file changed, 17 insertions(+), 313 deletions(-) + +diff --git a/uxa/uxa-glyphs.c b/uxa/uxa-glyphs.c +index 6172f2f..b754f4e 100644 +--- a/uxa/uxa-glyphs.c ++++ b/uxa/uxa-glyphs.c +@@ -663,190 +663,6 @@ uxa_glyph_cache(ScreenPtr screen, GlyphPtr glyph, int *out_x, int *out_y) + return cache->picture; + } + +-static int +-uxa_glyphs_to_dst(CARD8 op, +- PicturePtr pSrc, +- PicturePtr pDst, +- INT16 src_x, INT16 src_y, +- INT16 xDst, INT16 yDst, +- int nlist, GlyphListPtr list, GlyphPtr * glyphs, +- BoxPtr extents) +-{ +- ScreenPtr screen = pDst->pDrawable->pScreen; +- uxa_screen_t *uxa_screen = uxa_get_screen(screen); +- PixmapPtr src_pixmap, dst_pixmap; +- PicturePtr localSrc, glyph_atlas; +- int x, y, n; +- BoxRec box; +- +- if (uxa_screen->info->check_composite_texture && +- uxa_screen->info->check_composite_texture(screen, pSrc)) { +- if (pSrc->pDrawable) { +- int src_off_x, src_off_y; +- +- src_pixmap = uxa_get_offscreen_pixmap(pSrc->pDrawable, &src_off_x, &src_off_y); +- if (src_pixmap == NULL) +- return -1; +- +- src_x += pSrc->pDrawable->x + src_off_x; +- src_y += pSrc->pDrawable->y + src_off_y; +- } else { +- src_pixmap = NULL; +- } +- localSrc = pSrc; +- } else { +- int width, height; +- +- if (extents == NULL) { +- uxa_glyph_extents(nlist, list, glyphs, &box); +- extents = &box; +- } +- +- width = extents->x2 - extents->x1; +- height = extents->y2 - extents->y1; +- if (width == 0 || height == 0) +- return 0; +- +- if (pSrc->pDrawable) { +- int src_off_x, src_off_y; +- +- src_off_x = extents->x1 - xDst; +- src_off_y = extents->y1 - yDst; +- localSrc = uxa_acquire_drawable(screen, pSrc, +- src_x + src_off_x, src_y + src_off_y, +- width, height, +- &src_x, &src_y); +- if (uxa_screen->info->check_composite_texture && +- !uxa_screen->info->check_composite_texture(screen, localSrc)) { +- if (localSrc != pSrc) +- FreePicture(localSrc, 0); +- return -1; +- } +- +- src_pixmap = uxa_get_offscreen_pixmap(localSrc->pDrawable, &src_off_x, &src_off_y); +- if (src_pixmap == NULL) { +- if (localSrc != pSrc) +- FreePicture(localSrc, 0); +- return -1; +- } +- +- src_x += localSrc->pDrawable->x + src_off_x; +- src_y += localSrc->pDrawable->y + src_off_y; +- } else { +- localSrc = uxa_acquire_pattern(screen, pSrc, +- PICT_a8r8g8b8, x, y, width, height); +- if (!localSrc) +- return 1; +- +- src_pixmap = uxa_get_drawable_pixmap(localSrc->pDrawable); +- if (src_pixmap == NULL) { +- FreePicture(localSrc, 0); +- return -1; +- } +- +- src_x = src_y = 0; +- } +- } +- +- dst_pixmap = uxa_get_offscreen_pixmap(pDst->pDrawable, &x, &y); +- x += xDst + pDst->pDrawable->x - list->xOff; +- y += yDst + pDst->pDrawable->y - list->yOff; +- +- glyph_atlas = NULL; +- while (nlist--) { +- x += list->xOff; +- y += list->yOff; +- n = list->len; +- while (n--) { +- GlyphPtr glyph = *glyphs++; +- PicturePtr this_atlas; +- int mask_x, mask_y, nrect; +- struct uxa_glyph *priv; +- BoxPtr rects; +- +- if (glyph->info.width == 0 || glyph->info.height == 0) +- goto next_glyph; +- +- priv = uxa_glyph_get_private(glyph); +- if (priv != NULL) { +- mask_x = priv->x; +- mask_y = priv->y; +- this_atlas = priv->cache->picture; +- } else { +- if (glyph_atlas) { +- uxa_screen->info->done_composite(dst_pixmap); +- glyph_atlas = NULL; +- } +- this_atlas = uxa_glyph_cache(screen, glyph, &mask_x, &mask_y); +- if (this_atlas == NULL) { +- /* no cache for this glyph */ +- this_atlas = GlyphPicture(glyph)[screen->myNum]; +- mask_x = mask_y = 0; +- } +- } +- +- if (this_atlas != glyph_atlas) { +- PixmapPtr mask_pixmap; +- +- if (glyph_atlas) +- uxa_screen->info->done_composite(dst_pixmap); +- +- mask_pixmap = +- uxa_get_drawable_pixmap(this_atlas->pDrawable); +- if (!uxa_pixmap_is_offscreen(mask_pixmap) || +- !uxa_screen->info->prepare_composite(op, +- localSrc, this_atlas, pDst, +- src_pixmap, mask_pixmap, dst_pixmap)) +- return -1; +- +- glyph_atlas = this_atlas; +- } +- +- rects = REGION_RECTS(pDst->pCompositeClip); +- nrect = REGION_NUM_RECTS(pDst->pCompositeClip); +- while (nrect--) { +- int x1 = x - glyph->info.x, dx = 0; +- int y1 = y - glyph->info.y, dy = 0; +- int x2 = x1 + glyph->info.width; +- int y2 = y1 + glyph->info.height; +- +- if (rects->y1 >= y2) +- break; +- +- if (x1 < rects->x1) +- dx = rects->x1 - x1, x1 = rects->x1; +- if (x2 > rects->x2) +- x2 = rects->x2; +- if (y1 < rects->y1) +- dy = rects->y1 - y1, y1 = rects->y1; +- if (y2 > rects->y2) +- y2 = rects->y2; +- +- if (x1 < x2 && y1 < y2) { +- uxa_screen->info->composite(dst_pixmap, +- x1 + src_x, y1 + src_y, +- dx + mask_x, dy + mask_y, +- x1, y1, +- x2 - x1, y2 - y1); +- } +- rects++; +- } +- +-next_glyph: +- x += glyph->info.xOff; +- y += glyph->info.yOff; +- } +- list++; +- } +- if (glyph_atlas) +- uxa_screen->info->done_composite(dst_pixmap); +- +- if (localSrc != pSrc) +- FreePicture(localSrc, 0); +- +- return 0; +-} +- + static void + uxa_clear_pixmap(ScreenPtr screen, + uxa_screen_t *uxa_screen, +@@ -894,37 +710,30 @@ uxa_glyphs_via_mask(CARD8 op, + PicturePtr pDst, + PictFormatPtr maskFormat, + INT16 xSrc, INT16 ySrc, +- INT16 xDst, INT16 yDst, +- int nlist, GlyphListPtr list, GlyphPtr * glyphs, +- BoxPtr extents) ++ int nlist, GlyphListPtr list, GlyphPtr * glyphs) + { + ScreenPtr screen = pDst->pDrawable->pScreen; + uxa_screen_t *uxa_screen = uxa_get_screen(screen); + CARD32 component_alpha; + PixmapPtr pixmap; + PicturePtr glyph_atlas, mask; ++ int xDst = list->xOff, yDst = list->yOff; + int x, y, width, height; + int dst_off_x, dst_off_y; + int n, error; + BoxRec box; + +- if (!extents) { +- uxa_glyph_extents(nlist, list, glyphs, &box); ++ uxa_glyph_extents(nlist, list, glyphs, &box); ++ if (box.x2 <= box.x1 || box.y2 <= box.y1) ++ return 0; + +- if (box.x2 <= box.x1 || box.y2 <= box.y1) +- return 0; ++ dst_off_x = box.x1; ++ dst_off_y = box.y1; + +- extents = &box; +- dst_off_x = box.x1; +- dst_off_y = box.y1; +- } else { +- dst_off_x = dst_off_y = 0; +- } +- +- width = extents->x2 - extents->x1; +- height = extents->y2 - extents->y1; +- x = -extents->x1; +- y = -extents->y1; ++ width = box.x2 - box.x1; ++ height = box.y2 - box.y1; ++ x = -box.x1; ++ y = -box.y1; + + if (maskFormat->depth == 1) { + PictFormatPtr a8Format = +@@ -1061,11 +870,6 @@ uxa_glyphs(CARD8 op, + { + ScreenPtr screen = pDst->pDrawable->pScreen; + uxa_screen_t *uxa_screen = uxa_get_screen(screen); +- int xDst = list->xOff, yDst = list->yOff; +- BoxRec extents = { 0, 0, 0, 0 }; +- Bool have_extents = FALSE; +- int width, height, ret; +- PicturePtr localDst = pDst; + + if (uxa_screen->info->flags & UXA_USE_GLAMOR) { + int ok; +@@ -1128,112 +932,12 @@ fallback: + } + } + +- if (!maskFormat && +- uxa_screen->info->check_composite_target && +- !uxa_screen->info->check_composite_target(uxa_get_drawable_pixmap(pDst->pDrawable))) { +- int depth = pDst->pDrawable->depth; +- PixmapPtr pixmap; +- int x, y, error; +- GCPtr gc; +- +- pixmap = uxa_get_drawable_pixmap(pDst->pDrawable); +- if (uxa_screen->info->check_copy && +- !uxa_screen->info->check_copy(pixmap, pixmap, GXcopy, FB_ALLONES)) +- goto fallback; +- +- uxa_glyph_extents(nlist, list, glyphs, &extents); +- +- /* clip against dst bounds */ +- if (extents.x1 < 0) +- extents.x1 = 0; +- if (extents.y1 < 0) +- extents.y1 = 0; +- if (extents.x2 > pDst->pDrawable->width) +- extents.x2 = pDst->pDrawable->width; +- if (extents.y2 > pDst->pDrawable->height) +- extents.y2 = pDst->pDrawable->height; +- +- if (extents.x2 <= extents.x1 || extents.y2 <= extents.y1) +- return; +- width = extents.x2 - extents.x1; +- height = extents.y2 - extents.y1; +- x = -extents.x1; +- y = -extents.y1; +- have_extents = TRUE; +- +- xDst += x; +- yDst += y; +- +- pixmap = screen->CreatePixmap(screen, +- width, height, depth, +- CREATE_PIXMAP_USAGE_SCRATCH); +- if (!pixmap) +- return; +- +- if (!uxa_pixmap_is_offscreen(pixmap)) { +- screen->DestroyPixmap(pixmap); +- goto fallback; +- } +- +- gc = GetScratchGC(depth, screen); +- if (!gc) { +- screen->DestroyPixmap(pixmap); +- return; +- } +- +- ValidateGC(&pixmap->drawable, gc); +- gc->ops->CopyArea(pDst->pDrawable, &pixmap->drawable, gc, +- extents.x1, extents.y1, +- width, height, +- 0, 0); +- FreeScratchGC(gc); +- +- localDst = CreatePicture(0, &pixmap->drawable, +- PictureMatchFormat(screen, depth, pDst->format), +- 0, 0, serverClient, &error); +- screen->DestroyPixmap(pixmap); +- +- if (!localDst) +- return; +- +- ValidatePicture(localDst); +- } +- +- if (maskFormat) { +- ret = uxa_glyphs_via_mask(op, +- pSrc, localDst, maskFormat, +- xSrc, ySrc, +- xDst, yDst, +- nlist, list, glyphs, +- have_extents ? &extents : NULL); +- } else { +- ret = uxa_glyphs_to_dst(op, +- pSrc, localDst, +- xSrc, ySrc, +- xDst, yDst, +- nlist, list, glyphs, +- have_extents ? &extents : NULL); +- } +- if (ret) { +- if (localDst != pDst) +- FreePicture(localDst, 0); +- ++ if (!maskFormat) + goto fallback; +- } + +- if (localDst != pDst) { +- GCPtr gc; +- +- gc = GetScratchGC(pDst->pDrawable->depth, screen); +- if (gc) { +- ValidateGC(pDst->pDrawable, gc); +- gc->ops->CopyArea(localDst->pDrawable, pDst->pDrawable, gc, +- 0, 0, +- width, height, +- extents.x1, extents.y1); +- FreeScratchGC(gc); +- } +- +- FreePicture(localDst, 0); +- } ++ if (uxa_glyphs_via_mask(op, ++ pSrc, pDst, maskFormat, ++ xSrc, ySrc, ++ nlist, list, glyphs)) ++ goto fallback; + } +-- +1.7.10 + diff --git a/extra/xf86-video-intel/0005-uxa-Fix-leak-of-glyph-mask-for-unhandled-glyph-compo.patch b/extra/xf86-video-intel/0005-uxa-Fix-leak-of-glyph-mask-for-unhandled-glyph-compo.patch new file mode 100644 index 000000000..865679078 --- /dev/null +++ b/extra/xf86-video-intel/0005-uxa-Fix-leak-of-glyph-mask-for-unhandled-glyph-compo.patch @@ -0,0 +1,40 @@ +From af5c698fd43308c3b799783b662b9cd871f90a62 Mon Sep 17 00:00:00 2001 +From: Chris Wilson <chris@chris-wilson.co.uk> +Date: Sat, 14 Apr 2012 19:03:25 +0100 +Subject: [PATCH 5/5] uxa: Fix leak of glyph mask for unhandled glyph + composition + +==1401== 7,344 bytes in 34 blocks are possibly lost in loss record 570 of 587 +==1401== at 0x4027034: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) +==1401== by 0x8BE5150: drm_intel_gem_bo_alloc_internal (intel_bufmgr_gem.c:689) +==1401== by 0x899FC04: intel_uxa_create_pixmap (intel_uxa.c:1077) +==1401== by 0x89C2C41: uxa_glyphs (uxa-glyphs.c:254) +==1401== by 0x21F05E: damageGlyphs (damage.c:647) +==1401== by 0x218E06: ProcRenderCompositeGlyphs (render.c:1434) +==1401== by 0x15AA40: Dispatch (dispatch.c:439) +==1401== by 0x1499E9: main (main.c:287) + +Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> +--- + uxa/uxa-glyphs.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/uxa/uxa-glyphs.c b/uxa/uxa-glyphs.c +index b754f4e..921b99c 100644 +--- a/uxa/uxa-glyphs.c ++++ b/uxa/uxa-glyphs.c +@@ -812,8 +812,10 @@ uxa_glyphs_via_mask(CARD8 op, + if (!uxa_pixmap_is_offscreen(src_pixmap) || + !uxa_screen->info->prepare_composite(PictOpAdd, + this_atlas, NULL, mask, +- src_pixmap, NULL, pixmap)) ++ src_pixmap, NULL, pixmap)) { ++ FreePicture(mask, 0); + return -1; ++ } + + glyph_atlas = this_atlas; + } +-- +1.7.10 + diff --git a/extra/xf86-video-intel/PKGBUILD b/extra/xf86-video-intel/PKGBUILD index ca1e15eb0..ad44b5329 100644 --- a/extra/xf86-video-intel/PKGBUILD +++ b/extra/xf86-video-intel/PKGBUILD @@ -1,23 +1,38 @@ -# $Id: PKGBUILD 153342 2012-03-12 20:53:36Z andyrtr $ +# $Id: PKGBUILD 156183 2012-04-15 12:22:45Z jgc $ # Maintainer: Jan de Groot <jgc@archlinux.org> pkgname=xf86-video-intel pkgver=2.18.0 -pkgrel=1 +pkgrel=3 pkgdesc="X.org Intel i810/i830/i915/945G/G965+ video drivers" arch=(i686 x86_64) url="http://xorg.freedesktop.org/" license=('custom') depends=('intel-dri' 'libxvmc' 'libpciaccess' 'libdrm' 'xcb-util>=0.3.8' 'libxfixes' 'udev') -makedepends=('xorg-server-devel>=1.11.99.903' 'libx11' 'libdrm' 'xf86driproto' 'glproto' 'mesa' 'libxvmc' 'libxrender') -conflicts=('xorg-server<1.11.99.903' 'xf86-video-i810' 'xf86-video-intel-legacy') +makedepends=('xorg-server-devel>=1.12.0' 'libx11' 'libdrm' 'xf86driproto' 'glproto' 'mesa' 'libxvmc' 'libxrender') +conflicts=('xorg-server<1.12.0' 'xf86-video-i810' 'xf86-video-intel-legacy') options=('!libtool') groups=('xorg-drivers' 'xorg') -source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2) -sha1sums=('77fae98e73414140bf214dca5da32bcf079c4463') +source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2 + 0001-uxa-gen3-Remove-special-casing-of-solid-pictures.patch + 0002-uxa-Defer-the-call-to-EnterVT-till-after-outputs-are.patch + 0003-uxa-Remove-hook-for-CompositeRectangles.patch + 0004-uxa-Remove-broken-render-glyphs-to-dst.patch + 0005-uxa-Fix-leak-of-glyph-mask-for-unhandled-glyph-compo.patch) +sha1sums=('77fae98e73414140bf214dca5da32bcf079c4463' + '8b46a5120c8c0b94fcd75801e5ce91d6baccd1ac' + 'd959c66ab40f521bfe4df66b6f43c98b13f59283' + '5525715f1bbf80edfc34d55946b0528f6b8dbf75' + '3e54a4b3911e004d29b6a8e07adb7c16eba5bc4f' + '32e2e5a53926ce29290bf6454e7dcdbd18e91d5e') build() { cd "${srcdir}/${pkgname}-${pkgver}" + patch -Np1 -i "${srcdir}/0001-uxa-gen3-Remove-special-casing-of-solid-pictures.patch" + patch -Np1 -i "${srcdir}/0002-uxa-Defer-the-call-to-EnterVT-till-after-outputs-are.patch" + patch -Np1 -i "${srcdir}/0003-uxa-Remove-hook-for-CompositeRectangles.patch" + patch -Np1 -i "${srcdir}/0004-uxa-Remove-broken-render-glyphs-to-dst.patch" + patch -Np1 -i "${srcdir}/0005-uxa-Fix-leak-of-glyph-mask-for-unhandled-glyph-compo.patch" ./configure --prefix=/usr --enable-dri make } diff --git a/libre/linux-libre-api-headers/PKGBUILD b/libre/linux-libre-api-headers/PKGBUILD index 0a449ef3e..72f4c464d 100644 --- a/libre/linux-libre-api-headers/PKGBUILD +++ b/libre/linux-libre-api-headers/PKGBUILD @@ -5,8 +5,9 @@ # toolchain build order: linux-libre-api-headers->glibc->binutils->gcc->binutils->glibc pkgname=linux-libre-api-headers -pkgver=3.3 -_basever=3.3 +_basekernel=3.3 +_sublevel=2 +pkgver=${_basekernel}.${_sublevel} pkgrel=1 pkgdesc="Kernel Libre headers sanitized for use in userspace" arch=('i686' 'x86_64' 'mips64el') @@ -15,20 +16,24 @@ license=('GPL2') provides=("linux-api-headers=${pkgver}" "kernel-headers=${pkgver}") conflicts=('linux-api-headers' 'kernel-headers') replaces=('linux-api-headers' 'kernel-headers') -source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basever}-gnu/linux-libre-${_basever}-gnu.tar.xz") - #"http://linux-libre.fsfla.org/pub/linux-libre/releases/${pkgver}-gnu/patch-${_basever}-gnu-${pkgver}-gnu.xz") -md5sums=('5487da14ca81715a469c7594d39722fa') +source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basekernel}-gnu/linux-libre-${_basekernel}-gnu.tar.xz" + "http://linux-libre.fsfla.org/pub/linux-libre/releases/${pkgver}-gnu/patch-${_basekernel}-gnu-${pkgver}-gnu.xz") +md5sums=('5487da14ca81715a469c7594d39722fa' + 'b43d3bdecfa355bf45bd1154819e3687') build() { - cd ${srcdir}/linux-${_basever} - [[ $pkgver != $_basever ]] && patch -Np1 -i ${srcdir}/patch-${_basever}-gnu-${pkgver}-gnu + cd ${srcdir}/linux-${_basekernel} + + if [ "${_basekernel}" != "${pkgver}" ]; then + patch -Np1 -i "${srcdir}/patch-${_basekernel}-gnu-${pkgver}-gnu" + fi make mrproper make headers_check } package() { - cd ${srcdir}/linux-${_basever} + cd ${srcdir}/linux-${_basekernel} make INSTALL_HDR_PATH=${pkgdir}/usr headers_install # use headers from libdrm diff --git a/libre/linux-libre-lts/.directory b/libre/linux-libre-lts/.directory index 60156bc93..89e875be9 100644 --- a/libre/linux-libre-lts/.directory +++ b/libre/linux-libre-lts/.directory @@ -1,2 +1,2 @@ [Dolphin] -Timestamp=2012,3,15,16,10,14 +Timestamp=2012,4,16,17,55,34 diff --git a/libre/linux-libre-lts/PKGBUILD b/libre/linux-libre-lts/PKGBUILD index 790ea5e0b..5fe592460 100644 --- a/libre/linux-libre-lts/PKGBUILD +++ b/libre/linux-libre-lts/PKGBUILD @@ -9,7 +9,7 @@ pkgname=('linux-libre-lts' 'linux-libre-lts-headers') # Build stock -LIBRE kerne # pkgname=linux-custom # Build kernel with a different name _kernelname=-LIBRE-LTS _basekernel=3.0 -_sublevel=27 +_sublevel=28 pkgver=${_basekernel}.${_sublevel} _lxopkgver=${_basekernel}.26 # nearly always the same as pkgver pkgrel=1 @@ -32,7 +32,7 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basekernel}-gn 'ext4-options.patch' "http://www.linux-libre.fsfla.org/pub/linux-libre/lemote/gnewsense/pool/linux-patches-${_lxopkgver}-gnu_0loongsonlibre_mipsel.tar.bz2") md5sums=('5f64180fe7df4e574dac5911b78f5067' - '365d490f97b1960c8880eb22257d5ef0' + '150cef79eaa9a41cd5ccd65c696e7f10' 'c7acde811ca6808b294dc06480048c61' '792766d6d403cc967977f6a46aa95d1d' 'd2c0701480bce49fd4b40dc46b9863f1' diff --git a/libre/linux-libre-lts/linux-libre-lts.install b/libre/linux-libre-lts/linux-libre-lts.install index acb2b71f5..5f32392c0 100644 --- a/libre/linux-libre-lts/linux-libre-lts.install +++ b/libre/linux-libre-lts/linux-libre-lts.install @@ -2,7 +2,7 @@ # arg 2: the old package version KERNEL_NAME=-lts -KERNEL_VERSION=3.0.27-1-LIBRE-LTS +KERNEL_VERSION=3.0.28-1-LIBRE-LTS post_install () { # updating module dependencies diff --git a/libre/python2-libre/13156-revert-tls-changeset-subinterpreter.patch b/libre/python2-libre/13156-revert-tls-changeset-subinterpreter.patch new file mode 100644 index 000000000..ed8154df5 --- /dev/null +++ b/libre/python2-libre/13156-revert-tls-changeset-subinterpreter.patch @@ -0,0 +1,61 @@ + +# HG changeset patch +# User Charles-François Natali <neologix@free.fr> +# Date 1318446474 -7200 +# Node ID ee4fe16d9b4822457ad855ea6c44e65030166304 +# Parent f6feed6ec3f9b024cecd0fd587595c403f55624f +Issue #13156: revert changeset f6feed6ec3f9, which was only relevant for native +TLS implementations, and fails with the ad-hoc TLS implementation when a thread +doesn't have an auto thread state (e.g. a thread created outside of Python +calling into a subinterpreter). + +diff --git a/Include/pystate.h b/Include/pystate.h +--- a/Include/pystate.h ++++ b/Include/pystate.h +@@ -111,7 +111,6 @@ PyAPI_FUNC(void) PyThreadState_Clear(PyT + PyAPI_FUNC(void) PyThreadState_Delete(PyThreadState *); + #ifdef WITH_THREAD + PyAPI_FUNC(void) PyThreadState_DeleteCurrent(void); +-PyAPI_FUNC(void) _PyGILState_Reinit(void); + #endif + + PyAPI_FUNC(PyThreadState *) PyThreadState_Get(void); +diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c +--- a/Modules/signalmodule.c ++++ b/Modules/signalmodule.c +@@ -976,7 +976,6 @@ void + PyOS_AfterFork(void) + { + #ifdef WITH_THREAD +- _PyGILState_Reinit(); + PyEval_ReInitThreads(); + main_thread = PyThread_get_thread_ident(); + main_pid = getpid(); +diff --git a/Python/pystate.c b/Python/pystate.c +--- a/Python/pystate.c ++++ b/Python/pystate.c +@@ -537,23 +537,6 @@ void + autoInterpreterState = NULL; + } + +-/* Reset the TLS key - called by PyOS_AfterFork. +- * This should not be necessary, but some - buggy - pthread implementations +- * don't flush TLS on fork, see issue #10517. +- */ +-void +-_PyGILState_Reinit(void) +-{ +- PyThreadState *tstate = PyGILState_GetThisThreadState(); +- PyThread_delete_key(autoTLSkey); +- if ((autoTLSkey = PyThread_create_key()) == -1) +- Py_FatalError("Could not allocate TLS entry"); +- +- /* re-associate the current thread state with the new key */ +- if (PyThread_set_key_value(autoTLSkey, (void *)tstate) < 0) +- Py_FatalError("Couldn't create autoTLSkey mapping"); +-} +- + /* When a thread state is created for a thread by some mechanism other than + PyGILState_Ensure, it's important that the GILState machinery knows about + it so it doesn't try to create another thread state for the thread (this is + diff --git a/staging/nx-common/NXproto.h.64bit.diff b/staging/nx-common/NXproto.h.64bit.diff new file mode 100644 index 000000000..ac326ebcd --- /dev/null +++ b/staging/nx-common/NXproto.h.64bit.diff @@ -0,0 +1,66 @@ +--- nxcomp.old/NXproto.h 2006-06-19 19:55:56.000000000 +0200 ++++ nxcomp/NXproto.h 2007-02-12 18:17:41.000000000 +0100 +@@ -26,6 +26,30 @@ + #include <X11/Xmd.h> + #include <X11/Xproto.h> + ++/* ++ Copied from Xproto.h ++ */ ++ ++/* For the purpose of the structure definitions in this file, ++we must redefine the following types in terms of Xmd.h's types, which may ++include bit fields. All of these are #undef'd at the end of this file, ++restoring the definitions in X.h. */ ++ ++#define Window CARD32 ++#define Drawable CARD32 ++#define Font CARD32 ++#define Pixmap CARD32 ++#define Cursor CARD32 ++#define Colormap CARD32 ++#define GContext CARD32 ++#define Atom CARD32 ++#define VisualID CARD32 ++#define Time CARD32 ++#define KeyCode CARD8 ++#define KeySym CARD32 ++ ++/* End copied from Xproto.h */ ++ + #define sz_xNXGetControlParametersReq 4 + #define sz_xNXGetCleanupParametersReq 4 + #define sz_xNXGetImageParametersReq 4 +@@ -343,9 +367,9 @@ + CARD8 dstDepth; + CARD32 srcLength B32; + CARD32 dstLength B32; +- INT16 srcX B16, srcY B16; ++ CARD16 srcX B16, srcY B16; + CARD16 srcWidth B16, srcHeight B16; +- INT16 dstX B16, dstY B16; ++ CARD16 dstX B16, dstY B16; + CARD16 dstWidth B16, dstHeight B16; + } xNXPutPackedImageReq; + +@@ -463,4 +487,20 @@ + } + #endif + ++/* Copied from Xproto.h */ ++ ++/* restore these definitions back to the typedefs in X.h */ ++#undef Window ++#undef Drawable ++#undef Font ++#undef Pixmap ++#undef Cursor ++#undef Colormap ++#undef GContext ++#undef Atom ++#undef VisualID ++#undef Time ++#undef KeyCode ++#undef KeySym ++ + #endif /* NXproto_H */ diff --git a/staging/nx-common/PKGBUILD b/staging/nx-common/PKGBUILD new file mode 100644 index 000000000..8dd38842b --- /dev/null +++ b/staging/nx-common/PKGBUILD @@ -0,0 +1,45 @@ +# $Id: PKGBUILD 156191 2012-04-15 14:20:58Z andyrtr $ +# Maintainer: Tobias Powalowski <tpowa@archlinux.org> +# Contributed: eliott <eliott@solarblue.net>, Andre Naumann <anaumann@SPARCed.org> + +pkgname=nx-common +pkgver=3.5.0 +pkgrel=4.1 +pkgdesc="NoMachine NX common package for client and server" +arch=('i686' 'x86_64') +license=('GPL') +url="http://nomachine.com/" +depends=('libjpeg-turbo' 'libpng' 'openssl' 'gcc-libs' 'libxcomp') # 'bash' +makedepends=('xorg-server-devel' 'nx-headers') +source=(http://64.34.161.181/download/$pkgver/sources/nxcompsh-$pkgver-1.tar.gz + http://64.34.161.181/download/$pkgver/sources/nxssh-$pkgver-2.tar.gz + nxcompsh-gcc43.patch) +options=('!libtool') +md5sums=('84ade443b79ea079380b754aba9d392e' + 'f52fcdb38e09f8dcfb9ff0344dfbbbd6' + 'b6c279654dac421fc3dd1a27d66ff53c') + +build() { + # nxcompsh + cd ${srcdir}/nxcompsh + patch -Np1 -i ${srcdir}/nxcompsh-gcc43.patch + ./configure --prefix=/usr/lib/nx + make + + # nxssh + cd ${srcdir}/nxssh + sed -i "s:NX.h:nx/NX.h:g" clientloop.c packet.c proxy.c + ./configure --prefix=/usr --sysconfdir=/etc --libexecdir=/usr/lib + make +} + +package() { + install -dm755 ${pkgdir}/usr/{bin,lib/nx} + + # nxcompsh + cd ${srcdir}/nxcompsh + cp -a libXcompsh.so* ${pkgdir}/usr/lib/nx # really needed? + # nxssh + cd ${srcdir}/nxssh + install -D -m755 nxssh ${pkgdir}/usr/bin/nxssh +} diff --git a/staging/nx-common/nx-3.5.0-libpng15.patch b/staging/nx-common/nx-3.5.0-libpng15.patch new file mode 100644 index 000000000..c8f2a9559 --- /dev/null +++ b/staging/nx-common/nx-3.5.0-libpng15.patch @@ -0,0 +1,30 @@ +diff -ur nxcomp.orig/Pgn.cpp nxcomp/Pgn.cpp +--- nxcomp.orig/Pgn.cpp 2010-03-01 19:18:59.000000000 +0200 ++++ nxcomp/Pgn.cpp 2011-09-13 16:35:12.000000000 +0300 +@@ -414,7 +414,7 @@ + + png_read_info(pngPtr, infoPtr); + +- if (infoPtr -> color_type == PNG_COLOR_TYPE_PALETTE) ++ if (png_get_color_type(pngPtr, infoPtr) == PNG_COLOR_TYPE_PALETTE) + { + png_set_expand(pngPtr); + } +@@ -565,7 +565,7 @@ + + png_read_info( pngPtr, infoPtr ) ; + +- if (infoPtr -> color_type == PNG_COLOR_TYPE_PALETTE) ++ if (png_get_color_type(pngPtr, infoPtr) == PNG_COLOR_TYPE_PALETTE) + { + png_set_expand(pngPtr); + } +@@ -709,7 +709,7 @@ + png_read_info(pngPtr, infoPtr) ; + + +- if (infoPtr -> color_type == PNG_COLOR_TYPE_PALETTE) ++ if (png_get_color_type(pngPtr, infoPtr) == PNG_COLOR_TYPE_PALETTE) + { + png_set_expand(pngPtr); + } diff --git a/staging/nx-common/nxcompsh-gcc43.patch b/staging/nx-common/nxcompsh-gcc43.patch new file mode 100644 index 000000000..681a0dab5 --- /dev/null +++ b/staging/nx-common/nxcompsh-gcc43.patch @@ -0,0 +1,19 @@ +--- nxcompsh/Misc.h~ 2007-06-04 13:39:49.000000000 +0200 ++++ nxcompsh/Misc.h 2008-04-12 12:46:24.000000000 +0200 +@@ -18,10 +18,12 @@ + #ifndef Misc_H + #define Misc_H + +-#include <iostream.h> ++#include <iostream> + +-#include <errno.h> +-#include <string.h> ++#include <cerrno> ++#include <cstring> ++ ++using namespace std; + + // + // Error handling macros. + diff --git a/staging/nx/PKGBUILD b/staging/nx/PKGBUILD new file mode 100644 index 000000000..a46c26b45 --- /dev/null +++ b/staging/nx/PKGBUILD @@ -0,0 +1,91 @@ +# $Id: PKGBUILD 156194 2012-04-15 15:11:02Z andyrtr $ +# Maintainer: Andreas Radke <andyrtr@archlinux.org> + +pkgbase=nx +pkgname=('libxcomp' 'nxproxy' 'nx-x11' 'nx-xcompext' 'nxagent' 'nx-headers') +pkgver=3.5.0.12 +pkgrel=0.3 +arch=('i686' 'x86_64') +url="http://wiki.x2go.org/" +license=('GPL') +options=('!makeflags') +makedepends=('libjpeg-turbo' 'libpng' 'bash' 'perl' # runtime dependencies from subpackages + 'xproto' 'freetype2' 'libxaw' 'libxrender' 'libxp' 'libxpm' 'libxdamage' 'libxrandr' 'libxcomposite' 'libxtst' 'xorg-sessreg' # makedepends + ) +source=(http://code.x2go.org/releases/source/nx-libs/nx-libs_$pkgver-full.tar.gz + nx-x11.ld.so.conf.d) +md5sums=('a2011e034a318016cf2260c30a567301' + 'f2ec60c7e2d81bef2f7292d2b33681a6') + +build() { + cd "${srcdir}/nx-libs_$pkgver" + make CONFIGURE="./configure --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --includedir=/usr/include" + # fake install + mkdir $srcdir/fakeinstall + make DESTDIR="$srcdir/fakeinstall" install +} + +package_libxcomp() { + + pkgdesc="NX X compression library" + depends=('libjpeg-turbo' 'libpng' 'gcc-libs') + + cd "${srcdir}/fakeinstall" + install -dm755 ${pkgdir}/usr/lib/ + cp -a ${srcdir}/fakeinstall/usr/lib/nx/libXcomp.so* ${pkgdir}/usr/lib +} + +package_nxproxy() { + + pkgdesc="NX proxy" + depends=('libxcomp') + + cd "${srcdir}/fakeinstall" + install -dm755 ${pkgdir}/usr/{bin,share/man/man1} + cp -a ${srcdir}/fakeinstall/usr/bin/nxproxy ${pkgdir}/usr/bin + cp -a ${srcdir}/fakeinstall/usr/share/man/man1/nxproxy.1 ${pkgdir}/usr/share/man/man1 +} + +package_nx-xcompext() { + + pkgdesc="Xcompext/Xcompshad library for NX" + depends=('libxcomp' 'nx-x11') + + cd "${srcdir}/fakeinstall" + install -dm755 ${pkgdir}/usr/lib/ + cp -a ${srcdir}/fakeinstall/usr/lib/nx/libXcompext.so* ${pkgdir}/usr/lib +} + +package_nx-x11() { + + pkgdesc="NX-X11 lib for the NX framework" + depends=('libxcomp') + + cd "${srcdir}/fakeinstall" + install -dm755 ${pkgdir}/{etc/ld.so.conf.d,usr/bin,usr/lib/nx} + cp -aR ${srcdir}/fakeinstall/usr/lib/NX3/lib*/nx/lib*.so* ${pkgdir}/usr/lib/nx + cp -aR ${srcdir}/fakeinstall/usr/lib/NX3/bin/nxauth ${pkgdir}/usr/bin + + install -m 644 "$srcdir/nx-x11.ld.so.conf.d" "$pkgdir/etc/ld.so.conf.d/nx.conf" +} + +package_nxagent() { + + pkgdesc="NX X server based on Xnest" + depends=('nx-xcompext') + + cd "${srcdir}/fakeinstall" + install -dm755 ${pkgdir}/usr/{bin,lib/nx} + cp -aR ${srcdir}/fakeinstall/usr/lib/NX3/bin/nxagent ${pkgdir}/usr/lib/nx + cd ${pkgdir}/usr/bin + ln -sv /usr/lib/nx/nxagent . +} + +package_nx-headers() { + + pkgdesc="NX headers" + + cd "${srcdir}/fakeinstall" + install -dm755 ${pkgdir}/usr/include/nx + cp -aR ${srcdir}/fakeinstall/usr/include/nx/* ${pkgdir}/usr/include/nx +} diff --git a/staging/nx/nx-x11.ld.so.conf.d b/staging/nx/nx-x11.ld.so.conf.d new file mode 100644 index 000000000..5d15cb6e2 --- /dev/null +++ b/staging/nx/nx-x11.ld.so.conf.d @@ -0,0 +1 @@ +/usr/lib/nx/ diff --git a/testing/calligra/PKGBUILD b/testing/calligra/PKGBUILD index 89a5570fc..41c4c0ee5 100644 --- a/testing/calligra/PKGBUILD +++ b/testing/calligra/PKGBUILD @@ -1,4 +1,4 @@ -# $Id: PKGBUILD 156147 2012-04-14 12:49:49Z andrea $ +# $Id: PKGBUILD 156197 2012-04-15 16:00:02Z andrea $ # Maintainer: Ronald van Haren <ronald.archlinux.org> # Maintainer: Andrea Scarpino <andrea@archlinux.org> @@ -20,17 +20,18 @@ pkgname=('calligra-filters' 'calligra-sheets' 'calligra-words' 'calligra-handbook' - 'calligra-thesaurus-doc' 'calligra-braindump' 'calligra-flow') pkgver=2.4.0 -pkgrel=1 +pkgrel=2 arch=('i686' 'x86_64') -url='http://www.calligra-suite.org' +url='http://www.calligra-suite.org/' license=('FDL1.2' 'GPL2' 'LGPL') -makedepends=('kdepimlibs' 'eigen2' 'freetds' 'kdegraphics-okular' 'libgsf' - 'libwpd' 'libwpg' 'pstoedit' 'glew' 'gsl' 'cmake' 'automoc4' - 'boost' 'libkdcraw' 'libpqxx' 'fftw' 'opengtl' 'lcms2') +makedepends=('cmake' 'automoc4' 'boost ' 'eigen2' + 'kdepimlibs' 'libpqxx' 'freetds' 'xbase' + 'kdegraphics-okular' 'gsl' 'kdeedu-marble' + 'libwpd' 'libwpg' 'pstoedit' 'glew' + 'fftw' 'opengtl' 'lcms2' 'libkdcraw' 'wv2') groups=('calligra') source=("http://download.kde.org/stable/${pkgbase}-${pkgver}/${pkgbase}-${pkgver}.tar.bz2" 'do-not-build-hancomword.patch') @@ -46,24 +47,16 @@ build() { cd build cmake ../${pkgbase}-${pkgver} \ -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_SKIP_RPATH=ON \ -DCMAKE_INSTALL_PREFIX=/usr \ -DBUILD_active=OFF \ -DBUILD_mobile=OFF \ - -DBUILD_mysql=OFF \ - -DKDCRAW_LOCAL_FOUND=/usr/lib/libkdcraw.so \ - -DWITH_Marble=OFF \ -DIHAVEPATCHEDQT=1 make } package_calligra-filters() { pkgdesc="Filters for the Calligra office suite" - optdepends=('libgsf: Microsoft Word document importer' - 'libwpd: WordPerfect document importer' - 'libwpg: Corel WordPerfect Graphics image importer' - 'pstoedit: Karbon EPS import filter' - 'libkdcraw: support for raw images') + optdepends=('libwpg: Corel WordPerfect Graphics image importer') conflicts=('koffice-filters') replaces=('koffice-filters') install=calligra-filters.install @@ -94,9 +87,10 @@ package_calligra-libs() { package_calligra-plugins() { pkgdesc="Plugins for the Calligra office suite" - depends=('calligra-libs') + depends=('calligra-libs' 'calligra-filters') + optdepends=('kdeedu-marble: map shape for Calligra') conflicts=('koffice-plugins' 'koffice-kchart') - replaces=('koffice-plugins' 'koffice-kchart') + replaces=('koffice-plugins' 'koffice-kchart' 'koffice-kformula') cd "${srcdir}"/build/plugins make DESTDIR="${pkgdir}" install @@ -104,7 +98,6 @@ package_calligra-plugins() { package_calligra-pics() { pkgdesc="Icons for the Calligra office suite" - depends=('calligra-libs') conflicts=('koffice-pics') replaces=('koffice-pics') install=calligra.install @@ -143,13 +136,11 @@ package_calligra-tools() { make DESTDIR="${pkgdir}" install } -#### package common files done ##### - -#### package apps and their docs ##### - package_calligra-karbon() { pkgdesc="Create scalable vector drawings" - depends=('calligra-libs' 'calligra-templates') + depends=('calligra-libs' 'calligra-templates' 'kdebase-runtime') + optdepends=('calligra-filters: import/export filters' + 'calligra-tools: extra calligra tools') conflicts=('koffice-karbon' 'koffice-karbon-doc' 'calligra-karbon-doc') replaces=('koffice-karbon' 'koffice-karbon-doc' 'calligra-karbon-doc') install=calligra-karbon.install @@ -161,6 +152,13 @@ package_calligra-karbon() { package_calligra-kexi() { pkgdesc="Develop desktop database applications" depends=('calligra-libs' 'calligra-templates') + optdepends=('libmysqlclient: MySQL driver' + 'libpqxx: PostgreSQL driver' + 'freetds: Sybase & MS SQL driver' + 'xbase: XBase driver' + 'calligra-sheets: Spreadsheet-to-Kexi-table import plugin' + 'kdeedu-marble: map form widget' + 'calligra-plugins: extra calligra plugins') conflicts=('koffice-kexi' 'koffice-kexi-doc' 'calligra-kexi-doc') replaces=('koffice-kexi' 'koffice-kexi-doc' 'calligra-kexi-doc') install=calligra-kexi.install @@ -192,8 +190,8 @@ package_calligra-plan() { package_calligra-stage() { pkgdesc="Write presentation documents" - depends=('calligra-libs' 'calligra-templates') - optdepends=('calligra-filters: import/export filters') + depends=('calligra-libs' 'calligra-templates' 'kdebase-runtime') + optdepends=('calligra-plugins: extra calligra plugins') conflicts=('koffice-kpresenter' 'koffice-kpresenter-doc' 'calligra-stage-doc') replaces=('koffice-kpresenter' 'koffice-kpresenter-doc' 'calligra-stage-doc') install=calligra-stage.install @@ -204,9 +202,8 @@ package_calligra-stage() { package_calligra-krita() { pkgdesc="Edit and paint images" - depends=('calligra-libs' 'calligra-templates' 'calligra-plugins' 'glew' - 'qimageblitz' 'poppler-qt' 'openexr' 'opengtl') - optdepends=('calligra-filters: import/export filters') + depends=('calligra-templates' 'calligra-plugins' 'kdebase-runtime' + 'qimageblitz' 'poppler-qt' 'opengtl' 'glew' 'libkdcraw' 'fftw') conflicts=('koffice-krita' 'calligra-krita-doc') replaces=('koffice-krita' 'calligra-krita-doc') install=calligra-krita.install @@ -217,8 +214,10 @@ package_calligra-krita() { package_calligra-sheets() { pkgdesc="Write spreadsheet documents" - depends=('calligra-libs' 'calligra-templates' 'calligra-plugins' 'gsl') - optdepends=('calligra-filters: import/export filters') + depends=('calligra-templates' 'calligra-libs' 'gsl' 'kdebase-runtime') + optdepends=('calligra-filters: import/export filters' + 'calligra-plugins: extra calligra plugins' + 'calligra-tools: extra calligra tools') conflicts=('koffice-kspread' 'koffice-kspread-doc' 'calligra-tables-doc' 'calligra-tables') replaces=('koffice-kspread' 'koffice-kspread-doc' 'calligra-tables-doc' 'calligra-tables') install=calligra-sheets.install @@ -229,9 +228,9 @@ package_calligra-sheets() { package_calligra-words() { pkgdesc="Word Processor" - depends=('calligra-libs' 'calligra-templates' 'calligra-plugins' 'calligra-pics' - 'calligra-kounavail' 'kdegraphics-okular') - optdepends=('calligra-filters: import/export filters') + depends=('calligra-templates' 'calligra-pics' 'calligra-kounavail' + 'calligra-plugins' 'kdegraphics-okular') + optdepends=('calligra-tools: extra calligra tools') conflicts=('koffice-kword') replaces=('koffice-kword') install=calligra-words.install @@ -249,17 +248,9 @@ package_calligra-handbook() { make DESTDIR="${pkgdir}" install } -package_calligra-thesaurus-doc() { - pkgdesc="Documentation for Thesaurus" - conflicts=('koffice-thesaurus-doc') - replaces=('koffice-thesaurus-doc') - - cd "${srcdir}"/build/doc/thesaurus - make DESTDIR="${pkgdir}" install -} - package_calligra-braindump() { pkgdesc="Notes and idea gathering" + depends=('calligra-libs' 'kdebase-runtime') install=calligra-braindump.install cd "${srcdir}"/build/braindump @@ -268,12 +259,11 @@ package_calligra-braindump() { package_calligra-flow() { pkgdesc="Flowchart & Diagram Editing" - install=calligra-flow.install + depends=('calligra-libs' 'kdebase-runtime') conflicts=('calligra-flow-doc') replaces=('calligra-flow-doc') + install=calligra-flow.install cd "${srcdir}"/build/flow make DESTDIR="${pkgdir}" install } - -##### package apps done ##### diff --git a/testing/gdk-pixbuf2/PKGBUILD b/testing/gdk-pixbuf2/PKGBUILD index e65888711..adf34cb4c 100644 --- a/testing/gdk-pixbuf2/PKGBUILD +++ b/testing/gdk-pixbuf2/PKGBUILD @@ -1,8 +1,8 @@ -# $Id: PKGBUILD 155074 2012-04-01 11:32:10Z heftig $ +# $Id: PKGBUILD 156170 2012-04-15 07:56:15Z ibiru $ # Maintainer: Ionut Biru <ibiru@archlinux.org> pkgname=gdk-pixbuf2 -pkgver=2.26.0 +pkgver=2.26.1 pkgrel=1 pkgdesc="An image loading library" arch=('i686' 'x86_64') @@ -13,7 +13,7 @@ makedepends=('gtk-doc' 'gobject-introspection') options=('!libtool') install=gdk-pixbuf2.install source=(http://download.gnome.org/sources/gdk-pixbuf/${pkgver%.*}/gdk-pixbuf-$pkgver.tar.xz) -sha256sums=('a5028d3a33710cbb6c6264bc561b6e252b37f067dff7b5b52473621e064f254d') +sha256sums=('a60af12b58d9cc15ba4c680c6730ce5d38e8d664af1d575a379385b94b4ec7ba') build() { cd "gdk-pixbuf-$pkgver" diff --git a/testing/gdk-pixbuf2/gdk-pixbuf2.install b/testing/gdk-pixbuf2/gdk-pixbuf2.install index 9a26e38dc..f04c0967a 100644 --- a/testing/gdk-pixbuf2/gdk-pixbuf2.install +++ b/testing/gdk-pixbuf2/gdk-pixbuf2.install @@ -1,5 +1,5 @@ post_install() { - /usr/bin/gdk-pixbuf-query-loaders --update-cache + gdk-pixbuf-query-loaders --update-cache } post_upgrade() { diff --git a/testing/gdm/PKGBUILD b/testing/gdm/PKGBUILD index 5fab71d9c..2df092e0b 100644 --- a/testing/gdm/PKGBUILD +++ b/testing/gdm/PKGBUILD @@ -1,8 +1,8 @@ -# $Id: PKGBUILD 155078 2012-04-01 11:32:19Z heftig $ +# $Id: PKGBUILD 156172 2012-04-15 08:17:07Z ibiru $ # Maintainer: Jan de Groot <jgc@archlinux.org> pkgname=gdm -pkgver=3.4.0.1 +pkgver=3.4.1 pkgrel=1 pkgdesc="Gnome Display Manager (a reimplementation of xdm)" arch=('i686' 'x86_64') @@ -17,12 +17,12 @@ makedepends=('intltool' 'gnome-doc-utils' 'xorg-server' 'gobject-introspection') optdepends=('gnome-shell: new login interface' 'fprintd: fingerprint authentication') install=gdm.install -source=(http://ftp.gnome.org/pub/gnome/sources/$pkgname/${pkgver:0:3}/$pkgname-$pkgver.tar.xz +source=(http://ftp.gnome.org/pub/gnome/sources/$pkgname/${pkgver%.*}/$pkgname-$pkgver.tar.xz fix_external_program_directories.patch gdm-vt-allocation-hack.patch gdm gdm-autologin.pam gdm-fingerprint.pam gdm.pam gdm-password.pam gdm-smartcard.pam gdm-welcome.pam) -sha256sums=('08686e32f35f65fc5578b48db802fc5e5ca4ca3c3adbbe0d2488ddc1c6f279cd' +sha256sums=('6292968dff5fc89877b5e1aaa3c7d1484dd3ed2d4f388e935841d053439be665' 'f68600ccf80f475deb417d58ab3306c4a1ba4622688e2901996c8549c85a9ee6' '3c8b588d4af08d94dc93bcd5e4c2a983c3f4fbbbe40833bceac2a1df4f1e8215' '272c08d8e8b50bf424d0705ac864d4c18c47ec4f6893b1af732c2efbc86c9550' @@ -34,7 +34,7 @@ sha256sums=('08686e32f35f65fc5578b48db802fc5e5ca4ca3c3adbbe0d2488ddc1c6f279cd' '39bf3824cc505043dc3136356da16dab9df9f369f1077435a324be2ac16cf834') build() { - cd "$srcdir/$pkgname-$pkgver" + cd "$pkgname-$pkgver" patch -Np1 -i "$srcdir/fix_external_program_directories.patch" patch -Np1 -i "$srcdir/gdm-vt-allocation-hack.patch" @@ -52,14 +52,14 @@ build() { } package() { - cd "$srcdir/$pkgname-$pkgver" + cd "$pkgname-$pkgver" make DESTDIR="$pkgdir" install for i in gdm-autologin.pam gdm-fingerprint.pam gdm.pam gdm-password.pam gdm-smartcard.pam gdm-welcome.pam;do install -m644 "$srcdir/$i" "$pkgdir/etc/pam.d/${i%.pam}" done - install -Dm755 "${srcdir}/gdm" "${pkgdir}/etc/rc.d/gdm" + install -Dm755 "$srcdir/gdm" "$pkgdir/etc/rc.d/gdm" chmod 1770 "$pkgdir/var/log/gdm" chmod 700 "$pkgdir/var/lib/gdm/.config/dconf" diff --git a/testing/gnome-applets/PKGBUILD b/testing/gnome-applets/PKGBUILD new file mode 100644 index 000000000..d7cff625a --- /dev/null +++ b/testing/gnome-applets/PKGBUILD @@ -0,0 +1,36 @@ +# $Id: PKGBUILD 156196 2012-04-15 15:56:32Z ibiru $ +# Maintainer: Jan de Groot <jgc@archlinux.org> + +pkgname=gnome-applets +pkgver=3.4.1 +pkgrel=1 +pkgdesc="GNOME Applets" +arch=(i686 x86_64) +license=('GPL') +depends=('gnome-panel' 'libgtop' 'gucharmap' 'libnotify' 'cpufrequtils') +makedepends=('gnome-doc-utils' 'intltool' 'gnome-settings-daemon' 'networkmanager') +options=(!emptydirs) +url="http://www.gnome.org" +groups=(gnome) +install=gnome-applets.install +source=(http://download.gnome.org/sources/$pkgname/${pkgver%.*}/$pkgname-$pkgver.tar.xz) +sha256sums=('ec5487eb81fb29851b6336de94a329f5623e73830d61022e0e20fe3d038a415e') + +build() { + cd "$pkgname-$pkgver" + PYTHON=/usr/bin/python2 ./configure --prefix=/usr \ + --sysconfdir=/etc --libexecdir=/usr/lib/gnome-applets \ + --localstatedir=/var --disable-static \ + --disable-scrollkeeper --disable-schemas-install \ + --without-hal + make +} + +package() { + cd "$pkgname-$pkgver" + make GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL=1 DESTDIR="$pkgdir" install + + install -m755 -d "$pkgdir/usr/share/gconf/schemas" + gconf-merge-schema "$pkgdir/usr/share/gconf/schemas/$pkgname.schemas" --domain gnome-applets-3.0 "$pkgdir"/etc/gconf/schemas/*.schemas + rm -f "$pkgdir"/etc/gconf/schemas/*.schemas +} diff --git a/testing/gnome-applets/gnome-applets.install b/testing/gnome-applets/gnome-applets.install new file mode 100644 index 000000000..dd9c34269 --- /dev/null +++ b/testing/gnome-applets/gnome-applets.install @@ -0,0 +1,22 @@ +pkgname=gnome-applets + +post_install() { + usr/sbin/gconfpkg --install ${pkgname} + gtk-update-icon-cache -q -t -f usr/share/icons/hicolor +} + +pre_upgrade() { + pre_remove $1 +} + +post_upgrade() { + post_install $1 +} + +pre_remove() { + usr/sbin/gconfpkg --uninstall ${pkgname} +} + +post_remove() { + gtk-update-icon-cache -q -t -f usr/share/icons/hicolor +} diff --git a/testing/gnome-screensaver/PKGBUILD b/testing/gnome-screensaver/PKGBUILD index f840750c0..9652a0c16 100644 --- a/testing/gnome-screensaver/PKGBUILD +++ b/testing/gnome-screensaver/PKGBUILD @@ -1,9 +1,9 @@ -# $Id: PKGBUILD 155135 2012-04-01 11:33:44Z heftig $ +# $Id: PKGBUILD 156174 2012-04-15 08:25:54Z ibiru $ # Maintainer: Jan Alexander Steffens (heftig) <jan.steffens@gmail.com> # Contributor: Jan de Groot <jgc@archlinux.org> pkgname=gnome-screensaver -pkgver=3.4.0 +pkgver=3.4.1 pkgrel=1 pkgdesc="Screensaver designed to integrate well with the GNOME desktop." arch=('i686' 'x86_64') @@ -15,13 +15,13 @@ makedepends=('pkgconfig' 'intltool' 'libxss') groups=('gnome') options=(!emptydirs) install=gnome-screensaver.install -source=(http://ftp.gnome.org/pub/GNOME/sources/${pkgname}/${pkgver%.*}/${pkgname}-${pkgver}.tar.xz +source=(http://ftp.gnome.org/pub/GNOME/sources/$pkgname/${pkgver%.*}/$pkgname-$pkgver.tar.xz gnome-screensaver.pam) -sha256sums=('8d73e687f41975d66ee1fa56986d901a0bbdf4094f429cdbbed4a19016a38974' +sha256sums=('d54a253f826ff6cd48eba53724339896a6dea39029848b6a8d5972c8e162069b' 'c19870c4f2d6e91ba0eea2603753a74e0c5c82ff5fa3cacb1198027a38d0a6cb') build() { - cd ${pkgname}-${pkgver} + cd $pkgname-$pkgver ./configure --prefix=/usr --sysconfdir=/etc \ --libexecdir=/usr/lib/gnome-screensaver \ --localstatedir=/var \ @@ -31,7 +31,7 @@ build() { } package() { - cd ${pkgname}-${pkgver} - make DESTDIR="${pkgdir}" install - install -Dm644 "${srcdir}/gnome-screensaver.pam" "${pkgdir}/etc/pam.d/gnome-screensaver" + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 "$srcdir/gnome-screensaver.pam" "$pkgdir/etc/pam.d/gnome-screensaver" } diff --git a/testing/gnome-screensaver/gnome-screensaver.install b/testing/gnome-screensaver/gnome-screensaver.install index 3b0e06046..d1a42c6ce 100644 --- a/testing/gnome-screensaver/gnome-screensaver.install +++ b/testing/gnome-screensaver/gnome-screensaver.install @@ -2,6 +2,6 @@ pkgname=gnome-screensaver pre_upgrade() { if [ -f usr/share/gconf/schemas/${pkgname}.schemas ]; then - usr/sbin/gconfpkg --uninstall ${pkgname} + gconfpkg --uninstall ${pkgname} fi } diff --git a/testing/xf86-video-ati/0000-poor-man-s-solid-picture-support-for-r300-r600.patch b/testing/xf86-video-ati/0000-poor-man-s-solid-picture-support-for-r300-r600.patch new file mode 100644 index 000000000..bcfbf94db --- /dev/null +++ b/testing/xf86-video-ati/0000-poor-man-s-solid-picture-support-for-r300-r600.patch @@ -0,0 +1,571 @@ +From 837149c63929d7d5a8ef6f8204d396f8e6d5acd7 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <michel@daenzer.net> +Date: Fri, 13 Apr 2012 11:12:51 +0200 +Subject: [PATCH 1/4] Poor man's acceleration of solid pictures for R3xx-R7xx + +The patch below implements basic acceleration of solid pictures via +scratch 1x1 pixmaps. It seems to at least alleviate some of the +corruption and performance issues exposed by Cairo 1.12, and should also +improve performance for other toolkits/apps using solid pictures. + +If there are no objections to this approach, maybe someone else can beat +me to extending this for Evergreen+ and R1/2xx. +--- + src/r600_exa.c | 160 ++++++++++++++++++++++++++-------------------- + src/radeon_exa_render.c | 115 ++++++++++++++++++++-------------- + src/radeon_exa_shared.c | 19 ++++++ + src/radeon_exa_shared.h | 1 + + 4 files changed, 179 insertions(+), 116 deletions(-) + +diff --git a/src/r600_exa.c b/src/r600_exa.c +index e1eb62f..c3ae553 100644 +--- a/src/r600_exa.c ++++ b/src/r600_exa.c +@@ -901,17 +901,8 @@ static Bool R600CheckCompositeTexture(PicturePtr pPict, + int op, + int unit) + { +- int w = pPict->pDrawable->width; +- int h = pPict->pDrawable->height; + unsigned int repeatType = pPict->repeat ? pPict->repeatType : RepeatNone; + unsigned int i; +- int max_tex_w, max_tex_h; +- +- max_tex_w = 8192; +- max_tex_h = 8192; +- +- if ((w > max_tex_w) || (h > max_tex_h)) +- RADEON_FALLBACK(("Picture w/h too large (%dx%d)\n", w, h)); + + for (i = 0; i < sizeof(R600TexFormats) / sizeof(R600TexFormats[0]); i++) { + if (R600TexFormats[i].fmt == pPict->format) +@@ -951,9 +942,7 @@ static Bool R600TextureSetup(PicturePtr pPict, PixmapPtr pPix, + ScrnInfoPtr pScrn = xf86Screens[pPix->drawable.pScreen->myNum]; + RADEONInfoPtr info = RADEONPTR(pScrn); + struct radeon_accel_state *accel_state = info->accel_state; +- int w = pPict->pDrawable->width; +- int h = pPict->pDrawable->height; +- unsigned int repeatType = pPict->repeat ? pPict->repeatType : RepeatNone; ++ unsigned int repeatType; + unsigned int i; + tex_resource_t tex_res; + tex_sampler_t tex_samp; +@@ -969,9 +958,16 @@ static Bool R600TextureSetup(PicturePtr pPict, PixmapPtr pPix, + } + + /* Texture */ ++ if (pPict->pDrawable) { ++ tex_res.w = pPict->pDrawable->width; ++ tex_res.h = pPict->pDrawable->height; ++ repeatType = pPict->repeat ? pPict->repeatType : RepeatNone; ++ } else { ++ tex_res.w = 1; ++ tex_res.h = 1; ++ repeatType = RepeatNormal; ++ } + tex_res.id = unit; +- tex_res.w = w; +- tex_res.h = h; + tex_res.pitch = accel_state->src_obj[unit].pitch; + tex_res.depth = 0; + tex_res.dim = SQ_TEX_DIM_2D; +@@ -1170,24 +1166,24 @@ static Bool R600TextureSetup(PicturePtr pPict, PixmapPtr pPix, + vs_alu_consts[0] = xFixedToFloat(pPict->transform->matrix[0][0]); + vs_alu_consts[1] = xFixedToFloat(pPict->transform->matrix[0][1]); + vs_alu_consts[2] = xFixedToFloat(pPict->transform->matrix[0][2]); +- vs_alu_consts[3] = 1.0 / w; ++ vs_alu_consts[3] = 1.0 / tex_res.w; + + vs_alu_consts[4] = xFixedToFloat(pPict->transform->matrix[1][0]); + vs_alu_consts[5] = xFixedToFloat(pPict->transform->matrix[1][1]); + vs_alu_consts[6] = xFixedToFloat(pPict->transform->matrix[1][2]); +- vs_alu_consts[7] = 1.0 / h; ++ vs_alu_consts[7] = 1.0 / tex_res.h; + } else { + accel_state->is_transform[unit] = FALSE; + + vs_alu_consts[0] = 1.0; + vs_alu_consts[1] = 0.0; + vs_alu_consts[2] = 0.0; +- vs_alu_consts[3] = 1.0 / w; ++ vs_alu_consts[3] = 1.0 / tex_res.w; + + vs_alu_consts[4] = 0.0; + vs_alu_consts[5] = 1.0; + vs_alu_consts[6] = 0.0; +- vs_alu_consts[7] = 1.0 / h; ++ vs_alu_consts[7] = 1.0 / tex_res.h; + } + + /* VS alu constants */ +@@ -1202,33 +1198,30 @@ static Bool R600CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP + { + uint32_t tmp1; + PixmapPtr pSrcPixmap, pDstPixmap; +- int max_tex_w, max_tex_h, max_dst_w, max_dst_h; + + /* Check for unsupported compositing operations. */ + if (op >= (int) (sizeof(R600BlendOp) / sizeof(R600BlendOp[0]))) + RADEON_FALLBACK(("Unsupported Composite op 0x%x\n", op)); + +- if (!pSrcPicture->pDrawable) +- RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n")); +- +- pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable); ++ if (pSrcPicture->pDrawable) { ++ pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable); + +- max_tex_w = 8192; +- max_tex_h = 8192; +- max_dst_w = 8192; +- max_dst_h = 8192; ++ if (pSrcPixmap->drawable.width >= 8192 || ++ pSrcPixmap->drawable.height >= 8192) { ++ RADEON_FALLBACK(("Source w/h too large (%d,%d).\n", ++ pSrcPixmap->drawable.width, ++ pSrcPixmap->drawable.height)); ++ } + +- if (pSrcPixmap->drawable.width >= max_tex_w || +- pSrcPixmap->drawable.height >= max_tex_h) { +- RADEON_FALLBACK(("Source w/h too large (%d,%d).\n", +- pSrcPixmap->drawable.width, +- pSrcPixmap->drawable.height)); +- } ++ if (!R600CheckCompositeTexture(pSrcPicture, pDstPicture, op, 0)) ++ return FALSE; ++ } else if (pSrcPicture->pSourcePict->type != SourcePictTypeSolidFill) ++ RADEON_FALLBACK(("Gradient pictures not supported yet\n")); + + pDstPixmap = RADEONGetDrawablePixmap(pDstPicture->pDrawable); + +- if (pDstPixmap->drawable.width >= max_dst_w || +- pDstPixmap->drawable.height >= max_dst_h) { ++ if (pDstPixmap->drawable.width >= 8192 || ++ pDstPixmap->drawable.height >= 8192) { + RADEON_FALLBACK(("Dest w/h too large (%d,%d).\n", + pDstPixmap->drawable.width, + pDstPixmap->drawable.height)); +@@ -1237,38 +1230,35 @@ static Bool R600CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP + if (pMaskPicture) { + PixmapPtr pMaskPixmap; + +- if (!pMaskPicture->pDrawable) +- RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n")); ++ if (pMaskPicture->pDrawable) { ++ pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable); + +- pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable); +- +- if (pMaskPixmap->drawable.width >= max_tex_w || +- pMaskPixmap->drawable.height >= max_tex_h) { +- RADEON_FALLBACK(("Mask w/h too large (%d,%d).\n", +- pMaskPixmap->drawable.width, +- pMaskPixmap->drawable.height)); +- } ++ if (pMaskPixmap->drawable.width >= 8192 || ++ pMaskPixmap->drawable.height >= 8192) { ++ RADEON_FALLBACK(("Mask w/h too large (%d,%d).\n", ++ pMaskPixmap->drawable.width, ++ pMaskPixmap->drawable.height)); ++ } + +- if (pMaskPicture->componentAlpha) { +- /* Check if it's component alpha that relies on a source alpha and +- * on the source value. We can only get one of those into the +- * single source value that we get to blend with. +- */ +- if (R600BlendOp[op].src_alpha && +- (R600BlendOp[op].blend_cntl & COLOR_SRCBLEND_mask) != +- (BLEND_ZERO << COLOR_SRCBLEND_shift)) { +- RADEON_FALLBACK(("Component alpha not supported with source " +- "alpha and source value blending.\n")); ++ if (pMaskPicture->componentAlpha) { ++ /* Check if it's component alpha that relies on a source alpha and ++ * on the source value. We can only get one of those into the ++ * single source value that we get to blend with. ++ */ ++ if (R600BlendOp[op].src_alpha && ++ (R600BlendOp[op].blend_cntl & COLOR_SRCBLEND_mask) != ++ (BLEND_ZERO << COLOR_SRCBLEND_shift)) { ++ RADEON_FALLBACK(("Component alpha not supported with source " ++ "alpha and source value blending.\n")); ++ } + } +- } + +- if (!R600CheckCompositeTexture(pMaskPicture, pDstPicture, op, 1)) +- return FALSE; ++ if (!R600CheckCompositeTexture(pMaskPicture, pDstPicture, op, 1)) ++ return FALSE; ++ } else if (pMaskPicture->pSourcePict->type != SourcePictTypeSolidFill) ++ RADEON_FALLBACK(("Gradient pictures not supported yet\n")); + } + +- if (!R600CheckCompositeTexture(pSrcPicture, pDstPicture, op, 0)) +- return FALSE; +- + if (!R600GetDestFormat(pDstPicture, &tmp1)) + return FALSE; + +@@ -1280,7 +1270,8 @@ static Bool R600PrepareComposite(int op, PicturePtr pSrcPicture, + PicturePtr pMaskPicture, PicturePtr pDstPicture, + PixmapPtr pSrc, PixmapPtr pMask, PixmapPtr pDst) + { +- ScrnInfoPtr pScrn = xf86Screens[pSrc->drawable.pScreen->myNum]; ++ ScreenPtr pScreen = pDst->drawable.pScreen; ++ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; + RADEONInfoPtr info = RADEONPTR(pScrn); + struct radeon_accel_state *accel_state = info->accel_state; + uint32_t dst_format; +@@ -1288,15 +1279,21 @@ static Bool R600PrepareComposite(int op, PicturePtr pSrcPicture, + shader_config_t vs_conf, ps_conf; + struct r600_accel_object src_obj, mask_obj, dst_obj; + +- if (pDst->drawable.bitsPerPixel < 8 || pSrc->drawable.bitsPerPixel < 8) ++ if (pDst->drawable.bitsPerPixel < 8 || (pSrc && pSrc->drawable.bitsPerPixel < 8)) + return FALSE; + ++ if (!pSrc) { ++ pSrc = RADEONSolidPixmap(pScreen, pSrcPicture->pSourcePict->solidFill.color); ++ if (!pSrc) ++ RADEON_FALLBACK("Failed to create solid scratch pixmap\n"); ++ } ++ + #if defined(XF86DRM_MODE) + if (info->cs) { + src_obj.offset = 0; + dst_obj.offset = 0; +- src_obj.bo = radeon_get_pixmap_bo(pSrc); + dst_obj.bo = radeon_get_pixmap_bo(pDst); ++ src_obj.bo = radeon_get_pixmap_bo(pSrc); + dst_obj.tiling_flags = radeon_get_pixmap_tiling(pDst); + src_obj.tiling_flags = radeon_get_pixmap_tiling(pSrc); + dst_obj.surface = radeon_get_pixmap_surface(pDst); +@@ -1322,7 +1319,16 @@ static Bool R600PrepareComposite(int op, PicturePtr pSrcPicture, + dst_obj.bpp = pDst->drawable.bitsPerPixel; + dst_obj.domain = RADEON_GEM_DOMAIN_VRAM; + +- if (pMask) { ++ if (pMaskPicture) { ++ if (!pMask) { ++ pMask = RADEONSolidPixmap(pScreen, pMaskPicture->pSourcePict->solidFill.color); ++ if (!pMask) { ++ if (!pSrcPicture->pDrawable) ++ pScreen->DestroyPixmap(pSrc); ++ RADEON_FALLBACK("Failed to create solid scratch pixmap\n"); ++ } ++ } ++ + #if defined(XF86DRM_MODE) + if (info->cs) { + mask_obj.offset = 0; +@@ -1509,11 +1515,9 @@ static Bool R600PrepareComposite(int op, PicturePtr pSrcPicture, + return TRUE; + } + +-static void R600DoneComposite(PixmapPtr pDst) ++static void R600FinishComposite(ScrnInfoPtr pScrn, PixmapPtr pDst, ++ struct radeon_accel_state *accel_state) + { +- ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum]; +- RADEONInfoPtr info = RADEONPTR(pScrn); +- struct radeon_accel_state *accel_state = info->accel_state; + int vtx_size; + + if (accel_state->vsync) +@@ -1527,6 +1531,22 @@ static void R600DoneComposite(PixmapPtr pDst) + r600_finish_op(pScrn, vtx_size); + } + ++static void R600DoneComposite(PixmapPtr pDst) ++{ ++ ScreenPtr pScreen = pDst->drawable.pScreen; ++ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; ++ RADEONInfoPtr info = RADEONPTR(pScrn); ++ struct radeon_accel_state *accel_state = info->accel_state; ++ ++ R600FinishComposite(pScrn, pDst, accel_state); ++ ++ if (!accel_state->src_pic->pDrawable) ++ pScreen->DestroyPixmap(accel_state->src_pix); ++ ++ if (accel_state->msk_pic && !accel_state->msk_pic->pDrawable) ++ pScreen->DestroyPixmap(accel_state->msk_pix); ++} ++ + static void R600Composite(PixmapPtr pDst, + int srcX, int srcY, + int maskX, int maskY, +@@ -1543,7 +1563,7 @@ static void R600Composite(PixmapPtr pDst, + + #ifdef XF86DRM_MODE + if (info->cs && CS_FULL(info->cs)) { +- R600DoneComposite(info->accel_state->dst_pix); ++ R600FinishComposite(pScrn, pDst, info->accel_state); + radeon_cs_flush_indirect(pScrn); + R600PrepareComposite(info->accel_state->composite_op, + info->accel_state->src_pic, +diff --git a/src/radeon_exa_render.c b/src/radeon_exa_render.c +index e5c231f..b6cc9e4 100644 +--- a/src/radeon_exa_render.c ++++ b/src/radeon_exa_render.c +@@ -299,8 +299,8 @@ static Bool RADEONSetupSourceTile(PicturePtr pPict, + if (repeatType == RepeatNormal || repeatType == RepeatReflect) { + Bool badPitch = needMatchingPitch && !RADEONPitchMatches(pPix); + +- int w = pPict->pDrawable->width; +- int h = pPict->pDrawable->height; ++ int w = pPict->pDrawable ? pPict->pDrawable->width : 1; ++ int h = pPict->pDrawable ? pPict->pDrawable->height : 1; + + if (pPict->transform) { + if (badPitch) +@@ -1112,23 +1112,8 @@ static Bool R300CheckCompositeTexture(PicturePtr pPict, + ScreenPtr pScreen = pDstPict->pDrawable->pScreen; + ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; + RADEONInfoPtr info = RADEONPTR(pScrn); +- + unsigned int repeatType = pPict->repeat ? pPict->repeatType : RepeatNone; +- int w = pPict->pDrawable->width; +- int h = pPict->pDrawable->height; + int i; +- int max_tex_w, max_tex_h; +- +- if (is_r500) { +- max_tex_w = 4096; +- max_tex_h = 4096; +- } else { +- max_tex_w = 2048; +- max_tex_h = 2048; +- } +- +- if ((w > max_tex_w) || (h > max_tex_h)) +- RADEON_FALLBACK(("Picture w/h too large (%dx%d)\n", w, h)); + + for (i = 0; i < sizeof(R300TexFormats) / sizeof(R300TexFormats[0]); i++) + { +@@ -1139,7 +1124,7 @@ static Bool R300CheckCompositeTexture(PicturePtr pPict, + RADEON_FALLBACK(("Unsupported picture format 0x%x\n", + (int)pPict->format)); + +- if (!RADEONCheckTexturePOT(pPict, unit == 0)) { ++ if (pPict->pDrawable && !RADEONCheckTexturePOT(pPict, unit == 0)) { + if (info->cs) { + struct radeon_exa_pixmap_priv *driver_priv; + PixmapPtr pPix; +@@ -1181,15 +1166,23 @@ static Bool FUNC_NAME(R300TextureSetup)(PicturePtr pPict, PixmapPtr pPix, + { + RINFO_FROM_SCREEN(pPix->drawable.pScreen); + uint32_t txfilter, txformat0, txformat1, txoffset, txpitch, us_format = 0; +- int w = pPict->pDrawable->width; +- int h = pPict->pDrawable->height; ++ int w, h; + int i, pixel_shift, out_size = 6; +- unsigned int repeatType = pPict->repeat ? pPict->repeatType : RepeatNone; ++ unsigned int repeatType; + struct radeon_exa_pixmap_priv *driver_priv; + ACCEL_PREAMBLE(); + + TRACE; + ++ if (pPict->pDrawable) { ++ w = pPict->pDrawable->width; ++ h = pPict->pDrawable->height; ++ repeatType = pPict->repeat ? pPict->repeatType : RepeatNone; ++ } else { ++ w = h = 1; ++ repeatType = RepeatNormal; ++ } ++ + txpitch = exaGetPixmapPitch(pPix); + txoffset = 0; + +@@ -1394,11 +1387,6 @@ static Bool R300CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP + if (op >= sizeof(RadeonBlendOp) / sizeof(RadeonBlendOp[0])) + RADEON_FALLBACK(("Unsupported Composite op 0x%x\n", op)); + +- if (!pSrcPicture->pDrawable) +- RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n")); +- +- pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable); +- + if (IS_R500_3D) { + max_tex_w = 4096; + max_tex_h = 4096; +@@ -1416,13 +1404,6 @@ static Bool R300CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP + } + } + +- if (pSrcPixmap->drawable.width > max_tex_w || +- pSrcPixmap->drawable.height > max_tex_h) { +- RADEON_FALLBACK(("Source w/h too large (%d,%d).\n", +- pSrcPixmap->drawable.width, +- pSrcPixmap->drawable.height)); +- } +- + pDstPixmap = RADEONGetDrawablePixmap(pDstPicture->pDrawable); + + if (pDstPixmap->drawable.width > max_dst_w || +@@ -1432,20 +1413,32 @@ static Bool R300CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP + pDstPixmap->drawable.height)); + } + ++ if (pSrcPicture->pDrawable) { ++ pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable); ++ ++ if (pSrcPixmap->drawable.width > max_tex_w || ++ pSrcPixmap->drawable.height > max_tex_h) { ++ RADEON_FALLBACK(("Source w/h too large (%d,%d).\n", ++ pSrcPixmap->drawable.width, ++ pSrcPixmap->drawable.height)); ++ } ++ } else if (pSrcPicture->pSourcePict->type != SourcePictTypeSolidFill) ++ RADEON_FALLBACK(("Gradient pictures not supported yet\n")); ++ + if (pMaskPicture) { + PixmapPtr pMaskPixmap; + +- if (!pMaskPicture->pDrawable) +- RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n")); ++ if (pMaskPicture->pDrawable) { ++ pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable); + +- pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable); +- +- if (pMaskPixmap->drawable.width > max_tex_w || +- pMaskPixmap->drawable.height > max_tex_h) { +- RADEON_FALLBACK(("Mask w/h too large (%d,%d).\n", +- pMaskPixmap->drawable.width, +- pMaskPixmap->drawable.height)); +- } ++ if (pMaskPixmap->drawable.width > max_tex_w || ++ pMaskPixmap->drawable.height > max_tex_h) { ++ RADEON_FALLBACK(("Mask w/h too large (%d,%d).\n", ++ pMaskPixmap->drawable.width, ++ pMaskPixmap->drawable.height)); ++ } ++ } else if (pMaskPicture->pSourcePict->type != SourcePictTypeSolidFill) ++ RADEON_FALLBACK(("Gradient pictures not supported yet\n")); + + if (pMaskPicture->componentAlpha) { + /* Check if it's component alpha that relies on a source alpha and +@@ -1479,7 +1472,8 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture, + PicturePtr pMaskPicture, PicturePtr pDstPicture, + PixmapPtr pSrc, PixmapPtr pMask, PixmapPtr pDst) + { +- RINFO_FROM_SCREEN(pDst->drawable.pScreen); ++ ScreenPtr pScreen = pDst->drawable.pScreen; ++ RINFO_FROM_SCREEN(pScreen); + uint32_t dst_format, dst_pitch; + uint32_t txenable, colorpitch; + uint32_t blendcntl, output_fmt; +@@ -1508,9 +1502,24 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture, + if (((dst_pitch >> pixel_shift) & 0x7) != 0) + RADEON_FALLBACK(("Bad destination pitch 0x%x\n", (int)dst_pitch)); + ++ if (!pSrc) { ++ pSrc = RADEONSolidPixmap(pScreen, cpu_to_le32(pSrcPicture->pSourcePict->solidFill.color)); ++ if (!pSrc) ++ RADEON_FALLBACK("Failed to create solid scratch pixmap\n"); ++ } ++ + if (!RADEONSetupSourceTile(pSrcPicture, pSrc, TRUE, FALSE)) + return FALSE; + ++ if (pMaskPicture && !pMask) { ++ pMask = RADEONSolidPixmap(pScreen, cpu_to_le32(pMaskPicture->pSourcePict->solidFill.color)); ++ if (!pMask) { ++ if (!pSrcPicture->pDrawable) ++ pScreen->DestroyPixmap(pSrc); ++ RADEON_FALLBACK("Failed to create solid scratch pixmap\n"); ++ } ++ } ++ + RADEONPrepareCompositeCS(op, pSrcPicture, pMaskPicture, pDstPicture, + pSrc, pMask, pDst); + +@@ -2132,7 +2141,7 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture, + return TRUE; + } + +-static void FUNC_NAME(RadeonDoneComposite)(PixmapPtr pDst) ++static void FUNC_NAME(RadeonFinishComposite)(PixmapPtr pDst) + { + RINFO_FROM_SCREEN(pDst->drawable.pScreen); + ACCEL_PREAMBLE(); +@@ -2179,6 +2188,20 @@ static void FUNC_NAME(RadeonDoneComposite)(PixmapPtr pDst) + LEAVE_DRAW(0); + } + ++static void FUNC_NAME(RadeonDoneComposite)(PixmapPtr pDst) ++{ ++ ScreenPtr pScreen = pDst->drawable.pScreen; ++ RINFO_FROM_SCREEN(pScreen); ++ struct radeon_accel_state *accel_state = info->accel_state; ++ ++ FUNC_NAME(RadeonFinishComposite)(pDst); ++ ++ if (!accel_state->src_pic->pDrawable) ++ pScreen->DestroyPixmap(accel_state->src_pix); ++ ++ if (accel_state->msk_pic && !accel_state->msk_pic->pDrawable) ++ pScreen->DestroyPixmap(accel_state->msk_pix); ++} + + #ifdef ACCEL_CP + +@@ -2257,7 +2280,7 @@ static void FUNC_NAME(RadeonCompositeTile)(ScrnInfoPtr pScrn, + if ((info->cs && CS_FULL(info->cs)) || + (!info->cs && (info->cp->indirectBuffer->used + 4 * 32) > + info->cp->indirectBuffer->total)) { +- FUNC_NAME(RadeonDoneComposite)(info->accel_state->dst_pix); ++ FUNC_NAME(RadeonFinishComposite)(info->accel_state->dst_pix); + if (info->cs) + radeon_cs_flush_indirect(pScrn); + else +diff --git a/src/radeon_exa_shared.c b/src/radeon_exa_shared.c +index be1d2fa..28dc335 100644 +--- a/src/radeon_exa_shared.c ++++ b/src/radeon_exa_shared.c +@@ -126,6 +126,25 @@ Bool RADEONCheckBPP(int bpp) + return FALSE; + } + ++PixmapPtr RADEONSolidPixmap(ScreenPtr pScreen, uint32_t solid) ++{ ++ PixmapPtr pPix = pScreen->CreatePixmap(pScreen, 1, 1, 32, 0); ++ struct radeon_bo *bo; ++ ++ exaMoveInPixmap(pPix); ++ bo = radeon_get_pixmap_bo(pPix); ++ ++ if (radeon_bo_map(bo, 1)) { ++ pScreen->DestroyPixmap(pPix); ++ return NULL; ++ } ++ ++ memcpy(bo->ptr, &solid, 4); ++ radeon_bo_unmap(bo); ++ ++ return pPix; ++} ++ + static Bool radeon_vb_get(ScrnInfoPtr pScrn) + { + RADEONInfoPtr info = RADEONPTR(pScrn); +diff --git a/src/radeon_exa_shared.h b/src/radeon_exa_shared.h +index 7b8b5ca..60a1045 100644 +--- a/src/radeon_exa_shared.h ++++ b/src/radeon_exa_shared.h +@@ -40,6 +40,7 @@ extern void RADEONVlineHelperClear(ScrnInfoPtr pScrn); + extern void RADEONVlineHelperSet(ScrnInfoPtr pScrn, int x1, int y1, int x2, int y2); + extern Bool RADEONValidPM(uint32_t pm, int bpp); + extern Bool RADEONCheckBPP(int bpp); ++extern PixmapPtr RADEONSolidPixmap(ScreenPtr pScreen, uint32_t solid); + + #define RADEON_TRACE_FALL 0 + #define RADEON_TRACE_DRAW 0 +-- +1.7.7.5 + diff --git a/testing/xf86-video-ati/0001-poor-man-s-solid-picture-support-for-evergreen.patch b/testing/xf86-video-ati/0001-poor-man-s-solid-picture-support-for-evergreen.patch new file mode 100644 index 000000000..e6b5433e1 --- /dev/null +++ b/testing/xf86-video-ati/0001-poor-man-s-solid-picture-support-for-evergreen.patch @@ -0,0 +1,290 @@ +From 761ef4b340e689490a76ec5ce520c858335e2106 Mon Sep 17 00:00:00 2001 +From: Alex Deucher <alexander.deucher@amd.com> +Date: Sat, 14 Apr 2012 08:53:39 -0400 +Subject: [PATCH] poor man's solid picture support for evergreen + +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + src/evergreen_exa.c | 163 ++++++++++++++++++++++++++++++--------------------- + 1 files changed, 95 insertions(+), 68 deletions(-) + +diff --git a/src/evergreen_exa.c b/src/evergreen_exa.c +index cee3ec2..61b47a4 100644 +--- a/src/evergreen_exa.c ++++ b/src/evergreen_exa.c +@@ -748,17 +748,8 @@ static Bool EVERGREENCheckCompositeTexture(PicturePtr pPict, + int op, + int unit) + { +- int w = pPict->pDrawable->width; +- int h = pPict->pDrawable->height; + unsigned int repeatType = pPict->repeat ? pPict->repeatType : RepeatNone; + unsigned int i; +- int max_tex_w, max_tex_h; +- +- max_tex_w = 16384; +- max_tex_h = 16384; +- +- if ((w > max_tex_w) || (h > max_tex_h)) +- RADEON_FALLBACK(("Picture w/h too large (%dx%d)\n", w, h)); + + for (i = 0; i < sizeof(EVERGREENTexFormats) / sizeof(EVERGREENTexFormats[0]); i++) { + if (EVERGREENTexFormats[i].fmt == pPict->format) +@@ -798,9 +789,16 @@ static void EVERGREENXFormSetup(PicturePtr pPict, PixmapPtr pPix, + ScrnInfoPtr pScrn = xf86Screens[pPix->drawable.pScreen->myNum]; + RADEONInfoPtr info = RADEONPTR(pScrn); + struct radeon_accel_state *accel_state = info->accel_state; +- int w = pPict->pDrawable->width; +- int h = pPict->pDrawable->height; + int const_offset = unit * 8; ++ int w, h; ++ ++ if (pPict->pDrawable) { ++ w = pPict->pDrawable->width; ++ h = pPict->pDrawable->height; ++ } else { ++ w = 1; ++ h = 1; ++ } + + if (pPict->transform != 0) { + accel_state->is_transform[unit] = TRUE; +@@ -837,9 +835,7 @@ static Bool EVERGREENTextureSetup(PicturePtr pPict, PixmapPtr pPix, + ScrnInfoPtr pScrn = xf86Screens[pPix->drawable.pScreen->myNum]; + RADEONInfoPtr info = RADEONPTR(pScrn); + struct radeon_accel_state *accel_state = info->accel_state; +- int w = pPict->pDrawable->width; +- int h = pPict->pDrawable->height; +- unsigned int repeatType = pPict->repeat ? pPict->repeatType : RepeatNone; ++ unsigned int repeatType; + unsigned int i; + tex_resource_t tex_res; + tex_sampler_t tex_samp; +@@ -854,9 +850,17 @@ static Bool EVERGREENTextureSetup(PicturePtr pPict, PixmapPtr pPix, + } + + /* Texture */ ++ if (pPict->pDrawable) { ++ tex_res.w = pPict->pDrawable->width; ++ tex_res.h = pPict->pDrawable->height; ++ repeatType = pPict->repeat ? pPict->repeatType : RepeatNone; ++ } else { ++ tex_res.w = 1; ++ tex_res.h = 1; ++ repeatType = RepeatNormal; ++ } ++ + tex_res.id = unit; +- tex_res.w = w; +- tex_res.h = h; + tex_res.pitch = accel_state->src_obj[unit].pitch; + tex_res.depth = 0; + tex_res.dim = SQ_TEX_DIM_2D; +@@ -1054,33 +1058,30 @@ static Bool EVERGREENCheckComposite(int op, PicturePtr pSrcPicture, + { + uint32_t tmp1; + PixmapPtr pSrcPixmap, pDstPixmap; +- int max_tex_w, max_tex_h, max_dst_w, max_dst_h; + + /* Check for unsupported compositing operations. */ + if (op >= (int) (sizeof(EVERGREENBlendOp) / sizeof(EVERGREENBlendOp[0]))) + RADEON_FALLBACK(("Unsupported Composite op 0x%x\n", op)); + +- if (!pSrcPicture->pDrawable) +- RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n")); ++ if (pSrcPicture->pDrawable) { ++ pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable); + +- pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable); +- +- max_tex_w = 8192; +- max_tex_h = 8192; +- max_dst_w = 8192; +- max_dst_h = 8192; ++ if (pSrcPixmap->drawable.width >= 16384 || ++ pSrcPixmap->drawable.height >= 16384) { ++ RADEON_FALLBACK(("Source w/h too large (%d,%d).\n", ++ pSrcPixmap->drawable.width, ++ pSrcPixmap->drawable.height)); ++ } + +- if (pSrcPixmap->drawable.width >= max_tex_w || +- pSrcPixmap->drawable.height >= max_tex_h) { +- RADEON_FALLBACK(("Source w/h too large (%d,%d).\n", +- pSrcPixmap->drawable.width, +- pSrcPixmap->drawable.height)); +- } ++ if (!EVERGREENCheckCompositeTexture(pSrcPicture, pDstPicture, op, 0)) ++ return FALSE; ++ } else if (pSrcPicture->pSourcePict->type != SourcePictTypeSolidFill) ++ RADEON_FALLBACK(("Gradient pictures not supported yet\n")); + + pDstPixmap = RADEONGetDrawablePixmap(pDstPicture->pDrawable); + +- if (pDstPixmap->drawable.width >= max_dst_w || +- pDstPixmap->drawable.height >= max_dst_h) { ++ if (pDstPixmap->drawable.width >= 16384 || ++ pDstPixmap->drawable.height >= 16384) { + RADEON_FALLBACK(("Dest w/h too large (%d,%d).\n", + pDstPixmap->drawable.width, + pDstPixmap->drawable.height)); +@@ -1089,38 +1090,35 @@ static Bool EVERGREENCheckComposite(int op, PicturePtr pSrcPicture, + if (pMaskPicture) { + PixmapPtr pMaskPixmap; + +- if (!pMaskPicture->pDrawable) +- RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n")); +- +- pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable); ++ if (pMaskPicture->pDrawable) { ++ pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable); + +- if (pMaskPixmap->drawable.width >= max_tex_w || +- pMaskPixmap->drawable.height >= max_tex_h) { +- RADEON_FALLBACK(("Mask w/h too large (%d,%d).\n", +- pMaskPixmap->drawable.width, +- pMaskPixmap->drawable.height)); +- } ++ if (pMaskPixmap->drawable.width >= 16384 || ++ pMaskPixmap->drawable.height >= 16384) { ++ RADEON_FALLBACK(("Mask w/h too large (%d,%d).\n", ++ pMaskPixmap->drawable.width, ++ pMaskPixmap->drawable.height)); ++ } + +- if (pMaskPicture->componentAlpha) { +- /* Check if it's component alpha that relies on a source alpha and +- * on the source value. We can only get one of those into the +- * single source value that we get to blend with. +- */ +- if (EVERGREENBlendOp[op].src_alpha && +- (EVERGREENBlendOp[op].blend_cntl & COLOR_SRCBLEND_mask) != +- (BLEND_ZERO << COLOR_SRCBLEND_shift)) { +- RADEON_FALLBACK(("Component alpha not supported with source " +- "alpha and source value blending.\n")); ++ if (pMaskPicture->componentAlpha) { ++ /* Check if it's component alpha that relies on a source alpha and ++ * on the source value. We can only get one of those into the ++ * single source value that we get to blend with. ++ */ ++ if (EVERGREENBlendOp[op].src_alpha && ++ (EVERGREENBlendOp[op].blend_cntl & COLOR_SRCBLEND_mask) != ++ (BLEND_ZERO << COLOR_SRCBLEND_shift)) { ++ RADEON_FALLBACK(("Component alpha not supported with source " ++ "alpha and source value blending.\n")); ++ } + } +- } + +- if (!EVERGREENCheckCompositeTexture(pMaskPicture, pDstPicture, op, 1)) +- return FALSE; ++ if (!EVERGREENCheckCompositeTexture(pMaskPicture, pDstPicture, op, 1)) ++ return FALSE; ++ } else if (pMaskPicture->pSourcePict->type != SourcePictTypeSolidFill) ++ RADEON_FALLBACK(("Gradient pictures not supported yet\n")); + } + +- if (!EVERGREENCheckCompositeTexture(pSrcPicture, pDstPicture, op, 0)) +- return FALSE; +- + if (!EVERGREENGetDestFormat(pDstPicture, &tmp1)) + return FALSE; + +@@ -1132,7 +1130,8 @@ static Bool EVERGREENPrepareComposite(int op, PicturePtr pSrcPicture, + PicturePtr pMaskPicture, PicturePtr pDstPicture, + PixmapPtr pSrc, PixmapPtr pMask, PixmapPtr pDst) + { +- ScrnInfoPtr pScrn = xf86Screens[pSrc->drawable.pScreen->myNum]; ++ ScreenPtr pScreen = pDst->drawable.pScreen; ++ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; + RADEONInfoPtr info = RADEONPTR(pScrn); + struct radeon_accel_state *accel_state = info->accel_state; + uint32_t dst_format; +@@ -1142,13 +1141,19 @@ static Bool EVERGREENPrepareComposite(int op, PicturePtr pSrcPicture, + struct r600_accel_object src_obj, mask_obj, dst_obj; + float *cbuf; + +- if (pDst->drawable.bitsPerPixel < 8 || pSrc->drawable.bitsPerPixel < 8) ++ if (pDst->drawable.bitsPerPixel < 8 || (pSrc && pSrc->drawable.bitsPerPixel < 8)) + return FALSE; + ++ if (!pSrc) { ++ pSrc = RADEONSolidPixmap(pScreen, pSrcPicture->pSourcePict->solidFill.color); ++ if (!pSrc) ++ RADEON_FALLBACK("Failed to create solid scratch pixmap\n"); ++ } ++ + src_obj.offset = 0; + dst_obj.offset = 0; +- src_obj.bo = radeon_get_pixmap_bo(pSrc); + dst_obj.bo = radeon_get_pixmap_bo(pDst); ++ src_obj.bo = radeon_get_pixmap_bo(pSrc); + dst_obj.surface = radeon_get_pixmap_surface(pDst); + src_obj.surface = radeon_get_pixmap_surface(pSrc); + dst_obj.tiling_flags = radeon_get_pixmap_tiling(pDst); +@@ -1166,7 +1171,15 @@ static Bool EVERGREENPrepareComposite(int op, PicturePtr pSrcPicture, + dst_obj.bpp = pDst->drawable.bitsPerPixel; + dst_obj.domain = RADEON_GEM_DOMAIN_VRAM; + +- if (pMask) { ++ if (pMaskPicture) { ++ if (!pMask) { ++ pMask = RADEONSolidPixmap(pScreen, pMaskPicture->pSourcePict->solidFill.color); ++ if (!pMask) { ++ if (!pSrcPicture->pDrawable) ++ pScreen->DestroyPixmap(pSrc); ++ RADEON_FALLBACK("Failed to create solid scratch pixmap\n"); ++ } ++ } + mask_obj.offset = 0; + mask_obj.bo = radeon_get_pixmap_bo(pMask); + mask_obj.tiling_flags = radeon_get_pixmap_tiling(pMask); +@@ -1363,11 +1376,9 @@ static Bool EVERGREENPrepareComposite(int op, PicturePtr pSrcPicture, + return TRUE; + } + +-static void EVERGREENDoneComposite(PixmapPtr pDst) ++static void EVERGREENFinishComposite(ScrnInfoPtr pScrn, PixmapPtr pDst, ++ struct radeon_accel_state *accel_state) + { +- ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum]; +- RADEONInfoPtr info = RADEONPTR(pScrn); +- struct radeon_accel_state *accel_state = info->accel_state; + int vtx_size; + + if (accel_state->vsync) +@@ -1381,6 +1392,22 @@ static void EVERGREENDoneComposite(PixmapPtr pDst) + evergreen_finish_op(pScrn, vtx_size); + } + ++static void EVERGREENDoneComposite(PixmapPtr pDst) ++{ ++ ScreenPtr pScreen = pDst->drawable.pScreen; ++ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; ++ RADEONInfoPtr info = RADEONPTR(pScrn); ++ struct radeon_accel_state *accel_state = info->accel_state; ++ ++ EVERGREENFinishComposite(pScrn, pDst, accel_state); ++ ++ if (!accel_state->src_pic->pDrawable) ++ pScreen->DestroyPixmap(accel_state->src_pix); ++ ++ if (accel_state->msk_pic && !accel_state->msk_pic->pDrawable) ++ pScreen->DestroyPixmap(accel_state->msk_pix); ++} ++ + static void EVERGREENComposite(PixmapPtr pDst, + int srcX, int srcY, + int maskX, int maskY, +@@ -1393,7 +1420,7 @@ static void EVERGREENComposite(PixmapPtr pDst, + float *vb; + + if (CS_FULL(info->cs)) { +- EVERGREENDoneComposite(info->accel_state->dst_pix); ++ EVERGREENFinishComposite(pScrn, pDst, info->accel_state); + radeon_cs_flush_indirect(pScrn); + EVERGREENPrepareComposite(info->accel_state->composite_op, + info->accel_state->src_pic, +-- +1.7.7.5 + diff --git a/testing/xf86-video-ati/0002-poor-man-s-solid-picture-support-for-r100.patch b/testing/xf86-video-ati/0002-poor-man-s-solid-picture-support-for-r100.patch new file mode 100644 index 000000000..3a2779446 --- /dev/null +++ b/testing/xf86-video-ati/0002-poor-man-s-solid-picture-support-for-r100.patch @@ -0,0 +1,182 @@ +From f36b911ecc31f689ddceeeb11d10eb7cb4a3428d Mon Sep 17 00:00:00 2001 +From: Alex Deucher <alexander.deucher@amd.com> +Date: Fri, 13 Apr 2012 13:24:46 -0400 +Subject: [PATCH 2/3] poor man's solid picture support for r100 + +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + src/radeon_exa_render.c | 101 +++++++++++++++++++++++++++-------------------- + 1 files changed, 58 insertions(+), 43 deletions(-) + +diff --git a/src/radeon_exa_render.c b/src/radeon_exa_render.c +index b6cc9e4..451a625 100644 +--- a/src/radeon_exa_render.c ++++ b/src/radeon_exa_render.c +@@ -338,17 +338,8 @@ static Bool R100CheckCompositeTexture(PicturePtr pPict, + int unit) + { + unsigned int repeatType = pPict->repeat ? pPict->repeatType : RepeatNone; +- int w = pPict->pDrawable->width; +- int h = pPict->pDrawable->height; + int i; + +- /* r100 limit should be 2048, there are issues with 2048 +- * see 197a62704742a4a19736c2637ac92d1dc5ab34ed +- */ +- +- if ((w > 2047) || (h > 2047)) +- RADEON_FALLBACK(("Picture w/h too large (%dx%d)\n", w, h)); +- + for (i = 0; i < sizeof(R100TexFormats) / sizeof(R100TexFormats[0]); i++) { + if (R100TexFormats[i].fmt == pPict->format) + break; +@@ -357,7 +348,7 @@ static Bool R100CheckCompositeTexture(PicturePtr pPict, + RADEON_FALLBACK(("Unsupported picture format 0x%x\n", + (int)pPict->format)); + +- if (!RADEONCheckTexturePOT(pPict, unit == 0)) ++ if (pPict->pDrawable && !RADEONCheckTexturePOT(pPict, unit == 0)) + return FALSE; + + if (pPict->filter != PictFilterNearest && +@@ -392,15 +383,24 @@ static Bool FUNC_NAME(R100TextureSetup)(PicturePtr pPict, PixmapPtr pPix, + { + RINFO_FROM_SCREEN(pPix->drawable.pScreen); + uint32_t txfilter, txformat, txoffset, txpitch; +- int w = pPict->pDrawable->width; +- int h = pPict->pDrawable->height; +- unsigned int repeatType = pPict->repeat ? pPict->repeatType : RepeatNone; +- Bool repeat = (repeatType == RepeatNormal || repeatType == RepeatReflect) && +- !(unit == 0 && (info->accel_state->need_src_tile_x || info->accel_state->need_src_tile_y)); +- int i; ++ unsigned int repeatType; ++ Bool repeat; ++ int i, w, h; + struct radeon_exa_pixmap_priv *driver_priv; + ACCEL_PREAMBLE(); + ++ if (pPict->pDrawable) { ++ w = pPict->pDrawable->width; ++ h = pPict->pDrawable->height; ++ repeatType = pPict->repeat ? pPict->repeatType : RepeatNone; ++ } else { ++ w = h = 1; ++ repeatType = RepeatNormal; ++ } ++ ++ repeat = (repeatType == RepeatNormal || repeatType == RepeatReflect) && ++ !(unit == 0 && (info->accel_state->need_src_tile_x || info->accel_state->need_src_tile_y)); ++ + txpitch = exaGetPixmapPitch(pPix); + txoffset = 0; + +@@ -510,22 +510,6 @@ static Bool R100CheckComposite(int op, PicturePtr pSrcPicture, + if (op >= sizeof(RadeonBlendOp) / sizeof(RadeonBlendOp[0])) + RADEON_FALLBACK(("Unsupported Composite op 0x%x\n", op)); + +- if (!pSrcPicture->pDrawable) +- RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n")); +- +- /* r100 limit should be 2048, there are issues with 2048 +- * see 197a62704742a4a19736c2637ac92d1dc5ab34ed +- */ +- +- pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable); +- +- if (pSrcPixmap->drawable.width > 2047 || +- pSrcPixmap->drawable.height > 2047) { +- RADEON_FALLBACK(("Source w/h too large (%d,%d).\n", +- pSrcPixmap->drawable.width, +- pSrcPixmap->drawable.height)); +- } +- + pDstPixmap = RADEONGetDrawablePixmap(pDstPicture->pDrawable); + + if (pDstPixmap->drawable.width > 2047 || +@@ -535,20 +519,35 @@ static Bool R100CheckComposite(int op, PicturePtr pSrcPicture, + pDstPixmap->drawable.height)); + } + ++ if (pSrcPicture->pDrawable) { ++ /* r100 limit should be 2048, there are issues with 2048 ++ * see 197a62704742a4a19736c2637ac92d1dc5ab34ed ++ */ ++ pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable); ++ ++ if (pSrcPixmap->drawable.width > 2047 || ++ pSrcPixmap->drawable.height > 2047) { ++ RADEON_FALLBACK(("Source w/h too large (%d,%d).\n", ++ pSrcPixmap->drawable.width, ++ pSrcPixmap->drawable.height)); ++ } ++ } else if (pSrcPicture->pSourcePict->type != SourcePictTypeSolidFill) ++ RADEON_FALLBACK(("Gradient pictures not supported yet\n")); ++ + if (pMaskPicture) { + PixmapPtr pMaskPixmap; + +- if (!pMaskPicture->pDrawable) +- RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n")); +- +- pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable); ++ if (pMaskPicture->pDrawable) { ++ pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable); + +- if (pMaskPixmap->drawable.width > 2047 || +- pMaskPixmap->drawable.height > 2047) { +- RADEON_FALLBACK(("Mask w/h too large (%d,%d).\n", +- pMaskPixmap->drawable.width, +- pMaskPixmap->drawable.height)); +- } ++ if (pMaskPixmap->drawable.width > 2047 || ++ pMaskPixmap->drawable.height > 2047) { ++ RADEON_FALLBACK(("Mask w/h too large (%d,%d).\n", ++ pMaskPixmap->drawable.width, ++ pMaskPixmap->drawable.height)); ++ } ++ } else if (pMaskPicture->pSourcePict->type != SourcePictTypeSolidFill) ++ RADEON_FALLBACK(("Gradient pictures not supported yet\n")); + + if (pMaskPicture->componentAlpha) { + /* Check if it's component alpha that relies on a source alpha and +@@ -624,7 +623,8 @@ static Bool FUNC_NAME(R100PrepareComposite)(int op, + PixmapPtr pMask, + PixmapPtr pDst) + { +- RINFO_FROM_SCREEN(pDst->drawable.pScreen); ++ ScreenPtr pScreen = pDst->drawable.pScreen; ++ RINFO_FROM_SCREEN(pScreen); + uint32_t dst_format, dst_pitch, colorpitch; + uint32_t pp_cntl, blendcntl, cblend, ablend; + int pixel_shift; +@@ -648,12 +648,27 @@ static Bool FUNC_NAME(R100PrepareComposite)(int op, + + CHECK_OFFSET(pDst, 0x0f, "destination"); + ++ if (!pSrc) { ++ pSrc = RADEONSolidPixmap(pScreen, cpu_to_le32(pSrcPicture->pSourcePict->solidFill.color)); ++ if (!pSrc) ++ RADEON_FALLBACK("Failed to create solid scratch pixmap\n"); ++ } ++ + if (((dst_pitch >> pixel_shift) & 0x7) != 0) + RADEON_FALLBACK(("Bad destination pitch 0x%x\n", (int)dst_pitch)); + + if (!RADEONSetupSourceTile(pSrcPicture, pSrc, FALSE, TRUE)) + return FALSE; + ++ if (pMaskPicture && !pMask) { ++ pMask = RADEONSolidPixmap(pScreen, cpu_to_le32(pMaskPicture->pSourcePict->solidFill.color)); ++ if (!pMask) { ++ if (!pSrcPicture->pDrawable) ++ pScreen->DestroyPixmap(pSrc); ++ RADEON_FALLBACK("Failed to create solid scratch pixmap\n"); ++ } ++ } ++ + RADEONPrepareCompositeCS(op, pSrcPicture, pMaskPicture, pDstPicture, + pSrc, pMask, pDst); + +-- +1.7.7.5 + diff --git a/testing/xf86-video-ati/0003-poor-man-s-solid-picture-support-for-r200.patch b/testing/xf86-video-ati/0003-poor-man-s-solid-picture-support-for-r200.patch new file mode 100644 index 000000000..0a448fc93 --- /dev/null +++ b/testing/xf86-video-ati/0003-poor-man-s-solid-picture-support-for-r200.patch @@ -0,0 +1,179 @@ +From c5c8310858f8018a1754f2457d7b102dc7d62b23 Mon Sep 17 00:00:00 2001 +From: Alex Deucher <alexander.deucher@amd.com> +Date: Fri, 13 Apr 2012 13:28:10 -0400 +Subject: [PATCH 3/3] poor man's solid picture support for r200 + +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + src/radeon_exa_render.c | 101 +++++++++++++++++++++++++++-------------------- + 1 files changed, 58 insertions(+), 43 deletions(-) + +diff --git a/src/radeon_exa_render.c b/src/radeon_exa_render.c +index 451a625..7f1a3ff 100644 +--- a/src/radeon_exa_render.c ++++ b/src/radeon_exa_render.c +@@ -756,17 +756,8 @@ static Bool R200CheckCompositeTexture(PicturePtr pPict, + int unit) + { + unsigned int repeatType = pPict->repeat ? pPict->repeatType : RepeatNone; +- int w = pPict->pDrawable->width; +- int h = pPict->pDrawable->height; + int i; + +- /* r200 limit should be 2048, there are issues with 2048 +- * see bug 19269 +- */ +- +- if ((w > 2047) || (h > 2047)) +- RADEON_FALLBACK(("Picture w/h too large (%dx%d)\n", w, h)); +- + for (i = 0; i < sizeof(R200TexFormats) / sizeof(R200TexFormats[0]); i++) + { + if (R200TexFormats[i].fmt == pPict->format) +@@ -776,7 +767,7 @@ static Bool R200CheckCompositeTexture(PicturePtr pPict, + RADEON_FALLBACK(("Unsupported picture format 0x%x\n", + (int)pPict->format)); + +- if (!RADEONCheckTexturePOT(pPict, unit == 0)) ++ if (pPict->pDrawable && !RADEONCheckTexturePOT(pPict, unit == 0)) + return FALSE; + + if (pPict->filter != PictFilterNearest && +@@ -809,15 +800,24 @@ static Bool FUNC_NAME(R200TextureSetup)(PicturePtr pPict, PixmapPtr pPix, + { + RINFO_FROM_SCREEN(pPix->drawable.pScreen); + uint32_t txfilter, txformat, txoffset, txpitch; +- int w = pPict->pDrawable->width; +- int h = pPict->pDrawable->height; +- unsigned int repeatType = pPict->repeat ? pPict->repeatType : RepeatNone; +- Bool repeat = (repeatType == RepeatNormal || repeatType == RepeatReflect) && +- !(unit == 0 && (info->accel_state->need_src_tile_x || info->accel_state->need_src_tile_y)); +- int i; ++ unsigned int repeatType; ++ Bool repeat; ++ int i, w, h; + struct radeon_exa_pixmap_priv *driver_priv; + ACCEL_PREAMBLE(); + ++ if (pPict->pDrawable) { ++ w = pPict->pDrawable->width; ++ h = pPict->pDrawable->height; ++ repeatType = pPict->repeat ? pPict->repeatType : RepeatNone; ++ } else { ++ w = h = 1; ++ repeatType = RepeatNormal; ++ } ++ ++ repeat = (repeatType == RepeatNormal || repeatType == RepeatReflect) && ++ !(unit == 0 && (info->accel_state->need_src_tile_x || info->accel_state->need_src_tile_y)); ++ + txpitch = exaGetPixmapPitch(pPix); + + txoffset = 0; +@@ -926,22 +926,6 @@ static Bool R200CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP + if (op >= sizeof(RadeonBlendOp) / sizeof(RadeonBlendOp[0])) + RADEON_FALLBACK(("Unsupported Composite op 0x%x\n", op)); + +- if (!pSrcPicture->pDrawable) +- RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n")); +- +- /* r200 limit should be 2048, there are issues with 2048 +- * see bug 19269 +- */ +- +- pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable); +- +- if (pSrcPixmap->drawable.width > 2047 || +- pSrcPixmap->drawable.height > 2047) { +- RADEON_FALLBACK(("Source w/h too large (%d,%d).\n", +- pSrcPixmap->drawable.width, +- pSrcPixmap->drawable.height)); +- } +- + pDstPixmap = RADEONGetDrawablePixmap(pDstPicture->pDrawable); + + if (pDstPixmap->drawable.width > 2047 || +@@ -951,20 +935,35 @@ static Bool R200CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP + pDstPixmap->drawable.height)); + } + ++ if (pSrcPicture->pDrawable) { ++ /* r200 limit should be 2048, there are issues with 2048 ++ * see 197a62704742a4a19736c2637ac92d1dc5ab34ed ++ */ ++ pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable); ++ ++ if (pSrcPixmap->drawable.width > 2047 || ++ pSrcPixmap->drawable.height > 2047) { ++ RADEON_FALLBACK(("Source w/h too large (%d,%d).\n", ++ pSrcPixmap->drawable.width, ++ pSrcPixmap->drawable.height)); ++ } ++ } else if (pSrcPicture->pSourcePict->type != SourcePictTypeSolidFill) ++ RADEON_FALLBACK(("Gradient pictures not supported yet\n")); ++ + if (pMaskPicture) { + PixmapPtr pMaskPixmap; + +- if (!pMaskPicture->pDrawable) +- RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n")); +- +- pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable); ++ if (pMaskPicture->pDrawable) { ++ pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable); + +- if (pMaskPixmap->drawable.width > 2047 || +- pMaskPixmap->drawable.height > 2047) { +- RADEON_FALLBACK(("Mask w/h too large (%d,%d).\n", +- pMaskPixmap->drawable.width, +- pMaskPixmap->drawable.height)); +- } ++ if (pMaskPixmap->drawable.width > 2047 || ++ pMaskPixmap->drawable.height > 2047) { ++ RADEON_FALLBACK(("Mask w/h too large (%d,%d).\n", ++ pMaskPixmap->drawable.width, ++ pMaskPixmap->drawable.height)); ++ } ++ } else if (pMaskPicture->pSourcePict->type != SourcePictTypeSolidFill) ++ RADEON_FALLBACK(("Gradient pictures not supported yet\n")); + + if (pMaskPicture->componentAlpha) { + /* Check if it's component alpha that relies on a source alpha and +@@ -997,7 +996,8 @@ static Bool FUNC_NAME(R200PrepareComposite)(int op, PicturePtr pSrcPicture, + PicturePtr pMaskPicture, PicturePtr pDstPicture, + PixmapPtr pSrc, PixmapPtr pMask, PixmapPtr pDst) + { +- RINFO_FROM_SCREEN(pDst->drawable.pScreen); ++ ScreenPtr pScreen = pDst->drawable.pScreen; ++ RINFO_FROM_SCREEN(pScreen); + uint32_t dst_format, dst_pitch; + uint32_t pp_cntl, blendcntl, cblend, ablend, colorpitch; + int pixel_shift; +@@ -1024,9 +1024,24 @@ static Bool FUNC_NAME(R200PrepareComposite)(int op, PicturePtr pSrcPicture, + if (((dst_pitch >> pixel_shift) & 0x7) != 0) + RADEON_FALLBACK(("Bad destination pitch 0x%x\n", (int)dst_pitch)); + ++ if (!pSrc) { ++ pSrc = RADEONSolidPixmap(pScreen, cpu_to_le32(pSrcPicture->pSourcePict->solidFill.color)); ++ if (!pSrc) ++ RADEON_FALLBACK("Failed to create solid scratch pixmap\n"); ++ } ++ + if (!RADEONSetupSourceTile(pSrcPicture, pSrc, FALSE, TRUE)) + return FALSE; + ++ if (pMaskPicture && !pMask) { ++ pMask = RADEONSolidPixmap(pScreen, cpu_to_le32(pMaskPicture->pSourcePict->solidFill.color)); ++ if (!pMask) { ++ if (!pSrcPicture->pDrawable) ++ pScreen->DestroyPixmap(pSrc); ++ RADEON_FALLBACK("Failed to create solid scratch pixmap\n"); ++ } ++ } ++ + RADEONPrepareCompositeCS(op, pSrcPicture, pMaskPicture, pDstPicture, + pSrc, pMask, pDst); + +-- +1.7.7.5 + diff --git a/testing/xf86-video-ati/PKGBUILD b/testing/xf86-video-ati/PKGBUILD index e4214bf47..62e12eb83 100644 --- a/testing/xf86-video-ati/PKGBUILD +++ b/testing/xf86-video-ati/PKGBUILD @@ -1,10 +1,10 @@ -# $Id: PKGBUILD 156127 2012-04-14 09:33:09Z andyrtr $ +# $Id: PKGBUILD 156180 2012-04-15 10:27:42Z andyrtr $ # Maintainer: Jan de Groot <jgc@archlinux.org> # Contributor: Alexander Baldeck <alexander@archlinux.org> pkgname=xf86-video-ati pkgver=6.14.4 -pkgrel=3 +pkgrel=4 pkgdesc="X.org ati video driver" arch=('i686' 'x86_64') url="http://xorg.freedesktop.org/" @@ -15,18 +15,29 @@ conflicts=('xorg-server<1.11.99.902') groups=('xorg-drivers' 'xorg') options=('!libtool') source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2 - solid_pictures_fixes.diff - git_fixes.diff) + git_fixes.diff + 0000-poor-man-s-solid-picture-support-for-r300-r600.patch + 0001-poor-man-s-solid-picture-support-for-evergreen.patch + 0002-poor-man-s-solid-picture-support-for-r100.patch + 0003-poor-man-s-solid-picture-support-for-r200.patch) sha1sums=('75ad000bc00599e1797134f2d20d3094cba6af92' - '480b7360a5e22661145430f21089ef82e3cd2d25' - '8b774e2f0310075cff2b7d874b0bed38d6245769') + '8b774e2f0310075cff2b7d874b0bed38d6245769' + '787f88c428f56ca6e96ba5eaf043a30bddfd0e23' + '69359a6623fe0f2214790c8ad40cac1a680a3825' + 'c0709ab82728e34838a8aeead7d1b79b7faf09bd' + '77a519e250c27a9fb94eeb52da655eed7c5f2eca') build() { cd "${srcdir}/${pkgname}-${pkgver}" patch -Np1 -i ${srcdir}/git_fixes.diff + # fix rendering issues with recent cairo - testing attemp taken from https://bugs.freedesktop.org/show_bug.cgi?id=47266 - # attachements 59943-59946 - patch -Np1 -i ${srcdir}/solid_pictures_fixes.diff + # and http://lists.x.org/archives/xorg-driver-ati/2012-April/022724.html + patch -Np1 -i ${srcdir}/0000-poor-man-s-solid-picture-support-for-r300-r600.patch + patch -Np1 -i ${srcdir}/0001-poor-man-s-solid-picture-support-for-evergreen.patch + patch -Np1 -i ${srcdir}/0002-poor-man-s-solid-picture-support-for-r100.patch + patch -Np1 -i ${srcdir}/0003-poor-man-s-solid-picture-support-for-r200.patch + ./configure --prefix=/usr --enable-dri make } diff --git a/testing/xorg-server/10-quirks.conf b/testing/xorg-server/10-quirks.conf new file mode 100644 index 000000000..7afad22dc --- /dev/null +++ b/testing/xorg-server/10-quirks.conf @@ -0,0 +1,10 @@ +# Collection of quirks and blacklist/whitelists for specific devices. + + +# Accelerometer device, posts data through ABS_X/ABS_Y, making X unusable +# http://bugs.freedesktop.org/show_bug.cgi?id=22442 +Section "InputClass" + Identifier "ThinkPad HDAPS accelerometer blacklist" + MatchProduct "ThinkPad HDAPS accelerometer data" + Option "Ignore" "on" +EndSection diff --git a/testing/xorg-server/EXA_Fall_back_earlier_and_more_thoroughly_from_exaGlyphsV2.diff b/testing/xorg-server/EXA_Fall_back_earlier_and_more_thoroughly_from_exaGlyphsV2.diff new file mode 100644 index 000000000..12c110151 --- /dev/null +++ b/testing/xorg-server/EXA_Fall_back_earlier_and_more_thoroughly_from_exaGlyphsV2.diff @@ -0,0 +1,116 @@ +--- xorg-server-1.12.1/exa/exa_glyphs.c 2012-03-30 04:57:25.000000000 +0200 ++++ xorg-server-1.12.1/exa_glyphs.c.new 2012-04-15 11:48:51.683214230 +0200 +@@ -686,6 +686,7 @@ + PixmapPtr pMaskPixmap = 0; + PicturePtr pMask = NULL; + ScreenPtr pScreen = pDst->pDrawable->pScreen; ++ ExaScreenPriv(pScreen); + int width = 0, height = 0; + int x, y; + int first_xOff = list->xOff, first_yOff = list->yOff; +@@ -697,7 +698,6 @@ + ExaGlyphBuffer buffer; + + if (maskFormat) { +- ExaScreenPriv(pScreen); + GCPtr pGC; + xRectangle rect; + +@@ -719,22 +719,20 @@ + maskFormat->depth, + CREATE_PIXMAP_USAGE_SCRATCH); + if (!pMaskPixmap) +- return; ++ goto fallback; + component_alpha = NeedsComponent(maskFormat->format); + pMask = CreatePicture(0, &pMaskPixmap->drawable, + maskFormat, CPComponentAlpha, &component_alpha, + serverClient, &error); +- if (!pMask || +- (!component_alpha && pExaScr->info->CheckComposite && +- !(*pExaScr->info->CheckComposite) (PictOpAdd, pSrc, NULL, pMask))) ++ (*pScreen->DestroyPixmap) (pMaskPixmap); ++ if (!pMask) ++ goto fallback; ++ ++ if (!component_alpha && pExaScr->info->CheckComposite && ++ !(*pExaScr->info->CheckComposite) (PictOpAdd, pSrc, NULL, pMask)) + { + PictFormatPtr argbFormat; + +- (*pScreen->DestroyPixmap) (pMaskPixmap); +- +- if (!pMask) +- return; +- + /* The driver can't seem to composite to a8, let's try argb (but + * without component-alpha) */ + FreePicture((pointer) pMask, (XID) 0); +@@ -748,15 +746,25 @@ + maskFormat->depth, + CREATE_PIXMAP_USAGE_SCRATCH); + if (!pMaskPixmap) +- return; ++ goto fallback; + + pMask = CreatePicture(0, &pMaskPixmap->drawable, maskFormat, 0, 0, + serverClient, &error); +- if (!pMask) { +- (*pScreen->DestroyPixmap) (pMaskPixmap); +- return; +- } ++ (*pScreen->DestroyPixmap) (pMaskPixmap); ++ if (!pMask) ++ goto fallback; + } ++ ++ if (pExaScr->info->CheckComposite && ++ (!(*pExaScr->info->CheckComposite) (PictOpAdd, pSrc, NULL, pMask) || ++ (!(*pExaScr->info->CheckComposite) (op, pSrc, pMask, pDst) && ++ (op != PictOpOver || ++ !(*pExaScr->info->CheckComposite) (PictOpOutReverse, pSrc, pMask, pDst) || ++ !(*pExaScr->info->CheckComposite) (PictOpOver, pSrc, pMask, pDst))))) { ++ FreePicture ((pointer) pMask, (XID) 0); ++ goto fallback; ++ } ++ + pGC = GetScratchGC(pMaskPixmap->drawable.depth, pScreen); + ValidateGC(&pMaskPixmap->drawable, pGC); + rect.x = 0; +@@ -769,6 +777,13 @@ + y = -extents.y1; + } + else { ++ if (pExaScr->info->CheckComposite && ++ !(*pExaScr->info->CheckComposite) (op, pSrc, NULL, pDst) && ++ (op != PictOpOver || ++ !(*pExaScr->info->CheckComposite) (PictOpOutReverse, pSrc, NULL, pDst) || ++ !(*pExaScr->info->CheckComposite) (PictOpOver, pSrc, NULL, pDst))) ++ goto fallback; ++ + x = 0; + y = 0; + } +@@ -834,6 +849,10 @@ + xSrc + x - first_xOff, + ySrc + y - first_yOff, 0, 0, x, y, width, height); + FreePicture((pointer) pMask, (XID) 0); +- (*pScreen->DestroyPixmap) (pMaskPixmap); + } ++ ++ return; ++ ++fallback: ++ ExaCheckGlyphs(op, pSrc, pDst, maskFormat, xSrc, ySrc, nlist, list, glyphs); + } +--- xorg-server-1.12.1/exa/exa_render.c 2012-03-30 04:57:25.000000000 +0200 ++++ xorg-server-1.12.1/exa_render.c.new 2012-04-15 11:50:35.272482047 +0200 +@@ -878,7 +878,7 @@ + Bool saveMaskRepeat = pMask ? pMask->repeat : 0; + RegionRec region; + +- if (pExaScr->swappedOut) ++ if (pExaScr->fallback_counter || pExaScr->swappedOut) + goto fallback; + + /* Remove repeat in source if useless */ diff --git a/testing/xorg-server/PKGBUILD b/testing/xorg-server/PKGBUILD new file mode 100644 index 000000000..557f181fe --- /dev/null +++ b/testing/xorg-server/PKGBUILD @@ -0,0 +1,201 @@ +# $Id: PKGBUILD 156178 2012-04-15 10:04:10Z andyrtr $ +# Maintainer: Jan de Groot <jgc@archlinux.org> + +pkgbase=xorg-server +pkgname=('xorg-server' 'xorg-server-xephyr' 'xorg-server-xdmx' 'xorg-server-xvfb' 'xorg-server-xnest' 'xorg-server-common' 'xorg-server-devel') +pkgver=1.12.1 +pkgrel=2 +arch=('i686' 'x86_64') +license=('custom') +url="http://xorg.freedesktop.org" +makedepends=('pixman' 'libx11' 'mesa' 'libgl' 'xf86driproto' 'xcmiscproto' 'xtrans' 'bigreqsproto' 'randrproto' 'inputproto' 'fontsproto' 'videoproto' + 'compositeproto' 'recordproto' 'scrnsaverproto' 'resourceproto' 'xineramaproto' 'libxkbfile' 'libxfont' 'renderproto' 'libpciaccess' + 'libxv' 'xf86dgaproto' 'libxmu' 'libxrender' 'libxi' 'dmxproto' 'libxaw' 'libdmx' 'libxtst' 'libxres' 'xorg-xkbcomp' 'xorg-util-macros' + 'xorg-font-util' 'glproto' 'dri2proto' 'udev' 'libgcrypt') +options=('!libtool') +source=(${url}/releases/individual/xserver/${pkgbase}-${pkgver}.tar.bz2 + autoconfig-nvidia.patch + autoconfig-sis.patch + EXA_Fall_back_earlier_and_more_thoroughly_from_exaGlyphsV2.diff + #git-fixes.patch + xvfb-run + xvfb-run.1 + 10-quirks.conf) +sha1sums=('922b963901f4711449b53fb32ce3e14f5b642766' + '63836e5cfb4ae7353fb2e31239a544409c7ead32' + '175de5630b43dbc97778adfba5563b7fdd77f11f' + '4acb39587f73bcbb9a331377d6ef99cb73eb95a8' + 'c94f742d3f9cabf958ae58e4015d9dd185aabedc' + '6838fc00ef4618c924a77e0fb03c05346080908a' + '993798f3d22ad672d769dae5f48d1fa068d5578f') + +build() { + cd "${srcdir}/${pkgbase}-${pkgver}" + + # Use nouveau/nv/nvidia drivers for nvidia devices + patch -Np1 -i "${srcdir}/autoconfig-nvidia.patch" + + # Use unofficial imedia SiS driver for supported SiS devices + patch -Np0 -i "${srcdir}/autoconfig-sis.patch" + + # fix glitches and crashes with EXA and cairo 1.12 + # taken from https://bugs.freedesktop.org/show_bug.cgi?id=47266 + # and reworked for 1.12.1 changes + patch -Np1 -i ${srcdir}/EXA_Fall_back_earlier_and_more_thoroughly_from_exaGlyphsV2.diff + + # Add post-release patches from 1.11 branch +# patch -Np1 -i "${srcdir}/git-fixes.patch" + + autoreconf -fi + ./configure --prefix=/usr \ + --enable-ipv6 \ + --enable-dri \ + --enable-dmx \ + --enable-xvfb \ + --enable-xnest \ + --enable-composite \ + --enable-xcsecurity \ + --enable-xorg \ + --enable-xephyr \ + --enable-glx-tls \ + --enable-kdrive \ + --enable-kdrive-evdev \ + --enable-kdrive-kbd \ + --enable-kdrive-mouse \ + --enable-install-setuid \ + --enable-config-udev \ + --disable-config-dbus \ + --enable-record \ + --disable-xfbdev \ + --disable-xfake \ + --disable-static \ + --sysconfdir=/etc/X11 \ + --localstatedir=/var \ + --with-xkb-path=/usr/share/X11/xkb \ + --with-xkb-output=/var/lib/xkb \ + --with-fontrootdir=/usr/share/fonts + make + + # Disable subdirs for make install rule to make splitting easier + sed -e 's/^DMX_SUBDIRS =.*/DMX_SUBDIRS =/' \ + -e 's/^XVFB_SUBDIRS =.*/XVFB_SUBDIRS =/' \ + -e 's/^XNEST_SUBDIRS =.*/XNEST_SUBDIRS = /' \ + -e 's/^KDRIVE_SUBDIRS =.*/KDRIVE_SUBDIRS =/' \ + -i hw/Makefile +} + +package_xorg-server-common() { + pkgdesc="Xorg server common files" + depends=('xkeyboard-config' 'xorg-xkbcomp' 'xorg-setxkbmap' 'xorg-fonts-misc') + + cd "${srcdir}/${pkgbase}-${pkgver}" + install -m755 -d "${pkgdir}/usr/share/licenses/xorg-server-common" + install -m644 COPYING "${pkgdir}/usr/share/licenses/xorg-server-common" + + make -C xkb DESTDIR="${pkgdir}" install-data + + install -m755 -d "${pkgdir}/usr/share/man/man1" + install -m644 man/Xserver.1 "${pkgdir}/usr/share/man/man1/" + + install -m755 -d "${pkgdir}/usr/lib/xorg" + install -m644 dix/protocol.txt "${pkgdir}/usr/lib/xorg/" +} + +package_xorg-server() { + pkgdesc="Xorg X server" + depends=(libxdmcp libxfont udev libpciaccess libdrm pixman libgcrypt libxau xorg-server-common xf86-input-evdev) + backup=('etc/X11/xorg.conf.d/10-evdev.conf' 'etc/X11/xorg.conf.d/10-quirks.conf') + provides=('x-server') + groups=('xorg') + conflicts=('nvidia-utils<=290.10') + + cd "${srcdir}/${pkgbase}-${pkgver}" + make DESTDIR="${pkgdir}" install + + install -m755 -d "${pkgdir}/etc/X11" + mv "${pkgdir}/usr/share/X11/xorg.conf.d" "${pkgdir}/etc/X11/" + install -m644 "${srcdir}/10-quirks.conf" "${pkgdir}/etc/X11/xorg.conf.d/" + + rmdir "${pkgdir}/usr/share/X11" + + # Needed for non-mesa drivers, libgl will restore it + mv "${pkgdir}/usr/lib/xorg/modules/extensions/libglx.so" \ + "${pkgdir}/usr/lib/xorg/modules/extensions/libglx.xorg" + + rm -rf "${pkgdir}/var" + + rm -f "${pkgdir}/usr/share/man/man1/Xserver.1" + rm -f "${pkgdir}/usr/lib/xorg/protocol.txt" + + install -m755 -d "${pkgdir}/usr/share/licenses/xorg-server" + ln -sf ../xorg-server-common/COPYING "${pkgdir}/usr/share/licenses/xorg-server/COPYING" + + rm -rf "${pkgdir}/usr/lib/pkgconfig" + rm -rf "${pkgdir}/usr/include" + rm -rf "${pkgdir}/usr/share/aclocal" +} + +package_xorg-server-xephyr() { + pkgdesc="A nested X server that runs as an X application" + depends=(libxfont libgl libgcrypt libxv pixman xorg-server-common) + + cd "${srcdir}/${pkgbase}-${pkgver}/hw/kdrive" + make DESTDIR="${pkgdir}" install + + install -m755 -d "${pkgdir}/usr/share/licenses/xorg-server-xephyr" + ln -sf ../xorg-server-common/COPYING "${pkgdir}/usr/share/licenses/xorg-server-xephyr/COPYING" +} + +package_xorg-server-xvfb() { + pkgdesc="Virtual framebuffer X server" + depends=(libxfont libxdmcp libxau libgcrypt pixman xorg-server-common) + + cd "${srcdir}/${pkgbase}-${pkgver}/hw/vfb" + make DESTDIR="${pkgdir}" install + + install -m755 "${srcdir}/xvfb-run" "${pkgdir}/usr/bin/" + install -m644 "${srcdir}/xvfb-run.1" "${pkgdir}/usr/share/man/man1/" + + install -m755 -d "${pkgdir}/usr/share/licenses/xorg-server-xvfb" + ln -sf ../xorg-server-common/COPYING "${pkgdir}/usr/share/licenses/xorg-server-xvfb/COPYING" +} + +package_xorg-server-xnest() { + pkgdesc="A nested X server that runs as an X application" + depends=(libxfont libxext libgcrypt pixman xorg-server-common) + + cd "${srcdir}/${pkgbase}-${pkgver}/hw/xnest" + make DESTDIR="${pkgdir}" install + + install -m755 -d "${pkgdir}/usr/share/licenses/xorg-server-xnest" + ln -sf ../xorg-server-common/COPYING "${pkgdir}/usr/share/licenses/xorg-server-xnest/COPYING" +} + +package_xorg-server-xdmx() { + pkgdesc="Distributed Multihead X Server and utilities" + depends=(libxfont libxi libgcrypt libxaw libxrender libdmx libxfixes pixman xorg-server-common) + + cd "${srcdir}/${pkgbase}-${pkgver}/hw/dmx" + make DESTDIR="${pkgdir}" install + + install -m755 -d "${pkgdir}/usr/share/licenses/xorg-server-xdmx" + ln -sf ../xorg-server-common/COPYING "${pkgdir}/usr/share/licenses/xorg-server-xdmx/COPYING" +} + +package_xorg-server-devel() { + pkgdesc="Development files for the X.Org X server" + depends=(xproto randrproto renderproto xextproto inputproto kbproto fontsproto videoproto dri2proto xineramaproto xorg-util-macros pixman libpciaccess) + + cd "${srcdir}/${pkgbase}-${pkgver}" + make DESTDIR="${pkgdir}" install + + rm -rf "${pkgdir}/usr/bin" + rm -rf "${pkgdir}/usr/share/man" + rm -rf "${pkgdir}/usr/share/doc" + rm -rf "${pkgdir}/usr/share/X11" + rm -rf "${pkgdir}/usr/lib/xorg" + rm -rf "${pkgdir}/var" + + install -m755 -d "${pkgdir}/usr/share/licenses/xorg-server-devel" + ln -sf ../xorg-server-common/COPYING "${pkgdir}/usr/share/licenses/xorg-server-devel/COPYING" +} diff --git a/testing/xorg-server/autoconfig-nvidia.patch b/testing/xorg-server/autoconfig-nvidia.patch new file mode 100644 index 000000000..6d5220ac7 --- /dev/null +++ b/testing/xorg-server/autoconfig-nvidia.patch @@ -0,0 +1,28 @@ +diff -Nur xorg-server-1.11.99.902.orig/hw/xfree86/common/xf86pciBus.c xorg-server-1.11.99.902/hw/xfree86/common/xf86pciBus.c +--- xorg-server-1.11.99.902.orig/hw/xfree86/common/xf86pciBus.c 2012-02-10 10:10:37.583014924 +0000 ++++ xorg-server-1.11.99.902/hw/xfree86/common/xf86pciBus.c 2012-02-10 11:16:07.148971317 +0000 +@@ -1144,7 +1144,23 @@ + int idx = 0; + + #ifdef __linux__ +- driverList[idx++] = "nouveau"; ++ switch (dev->device_id) ++ { ++ /* NV1 */ ++ case 0x0008: ++ case 0x0009: ++ driverList[idx++] = "vesa"; ++ break; ++ /* NV3 */ ++ case 0x0018: ++ case 0x0019: ++ driverList[idx++] = "nouveau"; ++ break; ++ default: ++ driverList[idx++] = "nouveau"; ++ driverList[idx++] = "nvidia"; ++ break; ++ } + #endif + driverList[idx++] = "nv"; + break; diff --git a/testing/xorg-server/autoconfig-sis.patch b/testing/xorg-server/autoconfig-sis.patch new file mode 100644 index 000000000..0b50049db --- /dev/null +++ b/testing/xorg-server/autoconfig-sis.patch @@ -0,0 +1,21 @@ +--- hw/xfree86/common/xf86pciBus.c.orig 2011-09-24 10:53:45.421697668 +0000 ++++ hw/xfree86/common/xf86pciBus.c 2011-09-24 10:55:56.416250708 +0000 +@@ -1200,9 +1200,15 @@ + break; + } + break; +- case 0x1039: +- driverList[0] = "sis"; +- break; ++ case 0x1039: ++ switch (dev->device_id) ++ { ++ case 0x6350: case 0x6351: ++ driverList[0] = "sisimedia"; driverList[1] = "sis"; break; ++ default: ++ driverList[0] = "sis"; break; ++ } ++ break; + case 0x126f: + driverList[0] = "siliconmotion"; + break; diff --git a/testing/xorg-server/git-fixes.patch b/testing/xorg-server/git-fixes.patch new file mode 100644 index 000000000..27da61eca --- /dev/null +++ b/testing/xorg-server/git-fixes.patch @@ -0,0 +1,161 @@ +From 89626304ea1ad316c5b7145a40f09377148cff21 Mon Sep 17 00:00:00 2001 +From: Dave Airlie <airlied@redhat.com> +Date: Thu, 20 Oct 2011 13:43:01 +0000 +Subject: xf86Crtc: handle no outputs with no modes harder. + +If you started an X server with no connected outputs, we pick a default +1024x768 mode, however if you then ran an xvidmode using app against that +server it would segfault the server due to not finding any valid modes. + +This was due to the no output mode set code, only adding the modes to the +scrn->modes once, when something called randr 1.2 xf86SetScrnInfoModes would +get called and remove all the modes and we'd end up with 0. + +This change fixes xf86SetScrnInfoModes to always report a scrn mode of at +least 1024x768, and pushes the initial configuration to just call it instead +of setting up the mode itself. + +Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=746926 + +I've seen other bugs like this on other distros so it might also actually fix them. + +Signed-off-by: Dave Airlie <airlied@redhat.com> +Reviewed-by: Keith Packard <keithp@keithp.com> +Signed-off-by: Keith Packard <keithp@keithp.com> +(cherry picked from commit 17416e88dcfcc584fe5f87580d5d2b719b3521c3) +--- +diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c +index d75cd77..8906806 100644 +--- a/hw/xfree86/modes/xf86Crtc.c ++++ b/hw/xfree86/modes/xf86Crtc.c +@@ -1915,19 +1915,25 @@ xf86SetScrnInfoModes (ScrnInfoPtr scrn) + break; + } + +- if (scrn->modes != NULL) { +- /* For some reason, scrn->modes is circular, unlike the other mode +- * lists. How great is that? +- */ +- for (last = scrn->modes; last && last->next; last = last->next) +- ; +- last->next = scrn->modes; +- scrn->modes->prev = last; +- if (mode) { +- while (scrn->modes != mode) +- scrn->modes = scrn->modes->next; +- } ++ if (!scrn->modes) { ++ scrn->modes = xf86ModesAdd(scrn->modes, ++ xf86CVTMode(scrn->display->virtualX, ++ scrn->display->virtualY, ++ 60, 0, 0)); ++ } ++ ++ /* For some reason, scrn->modes is circular, unlike the other mode ++ * lists. How great is that? ++ */ ++ for (last = scrn->modes; last && last->next; last = last->next) ++ ; ++ last->next = scrn->modes; ++ scrn->modes->prev = last; ++ if (mode) { ++ while (scrn->modes != mode) ++ scrn->modes = scrn->modes->next; + } ++ + scrn->currentMode = scrn->modes; + #ifdef XFreeXDGA + if (scrn->pScreen) +@@ -2529,16 +2535,7 @@ xf86InitialConfiguration (ScrnInfoPtr scrn, Bool canGrow) + width, height); + } + +- if (have_outputs) { +- /* Mirror output modes to scrn mode list */ +- xf86SetScrnInfoModes (scrn); +- } else { +- /* Clear any existing modes from scrn->modes */ +- while (scrn->modes != NULL) +- xf86DeleteMode(&scrn->modes, scrn->modes); +- scrn->modes = xf86ModesAdd(scrn->modes, +- xf86CVTMode(width, height, 60, 0, 0)); +- } ++ xf86SetScrnInfoModes (scrn); + + success = TRUE; + bailout: +-- +cgit v0.9.0.2-2-gbebe +From 97f2ae60fc0cc755abd8b88df826fcb1a20464fe Mon Sep 17 00:00:00 2001 +From: Christopher Yeleighton <giecrilj@stegny.2a.pl> +Date: Tue, 25 Oct 2011 01:47:06 +0000 +Subject: Bug 38420: Xvfb crashes in miInitVisuals() when started with depth=2 + +https://bugs.freedesktop.org/show_bug.cgi?id=38420 + +Exit with fatal error message, not segfault. + +Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> +Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com> +Signed-off-by: Keith Packard <keithp@keithp.com> +(cherry picked from commit 7d50211ab57a35910d79fc3f67ae89aff91fa995) +--- +diff --git a/hw/vfb/InitOutput.c b/hw/vfb/InitOutput.c +index 31ed505..dce3f84 100644 +--- a/hw/vfb/InitOutput.c ++++ b/hw/vfb/InitOutput.c +@@ -864,6 +864,8 @@ vfbScreenInit(int index, ScreenPtr pScreen, int argc, char **argv) + (1 << DirectColor)), + 10, TrueColor, 0x3ff00000, 0x000ffc00, 0x000003ff); + break; ++ default: ++ return FALSE; + } + + miSetPixmapDepths (); +-- +cgit v0.9.0.2-2-gbebe +From 34bb83b9df20ff63dbb147ed661f39efb8bae8e4 Mon Sep 17 00:00:00 2001 +From: Peter Hutterer <peter.hutterer@who-t.net> +Date: Mon, 24 Oct 2011 02:00:32 +0000 +Subject: dix: block signals when closing all devices + +When closing down all devices, we manually unset master for all attached +devices, but the device's sprite info still points to the master's sprite +info. This leaves us a window where the master is freed already but the +device isn't yet. A signal during that window causes dereference of the +already freed spriteInfo in mieqEnqueue's EnqueueScreen macro. + +Simply block signals when removing all devices. It's not like we're really +worrying about high-responsive input at this stage. + +https://bugzilla.redhat.com/show_bug.cgi?id=737031 + +Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> +Reviewed-by: Julien Cristau <jcristau@debian.org> +(cherry picked from commit d7c44a7c9760449bef263413ad3b20f19b1dc95a) +--- +diff --git a/dix/devices.c b/dix/devices.c +index 0ccf252..cbdd4ea 100644 +--- a/dix/devices.c ++++ b/dix/devices.c +@@ -982,6 +982,8 @@ CloseDownDevices(void) + { + DeviceIntPtr dev; + ++ OsBlockSignals(); ++ + /* Float all SDs before closing them. Note that at this point resources + * (e.g. cursors) have been freed already, so we can't just call + * AttachDevice(NULL, dev, NULL). Instead, we have to forcibly set master +@@ -1004,6 +1006,8 @@ CloseDownDevices(void) + inputInfo.keyboard = NULL; + inputInfo.pointer = NULL; + XkbDeleteRulesDflts(); ++ ++ OsReleaseSignals(); + } + + /** +-- +cgit v0.9.0.2-2-gbebe diff --git a/testing/xorg-server/xvfb-run b/testing/xorg-server/xvfb-run new file mode 100644 index 000000000..4c2f4e0d3 --- /dev/null +++ b/testing/xorg-server/xvfb-run @@ -0,0 +1,180 @@ +#!/bin/sh + +# $Id: xvfb-run 2027 2004-11-16 14:54:16Z branden $ + +# This script starts an instance of Xvfb, the "fake" X server, runs a command +# with that server available, and kills the X server when done. The return +# value of the command becomes the return value of this script. +# +# If anyone is using this to build a Debian package, make sure the package +# Build-Depends on xvfb, xbase-clients, and xfonts-base. + +set -e + +PROGNAME=xvfb-run +SERVERNUM=99 +AUTHFILE= +ERRORFILE=/dev/null +STARTWAIT=3 +XVFBARGS="-screen 0 640x480x8" +LISTENTCP="-nolisten tcp" +XAUTHPROTO=. + +# Query the terminal to establish a default number of columns to use for +# displaying messages to the user. This is used only as a fallback in the event +# the COLUMNS variable is not set. ($COLUMNS can react to SIGWINCH while the +# script is running, and this cannot, only being calculated once.) +DEFCOLUMNS=$(stty size 2>/dev/null | awk '{print $2}') || true +if ! expr "$DEFCOLUMNS" : "[[:digit:]]\+$" >/dev/null 2>&1; then + DEFCOLUMNS=80 +fi + +# Display a message, wrapping lines at the terminal width. +message () { + echo "$PROGNAME: $*" | fmt -t -w ${COLUMNS:-$DEFCOLUMNS} +} + +# Display an error message. +error () { + message "error: $*" >&2 +} + +# Display a usage message. +usage () { + if [ -n "$*" ]; then + message "usage error: $*" + fi + cat <<EOF +Usage: $PROGNAME [OPTION ...] COMMAND +Run COMMAND (usually an X client) in a virtual X server environment. +Options: +-a --auto-servernum try to get a free server number, starting at + --server-num +-e FILE --error-file=FILE file used to store xauth errors and Xvfb + output (default: $ERRORFILE) +-f FILE --auth-file=FILE file used to store auth cookie + (default: ./.Xauthority) +-h --help display this usage message and exit +-n NUM --server-num=NUM server number to use (default: $SERVERNUM) +-l --listen-tcp enable TCP port listening in the X server +-p PROTO --xauth-protocol=PROTO X authority protocol name to use + (default: xauth command's default) +-s ARGS --server-args=ARGS arguments (other than server number and + "-nolisten tcp") to pass to the Xvfb server + (default: "$XVFBARGS") +-w DELAY --wait=DELAY delay in seconds to wait for Xvfb to start + before running COMMAND (default: $STARTWAIT) +EOF +} + +# Find a free server number by looking at .X*-lock files in /tmp. +find_free_servernum() { + # Sadly, the "local" keyword is not POSIX. Leave the next line commented in + # the hope Debian Policy eventually changes to allow it in /bin/sh scripts + # anyway. + #local i + + i=$SERVERNUM + while [ -f /tmp/.X$i-lock ]; do + i=$(($i + 1)) + done + echo $i +} + +# Clean up files +clean_up() { + if [ -e "$AUTHFILE" ]; then + XAUTHORITY=$AUTHFILE xauth remove ":$SERVERNUM" >>"$ERRORFILE" 2>&1 + fi + if [ -n "$XVFB_RUN_TMPDIR" ]; then + if ! rm -r "$XVFB_RUN_TMPDIR"; then + error "problem while cleaning up temporary directory" + exit 5 + fi + fi +} + +# Parse the command line. +ARGS=$(getopt --options +ae:f:hn:lp:s:w: \ + --long auto-servernum,error-file:,auth-file:,help,server-num:,listen-tcp,xauth-protocol:,server-args:,wait: \ + --name "$PROGNAME" -- "$@") +GETOPT_STATUS=$? + +if [ $GETOPT_STATUS -ne 0 ]; then + error "internal error; getopt exited with status $GETOPT_STATUS" + exit 6 +fi + +eval set -- "$ARGS" + +while :; do + case "$1" in + -a|--auto-servernum) SERVERNUM=$(find_free_servernum) ;; + -e|--error-file) ERRORFILE="$2"; shift ;; + -f|--auth-file) AUTHFILE="$2"; shift ;; + -h|--help) SHOWHELP="yes" ;; + -n|--server-num) SERVERNUM="$2"; shift ;; + -l|--listen-tcp) LISTENTCP="" ;; + -p|--xauth-protocol) XAUTHPROTO="$2"; shift ;; + -s|--server-args) XVFBARGS="$2"; shift ;; + -w|--wait) STARTWAIT="$2"; shift ;; + --) shift; break ;; + *) error "internal error; getopt permitted \"$1\" unexpectedly" + exit 6 + ;; + esac + shift +done + +if [ "$SHOWHELP" ]; then + usage + exit 0 +fi + +if [ -z "$*" ]; then + usage "need a command to run" >&2 + exit 2 +fi + +if ! which xauth >/dev/null; then + error "xauth command not found" + exit 3 +fi + +# tidy up after ourselves +trap clean_up EXIT + +# If the user did not specify an X authorization file to use, set up a temporary +# directory to house one. +if [ -z "$AUTHFILE" ]; then + XVFB_RUN_TMPDIR="$(mktemp -d -t $PROGNAME.XXXXXX)" + AUTHFILE="$XVFB_RUN_TMPDIR/Xauthority" +fi + +# Start Xvfb. +MCOOKIE=$(mcookie) +XAUTHORITY=$AUTHFILE xauth source - << EOF >>"$ERRORFILE" 2>&1 +add :$SERVERNUM $XAUTHPROTO $MCOOKIE +EOF +XAUTHORITY=$AUTHFILE Xvfb ":$SERVERNUM" $XVFBARGS $LISTENTCP >>"$ERRORFILE" \ + 2>&1 & +XVFBPID=$! +sleep "$STARTWAIT" +if ! kill -0 $XVFBPID 2>/dev/null; then + echo "Xvfb failed to start" >&2 + exit 1 +fi + +# Start the command and save its exit status. +set +e +DISPLAY=:$SERVERNUM XAUTHORITY=$AUTHFILE "$@" 2>&1 +RETVAL=$? +set -e + +# Kill Xvfb now that the command has exited. +kill $XVFBPID + +# Return the executed command's exit status. +exit $RETVAL + +# vim:set ai et sts=4 sw=4 tw=80: diff --git a/testing/xorg-server/xvfb-run.1 b/testing/xorg-server/xvfb-run.1 new file mode 100644 index 000000000..137d3a196 --- /dev/null +++ b/testing/xorg-server/xvfb-run.1 @@ -0,0 +1,282 @@ +.\" $Id: xvfb-run.1 2138 2005-01-17 23:40:27Z branden $ +.\" +.\" Copyright 1998-2004 Branden Robinson <branden@debian.org>. +.\" +.\" This is free software; you may redistribute it and/or modify +.\" it under the terms of the GNU General Public License as +.\" published by the Free Software Foundation; either version 2, +.\" or (at your option) any later version. +.\" +.\" This is distributed in the hope that it will be useful, but +.\" WITHOUT ANY WARRANTY; without even the implied warranty of +.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +.\" GNU General Public License for more details. +.\" +.\" You should have received a copy of the GNU General Public License with +.\" the Debian operating system, in /usr/share/common-licenses/GPL; if +.\" not, write to the Free Software Foundation, Inc., 59 Temple Place, +.\" Suite 330, Boston, MA 02111-1307 USA +.\" +.\" We need the URL macro from groff's www macro package, but also want +.\" things to work all right for people who don't have it. So we define +.\" our own URL macro and let the www macro package override it if it's +.\" available. +.de URL +\\$2 \(laURL: \\$1 \(ra\\$3 +.. +.if \n[.g] .mso www.tmac +.TH xvfb\-run 1 "2004\-11\-12" "Debian Project" +.SH NAME +xvfb\-run \- run specified X client or command in a virtual X server environment +.SH SYNOPSIS +.B xvfb\-run +[ +.I options +] +.I command +.SH DESCRIPTION +.B xvfb\-run +is a wrapper for the +.BR Xvfb (1x) +command which simplifies the task of running commands (typically an X +client, or a script containing a list of clients to be run) within a virtual +X server environment. +.PP +.B xvfb\-run +sets up an X authority file (or uses an existing user\-specified one), +writes a cookie to it (see +.BR xauth (1x)) +and then starts the +.B Xvfb +X server as a background process. +The process ID of +.B Xvfb +is stored for later use. +The specified +.I command +is then run using the X display corresponding to the +.B Xvfb +server +just started and the X authority file created earlier. +.PP +When the +.I command +exits, its status is saved, the +.B Xvfb +server is killed (using the process ID stored earlier), the X authority +cookie removed, and the authority file deleted (if the user did not specify +one to use). +.B xvfb\-run +then exits with the exit status of +.IR command . +.PP +.B xvfb\-run +requires the +.B xauth +command to function. +.SH OPTIONS +.TP +.B \-a\fR,\fB \-\-auto\-servernum +Try to get a free server number, starting at 99, or the argument to +.BR \-\-server\-num . +.TP +.BI \-e\ file \fR,\fB\ \-\-error\-file= file +Store output from +.B xauth +and +.B Xvfb +in +.IR file . +The default is +.IR /dev/null . +.TP +.BI \-f\ file \fR,\fB\ \-\-auth\-file= file +Store X authentication data in +.IR file . +By default, a temporary directory called +.IR xvfb\-run. PID +(where PID is the process ID of +.B xvfb\-run +itself) is created in the directory specified by the environment variable +.B TMPDIR +(or +.I /tmp +if that variable is null or unset), and the +.BR tempfile (1) +command is used to create a file in that temporary directory called +.IR Xauthority . +.TP +.B \-h\fR,\fB \-\-help +Display a usage message and exit. +.TP +.BI \-n\ servernumber \fR,\fB\ \-\-server\-num= servernumber +Use +.I servernumber +as the server number (but see the +.B \-a\fR,\fB \-\-auto\-servernum +option above). +The default is 99. +.TP +.B \-l\fR,\fB \-\-listen\-tcp +Enable TCP port listening in the X server. +For security reasons (to avoid denial\-of\-service attacks or exploits), +TCP port listening is disabled by default. +.TP +.BI \-p\ protocolname \fR,\fB\ \-\-xauth\-protocol= protocolname +Use +.I protocolname +as the X authority protocol to use. +The default is \(oq.\(cq, which +.B xauth +interprets as its own default protocol, which is MIT\-MAGIC\-COOKIE\-1. +.TP +.BI \-s\ arguments \fR,\fB\ \-\-server\-args= arguments +Pass +.I arguments +to the +.B Xvfb +server. +Be careful to quote any whitespace characters that may occur within +.I arguments +to prevent them from regarded as separators for +.BR xvfb\-run 's +own arguments. +Also, note that specification of \(oq\-nolisten tcp\(cq in +.I arguments +may override the function of +.BR xvfb\-run 's +own +.B \-l\fR,\fB \-\-listen\-tcp +option, and that specification of the server number (e.g., \(oq:1\(cq) may +be ignored because of the way the X server parses its argument list. +Use the +.B xvfb\-run +option +.BI \-n\ servernumber \fR,\fB\ \-\-server\-num= servernumber +to achieve the latter function. +The default is \(oq\-screen 0 640x480x8\(cq. +.TP +.BI \-w\ delay \fR,\fB\ \-\-wait= delay +Wait +.I delay +seconds after launching +.B Xvfb +before attempting to start the specified command. +The default is 3. +.SH ENVIRONMENT +.TP +.B COLUMNS +indicates the width of the terminal device in character cells. +This value is used for formatting diagnostic messages. +If not set, the terminal is queried using +.BR stty (1) +to determine its width. +If that fails, a value of \(oq80\(cq is assumed. +.TP +.B TMPDIR +specifies the directory in which to place +.BR xvfb\-run 's +temporary directory for storage of the X authority file; only used if the +.B \-f +or +.B \-\-auth\-file +options are not specified. +.SH "OUTPUT FILES" +.PP +Unless the +.B \-f +or +.B \-\-auth\-file +options are specified, a temporary +directory and file within it are created (and deleted) to store the X +authority cookies used by the +.B Xvfb +server and client(s) run under it. +See +.BR tempfile (1). +If \-f or \-\-auth\-file are used, then the specified X authority file is +only written to, not created or deleted (though +.B xauth +creates an authority file itself if told to use use that does not already +exist). +.PP +An error file with a user\-specified name is also created if the +.B \-e +or +.B \-\-error\-file +options are specifed; see above. +.SH "EXIT STATUS" +.B xvfb\-run +uses its exit status as well as output to standard error to communicate +diagnostics. +The exit status of \(oq1\(cq is not used, and should be interpreted as failure +of the specified command. +.TP +0 +.B xvfb\-run +only uses this exit status if the +.B \-h\fR,\fB \-\-help +option is given. +In all other situations, this may be interpreted as success of the specified +command. +.TP +2 +No command to run was specified. +.TP +3 +The +.B xauth +command is not available. +.TP +4 +The temporary directory that was going to be used already exists; since +.B xvfb\-run +produces a uniquely named directory, this may indicate an attempt by another +process on the system to exploit a temporary file race condition. +.TP +5 +A problem was encountered while cleaning up the temporary directory. +.TP +6 +A problem was encountered while using +.BR getopt (1) +to parse the command\-line arguments. +.SH EXAMPLES +.TP +.B xvfb\-run \-\-auto\-servernum \-\-server\-num=1 xlogo +runs the +.BR xlogo (1x) +demonstration client inside the +.B Xvfb +X server on the first available server number greater than or equal to 1. +.TP +.B xvfb\-run \-\-server\-args="\-screen 0 1024x768x24" ico \-faces +runs the +.BR ico (1x) +demonstration client (and passes it the +.B \-faces +argument) inside the +.B Xvfb +X server, configured with a root window of 1024 by 768 pixels and a color +depth of 24 bits. +.PP +Note that the demo X clients used in the above examples will not exit on +their own, so they will have to be killed before +.B xvfb\-run +will exit. +.SH BUGS +See +.URL "http://bugs.debian.org/xvfb" "the Debian Bug Tracking System" . +If you wish to report a bug in +.BR xvfb\-run , +please use the +.BR reportbug (1) +command. +.SH AUTHOR +.B xfvb\-run +was written by Branden Robinson and Jeff Licquia with sponsorship from +Progeny Linux Systems. +.SH "SEE ALSO" +.BR Xvfb (1x), +.BR xauth (1x) +.\" vim:set et tw=80: |