diff options
author | William Pitcock <nenolod@dereferenced.org> | 2011-01-28 15:33:18 -0600 |
---|---|---|
committer | William Pitcock <nenolod@dereferenced.org> | 2011-01-28 15:33:47 -0600 |
commit | 36554c047157fc5af2f23eb6d63020ae3527951a (patch) | |
tree | aa642ef69e8335100f37be641465e72a3b6825ca /main/mesa | |
parent | c2fe699c78fcfa81d89d454c2345516c502aeb8d (diff) | |
download | aports-36554c047157fc5af2f23eb6d63020ae3527951a.tar.bz2 aports-36554c047157fc5af2f23eb6d63020ae3527951a.tar.xz |
main/mesa: upgrade to 7.10
Diffstat (limited to 'main/mesa')
-rw-r--r-- | main/mesa/APKBUILD | 31 | ||||
-rw-r--r-- | main/mesa/mesa-7.10-uclibc-gallium.patch | 20 | ||||
-rw-r--r-- | main/mesa/mesa-7.10-uclibc-glsl.patch | 11 | ||||
-rw-r--r-- | main/mesa/mesa-7.10-uclibc.patch | 13 | ||||
-rw-r--r-- | main/mesa/mesa-7.6.1-uclibc.patch | 13 | ||||
-rw-r--r-- | main/mesa/mesa-7.8-git.patch | 2423 |
6 files changed, 54 insertions, 2457 deletions
diff --git a/main/mesa/APKBUILD b/main/mesa/APKBUILD index 9003606cd..c5032c4d5 100644 --- a/main/mesa/APKBUILD +++ b/main/mesa/APKBUILD @@ -1,7 +1,7 @@ # Maintainer: Natanael Copa <ncopa@alpinelinux.org> pkgname=mesa -pkgver=7.8.2 -pkgrel=6 +pkgver=7.10 +pkgrel=0 pkgdesc="Mesa DRI OpenGL library" url="http://www.mesa3d.org" arch="all" @@ -17,15 +17,14 @@ subpackages="$pkgname-dev $pkgname-dri-swrast:swrast $pkgname-dri-tdfx:tdfx $pkgname-dri-unichrome:unichrome - $pkgname-demos " makedepends="pkgconfig libdrm-dev libxxf86vm-dev libxdamage-dev expat-dev - dri2proto xextproto libx11-dev glproto python libxt-dev" + dri2proto xextproto libx11-dev glproto python libxt-dev makedepend talloc-dev" source="ftp://ftp.freedesktop.org/pub/mesa/$pkgver/MesaLib-$pkgver.tar.bz2 - ftp://ftp.freedesktop.org/pub/mesa/$pkgver/MesaDemos-$pkgver.tar.bz2 - mesa-7.6.1-uclibc.patch - mesa-7.8-git.patch" + mesa-7.10-uclibc.patch + mesa-7.10-uclibc-glsl.patch + mesa-7.10-uclibc-gallium.patch" depends_dev="libdrm-dev dri2proto libx11-dev libxext-dev libxxf86vm-dev libxdamage-dev libxfixes-dev libxcb-dev glproto" @@ -78,12 +77,8 @@ build() { package() { cd "$_builddir" make -j1 DESTDIR="$pkgdir" install || return 1 - mkdir -p "$pkgdir"/usr/bin - cp "$_builddir"/progs/xdemos/glxinfo "$pkgdir"/usr/bin/glxinfo || return 1 - cp "$_builddir"/progs/xdemos/glxgears "$pkgdir"/usr/bin/glxgears || return 1 } - _mv_dri() { pkgdesc="Mesa DRI driver for $@" install -d "$subpkgdir"/$_dri_driverdir @@ -106,13 +101,7 @@ tdfx() { _mv_dri tdfx_dri; } unichrome() { _mv_dri unichrome_dri; } swrast() { _mv_dri swrast_dri; } -demos() { - pkgdesc="Mesa demo applications" - mkdir -p "$subpkgdir"/usr/ - mv "$pkgdir"/usr/bin "$subpkgdir"/usr/ -} - -md5sums="6be2d343a0089bfd395ce02aaf8adb57 MesaLib-7.8.2.tar.bz2 -757d9e2e06f48b1a52848be9b0307ced MesaDemos-7.8.2.tar.bz2 -8d98e15310e0f2e1520beb9e6cb6ab41 mesa-7.6.1-uclibc.patch -397c1249edcf03227697fef3f7129fe4 mesa-7.8-git.patch" +md5sums="33fb94eccc02cbb4d8d1365615e38e46 MesaLib-7.10.tar.bz2 +9c8c161f954f0d08895cd9d45e63f498 mesa-7.10-uclibc.patch +03e9685b0d714e915c35fd0fb5fde810 mesa-7.10-uclibc-glsl.patch +90a2ea438ff328443a0436a91a74d518 mesa-7.10-uclibc-gallium.patch" diff --git a/main/mesa/mesa-7.10-uclibc-gallium.patch b/main/mesa/mesa-7.10-uclibc-gallium.patch new file mode 100644 index 000000000..a14743bc1 --- /dev/null +++ b/main/mesa/mesa-7.10-uclibc-gallium.patch @@ -0,0 +1,20 @@ +--- Mesa-7.10.orig/src/gallium/auxiliary/util/u_debug_symbol.c ++++ Mesa-7.10/src/gallium/auxiliary/util/u_debug_symbol.c +@@ -145,7 +145,7 @@ + } + #endif + +-#ifdef __GLIBC__ ++#if defined(__GLIBC__) && !defined(__UCLIBC__) + #include <execinfo.h> + + /* This can only provide dynamic symbols, or binary offsets into a file. +@@ -171,7 +171,7 @@ + return; + #endif + +-#ifdef __GLIBC__ ++#if defined(__GLIBC__) && !defined(__UCLIBC__) + debug_symbol_name_glibc(addr, buf, size); + if(buf[0]) + return; diff --git a/main/mesa/mesa-7.10-uclibc-glsl.patch b/main/mesa/mesa-7.10-uclibc-glsl.patch new file mode 100644 index 000000000..df7ee1b3b --- /dev/null +++ b/main/mesa/mesa-7.10-uclibc-glsl.patch @@ -0,0 +1,11 @@ +--- Mesa-7.10.orig/src/glsl/strtod.c ++++ Mesa-7.10/src/glsl/strtod.c +@@ -44,7 +44,7 @@ + double + glsl_strtod(const char *s, char **end) + { +-#if defined(_GNU_SOURCE) && !defined(__CYGWIN__) && !defined(__FreeBSD__) ++#if defined(_GNU_SOURCE) && !defined(__CYGWIN__) && !defined(__FreeBSD__) && !defined(__UCLIBC__) + static locale_t loc = NULL; + if (!loc) { + loc = newlocale(LC_CTYPE_MASK, "C", NULL); diff --git a/main/mesa/mesa-7.10-uclibc.patch b/main/mesa/mesa-7.10-uclibc.patch new file mode 100644 index 000000000..54d7d8c83 --- /dev/null +++ b/main/mesa/mesa-7.10-uclibc.patch @@ -0,0 +1,13 @@ +--- Mesa-7.10/src/mesa/main/imports.c ++++ Mesa-7.10.mod/src/mesa/main/imports.c +@@ -757,7 +757,7 @@ + float + _mesa_strtof( const char *s, char **end ) + { +-#if defined(_GNU_SOURCE) && !defined(__CYGWIN__) && !defined(__FreeBSD__) ++#if defined(_GNU_SOURCE) && !defined(__CYGWIN__) && !defined(__FreeBSD__) && !defined(__UCLIBC__) + static locale_t loc = NULL; + if (!loc) { + loc = newlocale(LC_CTYPE_MASK, "C", NULL); +Only in Mesa-7.10.mod: src/mesa/main/imports.c.orig +Only in Mesa-7.10.mod: src/mesa/main/imports.c.rej diff --git a/main/mesa/mesa-7.6.1-uclibc.patch b/main/mesa/mesa-7.6.1-uclibc.patch deleted file mode 100644 index 4a4354d89..000000000 --- a/main/mesa/mesa-7.6.1-uclibc.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/src/mesa/main/imports.c b/src/mesa/main/imports.c -index 46ffb92..6192fe6 100644 ---- a/src/mesa/main/imports.c -+++ b/src/mesa/main/imports.c -@@ -915,7 +915,7 @@ _mesa_atoi(const char *s) - double - _mesa_strtod( const char *s, char **end ) - { --#ifdef _GNU_SOURCE -+#if defined(_GNU_SOURCE) && ! defined(__UCLIBC__) - static locale_t loc = NULL; - if (!loc) { - loc = newlocale(LC_CTYPE_MASK, "C", NULL); diff --git a/main/mesa/mesa-7.8-git.patch b/main/mesa/mesa-7.8-git.patch deleted file mode 100644 index 169b38b05..000000000 --- a/main/mesa/mesa-7.8-git.patch +++ /dev/null @@ -1,2423 +0,0 @@ -diff --git a/Makefile b/Makefile -index 84d0038..63fdf87 100644 ---- a/Makefile -+++ b/Makefile -@@ -180,7 +180,7 @@ ultrix-gcc: - - # Rules for making release tarballs - --VERSION=7.8.2 -+VERSION=7.8.3 - DIRECTORY = Mesa-$(VERSION) - LIB_NAME = MesaLib-$(VERSION) - DEMO_NAME = MesaDemos-$(VERSION) -@@ -285,9 +285,6 @@ MAIN_FILES = \ - $(DIRECTORY)/src/mesa/x86-64/*.[chS] \ - $(DIRECTORY)/src/mesa/x86-64/Makefile \ - $(DIRECTORY)/progs/Makefile \ -- $(DIRECTORY)/progs/util/README \ -- $(DIRECTORY)/progs/util/*.[ch] \ -- $(DIRECTORY)/progs/util/sampleMakefile \ - $(DIRECTORY)/windows/VC8/ - - ES_FILES = \ -@@ -438,7 +435,10 @@ DEMO_FILES = \ - $(DIRECTORY)/progs/glsl/*.c \ - $(DIRECTORY)/progs/glsl/*.frag \ - $(DIRECTORY)/progs/glsl/*.vert \ -- $(DIRECTORY)/progs/glsl/*.shtest -+ $(DIRECTORY)/progs/glsl/*.shtest \ -+ $(DIRECTORY)/progs/util/README \ -+ $(DIRECTORY)/progs/util/*.[ch] \ -+ $(DIRECTORY)/progs/util/sampleMakefile - - GLUT_FILES = \ - $(DIRECTORY)/include/GL/glut.h \ -diff --git a/configs/autoconf.in b/configs/autoconf.in -index fbd5faa..6218be9 100644 ---- a/configs/autoconf.in -+++ b/configs/autoconf.in -@@ -26,6 +26,11 @@ INTEL_LIBS = @INTEL_LIBS@ - INTEL_CFLAGS = @INTEL_CFLAGS@ - X11_LIBS = @X11_LIBS@ - X11_CFLAGS = @X11_CFLAGS@ -+GLW_CFLAGS = @GLW_CFLAGS@ -+GLUT_CFLAGS = @GLUT_CFLAGS@ -+ -+# dlopen -+DLOPEN_LIBS = @DLOPEN_LIBS@ - - # Assembler - MESA_ASM_SOURCES = @MESA_ASM_SOURCES@ -diff --git a/configs/default b/configs/default -index f12bec8..d4b45a3 100644 ---- a/configs/default -+++ b/configs/default -@@ -121,6 +121,8 @@ APP_LIB_DEPS = $(EXTRA_LIB_PATH) -L$(TOP)/$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LI - APP_LIB_DEPS = -lm - X11_LIBS = -lX11 - -+DLOPEN_LIBS = -ldl -+ - # Installation directories (for make install) - INSTALL_DIR = /usr/local - INSTALL_LIB_DIR = $(INSTALL_DIR)/$(LIB_DIR) -diff --git a/configure.ac b/configure.ac -index e711634..e15371f 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -398,6 +398,7 @@ dnl Check to see if dlopen is in default libraries (like Solaris, which - dnl has it in libc), or if libdl is needed to get it. - AC_CHECK_FUNC([dlopen], [], - [AC_CHECK_LIB([dl], [dlopen], [DLOPEN_LIBS="-ldl"])]) -+AC_SUBST([DLOPEN_LIBS]) - - dnl See if posix_memalign is available - AC_CHECK_FUNC([posix_memalign], [DEFINES="$DEFINES -DHAVE_POSIX_MEMALIGN"]) -@@ -699,7 +700,7 @@ AC_SUBST([DRI_DRIVER_SEARCH_DIR]) - dnl Direct rendering or just indirect rendering - AC_ARG_ENABLE([driglx-direct], - [AS_HELP_STRING([--disable-driglx-direct], -- [enable direct rendering in GLX for DRI @<:@default=enabled@:>@])], -+ [enable direct rendering in GLX and EGL for DRI @<:@default=enabled@:>@])], - [driglx_direct="$enableval"], - [driglx_direct="yes"]) - dnl Which drivers to build - default is chosen by platform -@@ -1102,10 +1103,6 @@ fi - - if test "x$enable_glut" = xyes; then - SRC_DIRS="$SRC_DIRS glut/glx" -- GLUT_CFLAGS="" -- if test "x$GCC" = xyes; then -- GLUT_CFLAGS="-fexceptions" -- fi - if test "$x11_pkgconfig" = yes; then - PKG_CHECK_MODULES([GLUT],[x11 xmu xi]) - GLUT_PC_REQ_PRIV="x11 xmu xi" -@@ -1116,6 +1113,9 @@ if test "x$enable_glut" = xyes; then - GLUT_PC_LIB_PRIV="$GLUT_LIB_DEPS" - GLUT_PC_CFLAGS="$X11_INCLUDES" - fi -+ if test "x$GCC" = xyes; then -+ GLUT_CFLAGS="$GLUT_CFLAGS -fexceptions" -+ fi - GLUT_LIB_DEPS="$GLUT_LIB_DEPS -lm" - GLUT_PC_LIB_PRIV="$GLUT_PC_LIB_PRIV -lm" - -@@ -1217,6 +1217,10 @@ yes) - if test "x$enable_egl" != xyes; then - AC_MSG_ERROR([cannot build egl state tracker without EGL library]) - fi -+ # define GLX_DIRECT_RENDERING even when the driver is not dri -+ if test "x$mesa_driver" != xdri -a "x$driglx_direct" = xyes; then -+ DEFINES="$DEFINES -DGLX_DIRECT_RENDERING" -+ fi - ;; - xorg) - PKG_CHECK_MODULES([LIBDRM_XORG], [libdrm >= $LIBDRM_XORG_REQUIRED]) -diff --git a/docs/news.html b/docs/news.html -index 92e2a18..01e2834 100644 ---- a/docs/news.html -+++ b/docs/news.html -@@ -11,6 +11,14 @@ - <H1>News</H1> - - -+<h2>TBD, 2010</h2> -+ -+<p> -+<a href="relnotes-7.8.3.html">Mesa 7.8.3</a> is released. This is a bug-fix -+release collecting fixes since the 7.8.2 release. -+</p> -+ -+ - <h2>June 16, 2010</h2> - - <p> -diff --git a/docs/relnotes-7.8.2.html b/docs/relnotes-7.8.2.html -index 4d7758d..1393b2e 100644 ---- a/docs/relnotes-7.8.2.html -+++ b/docs/relnotes-7.8.2.html -@@ -142,7 +142,5 @@ a471807b65e49c325808ba4551be93ed MesaGLUT-7.8.2.tar.bz2 - </ul> - - --<h2>Changes</h2> --<p>None.</p> - </body> - </html> -diff --git a/docs/relnotes-7.8.3.html b/docs/relnotes-7.8.3.html -new file mode 100644 -index 0000000..1e9f433 ---- /dev/null -+++ b/docs/relnotes-7.8.3.html -@@ -0,0 +1,89 @@ -+<HTML> -+ -+<TITLE>Mesa Release Notes</TITLE> -+ -+<head><link rel="stylesheet" type="text/css" href="mesa.css"></head> -+ -+<BODY> -+ -+<body bgcolor="#eeeeee"> -+ -+<H1>Mesa 7.8.3 Release Notes / (date tbd)</H1> -+ -+<p> -+Mesa 7.8.3 is a bug fix release which fixes bugs found since the 7.8.2 release. -+</p> -+<p> -+Mesa 7.8.3 implements the OpenGL 2.1 API, but the version reported by -+glGetString(GL_VERSION) depends on the particular driver being used. -+Some drivers don't support all the features required in OpenGL 2.1. -+</p> -+<p> -+See the <a href="install.html">Compiling/Installing page</a> for prerequisites -+for DRI hardware acceleration. -+</p> -+ -+ -+<h2>MD5 checksums</h2> -+<pre> -+x MesaLib-7.8.3.tar.gz -+x MesaLib-7.8.3.tar.bz2 -+x MesaLib-7.8.3.zip -+x MesaDemos-7.8.3.tar.gz -+x MesaDemos-7.8.3.tar.bz2 -+x MesaDemos-7.8.3.zip -+x MesaGLUT-7.8.3.tar.gz -+x MesaGLUT-7.8.3.tar.bz2 -+x MesaGLUT-7.8.3.zip -+</pre> -+ -+ -+<h2>New features</h2> -+<p>None.</p> -+ -+ -+<h2>Changes</h2> -+<ul> -+<li>The radeon driver should use less memory when searching for a valid mip -+image.</li> -+</ul> -+ -+ -+<h2>Bug fixes</h2> -+<ul> -+<li>Fix unsupported FB with D24S8 (bug -+ <a href="https://bugs.freedesktop.org/show_bug.cgi?id=23670">29116</a>)</li> -+<li>Fix ReadPixels crash when reading depth/stencil from an FBO</li> -+<li>Fixed a bug rendering to 16-bit buffers using swrast.</li> -+<li>Fixed a state tracker/TGSI bug that caused crashes when using Windows' -+ memory debugging features.</li> -+<li>Fixed an issue rendering to 32-bit channels with swrast (bug -+ <a href="https://bugs.freedesktop.org/show_bug.cgi?id=29487">29487</a>)</li> -+<li>GLSL: fix indirect <TT>gl_TextureMatrix</TT> addressing (bug -+ <a href="https://bugs.freedesktop.org/show_bug.cgi?id=28967">28967</a>)</li> -+<li>GLSL: fix for bug -+ <a href="https://bugs.freedesktop.org/show_bug.cgi?id=27216">27216</a></li> -+<li>GLSL: fix zw fragcoord entries in some cases (bug -+ <a href="https://bugs.freedesktop.org/show_bug.cgi?id=29183">29183</a>)</li> -+<li>Fix texture env generation in some cases (bug -+ <a href="https://bugs.freedesktop.org/show_bug.cgi?id=28169">28169</a>)</li> -+<li>osmesa: a fix for calling <TT>OSMesaMakeCurrent</TT> twice was applied (bug -+ <a href="https://bugs.freedesktop.org/show_bug.cgi?id=10966">10966</a></li> -+<li>A bug was fixed which could cause Mesa to ignore the -+ <TT>MESA_EXTENSION_OVERRIDE</TT> environment variable.</li> -+<li>A bug related to specular highlights on backfaces was fixed.</li> -+<li>A radeon-specific issue with <TT>glCopyTex(Sub)Image</TT> was -+ corrected.</li> -+<li>radeon/wine: flush command stream in more cases, fixing wine d3d9 -+ tests.</li> -+<li>r600: fix sin+cos normalization.</li> -+<li>r600: (properly) ignore <TT>GL_COORD_REPLACE</TT> when point sprites are -+ disabled.</li> -+<li>radeon: avoid flushing when the context is not current.</li> -+<li>r300c: a bug affecting unaligned BOs was fixed.</li> -+<li>r300c: a hardlock caused by ARB_half_float_vertex incorrectly advertised on some chipsets.</li> -+</ul> -+ -+ -+</body> -+</html> -diff --git a/docs/relnotes.html b/docs/relnotes.html -index 39b02b8..46f6469 100644 ---- a/docs/relnotes.html -+++ b/docs/relnotes.html -@@ -13,6 +13,7 @@ The release notes summarize what's new or changed in each Mesa release. - </p> - - <UL> -+<LI><A HREF="relnotes-7.8.3.html">7.8.3 release notes</A> - <LI><A HREF="relnotes-7.8.2.html">7.8.2 release notes</A> - <LI><A HREF="relnotes-7.8.1.html">7.8.1 release notes</A> - <LI><A HREF="relnotes-7.8.html">7.8 release notes</A> -diff --git a/include/GL/gl_mangle.h b/include/GL/gl_mangle.h -index 43d2e89..15589d8 100644 ---- a/include/GL/gl_mangle.h -+++ b/include/GL/gl_mangle.h -@@ -56,6 +56,7 @@ - #define glBeginOcclusionQueryNV MANGLE(BeginOcclusionQueryNV) - #define glBeginPerfMonitorAMD MANGLE(BeginPerfMonitorAMD) - #define glBeginQueryARB MANGLE(BeginQueryARB) -+#define glBeginQueryIndexed MANGLE(BeginQueryIndexed) - #define glBeginQuery MANGLE(BeginQuery) - #define glBeginTransformFeedbackEXT MANGLE(BeginTransformFeedbackEXT) - #define glBeginTransformFeedback MANGLE(BeginTransformFeedback) -@@ -75,6 +76,7 @@ - #define glBindBufferRange MANGLE(BindBufferRange) - #define glBindBufferRangeNV MANGLE(BindBufferRangeNV) - #define glBindFragDataLocationEXT MANGLE(BindFragDataLocationEXT) -+#define glBindFragDataLocationIndexed MANGLE(BindFragDataLocationIndexed) - #define glBindFragDataLocation MANGLE(BindFragDataLocation) - #define glBindFragmentShaderATI MANGLE(BindFragmentShaderATI) - #define glBindFramebufferEXT MANGLE(BindFramebufferEXT) -@@ -87,10 +89,12 @@ - #define glBindProgramNV MANGLE(BindProgramNV) - #define glBindRenderbufferEXT MANGLE(BindRenderbufferEXT) - #define glBindRenderbuffer MANGLE(BindRenderbuffer) -+#define glBindSampler MANGLE(BindSampler) - #define glBindTexGenParameterEXT MANGLE(BindTexGenParameterEXT) - #define glBindTextureEXT MANGLE(BindTextureEXT) - #define glBindTexture MANGLE(BindTexture) - #define glBindTextureUnitParameterEXT MANGLE(BindTextureUnitParameterEXT) -+#define glBindTransformFeedback MANGLE(BindTransformFeedback) - #define glBindTransformFeedbackNV MANGLE(BindTransformFeedbackNV) - #define glBindVertexArrayAPPLE MANGLE(BindVertexArrayAPPLE) - #define glBindVertexArray MANGLE(BindVertexArray) -@@ -215,6 +219,10 @@ - #define glColorMaskIndexedEXT MANGLE(ColorMaskIndexedEXT) - #define glColorMask MANGLE(ColorMask) - #define glColorMaterial MANGLE(ColorMaterial) -+#define glColorP3ui MANGLE(ColorP3ui) -+#define glColorP3uiv MANGLE(ColorP3uiv) -+#define glColorP4ui MANGLE(ColorP4ui) -+#define glColorP4uiv MANGLE(ColorP4uiv) - #define glColorPointerEXT MANGLE(ColorPointerEXT) - #define glColorPointerListIBM MANGLE(ColorPointerListIBM) - #define glColorPointer MANGLE(ColorPointer) -@@ -236,6 +244,7 @@ - #define glCombinerParameterivNV MANGLE(CombinerParameterivNV) - #define glCombinerStageParameterfvNV MANGLE(CombinerStageParameterfvNV) - #define glCompileShaderARB MANGLE(CompileShaderARB) -+#define glCompileShaderIncludeARB MANGLE(CompileShaderIncludeARB) - #define glCompileShader MANGLE(CompileShader) - #define glCompressedMultiTexImage1DEXT MANGLE(CompressedMultiTexImage1DEXT) - #define glCompressedMultiTexImage2DEXT MANGLE(CompressedMultiTexImage2DEXT) -@@ -326,6 +335,7 @@ - #define glDeleteFramebuffersEXT MANGLE(DeleteFramebuffersEXT) - #define glDeleteFramebuffers MANGLE(DeleteFramebuffers) - #define glDeleteLists MANGLE(DeleteLists) -+#define glDeleteNamedStringARB MANGLE(DeleteNamedStringARB) - #define glDeleteObjectARB MANGLE(DeleteObjectARB) - #define glDeleteOcclusionQueriesNV MANGLE(DeleteOcclusionQueriesNV) - #define glDeletePerfMonitorsAMD MANGLE(DeletePerfMonitorsAMD) -@@ -336,10 +346,12 @@ - #define glDeleteQueries MANGLE(DeleteQueries) - #define glDeleteRenderbuffersEXT MANGLE(DeleteRenderbuffersEXT) - #define glDeleteRenderbuffers MANGLE(DeleteRenderbuffers) -+#define glDeleteSamplers MANGLE(DeleteSamplers) - #define glDeleteShader MANGLE(DeleteShader) - #define glDeleteSync MANGLE(DeleteSync) - #define glDeleteTexturesEXT MANGLE(DeleteTexturesEXT) - #define glDeleteTextures MANGLE(DeleteTextures) -+#define glDeleteTransformFeedbacks MANGLE(DeleteTransformFeedbacks) - #define glDeleteTransformFeedbacksNV MANGLE(DeleteTransformFeedbacksNV) - #define glDeleteVertexArraysAPPLE MANGLE(DeleteVertexArraysAPPLE) - #define glDeleteVertexArrays MANGLE(DeleteVertexArrays) -@@ -363,6 +375,7 @@ - #define glDisableVertexAttribArrayARB MANGLE(DisableVertexAttribArrayARB) - #define glDisableVertexAttribArray MANGLE(DisableVertexAttribArray) - #define glDrawArraysEXT MANGLE(DrawArraysEXT) -+#define glDrawArraysIndirect MANGLE(DrawArraysIndirect) - #define glDrawArraysInstancedARB MANGLE(DrawArraysInstancedARB) - #define glDrawArraysInstancedEXT MANGLE(DrawArraysInstancedEXT) - #define glDrawArraysInstanced MANGLE(DrawArraysInstanced) -@@ -374,6 +387,7 @@ - #define glDrawElementArrayAPPLE MANGLE(DrawElementArrayAPPLE) - #define glDrawElementArrayATI MANGLE(DrawElementArrayATI) - #define glDrawElementsBaseVertex MANGLE(DrawElementsBaseVertex) -+#define glDrawElementsIndirect MANGLE(DrawElementsIndirect) - #define glDrawElementsInstancedARB MANGLE(DrawElementsInstancedARB) - #define glDrawElementsInstancedBaseVertex MANGLE(DrawElementsInstancedBaseVertex) - #define glDrawElementsInstancedEXT MANGLE(DrawElementsInstancedEXT) -@@ -386,7 +400,9 @@ - #define glDrawRangeElementsBaseVertex MANGLE(DrawRangeElementsBaseVertex) - #define glDrawRangeElementsEXT MANGLE(DrawRangeElementsEXT) - #define glDrawRangeElements MANGLE(DrawRangeElements) -+#define glDrawTransformFeedback MANGLE(DrawTransformFeedback) - #define glDrawTransformFeedbackNV MANGLE(DrawTransformFeedbackNV) -+#define glDrawTransformFeedbackStream MANGLE(DrawTransformFeedbackStream) - #define glEdgeFlagFormatNV MANGLE(EdgeFlagFormatNV) - #define glEdgeFlag MANGLE(EdgeFlag) - #define glEdgeFlagPointerEXT MANGLE(EdgeFlagPointerEXT) -@@ -414,6 +430,7 @@ - #define glEndOcclusionQueryNV MANGLE(EndOcclusionQueryNV) - #define glEndPerfMonitorAMD MANGLE(EndPerfMonitorAMD) - #define glEndQueryARB MANGLE(EndQueryARB) -+#define glEndQueryIndexed MANGLE(EndQueryIndexed) - #define glEndQuery MANGLE(EndQuery) - #define glEndTransformFeedbackEXT MANGLE(EndTransformFeedbackEXT) - #define glEndTransformFeedback MANGLE(EndTransformFeedback) -@@ -498,7 +515,6 @@ - #define glFramebufferTextureEXT MANGLE(FramebufferTextureEXT) - #define glFramebufferTextureFaceARB MANGLE(FramebufferTextureFaceARB) - #define glFramebufferTextureFaceEXT MANGLE(FramebufferTextureFaceEXT) --#define glFramebufferTextureFace MANGLE(FramebufferTextureFace) - #define glFramebufferTextureLayerARB MANGLE(FramebufferTextureLayerARB) - #define glFramebufferTextureLayerEXT MANGLE(FramebufferTextureLayerEXT) - #define glFramebufferTextureLayer MANGLE(FramebufferTextureLayer) -@@ -529,15 +545,20 @@ - #define glGenQueries MANGLE(GenQueries) - #define glGenRenderbuffersEXT MANGLE(GenRenderbuffersEXT) - #define glGenRenderbuffers MANGLE(GenRenderbuffers) -+#define glGenSamplers MANGLE(GenSamplers) - #define glGenSymbolsEXT MANGLE(GenSymbolsEXT) - #define glGenTexturesEXT MANGLE(GenTexturesEXT) - #define glGenTextures MANGLE(GenTextures) -+#define glGenTransformFeedbacks MANGLE(GenTransformFeedbacks) - #define glGenTransformFeedbacksNV MANGLE(GenTransformFeedbacksNV) - #define glGenVertexArraysAPPLE MANGLE(GenVertexArraysAPPLE) - #define glGenVertexArrays MANGLE(GenVertexArrays) - #define glGenVertexShadersEXT MANGLE(GenVertexShadersEXT) - #define glGetActiveAttribARB MANGLE(GetActiveAttribARB) - #define glGetActiveAttrib MANGLE(GetActiveAttrib) -+#define glGetActiveSubroutineName MANGLE(GetActiveSubroutineName) -+#define glGetActiveSubroutineUniformiv MANGLE(GetActiveSubroutineUniformiv) -+#define glGetActiveSubroutineUniformName MANGLE(GetActiveSubroutineUniformName) - #define glGetActiveUniformARB MANGLE(GetActiveUniformARB) - #define glGetActiveUniformBlockiv MANGLE(GetActiveUniformBlockiv) - #define glGetActiveUniformBlockName MANGLE(GetActiveUniformBlockName) -@@ -599,6 +620,7 @@ - #define glGetFloatIndexedvEXT MANGLE(GetFloatIndexedvEXT) - #define glGetFloatv MANGLE(GetFloatv) - #define glGetFogFuncSGIS MANGLE(GetFogFuncSGIS) -+#define glGetFragDataIndex MANGLE(GetFragDataIndex) - #define glGetFragDataLocationEXT MANGLE(GetFragDataLocationEXT) - #define glGetFragDataLocation MANGLE(GetFragDataLocation) - #define glGetFragmentLightfvSGIX MANGLE(GetFragmentLightfvSGIX) -@@ -678,6 +700,8 @@ - #define glGetNamedProgramLocalParameterIuivEXT MANGLE(GetNamedProgramLocalParameterIuivEXT) - #define glGetNamedProgramStringEXT MANGLE(GetNamedProgramStringEXT) - #define glGetNamedRenderbufferParameterivEXT MANGLE(GetNamedRenderbufferParameterivEXT) -+#define glGetNamedStringARB MANGLE(GetNamedStringARB) -+#define glGetNamedStringivARB MANGLE(GetNamedStringivARB) - #define glGetObjectBufferfvATI MANGLE(GetObjectBufferfvATI) - #define glGetObjectBufferivATI MANGLE(GetObjectBufferivATI) - #define glGetObjectParameterfvARB MANGLE(GetObjectParameterfvARB) -@@ -717,18 +741,26 @@ - #define glGetProgramParameterdvNV MANGLE(GetProgramParameterdvNV) - #define glGetProgramParameterfvNV MANGLE(GetProgramParameterfvNV) - #define glGetProgramRegisterfvMESA MANGLE(GetProgramRegisterfvMESA) -+#define glGetProgramStageiv MANGLE(GetProgramStageiv) - #define glGetProgramStringARB MANGLE(GetProgramStringARB) - #define glGetProgramStringNV MANGLE(GetProgramStringNV) -+#define glGetQueryIndexediv MANGLE(GetQueryIndexediv) - #define glGetQueryivARB MANGLE(GetQueryivARB) - #define glGetQueryiv MANGLE(GetQueryiv) - #define glGetQueryObjecti64vEXT MANGLE(GetQueryObjecti64vEXT) -+#define glGetQueryObjecti64v MANGLE(GetQueryObjecti64v) - #define glGetQueryObjectivARB MANGLE(GetQueryObjectivARB) - #define glGetQueryObjectiv MANGLE(GetQueryObjectiv) - #define glGetQueryObjectui64vEXT MANGLE(GetQueryObjectui64vEXT) -+#define glGetQueryObjectui64v MANGLE(GetQueryObjectui64v) - #define glGetQueryObjectuivARB MANGLE(GetQueryObjectuivARB) - #define glGetQueryObjectuiv MANGLE(GetQueryObjectuiv) - #define glGetRenderbufferParameterivEXT MANGLE(GetRenderbufferParameterivEXT) - #define glGetRenderbufferParameteriv MANGLE(GetRenderbufferParameteriv) -+#define glGetSamplerParameterfv MANGLE(GetSamplerParameterfv) -+#define glGetSamplerParameterIfv MANGLE(GetSamplerParameterIfv) -+#define glGetSamplerParameterIiv MANGLE(GetSamplerParameterIiv) -+#define glGetSamplerParameteriv MANGLE(GetSamplerParameteriv) - #define glGetSeparableFilterEXT MANGLE(GetSeparableFilterEXT) - #define glGetSeparableFilter MANGLE(GetSeparableFilter) - #define glGetShaderInfoLog MANGLE(GetShaderInfoLog) -@@ -738,6 +770,8 @@ - #define glGetSharpenTexFuncSGIS MANGLE(GetSharpenTexFuncSGIS) - #define glGetStringi MANGLE(GetStringi) - #define glGetString MANGLE(GetString) -+#define glGetSubroutineIndex MANGLE(GetSubroutineIndex) -+#define glGetSubroutineUniformLocation MANGLE(GetSubroutineUniformLocation) - #define glGetSynciv MANGLE(GetSynciv) - #define glGetTexBumpParameterfvATI MANGLE(GetTexBumpParameterfvATI) - #define glGetTexBumpParameterivATI MANGLE(GetTexBumpParameterivATI) -@@ -770,6 +804,7 @@ - #define glGetTransformFeedbackVaryingNV MANGLE(GetTransformFeedbackVaryingNV) - #define glGetUniformBlockIndex MANGLE(GetUniformBlockIndex) - #define glGetUniformBufferSizeEXT MANGLE(GetUniformBufferSizeEXT) -+#define glGetUniformdv MANGLE(GetUniformdv) - #define glGetUniformfvARB MANGLE(GetUniformfvARB) - #define glGetUniformfv MANGLE(GetUniformfv) - #define glGetUniformIndices MANGLE(GetUniformIndices) -@@ -778,6 +813,7 @@ - #define glGetUniformLocationARB MANGLE(GetUniformLocationARB) - #define glGetUniformLocation MANGLE(GetUniformLocation) - #define glGetUniformOffsetEXT MANGLE(GetUniformOffsetEXT) -+#define glGetUniformSubroutineuiv MANGLE(GetUniformSubroutineuiv) - #define glGetUniformui64vNV MANGLE(GetUniformui64vNV) - #define glGetUniformuivEXT MANGLE(GetUniformuivEXT) - #define glGetUniformuiv MANGLE(GetUniformuiv) -@@ -865,6 +901,7 @@ - #define glIsFramebuffer MANGLE(IsFramebuffer) - #define glIsList MANGLE(IsList) - #define glIsNamedBufferResidentNV MANGLE(IsNamedBufferResidentNV) -+#define glIsNamedStringARB MANGLE(IsNamedStringARB) - #define glIsObjectBufferATI MANGLE(IsObjectBufferATI) - #define glIsOcclusionQueryNV MANGLE(IsOcclusionQueryNV) - #define glIsProgramARB MANGLE(IsProgramARB) -@@ -874,10 +911,12 @@ - #define glIsQuery MANGLE(IsQuery) - #define glIsRenderbufferEXT MANGLE(IsRenderbufferEXT) - #define glIsRenderbuffer MANGLE(IsRenderbuffer) -+#define glIsSampler MANGLE(IsSampler) - #define glIsShader MANGLE(IsShader) - #define glIsSync MANGLE(IsSync) - #define glIsTextureEXT MANGLE(IsTextureEXT) - #define glIsTexture MANGLE(IsTexture) -+#define glIsTransformFeedback MANGLE(IsTransformFeedback) - #define glIsTransformFeedbackNV MANGLE(IsTransformFeedbackNV) - #define glIsVariantEnabledEXT MANGLE(IsVariantEnabledEXT) - #define glIsVertexArrayAPPLE MANGLE(IsVertexArrayAPPLE) -@@ -915,6 +954,8 @@ - #define glLogicOp MANGLE(LogicOp) - #define glMakeBufferNonResidentNV MANGLE(MakeBufferNonResidentNV) - #define glMakeBufferResidentNV MANGLE(MakeBufferResidentNV) -+#define glMakeNamedBufferNonResidentNV MANGLE(MakeNamedBufferNonResidentNV) -+#define glMakeNamedBufferResidentNV MANGLE(MakeNamedBufferResidentNV) - #define glMap1d MANGLE(Map1d) - #define glMap1f MANGLE(Map1f) - #define glMap2d MANGLE(Map2d) -@@ -1048,6 +1089,14 @@ - #define glMultiTexCoord4s MANGLE(MultiTexCoord4s) - #define glMultiTexCoord4svARB MANGLE(MultiTexCoord4svARB) - #define glMultiTexCoord4sv MANGLE(MultiTexCoord4sv) -+#define glMultiTexCoordP1ui MANGLE(MultiTexCoordP1ui) -+#define glMultiTexCoordP1uiv MANGLE(MultiTexCoordP1uiv) -+#define glMultiTexCoordP2ui MANGLE(MultiTexCoordP2ui) -+#define glMultiTexCoordP2uiv MANGLE(MultiTexCoordP2uiv) -+#define glMultiTexCoordP3ui MANGLE(MultiTexCoordP3ui) -+#define glMultiTexCoordP3uiv MANGLE(MultiTexCoordP3uiv) -+#define glMultiTexCoordP4ui MANGLE(MultiTexCoordP4ui) -+#define glMultiTexCoordP4uiv MANGLE(MultiTexCoordP4uiv) - #define glMultiTexCoordPointerEXT MANGLE(MultiTexCoordPointerEXT) - #define glMultiTexEnvfEXT MANGLE(MultiTexEnvfEXT) - #define glMultiTexEnvfvEXT MANGLE(MultiTexEnvfvEXT) -@@ -1087,8 +1136,6 @@ - #define glNamedFramebufferTextureEXT MANGLE(NamedFramebufferTextureEXT) - #define glNamedFramebufferTextureFaceEXT MANGLE(NamedFramebufferTextureFaceEXT) - #define glNamedFramebufferTextureLayerEXT MANGLE(NamedFramebufferTextureLayerEXT) --#define glNamedMakeBufferNonResidentNV MANGLE(NamedMakeBufferNonResidentNV) --#define glNamedMakeBufferResidentNV MANGLE(NamedMakeBufferResidentNV) - #define glNamedProgramLocalParameter4dEXT MANGLE(NamedProgramLocalParameter4dEXT) - #define glNamedProgramLocalParameter4dvEXT MANGLE(NamedProgramLocalParameter4dvEXT) - #define glNamedProgramLocalParameter4fEXT MANGLE(NamedProgramLocalParameter4fEXT) -@@ -1104,6 +1151,7 @@ - #define glNamedRenderbufferStorageEXT MANGLE(NamedRenderbufferStorageEXT) - #define glNamedRenderbufferStorageMultisampleCoverageEXT MANGLE(NamedRenderbufferStorageMultisampleCoverageEXT) - #define glNamedRenderbufferStorageMultisampleEXT MANGLE(NamedRenderbufferStorageMultisampleEXT) -+#define glNamedStringARB MANGLE(NamedStringARB) - #define glNewList MANGLE(NewList) - #define glNewObjectBufferATI MANGLE(NewObjectBufferATI) - #define glNormal3b MANGLE(Normal3b) -@@ -1121,6 +1169,8 @@ - #define glNormal3s MANGLE(Normal3s) - #define glNormal3sv MANGLE(Normal3sv) - #define glNormalFormatNV MANGLE(NormalFormatNV) -+#define glNormalP3ui MANGLE(NormalP3ui) -+#define glNormalP3uiv MANGLE(NormalP3uiv) - #define glNormalPointerEXT MANGLE(NormalPointerEXT) - #define glNormalPointerListIBM MANGLE(NormalPointerListIBM) - #define glNormalPointer MANGLE(NormalPointer) -@@ -1140,6 +1190,9 @@ - #define glOrtho MANGLE(Ortho) - #define glPassTexCoordATI MANGLE(PassTexCoordATI) - #define glPassThrough MANGLE(PassThrough) -+#define glPatchParameterfv MANGLE(PatchParameterfv) -+#define glPatchParameteri MANGLE(PatchParameteri) -+#define glPauseTransformFeedback MANGLE(PauseTransformFeedback) - #define glPauseTransformFeedbackNV MANGLE(PauseTransformFeedbackNV) - #define glPixelDataRangeNV MANGLE(PixelDataRangeNV) - #define glPixelMapfv MANGLE(PixelMapfv) -@@ -1231,38 +1284,55 @@ - #define glProgramParameters4dvNV MANGLE(ProgramParameters4dvNV) - #define glProgramParameters4fvNV MANGLE(ProgramParameters4fvNV) - #define glProgramStringARB MANGLE(ProgramStringARB) -+#define glProgramUniform1dEXT MANGLE(ProgramUniform1dEXT) -+#define glProgramUniform1dvEXT MANGLE(ProgramUniform1dvEXT) - #define glProgramUniform1fEXT MANGLE(ProgramUniform1fEXT) - #define glProgramUniform1fvEXT MANGLE(ProgramUniform1fvEXT) - #define glProgramUniform1iEXT MANGLE(ProgramUniform1iEXT) - #define glProgramUniform1ivEXT MANGLE(ProgramUniform1ivEXT) - #define glProgramUniform1uiEXT MANGLE(ProgramUniform1uiEXT) - #define glProgramUniform1uivEXT MANGLE(ProgramUniform1uivEXT) -+#define glProgramUniform2dEXT MANGLE(ProgramUniform2dEXT) -+#define glProgramUniform2dvEXT MANGLE(ProgramUniform2dvEXT) - #define glProgramUniform2fEXT MANGLE(ProgramUniform2fEXT) - #define glProgramUniform2fvEXT MANGLE(ProgramUniform2fvEXT) - #define glProgramUniform2iEXT MANGLE(ProgramUniform2iEXT) - #define glProgramUniform2ivEXT MANGLE(ProgramUniform2ivEXT) - #define glProgramUniform2uiEXT MANGLE(ProgramUniform2uiEXT) - #define glProgramUniform2uivEXT MANGLE(ProgramUniform2uivEXT) -+#define glProgramUniform3dEXT MANGLE(ProgramUniform3dEXT) -+#define glProgramUniform3dvEXT MANGLE(ProgramUniform3dvEXT) - #define glProgramUniform3fEXT MANGLE(ProgramUniform3fEXT) - #define glProgramUniform3fvEXT MANGLE(ProgramUniform3fvEXT) - #define glProgramUniform3iEXT MANGLE(ProgramUniform3iEXT) - #define glProgramUniform3ivEXT MANGLE(ProgramUniform3ivEXT) - #define glProgramUniform3uiEXT MANGLE(ProgramUniform3uiEXT) - #define glProgramUniform3uivEXT MANGLE(ProgramUniform3uivEXT) -+#define glProgramUniform4dEXT MANGLE(ProgramUniform4dEXT) -+#define glProgramUniform4dvEXT MANGLE(ProgramUniform4dvEXT) - #define glProgramUniform4fEXT MANGLE(ProgramUniform4fEXT) - #define glProgramUniform4fvEXT MANGLE(ProgramUniform4fvEXT) - #define glProgramUniform4iEXT MANGLE(ProgramUniform4iEXT) - #define glProgramUniform4ivEXT MANGLE(ProgramUniform4ivEXT) - #define glProgramUniform4uiEXT MANGLE(ProgramUniform4uiEXT) - #define glProgramUniform4uivEXT MANGLE(ProgramUniform4uivEXT) -+#define glProgramUniformMatrix2dvEXT MANGLE(ProgramUniformMatrix2dvEXT) - #define glProgramUniformMatrix2fvEXT MANGLE(ProgramUniformMatrix2fvEXT) -+#define glProgramUniformMatrix2x3dvEXT MANGLE(ProgramUniformMatrix2x3dvEXT) - #define glProgramUniformMatrix2x3fvEXT MANGLE(ProgramUniformMatrix2x3fvEXT) -+#define glProgramUniformMatrix2x4dvEXT MANGLE(ProgramUniformMatrix2x4dvEXT) - #define glProgramUniformMatrix2x4fvEXT MANGLE(ProgramUniformMatrix2x4fvEXT) -+#define glProgramUniformMatrix3dvEXT MANGLE(ProgramUniformMatrix3dvEXT) - #define glProgramUniformMatrix3fvEXT MANGLE(ProgramUniformMatrix3fvEXT) -+#define glProgramUniformMatrix3x2dvEXT MANGLE(ProgramUniformMatrix3x2dvEXT) - #define glProgramUniformMatrix3x2fvEXT MANGLE(ProgramUniformMatrix3x2fvEXT) -+#define glProgramUniformMatrix3x4dvEXT MANGLE(ProgramUniformMatrix3x4dvEXT) - #define glProgramUniformMatrix3x4fvEXT MANGLE(ProgramUniformMatrix3x4fvEXT) -+#define glProgramUniformMatrix4dvEXT MANGLE(ProgramUniformMatrix4dvEXT) - #define glProgramUniformMatrix4fvEXT MANGLE(ProgramUniformMatrix4fvEXT) -+#define glProgramUniformMatrix4x2dvEXT MANGLE(ProgramUniformMatrix4x2dvEXT) - #define glProgramUniformMatrix4x2fvEXT MANGLE(ProgramUniformMatrix4x2fvEXT) -+#define glProgramUniformMatrix4x3dvEXT MANGLE(ProgramUniformMatrix4x3dvEXT) - #define glProgramUniformMatrix4x3fvEXT MANGLE(ProgramUniformMatrix4x3fvEXT) - #define glProgramUniformui64NV MANGLE(ProgramUniformui64NV) - #define glProgramUniformui64vNV MANGLE(ProgramUniformui64vNV) -@@ -1274,6 +1344,7 @@ - #define glPushClientAttrib MANGLE(PushClientAttrib) - #define glPushMatrix MANGLE(PushMatrix) - #define glPushName MANGLE(PushName) -+#define glQueryCounter MANGLE(QueryCounter) - #define glRasterPos2d MANGLE(RasterPos2d) - #define glRasterPos2dv MANGLE(RasterPos2dv) - #define glRasterPos2f MANGLE(RasterPos2f) -@@ -1345,6 +1416,7 @@ - #define glResetMinmaxEXT MANGLE(ResetMinmaxEXT) - #define glResetMinmax MANGLE(ResetMinmax) - #define glResizeBuffersMESA MANGLE(ResizeBuffersMESA) -+#define glResumeTransformFeedback MANGLE(ResumeTransformFeedback) - #define glResumeTransformFeedbackNV MANGLE(ResumeTransformFeedbackNV) - #define glRotated MANGLE(Rotated) - #define glRotatef MANGLE(Rotatef) -@@ -1357,6 +1429,12 @@ - #define glSampleMaskSGIS MANGLE(SampleMaskSGIS) - #define glSamplePatternEXT MANGLE(SamplePatternEXT) - #define glSamplePatternSGIS MANGLE(SamplePatternSGIS) -+#define glSamplerParameterf MANGLE(SamplerParameterf) -+#define glSamplerParameterfv MANGLE(SamplerParameterfv) -+#define glSamplerParameterIiv MANGLE(SamplerParameterIiv) -+#define glSamplerParameteri MANGLE(SamplerParameteri) -+#define glSamplerParameterIuiv MANGLE(SamplerParameterIuiv) -+#define glSamplerParameteriv MANGLE(SamplerParameteriv) - #define glScaled MANGLE(Scaled) - #define glScalef MANGLE(Scalef) - #define glScissor MANGLE(Scissor) -@@ -1395,6 +1473,8 @@ - #define glSecondaryColor3usvEXT MANGLE(SecondaryColor3usvEXT) - #define glSecondaryColor3usv MANGLE(SecondaryColor3usv) - #define glSecondaryColorFormatNV MANGLE(SecondaryColorFormatNV) -+#define glSecondaryColorP3ui MANGLE(SecondaryColorP3ui) -+#define glSecondaryColorP3uiv MANGLE(SecondaryColorP3uiv) - #define glSecondaryColorPointerEXT MANGLE(SecondaryColorPointerEXT) - #define glSecondaryColorPointerListIBM MANGLE(SecondaryColorPointerListIBM) - #define glSecondaryColorPointer MANGLE(SecondaryColorPointer) -@@ -1509,6 +1589,14 @@ - #define glTexCoord4s MANGLE(TexCoord4s) - #define glTexCoord4sv MANGLE(TexCoord4sv) - #define glTexCoordFormatNV MANGLE(TexCoordFormatNV) -+#define glTexCoordP1ui MANGLE(TexCoordP1ui) -+#define glTexCoordP1uiv MANGLE(TexCoordP1uiv) -+#define glTexCoordP2ui MANGLE(TexCoordP2ui) -+#define glTexCoordP2uiv MANGLE(TexCoordP2uiv) -+#define glTexCoordP3ui MANGLE(TexCoordP3ui) -+#define glTexCoordP3uiv MANGLE(TexCoordP3uiv) -+#define glTexCoordP4ui MANGLE(TexCoordP4ui) -+#define glTexCoordP4uiv MANGLE(TexCoordP4uiv) - #define glTexCoordPointerEXT MANGLE(TexCoordPointerEXT) - #define glTexCoordPointerListIBM MANGLE(TexCoordPointerListIBM) - #define glTexCoordPointer MANGLE(TexCoordPointer) -@@ -1574,6 +1662,8 @@ - #define glTransformFeedbackVaryingsNV MANGLE(TransformFeedbackVaryingsNV) - #define glTranslated MANGLE(Translated) - #define glTranslatef MANGLE(Translatef) -+#define glUniform1d MANGLE(Uniform1d) -+#define glUniform1dv MANGLE(Uniform1dv) - #define glUniform1fARB MANGLE(Uniform1fARB) - #define glUniform1f MANGLE(Uniform1f) - #define glUniform1fvARB MANGLE(Uniform1fvARB) -@@ -1586,6 +1676,8 @@ - #define glUniform1ui MANGLE(Uniform1ui) - #define glUniform1uivEXT MANGLE(Uniform1uivEXT) - #define glUniform1uiv MANGLE(Uniform1uiv) -+#define glUniform2d MANGLE(Uniform2d) -+#define glUniform2dv MANGLE(Uniform2dv) - #define glUniform2fARB MANGLE(Uniform2fARB) - #define glUniform2f MANGLE(Uniform2f) - #define glUniform2fvARB MANGLE(Uniform2fvARB) -@@ -1598,6 +1690,8 @@ - #define glUniform2ui MANGLE(Uniform2ui) - #define glUniform2uivEXT MANGLE(Uniform2uivEXT) - #define glUniform2uiv MANGLE(Uniform2uiv) -+#define glUniform3d MANGLE(Uniform3d) -+#define glUniform3dv MANGLE(Uniform3dv) - #define glUniform3fARB MANGLE(Uniform3fARB) - #define glUniform3f MANGLE(Uniform3f) - #define glUniform3fvARB MANGLE(Uniform3fvARB) -@@ -1610,6 +1704,8 @@ - #define glUniform3ui MANGLE(Uniform3ui) - #define glUniform3uivEXT MANGLE(Uniform3uivEXT) - #define glUniform3uiv MANGLE(Uniform3uiv) -+#define glUniform4d MANGLE(Uniform4d) -+#define glUniform4dv MANGLE(Uniform4dv) - #define glUniform4fARB MANGLE(Uniform4fARB) - #define glUniform4f MANGLE(Uniform4f) - #define glUniform4fvARB MANGLE(Uniform4fvARB) -@@ -1624,18 +1720,28 @@ - #define glUniform4uiv MANGLE(Uniform4uiv) - #define glUniformBlockBinding MANGLE(UniformBlockBinding) - #define glUniformBufferEXT MANGLE(UniformBufferEXT) -+#define glUniformMatrix2dv MANGLE(UniformMatrix2dv) - #define glUniformMatrix2fvARB MANGLE(UniformMatrix2fvARB) - #define glUniformMatrix2fv MANGLE(UniformMatrix2fv) -+#define glUniformMatrix2x3dv MANGLE(UniformMatrix2x3dv) - #define glUniformMatrix2x3fv MANGLE(UniformMatrix2x3fv) -+#define glUniformMatrix2x4dv MANGLE(UniformMatrix2x4dv) - #define glUniformMatrix2x4fv MANGLE(UniformMatrix2x4fv) -+#define glUniformMatrix3dv MANGLE(UniformMatrix3dv) - #define glUniformMatrix3fvARB MANGLE(UniformMatrix3fvARB) - #define glUniformMatrix3fv MANGLE(UniformMatrix3fv) -+#define glUniformMatrix3x2dv MANGLE(UniformMatrix3x2dv) - #define glUniformMatrix3x2fv MANGLE(UniformMatrix3x2fv) -+#define glUniformMatrix3x4dv MANGLE(UniformMatrix3x4dv) - #define glUniformMatrix3x4fv MANGLE(UniformMatrix3x4fv) -+#define glUniformMatrix4dv MANGLE(UniformMatrix4dv) - #define glUniformMatrix4fvARB MANGLE(UniformMatrix4fvARB) - #define glUniformMatrix4fv MANGLE(UniformMatrix4fv) -+#define glUniformMatrix4x2dv MANGLE(UniformMatrix4x2dv) - #define glUniformMatrix4x2fv MANGLE(UniformMatrix4x2fv) -+#define glUniformMatrix4x3dv MANGLE(UniformMatrix4x3dv) - #define glUniformMatrix4x3fv MANGLE(UniformMatrix4x3fv) -+#define glUniformSubroutinesuiv MANGLE(UniformSubroutinesuiv) - #define glUniformui64NV MANGLE(Uniformui64NV) - #define glUniformui64vNV MANGLE(Uniformui64vNV) - #define glUnlockArraysEXT MANGLE(UnlockArraysEXT) -@@ -1844,6 +1950,14 @@ - #define glVertexAttribIFormatNV MANGLE(VertexAttribIFormatNV) - #define glVertexAttribIPointerEXT MANGLE(VertexAttribIPointerEXT) - #define glVertexAttribIPointer MANGLE(VertexAttribIPointer) -+#define glVertexAttribP1ui MANGLE(VertexAttribP1ui) -+#define glVertexAttribP1uiv MANGLE(VertexAttribP1uiv) -+#define glVertexAttribP2ui MANGLE(VertexAttribP2ui) -+#define glVertexAttribP2uiv MANGLE(VertexAttribP2uiv) -+#define glVertexAttribP3ui MANGLE(VertexAttribP3ui) -+#define glVertexAttribP3uiv MANGLE(VertexAttribP3uiv) -+#define glVertexAttribP4ui MANGLE(VertexAttribP4ui) -+#define glVertexAttribP4uiv MANGLE(VertexAttribP4uiv) - #define glVertexAttribPointerARB MANGLE(VertexAttribPointerARB) - #define glVertexAttribPointer MANGLE(VertexAttribPointer) - #define glVertexAttribPointerNV MANGLE(VertexAttribPointerNV) -@@ -1868,6 +1982,12 @@ - #define glVertexBlendEnvfATI MANGLE(VertexBlendEnvfATI) - #define glVertexBlendEnviATI MANGLE(VertexBlendEnviATI) - #define glVertexFormatNV MANGLE(VertexFormatNV) -+#define glVertexP2ui MANGLE(VertexP2ui) -+#define glVertexP2uiv MANGLE(VertexP2uiv) -+#define glVertexP3ui MANGLE(VertexP3ui) -+#define glVertexP3uiv MANGLE(VertexP3uiv) -+#define glVertexP4ui MANGLE(VertexP4ui) -+#define glVertexP4uiv MANGLE(VertexP4uiv) - #define glVertexPointerEXT MANGLE(VertexPointerEXT) - #define glVertexPointerListIBM MANGLE(VertexPointerListIBM) - #define glVertexPointer MANGLE(VertexPointer) -diff --git a/src/gallium/auxiliary/tgsi/tgsi_ureg.c b/src/gallium/auxiliary/tgsi/tgsi_ureg.c -index 3d0455d..db7bf17 100644 ---- a/src/gallium/auxiliary/tgsi/tgsi_ureg.c -+++ b/src/gallium/auxiliary/tgsi/tgsi_ureg.c -@@ -1489,6 +1489,12 @@ const struct tgsi_token *ureg_get_tokens( struct ureg_program *ureg, - } - - -+void ureg_free_tokens( const struct tgsi_token *tokens ) -+{ -+ FREE((struct tgsi_token *)tokens); -+} -+ -+ - struct ureg_program *ureg_create( unsigned processor ) - { - struct ureg_program *ureg = CALLOC_STRUCT( ureg_program ); -diff --git a/src/gallium/auxiliary/tgsi/tgsi_ureg.h b/src/gallium/auxiliary/tgsi/tgsi_ureg.h -index 0130a77..8302d1b 100644 ---- a/src/gallium/auxiliary/tgsi/tgsi_ureg.h -+++ b/src/gallium/auxiliary/tgsi/tgsi_ureg.h -@@ -104,6 +104,10 @@ ureg_get_tokens( struct ureg_program *ureg, - unsigned *nr_tokens ); - - -+/* Free the tokens created by ureg_get_tokens() */ -+void ureg_free_tokens( const struct tgsi_token *tokens ); -+ -+ - void - ureg_destroy( struct ureg_program * ); - -diff --git a/src/gallium/state_trackers/egl/x11/glxinit.c b/src/gallium/state_trackers/egl/x11/glxinit.c -index 1ed2afd..dd35189 100644 ---- a/src/gallium/state_trackers/egl/x11/glxinit.c -+++ b/src/gallium/state_trackers/egl/x11/glxinit.c -@@ -16,6 +16,8 @@ - - #include "glxinit.h" - -+#ifdef GLX_DIRECT_RENDERING -+ - typedef struct GLXGenericGetString - { - CARD8 reqType; -@@ -680,3 +682,5 @@ __glXInitialize(Display * dpy) - - return dpyPriv; - } -+ -+#endif /* GLX_DIRECT_RENDERING */ -diff --git a/src/gallium/state_trackers/egl/x11/native_dri2.c b/src/gallium/state_trackers/egl/x11/native_dri2.c -index 8d2a8b1..a8bdd34 100644 ---- a/src/gallium/state_trackers/egl/x11/native_dri2.c -+++ b/src/gallium/state_trackers/egl/x11/native_dri2.c -@@ -37,6 +37,8 @@ - #include "native_x11.h" - #include "x11_screen.h" - -+#ifdef GLX_DIRECT_RENDERING -+ - enum dri2_surface_type { - DRI2_SURFACE_TYPE_WINDOW, - DRI2_SURFACE_TYPE_PIXMAP, -@@ -878,3 +880,15 @@ x11_create_dri2_display(EGLNativeDisplayType dpy, - - return &dri2dpy->base; - } -+ -+#else /* GLX_DIRECT_RENDERING */ -+ -+struct native_display * -+x11_create_dri2_display(EGLNativeDisplayType dpy, -+ struct native_event_handler *event_handler, -+ struct drm_api *api) -+{ -+ return NULL; -+} -+ -+#endif /* GLX_DIRECT_RENDERING */ -diff --git a/src/gallium/state_trackers/egl/x11/native_x11.c b/src/gallium/state_trackers/egl/x11/native_x11.c -index 7b4fe63..0c25e4d 100644 ---- a/src/gallium/state_trackers/egl/x11/native_x11.c -+++ b/src/gallium/state_trackers/egl/x11/native_x11.c -@@ -70,7 +70,9 @@ native_create_probe(EGLNativeDisplayType dpy) - xscr = x11_screen_create(xdpy, scr); - if (xscr) { - if (x11_screen_support(xscr, X11_SCREEN_EXTENSION_DRI2)) { -+#ifdef GLX_DIRECT_RENDERING - driver_name = x11_screen_probe_dri2(xscr, NULL, NULL); -+#endif - if (driver_name) - nprobe->data = strdup(driver_name); - } -diff --git a/src/gallium/state_trackers/egl/x11/x11_screen.c b/src/gallium/state_trackers/egl/x11/x11_screen.c -index f409611..1706120 100644 ---- a/src/gallium/state_trackers/egl/x11/x11_screen.c -+++ b/src/gallium/state_trackers/egl/x11/x11_screen.c -@@ -39,8 +39,10 @@ - #include "glxinit.h" - - struct x11_screen { -+#ifdef GLX_DIRECT_RENDERING - /* dummy base class */ - struct __GLXDRIdisplayRec base; -+#endif - - Display *dpy; - int number; -@@ -103,15 +105,19 @@ x11_screen_destroy(struct x11_screen *xscr) - if (xscr->dri_device) - Xfree(xscr->dri_device); - -+#ifdef GLX_DIRECT_RENDERING - /* xscr->glx_dpy will be destroyed with the X display */ - if (xscr->glx_dpy) - xscr->glx_dpy->dri2Display = NULL; -+#endif - - if (xscr->visuals) - XFree(xscr->visuals); - free(xscr); - } - -+#ifdef GLX_DIRECT_RENDERING -+ - static boolean - x11_screen_init_dri2(struct x11_screen *xscr) - { -@@ -133,6 +139,8 @@ x11_screen_init_glx(struct x11_screen *xscr) - return (xscr->glx_dpy != NULL); - } - -+#endif /* GLX_DIRECT_RENDERING */ -+ - /** - * Return true if the screen supports the extension. - */ -@@ -145,12 +153,14 @@ x11_screen_support(struct x11_screen *xscr, enum x11_screen_extension ext) - case X11_SCREEN_EXTENSION_XSHM: - supported = XShmQueryExtension(xscr->dpy); - break; -+#ifdef GLX_DIRECT_RENDERING - case X11_SCREEN_EXTENSION_GLX: - supported = x11_screen_init_glx(xscr); - break; - case X11_SCREEN_EXTENSION_DRI2: - supported = x11_screen_init_dri2(xscr); - break; -+#endif - default: - break; - } -@@ -234,6 +244,39 @@ x11_screen_convert_visual(struct x11_screen *xscr, const XVisualInfo *visual, - } - - /** -+ * Return the depth of a drawable. -+ * -+ * Unlike other drawable functions, the drawable needs not be a DRI2 drawable. -+ */ -+uint -+x11_drawable_get_depth(struct x11_screen *xscr, Drawable drawable) -+{ -+ unsigned int depth; -+ -+ if (drawable != xscr->last_drawable) { -+ Window root; -+ int x, y; -+ unsigned int w, h, border; -+ Status ok; -+ -+ ok = XGetGeometry(xscr->dpy, drawable, &root, -+ &x, &y, &w, &h, &border, &depth); -+ if (!ok) -+ depth = 0; -+ -+ xscr->last_drawable = drawable; -+ xscr->last_depth = depth; -+ } -+ else { -+ depth = xscr->last_depth; -+ } -+ -+ return depth; -+} -+ -+#ifdef GLX_DIRECT_RENDERING -+ -+/** - * Return the GLX fbconfigs. - */ - const __GLcontextModes * -@@ -392,37 +435,6 @@ x11_drawable_get_buffers(struct x11_screen *xscr, Drawable drawable, - } - - /** -- * Return the depth of a drawable. -- * -- * Unlike other drawable functions, the drawable needs not be a DRI2 drawable. -- */ --uint --x11_drawable_get_depth(struct x11_screen *xscr, Drawable drawable) --{ -- unsigned int depth; -- -- if (drawable != xscr->last_drawable) { -- Window root; -- int x, y; -- unsigned int w, h, border; -- Status ok; -- -- ok = XGetGeometry(xscr->dpy, drawable, &root, -- &x, &y, &w, &h, &border, &depth); -- if (!ok) -- depth = 0; -- -- xscr->last_drawable = drawable; -- xscr->last_depth = depth; -- } -- else { -- depth = xscr->last_depth; -- } -- -- return depth; --} -- --/** - * Create a mode list of the given size. - */ - __GLcontextModes * -@@ -489,3 +501,5 @@ dri2InvalidateBuffers(Display *dpy, XID drawable) - - xscr->dri_invalidate_buffers(xscr, drawable, xscr->dri_user_data); - } -+ -+#endif /* GLX_DIRECT_RENDERING */ -diff --git a/src/gallium/state_trackers/egl/x11/x11_screen.h b/src/gallium/state_trackers/egl/x11/x11_screen.h -index 37e8d5a..55e1201 100644 ---- a/src/gallium/state_trackers/egl/x11/x11_screen.h -+++ b/src/gallium/state_trackers/egl/x11/x11_screen.h -@@ -68,20 +68,18 @@ void - x11_screen_convert_visual(struct x11_screen *xscr, const XVisualInfo *visual, - __GLcontextModes *mode); - -+uint -+x11_drawable_get_depth(struct x11_screen *xscr, Drawable drawable); -+ -+#ifdef GLX_DIRECT_RENDERING -+ -+/* GLX */ - const __GLcontextModes * - x11_screen_get_glx_configs(struct x11_screen *xscr); - - const __GLcontextModes * - x11_screen_get_glx_visuals(struct x11_screen *xscr); - --const char * --x11_screen_probe_dri2(struct x11_screen *xscr, int *major, int *minor); -- --int --x11_screen_enable_dri2(struct x11_screen *xscr, -- x11_drawable_invalidate_buffers invalidate_buffers, -- void *user_data); -- - __GLcontextModes * - x11_context_modes_create(unsigned count); - -@@ -91,6 +89,15 @@ x11_context_modes_destroy(__GLcontextModes *modes); - unsigned - x11_context_modes_count(const __GLcontextModes *modes); - -+/* DRI2 */ -+const char * -+x11_screen_probe_dri2(struct x11_screen *xscr, int *major, int *minor); -+ -+int -+x11_screen_enable_dri2(struct x11_screen *xscr, -+ x11_drawable_invalidate_buffers invalidate_buffers, -+ void *user_data); -+ - void - x11_drawable_enable_dri2(struct x11_screen *xscr, - Drawable drawable, boolean on); -@@ -105,7 +112,6 @@ x11_drawable_get_buffers(struct x11_screen *xscr, Drawable drawable, - int *width, int *height, unsigned int *attachments, - boolean with_format, int num_ins, int *num_outs); - --uint --x11_drawable_get_depth(struct x11_screen *xscr, Drawable drawable); -+#endif /* GLX_DIRECT_RENDERING */ - - #endif /* _X11_SCREEN_H_ */ -diff --git a/src/gallium/winsys/drm/Makefile.egl b/src/gallium/winsys/drm/Makefile.egl -index 8363de6..c48967f 100644 ---- a/src/gallium/winsys/drm/Makefile.egl -+++ b/src/gallium/winsys/drm/Makefile.egl -@@ -11,7 +11,7 @@ - - EGL_DRIVER_OBJECTS = $(EGL_DRIVER_SOURCES:.c=.o) - --common_LIBS = -ldrm -lm -ldl -+common_LIBS = -ldrm -lm $(DLOPEN_LIBS) - - x11_ST = $(TOP)/src/gallium/state_trackers/egl/libeglx11.a - x11_LIBS = $(common_LIBS) -lX11 -lXext -lXfixes -diff --git a/src/glw/Makefile b/src/glw/Makefile -index 1fb3d3c..39352f0 100644 ---- a/src/glw/Makefile -+++ b/src/glw/Makefile -@@ -17,7 +17,7 @@ OBJECTS = $(GLW_SOURCES:.c=.o) - ##### RULES ##### - - .c.o: -- $(CC) -c $(INCDIRS) $(CFLAGS) $< -+ $(CC) -c $(INCDIRS) $(CFLAGS) $(GLW_CFLAGS) $< - - - -diff --git a/src/mesa/drivers/dri/r300/compiler/radeon_pair_schedule.c b/src/mesa/drivers/dri/r300/compiler/radeon_pair_schedule.c -index df67aaf..b8ee288 100644 ---- a/src/mesa/drivers/dri/r300/compiler/radeon_pair_schedule.c -+++ b/src/mesa/drivers/dri/r300/compiler/radeon_pair_schedule.c -@@ -141,12 +141,28 @@ static void add_inst_to_list(struct schedule_instruction ** list, struct schedul - *list = inst; - } - -+static void add_inst_to_list_end(struct schedule_instruction ** list, -+ struct schedule_instruction * inst) -+{ -+ if(!*list){ -+ *list = inst; -+ }else{ -+ struct schedule_instruction * temp = *list; -+ while(temp->NextReady){ -+ temp = temp->NextReady; -+ } -+ temp->NextReady = inst; -+ } -+} -+ - static void instruction_ready(struct schedule_state * s, struct schedule_instruction * sinst) - { - DBG("%i is now ready\n", sinst->Instruction->IP); - -+ /* Adding Ready TEX instructions to the end of the "Ready List" helps -+ * us emit TEX instructions in blocks without losing our place. */ - if (sinst->Instruction->Type == RC_INSTRUCTION_NORMAL) -- add_inst_to_list(&s->ReadyTEX, sinst); -+ add_inst_to_list_end(&s->ReadyTEX, sinst); - else if (sinst->Instruction->U.P.Alpha.Opcode == RC_OPCODE_NOP) - add_inst_to_list(&s->ReadyRGB, sinst); - else if (sinst->Instruction->U.P.RGB.Opcode == RC_OPCODE_NOP) -@@ -163,11 +179,14 @@ static void decrease_dependencies(struct schedule_state * s, struct schedule_ins - instruction_ready(s, sinst); - } - --static void commit_instruction(struct schedule_state * s, struct schedule_instruction * sinst) --{ -- DBG("%i: commit\n", sinst->Instruction->IP); -- -- for(unsigned int i = 0; i < sinst->NumReadValues; ++i) { -+/** -+ * This function decreases the dependencies of the next instruction that -+ * wants to write to each of sinst's read values. -+ */ -+static void commit_update_reads(struct schedule_state * s, -+ struct schedule_instruction * sinst){ -+ unsigned int i; -+ for(i = 0; i < sinst->NumReadValues; ++i) { - struct reg_value * v = sinst->ReadValues[i]; - assert(v->NumReaders > 0); - v->NumReaders--; -@@ -176,8 +195,12 @@ static void commit_instruction(struct schedule_state * s, struct schedule_instru - decrease_dependencies(s, v->Next->Writer); - } - } -+} - -- for(unsigned int i = 0; i < sinst->NumWriteValues; ++i) { -+static void commit_update_writes(struct schedule_state * s, -+ struct schedule_instruction * sinst){ -+ unsigned int i; -+ for(i = 0; i < sinst->NumWriteValues; ++i) { - struct reg_value * v = sinst->WriteValues[i]; - if (v->NumReaders) { - for(struct reg_value_reader * r = v->Readers; r; r = r->Next) { -@@ -196,6 +219,15 @@ static void commit_instruction(struct schedule_state * s, struct schedule_instru - } - } - -+static void commit_alu_instruction(struct schedule_state * s, struct schedule_instruction * sinst) -+{ -+ DBG("%i: commit\n", sinst->Instruction->IP); -+ -+ commit_update_reads(s, sinst); -+ -+ commit_update_writes(s, sinst); -+} -+ - /** - * Emit all ready texture instructions in a single block. - * -@@ -208,21 +240,37 @@ static void emit_all_tex(struct schedule_state * s, struct rc_instruction * befo - - assert(s->ReadyTEX); - -- /* Don't let the ready list change under us! */ -- readytex = s->ReadyTEX; -- s->ReadyTEX = 0; -- - /* Node marker for R300 */ - struct rc_instruction * inst_begin = rc_insert_new_instruction(s->C, before->Prev); - inst_begin->U.I.Opcode = RC_OPCODE_BEGIN_TEX; - - /* Link texture instructions back in */ -+ readytex = s->ReadyTEX; - while(readytex) { -- struct schedule_instruction * tex = readytex; -+ rc_insert_instruction(before->Prev, readytex->Instruction); -+ DBG("%i: commit TEX reads\n", readytex->Instruction->IP); -+ -+ /* All of the TEX instructions in the same TEX block have -+ * their source registers read from before any of the -+ * instructions in that block write to their destination -+ * registers. This means that when we commit a TEX -+ * instruction, any other TEX instruction that wants to write -+ * to one of the committed instruction's source register can be -+ * marked as ready and should be emitted in the same TEX -+ * block. This prevents the following sequence from being -+ * emitted in two different TEX blocks: -+ * 0: TEX temp[0].xyz, temp[1].xy__, 2D[0]; -+ * 1: TEX temp[1].xyz, temp[2].xy__, 2D[0]; -+ */ -+ commit_update_reads(s, readytex); -+ readytex = readytex->NextReady; -+ } -+ readytex = s->ReadyTEX; -+ s->ReadyTEX = 0; -+ while(readytex){ -+ DBG("%i: commit TEX writes\n", readytex->Instruction->IP); -+ commit_update_writes(s, readytex); - readytex = readytex->NextReady; -- -- rc_insert_instruction(before->Prev, tex->Instruction); -- commit_instruction(s, tex); - } - } - -@@ -328,7 +376,7 @@ static void emit_one_alu(struct schedule_state *s, struct rc_instruction * befor - } - - rc_insert_instruction(before->Prev, sinst->Instruction); -- commit_instruction(s, sinst); -+ commit_alu_instruction(s, sinst); - } else { - struct schedule_instruction **prgb; - struct schedule_instruction **palpha; -@@ -346,8 +394,8 @@ static void emit_one_alu(struct schedule_state *s, struct rc_instruction * befor - *prgb = (*prgb)->NextReady; - *palpha = (*palpha)->NextReady; - rc_insert_instruction(before->Prev, psirgb->Instruction); -- commit_instruction(s, psirgb); -- commit_instruction(s, psialpha); -+ commit_alu_instruction(s, psirgb); -+ commit_alu_instruction(s, psialpha); - goto success; - } - } -@@ -357,7 +405,7 @@ static void emit_one_alu(struct schedule_state *s, struct rc_instruction * befor - s->ReadyRGB = s->ReadyRGB->NextReady; - - rc_insert_instruction(before->Prev, sinst->Instruction); -- commit_instruction(s, sinst); -+ commit_alu_instruction(s, sinst); - success: ; - } - } -diff --git a/src/mesa/drivers/dri/r300/r300_context.c b/src/mesa/drivers/dri/r300/r300_context.c -index 689bb13..4cbd4f2 100644 ---- a/src/mesa/drivers/dri/r300/r300_context.c -+++ b/src/mesa/drivers/dri/r300/r300_context.c -@@ -456,7 +456,7 @@ static void r300InitGLExtensions(GLcontext *ctx) - if (!r300->radeon.radeonScreen->drmSupportsOcclusionQueries) { - _mesa_disable_extension(ctx, "GL_ARB_occlusion_query"); - } -- if (r300->radeon.radeonScreen->chip_family >= CHIP_FAMILY_RV350) -+ if (r300->radeon.radeonScreen->chip_family >= CHIP_FAMILY_R420) - _mesa_enable_extension(ctx, "GL_ARB_half_float_vertex"); - - if (r300->radeon.radeonScreen->chip_family >= CHIP_FAMILY_RV515) -diff --git a/src/mesa/drivers/dri/r300/r300_draw.c b/src/mesa/drivers/dri/r300/r300_draw.c -index 282c0e1..5ae9f49 100644 ---- a/src/mesa/drivers/dri/r300/r300_draw.c -+++ b/src/mesa/drivers/dri/r300/r300_draw.c -@@ -523,8 +523,7 @@ static void r300AllocDmaRegions(GLcontext *ctx, const struct gl_client_array *in - r300ConvertAttrib(ctx, count, input[i], &vbuf->attribs[index]); - } else { - if (input[i]->BufferObj->Name) { -- if (stride % 4 != 0) { -- assert(((intptr_t) input[i]->Ptr) % input[i]->StrideB == 0); -+ if (stride % 4 != 0 || (intptr_t)input[i]->Ptr % 4 != 0) { - r300AlignDataToDword(ctx, input[i], count, &vbuf->attribs[index]); - vbuf->attribs[index].is_named_bo = GL_FALSE; - } else { -diff --git a/src/mesa/drivers/dri/r600/r700_assembler.c b/src/mesa/drivers/dri/r600/r700_assembler.c -index 834bcc6..7b957fb 100644 ---- a/src/mesa/drivers/dri/r600/r700_assembler.c -+++ b/src/mesa/drivers/dri/r600/r700_assembler.c -@@ -293,7 +293,9 @@ GLuint GetSurfaceFormat(GLenum eType, GLuint nChannels, GLuint * pClient_size) - case 2: - format = FMT_16_16; break; - case 3: -- format = FMT_16_16_16; break; -+ /* 3 comp GL_SHORT vertex format doesnt work on r700 -+ 4 somehow works, test - sauerbraten */ -+ format = FMT_16_16_16_16; break; - case 4: - format = FMT_16_16_16_16; break; - default: -@@ -1051,6 +1053,67 @@ void checkop_init(r700_AssemblerBase* pAsm) - pAsm->aArgSubst[3] = -1; - } - -+static GLboolean next_ins(r700_AssemblerBase *pAsm) -+{ -+ struct prog_instruction *pILInst = &(pAsm->pILInst[pAsm->uiCurInst]); -+ -+ if (GL_TRUE == pAsm->is_tex) -+ { -+ if (pILInst->TexSrcTarget == TEXTURE_RECT_INDEX) -+ { -+ if (GL_FALSE == assemble_tex_instruction(pAsm, GL_FALSE)) -+ { -+ radeon_error("Error assembling TEX instruction\n"); -+ return GL_FALSE; -+ } -+ } -+ else -+ { -+ if (GL_FALSE == assemble_tex_instruction(pAsm, GL_TRUE)) -+ { -+ radeon_error("Error assembling TEX instruction\n"); -+ return GL_FALSE; -+ } -+ } -+ } -+ else -+ { //ALU -+ if (GL_FALSE == assemble_alu_instruction(pAsm)) -+ { -+ radeon_error("Error assembling ALU instruction\n"); -+ return GL_FALSE; -+ } -+ } -+ -+ if (pAsm->D.dst.rtype == DST_REG_OUT) -+ { -+ assert(pAsm->D.dst.reg >= pAsm->starting_export_register_number); -+ -+ if (pAsm->D.dst.op3) -+ { -+ // There is no mask for OP3 instructions, so all channels are written -+ pAsm->pucOutMask[pAsm->D.dst.reg - pAsm->starting_export_register_number] = 0xF; -+ } -+ else -+ { -+ pAsm->pucOutMask[pAsm->D.dst.reg - pAsm->starting_export_register_number] -+ |= (unsigned char)pAsm->pILInst[pAsm->uiCurInst].DstReg.WriteMask; -+ } -+ } -+ -+ //reset for next inst. -+ pAsm->D.bits = 0; -+ pAsm->D2.bits = 0; -+ pAsm->S[0].bits = 0; -+ pAsm->S[1].bits = 0; -+ pAsm->S[2].bits = 0; -+ pAsm->is_tex = GL_FALSE; -+ pAsm->need_tex_barrier = GL_FALSE; -+ pAsm->D2.bits = 0; -+ pAsm->C[0].bits = pAsm->C[1].bits = pAsm->C[2].bits = pAsm->C[3].bits = 0; -+ return GL_TRUE; -+} -+ - GLboolean mov_temp(r700_AssemblerBase* pAsm, int src) - { - GLuint tmp = gethelpr(pAsm); -@@ -1201,7 +1264,7 @@ GLboolean checkop3(r700_AssemblerBase* pAsm) - { - if( GL_FALSE == mov_temp(pAsm, 1) ) - { -- return 1; -+ return GL_FALSE; - } - } - -@@ -2578,62 +2641,6 @@ GLboolean assemble_alu_instruction(r700_AssemblerBase *pAsm) - return GL_TRUE; - } - --GLboolean next_ins(r700_AssemblerBase *pAsm) --{ -- struct prog_instruction *pILInst = &(pAsm->pILInst[pAsm->uiCurInst]); -- -- if( GL_TRUE == pAsm->is_tex ) -- { -- if (pILInst->TexSrcTarget == TEXTURE_RECT_INDEX) { -- if( GL_FALSE == assemble_tex_instruction(pAsm, GL_FALSE) ) -- { -- radeon_error("Error assembling TEX instruction\n"); -- return GL_FALSE; -- } -- } else { -- if( GL_FALSE == assemble_tex_instruction(pAsm, GL_TRUE) ) -- { -- radeon_error("Error assembling TEX instruction\n"); -- return GL_FALSE; -- } -- } -- } -- else -- { //ALU -- if( GL_FALSE == assemble_alu_instruction(pAsm) ) -- { -- radeon_error("Error assembling ALU instruction\n"); -- return GL_FALSE; -- } -- } -- -- if(pAsm->D.dst.rtype == DST_REG_OUT) -- { -- if(pAsm->D.dst.op3) -- { -- // There is no mask for OP3 instructions, so all channels are written -- pAsm->pucOutMask[pAsm->D.dst.reg - pAsm->starting_export_register_number] = 0xF; -- } -- else -- { -- pAsm->pucOutMask[pAsm->D.dst.reg - pAsm->starting_export_register_number] -- |= (unsigned char)pAsm->pILInst[pAsm->uiCurInst].DstReg.WriteMask; -- } -- } -- -- //reset for next inst. -- pAsm->D.bits = 0; -- pAsm->D2.bits = 0; -- pAsm->S[0].bits = 0; -- pAsm->S[1].bits = 0; -- pAsm->S[2].bits = 0; -- pAsm->is_tex = GL_FALSE; -- pAsm->need_tex_barrier = GL_FALSE; -- pAsm->D2.bits = 0; -- pAsm->C[0].bits = pAsm->C[1].bits = pAsm->C[2].bits = pAsm->C[3].bits = 0; -- return GL_TRUE; --} -- - GLboolean assemble_math_function(r700_AssemblerBase* pAsm, BITS opcode) - { - BITS tmp; -@@ -2865,25 +2872,92 @@ GLboolean assemble_CMP(r700_AssemblerBase *pAsm) - - GLboolean assemble_TRIG(r700_AssemblerBase *pAsm, BITS opcode) - { -+ /* -+ * r600 - trunc to -PI..PI range -+ * r700 - normalize by dividing by 2PI -+ * see fdo bug 27901 -+ */ -+ - int tmp; - checkop1(pAsm); - - tmp = gethelpr(pAsm); - -- pAsm->D.dst.opcode = SQ_OP2_INST_MUL; -+ pAsm->D.dst.opcode = SQ_OP3_INST_MULADD; -+ pAsm->D.dst.op3 = 1; -+ - setaddrmode_PVSDST(&(pAsm->D.dst), ADDR_ABSOLUTE); - pAsm->D.dst.rtype = DST_REG_TEMPORARY; - pAsm->D.dst.reg = tmp; -- pAsm->D.dst.writex = 1; - - assemble_src(pAsm, 0, -1); - - pAsm->S[1].src.rtype = SRC_REC_LITERAL; - setswizzle_PVSSRC(&(pAsm->S[1].src), SQ_SEL_X); -+ -+ pAsm->S[2].src.rtype = SRC_REC_LITERAL; -+ setswizzle_PVSSRC(&(pAsm->S[2].src), SQ_SEL_Y); -+ - pAsm->D2.dst2.literal_slots = 1; - pAsm->C[0].f = 1/(3.1415926535 * 2); -- pAsm->C[1].f = 0.0F; -- next_ins(pAsm); -+ pAsm->C[1].f = 0.5f; -+ -+ if ( GL_FALSE == next_ins(pAsm) ) -+ { -+ return GL_FALSE; -+ } -+ -+ pAsm->D.dst.opcode = SQ_OP2_INST_FRACT; -+ -+ setaddrmode_PVSDST(&(pAsm->D.dst), ADDR_ABSOLUTE); -+ pAsm->D.dst.rtype = DST_REG_TEMPORARY; -+ pAsm->D.dst.reg = tmp; -+ pAsm->D.dst.writex = 1; -+ -+ setaddrmode_PVSSRC(&(pAsm->S[0].src), ADDR_ABSOLUTE); -+ pAsm->S[0].src.rtype = SRC_REG_TEMPORARY; -+ pAsm->S[0].src.reg = tmp; -+ setswizzle_PVSSRC(&(pAsm->S[0].src), SQ_SEL_X); -+ -+ if(( GL_FALSE == next_ins(pAsm) )) -+ { -+ return GL_FALSE; -+ } -+ pAsm->D.dst.opcode = SQ_OP3_INST_MULADD; -+ pAsm->D.dst.op3 = 1; -+ -+ setaddrmode_PVSDST(&(pAsm->D.dst), ADDR_ABSOLUTE); -+ pAsm->D.dst.rtype = DST_REG_TEMPORARY; -+ pAsm->D.dst.reg = tmp; -+ -+ setaddrmode_PVSSRC(&(pAsm->S[0].src), ADDR_ABSOLUTE); -+ pAsm->S[0].src.rtype = SRC_REG_TEMPORARY; -+ pAsm->S[0].src.reg = tmp; -+ setswizzle_PVSSRC(&(pAsm->S[0].src), SQ_SEL_X); -+ -+ pAsm->S[1].src.rtype = SRC_REC_LITERAL; -+ setswizzle_PVSSRC(&(pAsm->S[1].src), SQ_SEL_X); -+ -+ pAsm->S[2].src.rtype = SRC_REC_LITERAL; -+ setswizzle_PVSSRC(&(pAsm->S[2].src), SQ_SEL_Y); -+ -+ pAsm->D2.dst2.literal_slots = 1; -+ -+ if (pAsm->bR6xx) -+ { -+ pAsm->C[0].f = 3.1415926535897f * 2.0f; -+ pAsm->C[1].f = -3.1415926535897f; -+ } -+ else -+ { -+ pAsm->C[0].f = 1.0f; -+ pAsm->C[1].f = -0.5f; -+ } -+ -+ if(( GL_FALSE == next_ins(pAsm) )) -+ { -+ return GL_FALSE; -+ } - - pAsm->D.dst.opcode = opcode; - pAsm->D.dst.math = 1; -@@ -4023,22 +4097,79 @@ GLboolean assemble_SCS(r700_AssemblerBase *pAsm) - checkop1(pAsm); - - tmp = gethelpr(pAsm); -- /* tmp.x = src /2*PI */ -- pAsm->D.dst.opcode = SQ_OP2_INST_MUL; -+ -+ pAsm->D.dst.opcode = SQ_OP3_INST_MULADD; -+ pAsm->D.dst.op3 = 1; -+ - setaddrmode_PVSDST(&(pAsm->D.dst), ADDR_ABSOLUTE); - pAsm->D.dst.rtype = DST_REG_TEMPORARY; - pAsm->D.dst.reg = tmp; -- pAsm->D.dst.writex = 1; - - assemble_src(pAsm, 0, -1); - - pAsm->S[1].src.rtype = SRC_REC_LITERAL; - setswizzle_PVSSRC(&(pAsm->S[1].src), SQ_SEL_X); -+ -+ pAsm->S[2].src.rtype = SRC_REC_LITERAL; -+ setswizzle_PVSSRC(&(pAsm->S[2].src), SQ_SEL_Y); -+ - pAsm->D2.dst2.literal_slots = 1; - pAsm->C[0].f = 1/(3.1415926535 * 2); -- pAsm->C[1].f = 0.0F; -+ pAsm->C[1].f = 0.5F; - -- next_ins(pAsm); -+ if ( GL_FALSE == next_ins(pAsm) ) -+ { -+ return GL_FALSE; -+ } -+ -+ pAsm->D.dst.opcode = SQ_OP2_INST_FRACT; -+ -+ setaddrmode_PVSDST(&(pAsm->D.dst), ADDR_ABSOLUTE); -+ pAsm->D.dst.rtype = DST_REG_TEMPORARY; -+ pAsm->D.dst.reg = tmp; -+ pAsm->D.dst.writex = 1; -+ -+ setaddrmode_PVSSRC(&(pAsm->S[0].src), ADDR_ABSOLUTE); -+ pAsm->S[0].src.rtype = SRC_REG_TEMPORARY; -+ pAsm->S[0].src.reg = tmp; -+ setswizzle_PVSSRC(&(pAsm->S[0].src), SQ_SEL_X); -+ -+ if(( GL_FALSE == next_ins(pAsm) )) -+ { -+ return GL_FALSE; -+ } -+ pAsm->D.dst.opcode = SQ_OP3_INST_MULADD; -+ pAsm->D.dst.op3 = 1; -+ -+ setaddrmode_PVSDST(&(pAsm->D.dst), ADDR_ABSOLUTE); -+ pAsm->D.dst.rtype = DST_REG_TEMPORARY; -+ pAsm->D.dst.reg = tmp; -+ -+ setaddrmode_PVSSRC(&(pAsm->S[0].src), ADDR_ABSOLUTE); -+ pAsm->S[0].src.rtype = SRC_REG_TEMPORARY; -+ pAsm->S[0].src.reg = tmp; -+ setswizzle_PVSSRC(&(pAsm->S[0].src), SQ_SEL_X); -+ -+ pAsm->S[1].src.rtype = SRC_REC_LITERAL; -+ setswizzle_PVSSRC(&(pAsm->S[1].src), SQ_SEL_X); -+ -+ pAsm->S[2].src.rtype = SRC_REC_LITERAL; -+ setswizzle_PVSSRC(&(pAsm->S[2].src), SQ_SEL_Y); -+ -+ pAsm->D2.dst2.literal_slots = 1; -+ -+ if(pAsm->bR6xx) { -+ pAsm->C[0].f = 3.1415926535897f * 2.0f; -+ pAsm->C[1].f = -3.1415926535897f; -+ } else { -+ pAsm->C[0].f = 1.0f; -+ pAsm->C[1].f = -0.5f; -+ } -+ -+ if(( GL_FALSE == next_ins(pAsm) )) -+ { -+ return GL_FALSE; -+ } - - // COS dst.x, a.x - pAsm->D.dst.opcode = SQ_OP2_INST_COS; -@@ -6154,7 +6285,7 @@ GLboolean callPreSub(r700_AssemblerBase* pAsm, - } - if(uNumValidSrc > 0) - { -- prelude_cf_ptr = pAsm->cf_current_alu_clause_ptr; -+ prelude_cf_ptr = (R700ControlFlowGenericClause*) pAsm->cf_current_alu_clause_ptr; - pAsm->alu_x_opcode = SQ_CF_INST_ALU; - } - -@@ -6274,7 +6405,7 @@ GLboolean callPreSub(r700_AssemblerBase* pAsm, - - next_ins(pAsm); - -- pAsm->callers[pAsm->unCallerArrayPointer - 1].finale_cf_ptr = pAsm->cf_current_alu_clause_ptr; -+ pAsm->callers[pAsm->unCallerArrayPointer - 1].finale_cf_ptr = (R700ControlFlowGenericClause*) pAsm->cf_current_alu_clause_ptr; - pAsm->callers[pAsm->unCallerArrayPointer - 1].prelude_cf_ptr = prelude_cf_ptr; - pAsm->alu_x_opcode = SQ_CF_INST_ALU; - } -@@ -6347,6 +6478,8 @@ GLboolean Process_Export(r700_AssemblerBase* pAsm, - - if (export_count == 1) - { -+ assert(starting_register_number >= pAsm->starting_export_register_number); -+ - ucWriteMask = pAsm->pucOutMask[starting_register_number - pAsm->starting_export_register_number]; - /* exports Z as a float into Red channel */ - if (GL_TRUE == is_depth_export) -@@ -6437,6 +6570,7 @@ GLboolean Process_Fragment_Exports(r700_AssemblerBase *pR700AsmCode, - { - unsigned int unBit; - GLuint export_count = 0; -+ unsigned int i; - - if(pR700AsmCode->depth_export_register_number >= 0) - { -@@ -6446,39 +6580,24 @@ GLboolean Process_Fragment_Exports(r700_AssemblerBase *pR700AsmCode, - } - } - -- unBit = 1 << FRAG_RESULT_COLOR; -- if(OutputsWritten & unBit) -- { -- if( GL_FALSE == Process_Export(pR700AsmCode, -- SQ_EXPORT_PIXEL, -- 0, -- 1, -- pR700AsmCode->uiFP_OutputMap[FRAG_RESULT_COLOR], -- GL_FALSE) ) -- { -- return GL_FALSE; -- } -- export_count++; -- } -- unBit = 1 << FRAG_RESULT_DEPTH; -- if(OutputsWritten & unBit) -- { -- if( GL_FALSE == Process_Export(pR700AsmCode, -- SQ_EXPORT_PIXEL, -- 0, -- 1, -- pR700AsmCode->uiFP_OutputMap[FRAG_RESULT_DEPTH], -- GL_TRUE)) -+ for (i = 0; i < FRAG_RESULT_MAX; ++i) -+ { -+ unBit = 1 << i; -+ -+ if (OutputsWritten & unBit) - { -- return GL_FALSE; -+ GLboolean is_depth = i == FRAG_RESULT_DEPTH ? GL_TRUE : GL_FALSE; -+ if (!Process_Export(pR700AsmCode, SQ_EXPORT_PIXEL, 0, 1, pR700AsmCode->uiFP_OutputMap[i], is_depth)) -+ return GL_FALSE; -+ ++export_count; - } -- export_count++; -- } -+ } -+ - /* Need to export something, otherwise we'll hang - * results are undefined anyway */ - if(export_count == 0) - { -- Process_Export(pR700AsmCode, SQ_EXPORT_PIXEL, 0, 1, 0, GL_FALSE); -+ Process_Export(pR700AsmCode, SQ_EXPORT_PIXEL, 0, 1, pR700AsmCode->starting_export_register_number, GL_FALSE); - } - - if(pR700AsmCode->cf_last_export_ptr != NULL) -@@ -6511,13 +6630,30 @@ GLboolean Process_Vertex_Exports(r700_AssemblerBase *pR700AsmCode, - { - return GL_FALSE; - } -+ export_starting_index++; -+ export_count--; -+ } - -+ unBit = 1 << VERT_RESULT_PSIZ; -+ if(OutputsWritten & unBit) -+ { -+ if( GL_FALSE == Process_Export(pR700AsmCode, -+ SQ_EXPORT_POS, -+ export_starting_index, -+ 1, -+ pR700AsmCode->ucVP_OutputMap[VERT_RESULT_PSIZ], -+ GL_FALSE) ) -+ { -+ return GL_FALSE; -+ } - export_count--; -+ } -+ -+ pR700AsmCode->cf_last_export_ptr->m_Word1.f.cf_inst = SQ_CF_INST_EXPORT_DONE; - -- pR700AsmCode->cf_last_export_ptr->m_Word1.f.cf_inst = SQ_CF_INST_EXPORT_DONE; -- } - - pR700AsmCode->number_of_exports = export_count; -+ export_starting_index = 0; - - unBit = 1 << VERT_RESULT_COL0; - if(OutputsWritten & unBit) -diff --git a/src/mesa/drivers/dri/r600/r700_assembler.h b/src/mesa/drivers/dri/r600/r700_assembler.h -index 0064d08..2d3c324 100644 ---- a/src/mesa/drivers/dri/r600/r700_assembler.h -+++ b/src/mesa/drivers/dri/r600/r700_assembler.h -@@ -582,7 +582,6 @@ GLboolean check_scalar(r700_AssemblerBase* pAsm, - GLboolean check_vector(r700_AssemblerBase* pAsm, - R700ALUInstruction* alu_instruction_ptr); - GLboolean assemble_alu_instruction(r700_AssemblerBase *pAsm); --GLboolean next_ins(r700_AssemblerBase *pAsm); - - GLboolean pops(r700_AssemblerBase *pAsm, GLuint pops); - GLboolean jumpToOffest(r700_AssemblerBase *pAsm, GLuint pops, GLint offset); -diff --git a/src/mesa/drivers/dri/r600/r700_fragprog.c b/src/mesa/drivers/dri/r600/r700_fragprog.c -index 84d51e6..39234af 100644 ---- a/src/mesa/drivers/dri/r600/r700_fragprog.c -+++ b/src/mesa/drivers/dri/r600/r700_fragprog.c -@@ -226,22 +226,23 @@ void Map_Fragment_Program(r700_AssemblerBase *pAsm, - pAsm->number_of_exports = 0; - pAsm->number_of_colorandz_exports = 0; /* don't include stencil and mask out. */ - pAsm->starting_export_register_number = pAsm->number_used_registers; -- unBit = 1 << FRAG_RESULT_COLOR; -- if(mesa_fp->Base.OutputsWritten & unBit) -- { -- pAsm->uiFP_OutputMap[FRAG_RESULT_COLOR] = pAsm->number_used_registers++; -- pAsm->number_of_exports++; -- pAsm->number_of_colorandz_exports++; -- } -- unBit = 1 << FRAG_RESULT_DEPTH; -- if(mesa_fp->Base.OutputsWritten & unBit) -- { -- pAsm->depth_export_register_number = pAsm->number_used_registers; -- pAsm->uiFP_OutputMap[FRAG_RESULT_DEPTH] = pAsm->number_used_registers++; -- pAsm->number_of_exports++; -- pAsm->number_of_colorandz_exports++; -- pAsm->pR700Shader->depthIsExported = 1; -- } -+ -+ for (i = 0; i < FRAG_RESULT_MAX; ++i) -+ { -+ unBit = 1 << i; -+ if (mesa_fp->Base.OutputsWritten & unBit) -+ { -+ if (i == FRAG_RESULT_DEPTH) -+ { -+ pAsm->depth_export_register_number = pAsm->number_used_registers; -+ pAsm->pR700Shader->depthIsExported = 1; -+ } -+ -+ pAsm->uiFP_OutputMap[i] = pAsm->number_used_registers++; -+ ++pAsm->number_of_exports; -+ ++pAsm->number_of_colorandz_exports; -+ } -+ } - - pAsm->pucOutMask = (unsigned char*) MALLOC(pAsm->number_of_exports); - for(ui=0; ui<pAsm->number_of_exports; ui++) -@@ -560,27 +561,34 @@ GLboolean r700SetupFragmentProgram(GLcontext * ctx) - CLEARbit(r700->SPI_PS_IN_CONTROL_1.u32All, FRONT_FACE_ENA_bit); - } - -- /* see if we need any point_sprite replacements */ -- for (i = VERT_RESULT_TEX0; i<= VERT_RESULT_TEX7; i++) -+ /* see if we need any point_sprite replacements, also increase num_interp -+ * as there's no vp output for them */ -+ if (ctx->Point.PointSprite) - { -- if(ctx->Point.CoordReplace[i - VERT_RESULT_TEX0] == GL_TRUE) -- point_sprite = GL_TRUE; -+ for (i = FRAG_ATTRIB_TEX0; i<= FRAG_ATTRIB_TEX7; i++) -+ { -+ if (ctx->Point.CoordReplace[i - FRAG_ATTRIB_TEX0] == GL_TRUE) -+ { -+ ui++; -+ point_sprite = GL_TRUE; -+ } -+ } - } - -+ if( mesa_fp->Base.InputsRead & (1 << FRAG_ATTRIB_PNTC)) -+ ui++; -+ - if ((mesa_fp->Base.InputsRead & (1 << FRAG_ATTRIB_PNTC)) || point_sprite) - { -- /* for FRAG_ATTRIB_PNTC we need to increase num_interp */ -- if(mesa_fp->Base.InputsRead & (1 << FRAG_ATTRIB_PNTC)) -- { -- ui++; -- SETfield(r700->SPI_PS_IN_CONTROL_0.u32All, ui, NUM_INTERP_shift, NUM_INTERP_mask); -- } -+ SETfield(r700->SPI_PS_IN_CONTROL_0.u32All, ui, NUM_INTERP_shift, NUM_INTERP_mask); - SETbit(r700->SPI_INTERP_CONTROL_0.u32All, PNT_SPRITE_ENA_bit); - SETfield(r700->SPI_INTERP_CONTROL_0.u32All, SPI_PNT_SPRITE_SEL_S, PNT_SPRITE_OVRD_X_shift, PNT_SPRITE_OVRD_X_mask); - SETfield(r700->SPI_INTERP_CONTROL_0.u32All, SPI_PNT_SPRITE_SEL_T, PNT_SPRITE_OVRD_Y_shift, PNT_SPRITE_OVRD_Y_mask); - SETfield(r700->SPI_INTERP_CONTROL_0.u32All, SPI_PNT_SPRITE_SEL_0, PNT_SPRITE_OVRD_Z_shift, PNT_SPRITE_OVRD_Z_mask); - SETfield(r700->SPI_INTERP_CONTROL_0.u32All, SPI_PNT_SPRITE_SEL_1, PNT_SPRITE_OVRD_W_shift, PNT_SPRITE_OVRD_W_mask); -- if(ctx->Point.SpriteOrigin == GL_LOWER_LEFT) -+ /* Like e.g. viewport and winding, point sprite coordinates are -+ * inverted when rendering to FBO. */ -+ if ((ctx->Point.SpriteOrigin == GL_LOWER_LEFT) == !ctx->DrawBuffer->Name) - SETbit(r700->SPI_INTERP_CONTROL_0.u32All, PNT_SPRITE_TOP_1_bit); - else - CLEARbit(r700->SPI_INTERP_CONTROL_0.u32All, PNT_SPRITE_TOP_1_bit); -@@ -668,8 +676,9 @@ GLboolean r700SetupFragmentProgram(GLcontext * ctx) - - for(i=0; i<8; i++) - { -+ GLboolean coord_replace = ctx->Point.PointSprite && ctx->Point.CoordReplace[i]; - unBit = 1 << (VERT_RESULT_TEX0 + i); -- if(OutputsWritten & unBit) -+ if ((OutputsWritten & unBit) || coord_replace) - { - ui = pAsm->uiFP_AttributeMap[FRAG_ATTRIB_TEX0 + i]; - SETbit(r700->SPI_PS_INPUT_CNTL[ui].u32All, SEL_CENTROID_bit); -@@ -677,7 +686,7 @@ GLboolean r700SetupFragmentProgram(GLcontext * ctx) - SEMANTIC_shift, SEMANTIC_mask); - CLEARbit(r700->SPI_PS_INPUT_CNTL[ui].u32All, FLAT_SHADE_bit); - /* ARB_point_sprite */ -- if(ctx->Point.CoordReplace[i] == GL_TRUE) -+ if (coord_replace) - { - SETbit(r700->SPI_PS_INPUT_CNTL[ui].u32All, PT_SPRITE_TEX_bit); - } -diff --git a/src/mesa/drivers/dri/r600/r700_vertprog.c b/src/mesa/drivers/dri/r600/r700_vertprog.c -index 05c6516..14dd2a5 100644 ---- a/src/mesa/drivers/dri/r600/r700_vertprog.c -+++ b/src/mesa/drivers/dri/r600/r700_vertprog.c -@@ -628,6 +628,16 @@ GLboolean r700SetupVertexProgram(GLcontext * ctx) - - R600_STATECHANGE(context, spi); - -+ if(vp->mesa_program->Base.OutputsWritten & (1 << VERT_RESULT_PSIZ)) { -+ R600_STATECHANGE(context, cl); -+ SETbit(r700->PA_CL_VS_OUT_CNTL.u32All, USE_VTX_POINT_SIZE_bit); -+ SETbit(r700->PA_CL_VS_OUT_CNTL.u32All, VS_OUT_MISC_VEC_ENA_bit); -+ } else if (r700->PA_CL_VS_OUT_CNTL.u32All != 0) { -+ R600_STATECHANGE(context, cl); -+ CLEARbit(r700->PA_CL_VS_OUT_CNTL.u32All, USE_VTX_POINT_SIZE_bit); -+ CLEARbit(r700->PA_CL_VS_OUT_CNTL.u32All, VS_OUT_MISC_VEC_ENA_bit); -+ } -+ - SETfield(r700->SPI_VS_OUT_CONFIG.u32All, - vp->r700Shader.nParamExports ? (vp->r700Shader.nParamExports - 1) : 0, - VS_EXPORT_COUNT_shift, VS_EXPORT_COUNT_mask); -diff --git a/src/mesa/drivers/dri/radeon/radeon_chipset.h b/src/mesa/drivers/dri/radeon/radeon_chipset.h -index 98732c8..6dbfdc9 100644 ---- a/src/mesa/drivers/dri/radeon/radeon_chipset.h -+++ b/src/mesa/drivers/dri/radeon/radeon_chipset.h -@@ -413,9 +413,9 @@ enum { - CHIP_FAMILY_R350, - CHIP_FAMILY_RV350, - CHIP_FAMILY_RV380, -+ CHIP_FAMILY_RS400, - CHIP_FAMILY_R420, - CHIP_FAMILY_RV410, -- CHIP_FAMILY_RS400, - CHIP_FAMILY_RS600, - CHIP_FAMILY_RS690, - CHIP_FAMILY_RS740, -diff --git a/src/mesa/drivers/dri/radeon/radeon_common_context.c b/src/mesa/drivers/dri/radeon/radeon_common_context.c -index 94f4766..5a7d52c 100644 ---- a/src/mesa/drivers/dri/radeon/radeon_common_context.c -+++ b/src/mesa/drivers/dri/radeon/radeon_common_context.c -@@ -300,10 +300,10 @@ void radeonDestroyContext(__DRIcontext *driContextPriv ) - _mesa_meta_free(radeon->glCtx); - - if (radeon == current) { -- radeon_firevertices(radeon); - _mesa_make_current(NULL, NULL, NULL); - } - -+ radeon_firevertices(radeon); - if (!is_empty_list(&radeon->dma.reserved)) { - rcommonFlushCmdBuf( radeon, __FUNCTION__ ); - } -diff --git a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c -index 6c570a5..f3ce852 100644 ---- a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c -+++ b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c -@@ -588,17 +588,17 @@ int radeon_validate_texture_miptree(GLcontext * ctx, struct gl_texture_object *t - __FUNCTION__, texObj ,t->minLod, t->maxLod); - - radeon_mipmap_tree *dst_miptree; -- dst_miptree = get_biggest_matching_miptree(t, t->minLod, t->maxLod); -+ dst_miptree = get_biggest_matching_miptree(t, t->base.BaseLevel, t->base.MaxLevel); - -+ radeon_miptree_unreference(&t->mt); - if (!dst_miptree) { -- radeon_miptree_unreference(&t->mt); - radeon_try_alloc_miptree(rmesa, t); -- dst_miptree = t->mt; - radeon_print(RADEON_TEXTURE, RADEON_NORMAL, - "%s: No matching miptree found, allocated new one %p\n", - __FUNCTION__, t->mt); - - } else { -+ radeon_miptree_reference(dst_miptree, &t->mt); - radeon_print(RADEON_TEXTURE, RADEON_NORMAL, - "%s: Using miptree %p\n", __FUNCTION__, t->mt); - } -@@ -615,7 +615,7 @@ int radeon_validate_texture_miptree(GLcontext * ctx, struct gl_texture_object *t - "Checking image level %d, face %d, mt %p ... ", - level, face, img->mt); - -- if (img->mt != dst_miptree) { -+ if (img->mt != t->mt) { - radeon_print(RADEON_TEXTURE, RADEON_TRACE, - "MIGRATING\n"); - -@@ -623,7 +623,7 @@ int radeon_validate_texture_miptree(GLcontext * ctx, struct gl_texture_object *t - if (src_bo && radeon_bo_is_referenced_by_cs(src_bo, rmesa->cmdbuf.cs)) { - radeon_firevertices(rmesa); - } -- migrate_image_to_miptree(dst_miptree, img, face, level); -+ migrate_image_to_miptree(t->mt, img, face, level); - } else - radeon_print(RADEON_TEXTURE, RADEON_TRACE, "OK\n"); - } -diff --git a/src/mesa/drivers/dri/radeon/radeon_tex_copy.c b/src/mesa/drivers/dri/radeon/radeon_tex_copy.c -index 5cfad6f..fb6f2e5 100644 ---- a/src/mesa/drivers/dri/radeon/radeon_tex_copy.c -+++ b/src/mesa/drivers/dri/radeon/radeon_tex_copy.c -@@ -52,22 +52,34 @@ do_copy_texsubimage(GLcontext *ctx, - gl_format dst_mesaformat; - unsigned src_width; - unsigned dst_width; -+ unsigned flip_y; - - if (!radeon->vtbl.blit) { - return GL_FALSE; - } - - if (_mesa_get_format_bits(timg->base.TexFormat, GL_DEPTH_BITS) > 0) { -- rrb = radeon_get_depthbuffer(radeon); -+ if (ctx->ReadBuffer->_DepthBuffer && ctx->ReadBuffer->_DepthBuffer->Wrapped) { -+ rrb = radeon_renderbuffer(ctx->ReadBuffer->_DepthBuffer->Wrapped); -+ } else { -+ rrb = radeon_renderbuffer(ctx->ReadBuffer->_DepthBuffer); -+ } -+ flip_y = ctx->ReadBuffer->Attachment[BUFFER_DEPTH].Type == GL_NONE; - } else { -- rrb = radeon_get_colorbuffer(radeon); -+ rrb = radeon_renderbuffer(ctx->ReadBuffer->_ColorReadBuffer); -+ flip_y = ctx->ReadBuffer->Attachment[BUFFER_COLOR0].Type == GL_NONE; -+ } -+ -+ // This is software renderbuffer, fallback to swrast -+ if (!rrb) { -+ return GL_FALSE; - } - - if (!timg->mt) { - radeon_validate_texture_miptree(ctx, &tobj->base); - } - -- assert(rrb && rrb->bo); -+ assert(rrb->bo); - assert(timg->mt); - assert(timg->mt->bo); - assert(timg->base.Width >= dstx + width); -@@ -124,7 +136,7 @@ do_copy_texsubimage(GLcontext *ctx, - timg->mt->bo, dst_offset, dst_mesaformat, - timg->mt->levels[level].rowstride / dst_bpp, - dst_width, timg->base.Height, -- dstx, dsty, width, height, 1); -+ dstx, dsty, width, height, flip_y); - } - - void -diff --git a/src/mesa/drivers/dri/radeon/radeon_texture.c b/src/mesa/drivers/dri/radeon/radeon_texture.c -index ff37fd3..caa55d2 100644 ---- a/src/mesa/drivers/dri/radeon/radeon_texture.c -+++ b/src/mesa/drivers/dri/radeon/radeon_texture.c -@@ -1016,7 +1016,15 @@ radeon_get_tex_image(GLcontext * ctx, GLenum target, GLint level, - __func__, ctx, texObj, image, compressed); - - if (image->mt) { -+ radeonContextPtr rmesa = RADEON_CONTEXT(ctx); - /* Map the texture image read-only */ -+ if (radeon_bo_is_referenced_by_cs(image->mt->bo, rmesa->cmdbuf.cs)) { -+ radeon_print(RADEON_TEXTURE, RADEON_VERBOSE, -+ "%s: called for texture that is queued for GPU processing\n", -+ __func__); -+ radeon_firevertices(rmesa); -+ } -+ - radeon_teximage_map(image, GL_FALSE); - } else { - /* Image hasn't been uploaded to a miptree yet */ -diff --git a/src/mesa/drivers/osmesa/osmesa.c b/src/mesa/drivers/osmesa/osmesa.c -index e376f12..c5e874b 100644 ---- a/src/mesa/drivers/osmesa/osmesa.c -+++ b/src/mesa/drivers/osmesa/osmesa.c -@@ -1061,7 +1061,6 @@ OSMesaCreateContextExt( GLenum format, GLint depthBits, GLint stencilBits, - struct dd_function_table functions; - GLint rind, gind, bind, aind; - GLint redBits = 0, greenBits = 0, blueBits = 0, alphaBits =0; -- GLenum type = CHAN_TYPE; - - rind = gind = bind = aind = 0; - if (format==OSMESA_RGBA) { -@@ -1329,6 +1328,7 @@ OSMesaMakeCurrent( OSMesaContext osmesa, void *buffer, GLenum type, - * size. - */ - osmesa->rb = new_osmesa_renderbuffer(&osmesa->mesa, osmesa->format, type); -+ _mesa_remove_renderbuffer(osmesa->gl_buffer, BUFFER_FRONT_LEFT); - _mesa_add_renderbuffer(osmesa->gl_buffer, BUFFER_FRONT_LEFT, osmesa->rb); - assert(osmesa->rb->RefCount == 2); - -diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c -index 71d1514..98bb7fa 100644 ---- a/src/mesa/main/bufferobj.c -+++ b/src/mesa/main/bufferobj.c -@@ -1880,7 +1880,7 @@ _mesa_BufferObjectUnpurgeable(GLcontext *ctx, GLuint name, GLenum option) - - bufObj->Purgeable = GL_FALSE; - -- retval = GL_RETAINED_APPLE; -+ retval = option; - if (ctx->Driver.BufferObjectUnpurgeable) - retval = ctx->Driver.BufferObjectUnpurgeable(ctx, bufObj, option); - -@@ -1910,11 +1910,11 @@ _mesa_RenderObjectUnpurgeable(GLcontext *ctx, GLuint name, GLenum option) - - bufObj->Purgeable = GL_FALSE; - -- retval = GL_RETAINED_APPLE; -+ retval = option; - if (ctx->Driver.RenderObjectUnpurgeable) - retval = ctx->Driver.RenderObjectUnpurgeable(ctx, bufObj, option); - -- return option; -+ return retval; - } - - -@@ -1940,7 +1940,7 @@ _mesa_TextureObjectUnpurgeable(GLcontext *ctx, GLuint name, GLenum option) - - bufObj->Purgeable = GL_FALSE; - -- retval = GL_RETAINED_APPLE; -+ retval = option; - if (ctx->Driver.TextureObjectUnpurgeable) - retval = ctx->Driver.TextureObjectUnpurgeable(ctx, bufObj, option); - -diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c -index 73126b9..1dc0c9c 100644 ---- a/src/mesa/main/context.c -+++ b/src/mesa/main/context.c -@@ -1358,6 +1358,8 @@ _mesa_make_current( GLcontext *newCtx, GLframebuffer *drawBuffer, - if (newCtx->FirstTimeCurrent) { - _mesa_compute_version(newCtx); - -+ newCtx->Extensions.String = _mesa_make_extension_string(newCtx); -+ - check_context_limits(newCtx); - - /* We can use this to help debug user's problems. Tell them to set -diff --git a/src/mesa/main/getstring.c b/src/mesa/main/getstring.c -index 51dd5f7..b9daaba 100644 ---- a/src/mesa/main/getstring.c -+++ b/src/mesa/main/getstring.c -@@ -71,8 +71,6 @@ _mesa_GetString( GLenum name ) - case GL_VERSION: - return (const GLubyte *) ctx->VersionString; - case GL_EXTENSIONS: -- if (!ctx->Extensions.String) -- ctx->Extensions.String = _mesa_make_extension_string(ctx); - return (const GLubyte *) ctx->Extensions.String; - #if FEATURE_ARB_shading_language_100 - case GL_SHADING_LANGUAGE_VERSION_ARB: -diff --git a/src/mesa/main/state.c b/src/mesa/main/state.c -index b971cc9..db84de2 100644 ---- a/src/mesa/main/state.c -+++ b/src/mesa/main/state.c -@@ -537,7 +537,7 @@ _mesa_update_state_locked( GLcontext *ctx ) - - /* Determine which state flags effect vertex/fragment program state */ - if (ctx->FragmentProgram._MaintainTexEnvProgram) { -- prog_flags |= (_NEW_TEXTURE | _NEW_FOG | -+ prog_flags |= (_NEW_BUFFERS | _NEW_TEXTURE | _NEW_FOG | - _NEW_ARRAY | _NEW_LIGHT | _NEW_POINT | _NEW_RENDERMODE | - _NEW_PROGRAM); - } -diff --git a/src/mesa/main/texenvprogram.c b/src/mesa/main/texenvprogram.c -index 964ba13..df09c12 100644 ---- a/src/mesa/main/texenvprogram.c -+++ b/src/mesa/main/texenvprogram.c -@@ -98,6 +98,7 @@ struct state_key { - GLuint fog_enabled:1; - GLuint fog_mode:2; /**< FOG_x */ - GLuint inputs_available:12; -+ GLuint num_draw_buffers:4; - - /* NOTE: This array of structs must be last! (see "keySize" below) */ - struct { -@@ -485,6 +486,9 @@ static GLuint make_state_key( GLcontext *ctx, struct state_key *key ) - inputs_referenced |= FRAG_BIT_FOGC; /* maybe */ - } - -+ /* _NEW_BUFFERS */ -+ key->num_draw_buffers = ctx->DrawBuffer->_NumColorDrawBuffers; -+ - key->inputs_available = (inputs_available & inputs_referenced); - - /* compute size of state key, ignoring unused texture units */ -@@ -1199,11 +1203,14 @@ emit_texenv(struct texenv_fragment_program *p, GLuint unit) - else - alpha_saturate = GL_FALSE; - -- /* If this is the very last calculation, emit direct to output reg: -+ /* If this is the very last calculation (and various other conditions -+ * are met), emit directly to the color output register. Otherwise, -+ * emit to a temporary register. - */ - if (key->separate_specular || - unit != p->last_tex_stage || - alpha_shift || -+ key->num_draw_buffers != 1 || - rgb_shift) - dest = get_temp( p ); - else -@@ -1438,10 +1445,10 @@ create_new_program(GLcontext *ctx, struct state_key *key, - p.program->Base.Parameters = _mesa_new_parameter_list(); - p.program->Base.InputsRead = 0x0; - -- if (ctx->DrawBuffer->_NumColorDrawBuffers == 1) -+ if (key->num_draw_buffers == 1) - p.program->Base.OutputsWritten = 1 << FRAG_RESULT_COLOR; - else { -- for (i = 0; i < ctx->DrawBuffer->_NumColorDrawBuffers; i++) -+ for (i = 0; i < key->num_draw_buffers; i++) - p.program->Base.OutputsWritten |= (1 << (FRAG_RESULT_DATA0 + i)); - } - -@@ -1493,8 +1500,8 @@ create_new_program(GLcontext *ctx, struct state_key *key, - - cf = get_source( &p, SRC_PREVIOUS, 0 ); - -- for (i = 0; i < ctx->DrawBuffer->_NumColorDrawBuffers; i++) { -- if (ctx->DrawBuffer->_NumColorDrawBuffers == 1) -+ for (i = 0; i < key->num_draw_buffers; i++) { -+ if (key->num_draw_buffers == 1) - out = make_ureg( PROGRAM_OUTPUT, FRAG_RESULT_COLOR ); - else { - out = make_ureg( PROGRAM_OUTPUT, FRAG_RESULT_DATA0 + i ); -diff --git a/src/mesa/main/version.h b/src/mesa/main/version.h -index 9955be2..af4e69f 100644 ---- a/src/mesa/main/version.h -+++ b/src/mesa/main/version.h -@@ -34,8 +34,8 @@ - /* Mesa version */ - #define MESA_MAJOR 7 - #define MESA_MINOR 8 --#define MESA_PATCH 2 --#define MESA_VERSION_STRING "7.8.2" -+#define MESA_PATCH 3 -+#define MESA_VERSION_STRING "7.8.3" - - /* To make version comparison easy */ - #define MESA_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) -diff --git a/src/mesa/shader/slang/slang_builtin.c b/src/mesa/shader/slang/slang_builtin.c -index 791e751..f265285 100644 ---- a/src/mesa/shader/slang/slang_builtin.c -+++ b/src/mesa/shader/slang/slang_builtin.c -@@ -399,7 +399,7 @@ lookup_statevar(const char *var, GLint index1, GLint index2, const char *field, - } - - if (isMatrix) { -- /* load all four columns of matrix */ -+ /* load all four rows (or columns) of matrix */ - GLint pos[4]; - GLuint j; - for (j = 0; j < 4; j++) { -@@ -489,9 +489,26 @@ emit_statevars(const char *name, int array_len, - tokens[0] = STATE_TEXGEN; - tokens[2] = STATE_TEXGEN_OBJECT_Q; - } -+ else if (strcmp(name, "gl_TextureMatrix") == 0) { -+ tokens[0] = STATE_TEXTURE_MATRIX; -+ tokens[4] = STATE_MATRIX_TRANSPOSE; -+ } -+ else if (strcmp(name, "gl_TextureMatrixInverse") == 0) { -+ tokens[0] = STATE_TEXTURE_MATRIX; -+ tokens[4] = STATE_MATRIX_INVTRANS; -+ } -+ else if (strcmp(name, "gl_TextureMatrixTranspose") == 0) { -+ tokens[0] = STATE_TEXTURE_MATRIX; -+ tokens[4] = 0; -+ } -+ else if (strcmp(name, "gl_TextureMatrixInverseTranspose") == 0) { -+ tokens[0] = STATE_TEXTURE_MATRIX; -+ tokens[4] = STATE_MATRIX_INVERSE; -+ } - else { - return -1; /* invalid array name */ - } -+ /* emit state vars for each array element */ - for (i = 0; i < array_len; i++) { - GLint p; - tokens[1] = i; -@@ -513,6 +530,19 @@ emit_statevars(const char *name, int array_len, - } - return pos; - } -+ else if (type->type == SLANG_SPEC_MAT4) { -+ /* unroll/emit 4 array rows (or columns) */ -+ slang_type_specifier vec4; -+ GLint i, p, pos = -1; -+ vec4.type = SLANG_SPEC_VEC4; -+ for (i = 0; i < 4; i++) { -+ tokens[2] = tokens[3] = i; /* row[i] (or column[i]) of matrix */ -+ p = emit_statevars(NULL, 0, &vec4, tokens, paramList); -+ if (pos == -1) -+ pos = p; -+ } -+ return pos; -+ } - else { - GLint pos; - assert(type->type == SLANG_SPEC_VEC4 || -diff --git a/src/mesa/shader/slang/slang_emit.c b/src/mesa/shader/slang/slang_emit.c -index 7c0ea0c..4155052 100644 ---- a/src/mesa/shader/slang/slang_emit.c -+++ b/src/mesa/shader/slang/slang_emit.c -@@ -2362,7 +2362,10 @@ emit(slang_emit_info *emitInfo, slang_ir_node *n) - #if 0 - assert(!n->Store); - #endif -- n->Store = n->Children[1]->Store; -+ if (n->Children[1]->Store) -+ n->Store = n->Children[1]->Store; -+ else -+ n->Store = n->Children[0]->Store; - return inst; - - case IR_SCOPE: -@@ -2370,6 +2373,7 @@ emit(slang_emit_info *emitInfo, slang_ir_node *n) - _slang_push_var_table(emitInfo->vt); - inst = emit(emitInfo, n->Children[0]); - _slang_pop_var_table(emitInfo->vt); -+ n->Store = n->Children[0]->Store; - return inst; - - case IR_VAR_DECL: -diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c b/src/mesa/state_tracker/st_cb_drawpixels.c -index 5fcfa86..a64c561 100644 ---- a/src/mesa/state_tracker/st_cb_drawpixels.c -+++ b/src/mesa/state_tracker/st_cb_drawpixels.c -@@ -1135,7 +1135,7 @@ st_destroy_drawpix(struct st_context *st) - st_reference_fragprog(st, &st->drawpix.z_shader, NULL); - st_reference_fragprog(st, &st->pixel_xfer.combined_prog, NULL); - if (st->drawpix.vert_shaders[0]) -- free(st->drawpix.vert_shaders[0]); -+ ureg_free_tokens(st->drawpix.vert_shaders[0]); - if (st->drawpix.vert_shaders[1]) -- free(st->drawpix.vert_shaders[1]); -+ ureg_free_tokens(st->drawpix.vert_shaders[1]); - } -diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c -index 00e9d1d..df5674d 100644 ---- a/src/mesa/state_tracker/st_cb_fbo.c -+++ b/src/mesa/state_tracker/st_cb_fbo.c -@@ -460,26 +460,38 @@ static void - st_validate_framebuffer(GLcontext *ctx, struct gl_framebuffer *fb) - { - struct pipe_screen *screen = ctx->st->pipe->screen; -- const struct gl_renderbuffer *depthRb = -- fb->Attachment[BUFFER_DEPTH].Renderbuffer; -- const struct gl_renderbuffer *stencilRb = -- fb->Attachment[BUFFER_STENCIL].Renderbuffer; -+ const struct gl_renderbuffer_attachment *depth = -+ &fb->Attachment[BUFFER_DEPTH]; -+ const struct gl_renderbuffer_attachment *stencil = -+ &fb->Attachment[BUFFER_STENCIL]; - GLuint i; - -- if (stencilRb && depthRb && stencilRb != depthRb) { -+ if (depth->Type && stencil->Type && depth->Type != stencil->Type) { -+ fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT; -+ return; -+ } -+ if (depth->Type == GL_RENDERBUFFER_EXT && -+ stencil->Type == GL_RENDERBUFFER_EXT && -+ depth->Renderbuffer != stencil->Renderbuffer) { -+ fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT; -+ return; -+ } -+ if (depth->Type == GL_TEXTURE && -+ stencil->Type == GL_TEXTURE && -+ depth->Texture != stencil->Texture) { - fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT; - return; - } - - if (!st_validate_attachment(screen, -- &fb->Attachment[BUFFER_DEPTH], -- PIPE_TEXTURE_USAGE_DEPTH_STENCIL)) { -+ depth, -+ PIPE_TEXTURE_USAGE_DEPTH_STENCIL)) { - fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT; - return; - } - if (!st_validate_attachment(screen, -- &fb->Attachment[BUFFER_STENCIL], -- PIPE_TEXTURE_USAGE_DEPTH_STENCIL)) { -+ stencil, -+ PIPE_TEXTURE_USAGE_DEPTH_STENCIL)) { - fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT; - return; - } -diff --git a/src/mesa/state_tracker/st_cb_readpixels.c b/src/mesa/state_tracker/st_cb_readpixels.c -index 952d9ce..7ff10d4 100644 ---- a/src/mesa/state_tracker/st_cb_readpixels.c -+++ b/src/mesa/state_tracker/st_cb_readpixels.c -@@ -69,6 +69,10 @@ st_read_stencil_pixels(GLcontext *ctx, GLint x, GLint y, - ubyte *stmap; - GLint j; - -+ if (strb->Base.Wrapped) { -+ strb = st_renderbuffer(strb->Base.Wrapped); -+ } -+ - if (st_fb_orientation(ctx->DrawBuffer) == Y_0_TOP) { - y = ctx->DrawBuffer->Height - y - height; - } -@@ -366,6 +370,9 @@ st_readpixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height, - } - else if (format == GL_DEPTH_COMPONENT) { - strb = st_renderbuffer(ctx->ReadBuffer->_DepthBuffer); -+ if (strb->Base.Wrapped) { -+ strb = st_renderbuffer(strb->Base.Wrapped); -+ } - } - else { - /* Read color buffer */ -diff --git a/src/mesa/state_tracker/st_mesa_to_tgsi.c b/src/mesa/state_tracker/st_mesa_to_tgsi.c -index d7ef57e..d08af62 100644 ---- a/src/mesa/state_tracker/st_mesa_to_tgsi.c -+++ b/src/mesa/state_tracker/st_mesa_to_tgsi.c -@@ -683,8 +683,12 @@ emit_adjusted_wpos( struct st_translate *t, - struct ureg_dst wpos_temp = ureg_DECL_temporary(ureg); - struct ureg_src wpos_input = t->inputs[t->inputMapping[FRAG_ATTRIB_WPOS]]; - -- ureg_ADD(ureg, ureg_writemask(wpos_temp, TGSI_WRITEMASK_X | TGSI_WRITEMASK_Y), -- wpos_input, ureg_imm1f(ureg, value)); -+ /* Note that we bias X and Y and pass Z and W through unchanged. -+ * The shader might also use gl_FragCoord.w and .z. -+ */ -+ ureg_ADD(ureg, -+ ureg_writemask(wpos_temp, TGSI_WRITEMASK_XYZW), -+ wpos_input, ureg_imm4f(ureg, value, value, 0.0f, 0.0f)); - - t->inputs[t->inputMapping[FRAG_ATTRIB_WPOS]] = ureg_src(wpos_temp); - } -diff --git a/src/mesa/swrast/s_span.c b/src/mesa/swrast/s_span.c -index 687c8eb..32d4f52 100644 ---- a/src/mesa/swrast/s_span.c -+++ b/src/mesa/swrast/s_span.c -@@ -971,6 +971,10 @@ shade_texture_span(GLcontext *ctx, SWspan *span) - if (span->primitive == GL_BITMAP && span->array->ChanType != GL_FLOAT) { - convert_color_type(span, GL_FLOAT, 0); - } -+ else { -+ span->array->rgba = (void *) span->array->attribs[FRAG_ATTRIB_COL0]; -+ } -+ - if (span->primitive != GL_POINT || - (span->interpMask & SPAN_RGBA) || - ctx->Point.PointSprite) { -@@ -1222,9 +1226,22 @@ _swrast_write_rgba_span( GLcontext *ctx, SWspan *span) - GLchan rgbaSave[MAX_WIDTH][4]; - const GLuint fragOutput = multiFragOutputs ? buf : 0; - -+ /* set span->array->rgba to colors for render buffer's datatype */ - if (rb->DataType != span->array->ChanType || fragOutput > 0) { - convert_color_type(span, rb->DataType, fragOutput); - } -+ else { -+ if (rb->DataType == GL_UNSIGNED_BYTE) { -+ span->array->rgba = span->array->rgba8; -+ } -+ else if (rb->DataType == GL_UNSIGNED_SHORT) { -+ span->array->rgba = (void *) span->array->rgba16; -+ } -+ else { -+ span->array->rgba = (void *) -+ span->array->attribs[FRAG_ATTRIB_COL0]; -+ } -+ } - - if (!multiFragOutputs && numBuffers > 1) { - /* save colors for second, third renderbuffer writes */ -diff --git a/src/mesa/swrast_setup/ss_context.c b/src/mesa/swrast_setup/ss_context.c -index ebd1574..0fcb7c7 100644 ---- a/src/mesa/swrast_setup/ss_context.c -+++ b/src/mesa/swrast_setup/ss_context.c -@@ -115,7 +115,7 @@ setup_vertex_format(GLcontext *ctx) - GLboolean intColors = !ctx->FragmentProgram._Current - && !ctx->ATIFragmentShader._Enabled - && ctx->RenderMode == GL_RENDER -- && CHAN_TYPE == GL_UNSIGNED_BYTE; -+ && CHAN_TYPE != GL_FLOAT; - - if (intColors != swsetup->intColors || - !RENDERINPUTS_EQUAL(tnl->render_inputs_bitset, -diff --git a/src/mesa/swrast_setup/ss_triangle.c b/src/mesa/swrast_setup/ss_triangle.c -index bad0d81..f22bc52 100644 ---- a/src/mesa/swrast_setup/ss_triangle.c -+++ b/src/mesa/swrast_setup/ss_triangle.c -@@ -159,7 +159,7 @@ static void _swsetup_render_tri(GLcontext *ctx, - } - - #define SS_COLOR(a,b) UNCLAMPED_FLOAT_TO_RGBA_CHAN(a,b) --#define SS_SPEC(a,b) UNCLAMPED_FLOAT_TO_RGB_CHAN(a,b) -+#define SS_SPEC(a,b) COPY_4V(a,b) - #define SS_IND(a,b) (a = b) - - #define IND (0) |