diff -Nru mesa-7.12.0~git20120103.2ae591bd/ChangeLog mesa-7.12.0~git20120104.892a2542/ChangeLog --- mesa-7.12.0~git20120103.2ae591bd/ChangeLog 2012-01-03 15:18:23.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/ChangeLog 2012-01-04 16:11:07.000000000 +0000 @@ -1,9 +1,97 @@ -commit 689d10c69b1c1bf4fd221414a4a99f2488a30451 +commit 61b04fcf322f021800600cf7ddef3855fc11906d Author: Robert Hooker -Date: Tue Jan 3 10:18:15 2012 -0500 +Date: Wed Jan 4 11:10:44 2012 -0500 Add debian tree from origin/ubuntu +commit 892a2542a3f0753a7064c710b96f077dd5490624 +Author: Brian Paul +Date: Tue Jan 3 17:48:12 2012 -0700 + + mesa: remove unused _mesa_init_teximage_fields() target parameter + + Reviewed-by: Ian Romanick + Reviewed-by: Yuanhan Liu + +commit 7b181d16c3b954bf567563e90e5e94bda833fab8 +Author: Christian König +Date: Wed Jan 4 15:59:29 2012 +0100 + + vl/mpeg2: simple fix to get xine running again + + Otherwise xines xxmc plugin will just display green blocks. + + Signed-off-by: Christian König + +commit 4535874c1a6da74d9130e494d514284302e4d08e +Author: Ian Romanick +Date: Thu Dec 22 17:37:26 2011 -0800 + + ff_fragment_shader: Don't generate swizzles for scalar combiner inputs + + There are a couple scenarios where the source could be zero and the + operand could be either SRC_ALPHA or ONE_MINUS_SRC_ALPHA. For + example, if the source was ZERO. This would result in something like + (0).w, and a later call to ir_validate would get angry. + + Signed-off-by: Ian Romanick + Reviewed-by: Eric Anholt + Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=42517 + +commit 0ed11e333147e280208d9d0b3ff3f39970547643 +Author: Anuj Phogat +Date: Tue Jan 3 18:12:06 2012 -0800 + + Fix read from pointer after free + + Coverity reported a read from pointer after free defect in + src/mesa/drivers/dri/intel/intel_mipmap_tree.c. Bug# 44205 + In intel_miptree_all_slices_resolve() function, i = i->next was + executing after freeing i. I have defined a temporary variable + (next) to store the value of i->next before freeing i + + Reported-by: Vinson Lee + Signed-off-by: Anuj Phogat + Reviewed-by: Eric Anholt + +commit 2f1ab63fab592264c13e7dbab39a5cea1a622903 +Author: Matt Turner +Date: Tue Jan 3 21:58:37 2012 -0500 + + configure.ac: fix typo from 3ef3ba4d2 + +commit 7e291e922e53a70d84751538b15c6c16310cca7f +Author: Christoph Bumiller +Date: Tue Jan 3 23:00:31 2012 +0100 + + st/mesa: use SINT/UINT formats for VertexAttribIPointer + + Reviewed-by: Dave Airlie + + v2: added assertion that packed formats are not pure integer + +commit 69111847a2bed4c4c2c61001b8bdff3bbe42dc98 +Author: Dave Airlie +Date: Tue Jan 3 10:38:38 2012 +0000 + + tgsi/softpipe: disable FAST_MATH + + In the interest of softpipe preferring correctness over speed and passing more + piglit tests, set this to off by default. For speed you really want llvmpipe. + + Signed-off-by: Dave Airlie + +commit e763b6e78825f11aa3e9e2368ba8fc47313a7848 +Author: Morgan Armand +Date: Wed Dec 7 21:30:48 2011 +0100 + + softpipe: remove the 32bits limitation on depth(-stencil) formats + + This patch remove the 32bits limitation. As a side effect, it bring the support for the GL_ARB_depth_buffer_float extension. + No regression have been found on piglit, and all tests for GL_ARB_depth_buffer_float pass successfully. + + Signed-off-by: Dave Airlie + commit 2ae591bdf13f02f23471ea302b55eaccbb810dd7 Author: Alexander von Gluck Date: Tue Jan 3 08:10:42 2012 -0700 diff -Nru mesa-7.12.0~git20120103.2ae591bd/configure.ac mesa-7.12.0~git20120104.892a2542/configure.ac --- mesa-7.12.0~git20120103.2ae591bd/configure.ac 2012-01-03 15:18:31.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/configure.ac 2012-01-04 16:11:15.000000000 +0000 @@ -1,4 +1,4 @@ -nl Process this file with autoconf to create configure. +dnl Process this file with autoconf to create configure. AC_PREREQ([2.59]) @@ -1030,6 +1030,25 @@ GL_LIB_DEPS="$GL_LIB_DEPS $XCB_LIBS" fi + # Check to see if the xcb-glx library is new enough to support + # GLX_ARB_create_context. This bit of hackery is necessary until XCB 1.8 + # is released. + save_CPPFLAGS="$CPPFLAGS" + save_LDFLAGS="$LDFLAGS" + CPPFLAGS="$CPPFLAGS $X11_INCLUDES" + LDFLAGS="$LDFLAGS $GL_LIB_DEPS" + AC_CHECK_LIB(xcb-glx, xcb_glx_create_context_attribs_arb_checked, + [HAVE_XCB_GLX_CREATE_CONTEXT=yes], + [HAVE_XCB_GLX_CREATE_CONTEXT=no]) + AM_CONDITIONAL(HAVE_XCB_GLX_CREATE_CONTEXT, + test x$HAVE_XCB_GLX_CREATE_CONTEXT = xyes) + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + + if test x$HAVE_XCB_GLX_CREATE_CONTEXT = xyes; then + X11_INCLUDES="$X11_INCLUDES -DHAVE_XCB_GLX_CREATE_CONTEXT" + fi + # need DRM libs, -lpthread, etc. GL_LIB_DEPS="$GL_LIB_DEPS $LIBDRM_LIBS -lm -lpthread $DLOPEN_LIBS" GL_PC_LIB_PRIV="-lm -lpthread $DLOPEN_LIBS" diff -Nru mesa-7.12.0~git20120103.2ae591bd/debian/changelog mesa-7.12.0~git20120104.892a2542/debian/changelog --- mesa-7.12.0~git20120103.2ae591bd/debian/changelog 2012-01-04 17:27:23.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/debian/changelog 2012-01-04 17:27:27.000000000 +0000 @@ -1,7 +1,7 @@ -mesa (7.12.0~git20120103.2ae591bd-0ubuntu0sarvatt4) precise; urgency=low +mesa (7.12.0~git20120104.892a2542-0ubuntu0sarvatt) precise; urgency=low - * Checkout from git 20120103 (master branch) up to commit - 2ae591bdf13f02f23471ea302b55eaccbb810dd7 + * Checkout from git 20120104 (master branch) up to commit + 892a2542a3f0753a7064c710b96f077dd5490624 * Only added debian/ tree from origin/ubuntu * hook: Refresh 13-llvm-config-pick-a-version.diff * hook: Refresh 115_llvm_dynamic_linking.diff @@ -13,6 +13,7 @@ (upstream) * hook: Drop 118_fix_24bpp_software_renering.diff (upstream) * hook: Drop 119_r600g_gnome_shell_rendering_fix.diff (upstream) + * hook: Refresh libegl1-mesa symbols. * hook: Relax debhelper depends to 8.1.2ubuntu2 * hook: drop classic r300/r600 from libgl1-mesa-dri-experimental, no longer shipped upstream. @@ -20,14 +21,11 @@ * hook: Enable floating point texture support * hook: s/swrastg/swrast/ debian/libgl1-mesa-dri- experimentall.install.in - * hook: Refresh libegl1-mesa symbols. * hook: Refresh libgles2-mesa symbols. * hooks: Drop i810, mga, r128, savage, unichrome, r300, r600 sis and tdfx classic drivers. - * + Add libxcb-glx0-dev to build deps and libegl1-mesa-dev - * + Add xcb-glx-fix.patch - -- Robert Hooker Tue, 03 Jan 2012 10:18:28 -0500 + -- Robert Hooker Wed, 04 Jan 2012 11:11:12 -0500 mesa (7.11-0ubuntu4) precise; urgency=low diff -Nru mesa-7.12.0~git20120103.2ae591bd/debian/control mesa-7.12.0~git20120104.892a2542/debian/control --- mesa-7.12.0~git20120103.2ae591bd/debian/control 2012-01-04 17:27:23.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/debian/control 2012-01-04 17:27:27.000000000 +0000 @@ -26,7 +26,6 @@ x11proto-dri2-dev (>= 2.1), linux-libc-dev (>= 2.6.31) [linux-any], libx11-xcb-dev, - libxcb-glx0-dev, libxcb-dri2-0-dev, libxcb-xfixes0-dev, python-libxml2, @@ -241,7 +240,6 @@ libxxf86vm-dev, libxdamage-dev, libxfixes-dev, - libxcb-glx0-dev, ${misc:Depends}, Description: free implementation of the EGL API -- development files This package contains the development environment required for compiling diff -Nru mesa-7.12.0~git20120103.2ae591bd/debian/patches/series mesa-7.12.0~git20120104.892a2542/debian/patches/series --- mesa-7.12.0~git20120103.2ae591bd/debian/patches/series 2012-01-04 17:27:23.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/debian/patches/series 2012-01-04 17:27:27.000000000 +0000 @@ -17,4 +17,3 @@ #117_handle_dri2connect_errors_when_indirect.diff #118_fix_24bpp_software_renering.diff #119_r600g_gnome_shell_rendering_fix.diff -xcb-glx-fix.patch diff -Nru mesa-7.12.0~git20120103.2ae591bd/debian/patches/xcb-glx-fix.patch mesa-7.12.0~git20120104.892a2542/debian/patches/xcb-glx-fix.patch --- mesa-7.12.0~git20120103.2ae591bd/debian/patches/xcb-glx-fix.patch 2012-01-04 17:27:23.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/debian/patches/xcb-glx-fix.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,130 +0,0 @@ -From: Ian Romanick - -Detect whether a new enough version of XCB is installed at configure -time. If it is not, don't enable the extension and don't build the -unit tests. - -Signed-off-by: Ian Romanick ---- -Using this patch, I was able to successfully build and run both with -and without updated XCB bits installed. I think the lesson learned -here is that it's nonsense for the GLX part of XCB to live in the XCB -library. There's only one user, so it should live there. Seriously. - - configure.ac | 19 +++++++++++++++++++ - src/glx/clientinfo.c | 5 ++++- - src/glx/create_context.c | 2 +- - src/glx/glxextensions.c | 4 ++-- - tests/glx/Makefile.am | 4 +++- - 5 files changed, 29 insertions(+), 5 deletions(-) - -diff --git a/configure.ac b/configure.ac -index e526d17..7517697 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -1030,6 +1030,25 @@ xyesno) - GL_LIB_DEPS="$GL_LIB_DEPS $XCB_LIBS" - fi - -+ # Check to see if the xcb-glx library is new enough to support -+ # GLX_ARB_create_context. This bit of hackery is necessary until XCB 1.8 -+ # is released. -+ save_CPPFLAGS="$CPPFLAGS" -+ save_LDFLAGS="$LDFLAGS" -+ CPPFLAGS="$CPPFLAGS $X11_INCLUDES" -+ LDFLAGS="$LDFLAGS $GL_LIB_DEPS" -+ AC_CHECK_LIB(xcb-glx, xcb_glx_create_context_attribs_arb_checked, -+ [HAVE_XCB_GLX_CREATE_CONTEXT=yes], -+ [HAVE_XCB_GLX_CREATE_CONTEXT=no]) -+ AM_CONDITIONAL(HAVE_XCB_GLX_CREATE_CONTEXT, -+ test x$HAVE_XCB_GLX_CREATE_CONTEXT = xyes) -+ CPPFLAGS="$save_CPPFLAGS" -+ LDFLAGS="$save_LDFLAGS" -+ -+ if test x$HAVE_XCB_GLX_CREATE_CONTEXT = xyes; then -+ X11_INCLUDES="$X11_INCLUDES -DHAVE_XCB_GLX_CREATE_CONTEXT" -+ fi -+ - # need DRM libs, -lpthread, etc. - GL_LIB_DEPS="$GL_LIB_DEPS $LIBDRM_LIBS -lm -lpthread $DLOPEN_LIBS" - GL_PC_LIB_PRIV="-lm -lpthread $DLOPEN_LIBS" -diff --git a/src/glx/clientinfo.c b/src/glx/clientinfo.c -index 429e9a3..461030f 100644 ---- a/src/glx/clientinfo.c -+++ b/src/glx/clientinfo.c -@@ -123,6 +123,7 @@ __glX_send_client_info(struct glx_display *glx_dpy) - * THE ORDER IS IMPORTANT. We want to send the most recent version of the - * protocol that the server can support. - */ -+#ifdef HAVE_XCB_GLX_CREATE_CONTEXT - if (glx_dpy->majorVersion == 1 && glx_dpy->minorVersion == 4 - && any_screen_has_ARB_create_context_profile) { - xcb_glx_set_client_info_2arb(c, -@@ -145,7 +146,9 @@ __glX_send_client_info(struct glx_display *glx_dpy) - gl_versions, - gl_extension_string, - glx_extensions); -- } else { -+ } else -+#endif -+ { - xcb_glx_client_info(c, - GLX_MAJOR_VERSION, GLX_MINOR_VERSION, - gl_extension_length, -diff --git a/src/glx/create_context.c b/src/glx/create_context.c -index 11f9340..714f0e5 100644 ---- a/src/glx/create_context.c -+++ b/src/glx/create_context.c -@@ -94,7 +94,7 @@ glXCreateContextAttribsARB(Display *dpy, GLXFBConfig config, - * the protocol error and handle it. Part of handling the error is freeing - * the possibly non-NULL value returned by this function. - */ --#ifdef XCB_GLX_CREATE_CONTEXT_ATTRIBS_ARB -+#ifdef HAVE_XCB_GLX_CREATE_CONTEXT - cookie = - xcb_glx_create_context_attribs_arb_checked(c, - gc->xid, -diff --git a/src/glx/glxextensions.c b/src/glx/glxextensions.c -index 0fcd8a9..86dc7d0 100644 ---- a/src/glx/glxextensions.c -+++ b/src/glx/glxextensions.c -@@ -71,7 +71,7 @@ struct extension_info - - /* *INDENT-OFF* */ - static const struct extension_info known_glx_extensions[] = { --#ifdef XCB_GLX_CREATE_CONTEXT_ATTRIBS_ARB -+#ifdef HAVE_XCB_GLX_CREATE_CONTEXT - { GLX(ARB_create_context), VER(0,0), Y, N, N, N }, - { GLX(ARB_create_context_profile), VER(0,0), Y, N, N, N }, - #else -@@ -85,7 +85,7 @@ static const struct extension_info known_glx_extensions[] = { - { GLX(EXT_visual_info), VER(0,0), Y, Y, N, N }, - { GLX(EXT_visual_rating), VER(0,0), Y, Y, N, N }, - { GLX(EXT_framebuffer_sRGB), VER(0,0), Y, Y, N, N }, --#ifdef XCB_GLX_CREATE_CONTEXT_ATTRIBS_ARB -+#ifdef HAVE_XCB_GLX_CREATE_CONTEXT - { GLX(EXT_create_context_es2_profile), VER(0,0), Y, N, N, Y }, - #else - { GLX(EXT_create_context_es2_profile), VER(0,0), N, N, N, N }, -diff --git a/tests/glx/Makefile.am b/tests/glx/Makefile.am -index 0b06117..cdebf5d 100644 ---- a/tests/glx/Makefile.am -+++ b/tests/glx/Makefile.am -@@ -4,6 +4,7 @@ AM_CXXFLAGS = -I$(top_builddir)/src/glx -I$(top_builddir)/src/mapi \ - $(X11_CFLAGS) $(GTEST_CFLAGS) - - if HAVE_GTEST -+if HAVE_XCB_GLX_CREATE_CONTEXT - TESTS = glx_unittest - check_PROGRAMS = glx_unittest - -@@ -13,4 +14,5 @@ glx_unittest_SOURCES = \ - fake_glx_screen.cpp - - glx_unittest_LDADD = $(top_builddir)/src/glx/libglx.a $(GTEST_LIBS) -lgtest_main --endif -\ No newline at end of file -+endif -+endif --- -1.7.6.4 diff -Nru mesa-7.12.0~git20120103.2ae591bd/.lastcommit mesa-7.12.0~git20120104.892a2542/.lastcommit --- mesa-7.12.0~git20120103.2ae591bd/.lastcommit 2012-01-03 15:18:15.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/.lastcommit 2012-01-04 16:10:44.000000000 +0000 @@ -1 +1 @@ -commit 2ae591bdf13f02f23471ea302b55eaccbb810dd7 +commit 892a2542a3f0753a7064c710b96f077dd5490624 diff -Nru mesa-7.12.0~git20120103.2ae591bd/src/gallium/auxiliary/tgsi/tgsi_exec.c mesa-7.12.0~git20120104.892a2542/src/gallium/auxiliary/tgsi/tgsi_exec.c --- mesa-7.12.0~git20120103.2ae591bd/src/gallium/auxiliary/tgsi/tgsi_exec.c 2012-01-03 15:18:14.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/src/gallium/auxiliary/tgsi/tgsi_exec.c 2012-01-04 16:10:44.000000000 +0000 @@ -62,7 +62,7 @@ #include "util/u_math.h" -#define FAST_MATH 1 +#define FAST_MATH 0 #define TILE_TOP_LEFT 0 #define TILE_TOP_RIGHT 1 diff -Nru mesa-7.12.0~git20120103.2ae591bd/src/gallium/auxiliary/util/u_tile.c mesa-7.12.0~git20120104.892a2542/src/gallium/auxiliary/util/u_tile.c --- mesa-7.12.0~git20120103.2ae591bd/src/gallium/auxiliary/util/u_tile.c 2012-01-03 15:18:14.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/src/gallium/auxiliary/util/u_tile.c 2012-01-04 16:10:44.000000000 +0000 @@ -344,6 +344,31 @@ } } +/*** PIPE_FORMAT_X32_S8X24_UINT ***/ + +/** + * Return S component as four uint32_t in [0..255]. Z part ignored. + */ +static void +x32_s8_get_tile_rgba(const unsigned *src, + unsigned w, unsigned h, + float *p, + unsigned dst_stride) +{ + unsigned i, j; + + for (i = 0; i < h; i++) { + float *pRow = p; + for (j = 0; j < w; j++, pRow += 4) { + src++; + pRow[0] = + pRow[1] = + pRow[2] = + pRow[3] = (float)(*src++ & 0xff); + } + p += dst_stride; + } +} void pipe_tile_raw_to_rgba(enum pipe_format format, @@ -381,6 +406,9 @@ case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT: z32f_x24s8_get_tile_rgba((float *) src, w, h, dst, dst_stride); break; + case PIPE_FORMAT_X32_S8X24_UINT: + x32_s8_get_tile_rgba((float *) src, w, h, dst, dst_stride); + break; default: util_format_read_4f(format, dst, dst_stride * sizeof(float), diff -Nru mesa-7.12.0~git20120103.2ae591bd/src/gallium/auxiliary/vl/vl_mpeg12_decoder.c mesa-7.12.0~git20120104.892a2542/src/gallium/auxiliary/vl/vl_mpeg12_decoder.c --- mesa-7.12.0~git20120103.2ae591bd/src/gallium/auxiliary/vl/vl_mpeg12_decoder.c 2012-01-03 15:18:14.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/src/gallium/auxiliary/vl/vl_mpeg12_decoder.c 2012-01-04 16:10:44.000000000 +0000 @@ -260,12 +260,13 @@ break; default: - if (mb->macroblock_type & PIPE_MPEG12_MB_TYPE_PATTERN) { - /* patern without a motion vector, just copy the old frame content */ - weights[0] = PIPE_VIDEO_MV_WEIGHT_MAX; + if (mb->macroblock_type & PIPE_MPEG12_MB_TYPE_INTRA) { + weights[0] = PIPE_VIDEO_MV_WEIGHT_MIN; weights[1] = PIPE_VIDEO_MV_WEIGHT_MIN; } else { - weights[0] = PIPE_VIDEO_MV_WEIGHT_MIN; + /* no motion vector, but also not intra mb -> + just copy the old frame content */ + weights[0] = PIPE_VIDEO_MV_WEIGHT_MAX; weights[1] = PIPE_VIDEO_MV_WEIGHT_MIN; } break; diff -Nru mesa-7.12.0~git20120103.2ae591bd/src/gallium/drivers/softpipe/sp_clear.c mesa-7.12.0~git20120104.892a2542/src/gallium/drivers/softpipe/sp_clear.c --- mesa-7.12.0~git20120103.2ae591bd/src/gallium/drivers/softpipe/sp_clear.c 2012-01-03 15:18:15.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/src/gallium/drivers/softpipe/sp_clear.c 2012-01-04 16:10:44.000000000 +0000 @@ -50,7 +50,7 @@ double depth, unsigned stencil) { struct softpipe_context *softpipe = softpipe_context(pipe); - unsigned cv; + uint64_t cv; uint i; if (softpipe->no_rast) @@ -73,7 +73,7 @@ static const union pipe_color_union zero; struct pipe_surface *ps = softpipe->framebuffer.zsbuf; - cv = util_pack_z_stencil(ps->format, depth, stencil); + cv = util_pack64_z_stencil(ps->format, depth, stencil); sp_tile_cache_clear(softpipe->zsbuf_cache, &zero, cv); } diff -Nru mesa-7.12.0~git20120103.2ae591bd/src/gallium/drivers/softpipe/sp_quad_depth_test.c mesa-7.12.0~git20120104.892a2542/src/gallium/drivers/softpipe/sp_quad_depth_test.c --- mesa-7.12.0~git20120103.2ae591bd/src/gallium/drivers/softpipe/sp_quad_depth_test.c 2012-01-03 15:18:15.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/src/gallium/drivers/softpipe/sp_quad_depth_test.c 2012-01-04 16:10:44.000000000 +0000 @@ -32,6 +32,7 @@ #include "pipe/p_defines.h" #include "util/u_format.h" +#include "util/u_math.h" #include "util/u_memory.h" #include "tgsi/tgsi_scan.h" #include "sp_context.h" @@ -102,6 +103,21 @@ data->stencilVals[j] = tile->data.stencil8[y][x]; } break; + case PIPE_FORMAT_Z32_FLOAT: + for (j = 0; j < QUAD_SIZE; j++) { + int x = quad->input.x0 % TILE_SIZE + (j & 1); + int y = quad->input.y0 % TILE_SIZE + (j >> 1); + data->bzzzz[j] = tile->data.depth32[y][x]; + } + break; + case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT: + for (j = 0; j < QUAD_SIZE; j++) { + int x = quad->input.x0 % TILE_SIZE + (j & 1); + int y = quad->input.y0 % TILE_SIZE + (j >> 1); + data->bzzzz[j] = tile->data.depth64[y][x] & 0xffffffff; + data->stencilVals[j] = (tile->data.depth64[y][x] >> 32) & 0xff; + } + break; default: assert(0); } @@ -182,6 +198,17 @@ } } break; + case PIPE_FORMAT_Z32_FLOAT: + case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT: + { + union fi fui; + + for (j = 0; j < QUAD_SIZE; j++) { + fui.f = quad->output.depth[j]; + data->qzzzz[j] = fui.ui; + } + } + break; default: assert(0); } @@ -207,6 +234,8 @@ case PIPE_FORMAT_X8Z24_UNORM: case PIPE_FORMAT_S8_UINT_Z24_UNORM: case PIPE_FORMAT_S8_UINT: + case PIPE_FORMAT_Z32_FLOAT: + case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT: for (j = 0; j < QUAD_SIZE; j++) { data->shader_stencil_refs[j] = ((unsigned)(quad->output.stencil[j])); } @@ -272,7 +301,20 @@ tile->data.stencil8[y][x] = data->stencilVals[j]; } break; - + case PIPE_FORMAT_Z32_FLOAT: + for (j = 0; j < QUAD_SIZE; j++) { + int x = quad->input.x0 % TILE_SIZE + (j & 1); + int y = quad->input.y0 % TILE_SIZE + (j >> 1); + tile->data.depth32[y][x] = data->bzzzz[j]; + } + break; + case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT: + for (j = 0; j < QUAD_SIZE; j++) { + int x = quad->input.x0 % TILE_SIZE + (j & 1); + int y = quad->input.y0 % TILE_SIZE + (j >> 1); + tile->data.depth64[y][x] = (uint64_t)data->bzzzz[j] | ((uint64_t)data->stencilVals[j] << 32); + } + break; default: assert(0); } diff -Nru mesa-7.12.0~git20120103.2ae591bd/src/gallium/drivers/softpipe/sp_screen.c mesa-7.12.0~git20120104.892a2542/src/gallium/drivers/softpipe/sp_screen.c --- mesa-7.12.0~git20120103.2ae591bd/src/gallium/drivers/softpipe/sp_screen.c 2012-01-03 15:18:15.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/src/gallium/drivers/softpipe/sp_screen.c 2012-01-04 16:10:44.000000000 +0000 @@ -250,19 +250,6 @@ if (bind & PIPE_BIND_DEPTH_STENCIL) { if (format_desc->colorspace != UTIL_FORMAT_COLORSPACE_ZS) return FALSE; - - /* - * TODO: Unfortunately we cannot render into anything more than 32 bits - * because we encode depth and stencil clear values into a 32bit word. - */ - if (format_desc->block.bits > 32) - return FALSE; - - /* - * TODO: eliminate this restriction - */ - if (format == PIPE_FORMAT_Z32_FLOAT) - return FALSE; } /* diff -Nru mesa-7.12.0~git20120103.2ae591bd/src/gallium/drivers/softpipe/sp_tile_cache.c mesa-7.12.0~git20120104.892a2542/src/gallium/drivers/softpipe/sp_tile_cache.c --- mesa-7.12.0~git20120103.2ae591bd/src/gallium/drivers/softpipe/sp_tile_cache.c 2012-01-03 15:18:15.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/src/gallium/drivers/softpipe/sp_tile_cache.c 2012-01-04 16:10:44.000000000 +0000 @@ -268,7 +268,7 @@ static void clear_tile(struct softpipe_cached_tile *tile, enum pipe_format format, - uint clear_value) + uint64_t clear_value) { uint i, j; @@ -295,7 +295,19 @@ else { for (i = 0; i < TILE_SIZE; i++) { for (j = 0; j < TILE_SIZE; j++) { - tile->data.color32[i][j] = clear_value; + tile->data.depth32[i][j] = clear_value; + } + } + } + break; + case 8: + if (clear_value == 0) { + memset(tile->data.any, 0, 8 * TILE_SIZE * TILE_SIZE); + } + else { + for (i = 0; i < TILE_SIZE; i++) { + for (j = 0; j < TILE_SIZE; j++) { + tile->data.depth64[i][j] = clear_value; } } } @@ -601,7 +613,7 @@ void sp_tile_cache_clear(struct softpipe_tile_cache *tc, const union pipe_color_union *color, - uint clearValue) + uint64_t clearValue) { uint pos; diff -Nru mesa-7.12.0~git20120103.2ae591bd/src/gallium/drivers/softpipe/sp_tile_cache.h mesa-7.12.0~git20120104.892a2542/src/gallium/drivers/softpipe/sp_tile_cache.h --- mesa-7.12.0~git20120103.2ae591bd/src/gallium/drivers/softpipe/sp_tile_cache.h 2012-01-03 15:18:15.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/src/gallium/drivers/softpipe/sp_tile_cache.h 2012-01-04 16:10:44.000000000 +0000 @@ -70,6 +70,7 @@ ubyte stencil8[TILE_SIZE][TILE_SIZE]; uint colorui128[TILE_SIZE][TILE_SIZE][4]; int colori128[TILE_SIZE][TILE_SIZE][4]; + uint64_t depth64[TILE_SIZE][TILE_SIZE]; ubyte any[1]; } data; }; @@ -88,7 +89,7 @@ struct softpipe_cached_tile *entries[NUM_ENTRIES]; uint clear_flags[(MAX_WIDTH / TILE_SIZE) * (MAX_HEIGHT / TILE_SIZE) / 32]; union pipe_color_union clear_color; /**< for color bufs */ - uint clear_val; /**< for z+stencil */ + uint64_t clear_val; /**< for z+stencil */ boolean depth_stencil; /**< Is the surface a depth/stencil format? */ struct softpipe_cached_tile *tile; /**< scratch tile for clears */ @@ -123,7 +124,7 @@ extern void sp_tile_cache_clear(struct softpipe_tile_cache *tc, const union pipe_color_union *color, - uint clearValue); + uint64_t clearValue); extern struct softpipe_cached_tile * sp_find_cached_tile(struct softpipe_tile_cache *tc, diff -Nru mesa-7.12.0~git20120103.2ae591bd/src/glx/clientinfo.c mesa-7.12.0~git20120104.892a2542/src/glx/clientinfo.c --- mesa-7.12.0~git20120103.2ae591bd/src/glx/clientinfo.c 2012-01-03 15:18:15.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/src/glx/clientinfo.c 2012-01-04 16:10:57.000000000 +0000 @@ -123,6 +123,7 @@ * THE ORDER IS IMPORTANT. We want to send the most recent version of the * protocol that the server can support. */ +#ifdef HAVE_XCB_GLX_CREATE_CONTEXT if (glx_dpy->majorVersion == 1 && glx_dpy->minorVersion == 4 && any_screen_has_ARB_create_context_profile) { xcb_glx_set_client_info_2arb(c, @@ -145,7 +146,9 @@ gl_versions, gl_extension_string, glx_extensions); - } else { + } else +#endif + { xcb_glx_client_info(c, GLX_MAJOR_VERSION, GLX_MINOR_VERSION, gl_extension_length, diff -Nru mesa-7.12.0~git20120103.2ae591bd/src/glx/create_context.c mesa-7.12.0~git20120104.892a2542/src/glx/create_context.c --- mesa-7.12.0~git20120103.2ae591bd/src/glx/create_context.c 2012-01-03 15:18:15.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/src/glx/create_context.c 2012-01-04 16:10:57.000000000 +0000 @@ -94,7 +94,7 @@ * the protocol error and handle it. Part of handling the error is freeing * the possibly non-NULL value returned by this function. */ -#ifdef XCB_GLX_CREATE_CONTEXT_ATTRIBS_ARB +#ifdef HAVE_XCB_GLX_CREATE_CONTEXT cookie = xcb_glx_create_context_attribs_arb_checked(c, gc->xid, diff -Nru mesa-7.12.0~git20120103.2ae591bd/src/glx/glxextensions.c mesa-7.12.0~git20120104.892a2542/src/glx/glxextensions.c --- mesa-7.12.0~git20120103.2ae591bd/src/glx/glxextensions.c 2012-01-03 15:18:15.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/src/glx/glxextensions.c 2012-01-04 16:10:57.000000000 +0000 @@ -71,7 +71,7 @@ /* *INDENT-OFF* */ static const struct extension_info known_glx_extensions[] = { -#ifdef XCB_GLX_CREATE_CONTEXT_ATTRIBS_ARB +#ifdef HAVE_XCB_GLX_CREATE_CONTEXT { GLX(ARB_create_context), VER(0,0), Y, N, N, N }, { GLX(ARB_create_context_profile), VER(0,0), Y, N, N, N }, #else @@ -85,7 +85,7 @@ { GLX(EXT_visual_info), VER(0,0), Y, Y, N, N }, { GLX(EXT_visual_rating), VER(0,0), Y, Y, N, N }, { GLX(EXT_framebuffer_sRGB), VER(0,0), Y, Y, N, N }, -#ifdef XCB_GLX_CREATE_CONTEXT_ATTRIBS_ARB +#ifdef HAVE_XCB_GLX_CREATE_CONTEXT { GLX(EXT_create_context_es2_profile), VER(0,0), Y, N, N, Y }, #else { GLX(EXT_create_context_es2_profile), VER(0,0), N, N, N, N }, diff -Nru mesa-7.12.0~git20120103.2ae591bd/src/mesa/drivers/dri/i915/intel_mipmap_tree.c mesa-7.12.0~git20120104.892a2542/src/mesa/drivers/dri/i915/intel_mipmap_tree.c --- mesa-7.12.0~git20120103.2ae591bd/src/mesa/drivers/dri/i915/intel_mipmap_tree.c 2012-01-03 15:18:15.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/src/mesa/drivers/dri/i915/intel_mipmap_tree.c 2012-01-04 16:10:44.000000000 +0000 @@ -640,12 +640,13 @@ resolve_func_t func) { bool did_resolve = false; - struct intel_resolve_map *i; + struct intel_resolve_map *i, *next; - for (i = mt->hiz_map.next; i; i = i->next) { + for (i = mt->hiz_map.next; i; i = next) { if (i->need != need) continue; func(intel, mt, i->level, i->layer); + next = i->next; intel_resolve_map_remove(i); did_resolve = true; } diff -Nru mesa-7.12.0~git20120103.2ae591bd/src/mesa/drivers/dri/i915/intel_tex_image.c mesa-7.12.0~git20120104.892a2542/src/mesa/drivers/dri/i915/intel_tex_image.c --- mesa-7.12.0~git20120103.2ae591bd/src/mesa/drivers/dri/i915/intel_tex_image.c 2012-01-03 15:18:15.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/src/mesa/drivers/dri/i915/intel_tex_image.c 2012-01-04 16:10:44.000000000 +0000 @@ -291,7 +291,7 @@ struct gl_texture_object *texobj = image->TexObject; struct intel_texture_object *intel_texobj = intel_texture_object(texobj); - _mesa_init_teximage_fields(&intel->ctx, target, image, + _mesa_init_teximage_fields(&intel->ctx, image, region->width, region->height, 1, 0, internalFormat, format); diff -Nru mesa-7.12.0~git20120103.2ae591bd/src/mesa/drivers/dri/i965/intel_mipmap_tree.c mesa-7.12.0~git20120104.892a2542/src/mesa/drivers/dri/i965/intel_mipmap_tree.c --- mesa-7.12.0~git20120103.2ae591bd/src/mesa/drivers/dri/i965/intel_mipmap_tree.c 2012-01-03 15:18:15.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/src/mesa/drivers/dri/i965/intel_mipmap_tree.c 2012-01-04 16:10:44.000000000 +0000 @@ -640,12 +640,13 @@ resolve_func_t func) { bool did_resolve = false; - struct intel_resolve_map *i; + struct intel_resolve_map *i, *next; - for (i = mt->hiz_map.next; i; i = i->next) { + for (i = mt->hiz_map.next; i; i = next) { if (i->need != need) continue; func(intel, mt, i->level, i->layer); + next = i->next; intel_resolve_map_remove(i); did_resolve = true; } diff -Nru mesa-7.12.0~git20120103.2ae591bd/src/mesa/drivers/dri/i965/intel_tex_image.c mesa-7.12.0~git20120104.892a2542/src/mesa/drivers/dri/i965/intel_tex_image.c --- mesa-7.12.0~git20120103.2ae591bd/src/mesa/drivers/dri/i965/intel_tex_image.c 2012-01-03 15:18:15.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/src/mesa/drivers/dri/i965/intel_tex_image.c 2012-01-04 16:10:44.000000000 +0000 @@ -291,7 +291,7 @@ struct gl_texture_object *texobj = image->TexObject; struct intel_texture_object *intel_texobj = intel_texture_object(texobj); - _mesa_init_teximage_fields(&intel->ctx, target, image, + _mesa_init_teximage_fields(&intel->ctx, image, region->width, region->height, 1, 0, internalFormat, format); diff -Nru mesa-7.12.0~git20120103.2ae591bd/src/mesa/drivers/dri/intel/intel_mipmap_tree.c mesa-7.12.0~git20120104.892a2542/src/mesa/drivers/dri/intel/intel_mipmap_tree.c --- mesa-7.12.0~git20120103.2ae591bd/src/mesa/drivers/dri/intel/intel_mipmap_tree.c 2012-01-03 15:18:15.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/src/mesa/drivers/dri/intel/intel_mipmap_tree.c 2012-01-04 16:10:44.000000000 +0000 @@ -640,12 +640,13 @@ resolve_func_t func) { bool did_resolve = false; - struct intel_resolve_map *i; + struct intel_resolve_map *i, *next; - for (i = mt->hiz_map.next; i; i = i->next) { + for (i = mt->hiz_map.next; i; i = next) { if (i->need != need) continue; func(intel, mt, i->level, i->layer); + next = i->next; intel_resolve_map_remove(i); did_resolve = true; } diff -Nru mesa-7.12.0~git20120103.2ae591bd/src/mesa/drivers/dri/intel/intel_tex_image.c mesa-7.12.0~git20120104.892a2542/src/mesa/drivers/dri/intel/intel_tex_image.c --- mesa-7.12.0~git20120103.2ae591bd/src/mesa/drivers/dri/intel/intel_tex_image.c 2012-01-03 15:18:15.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/src/mesa/drivers/dri/intel/intel_tex_image.c 2012-01-04 16:10:44.000000000 +0000 @@ -291,7 +291,7 @@ struct gl_texture_object *texobj = image->TexObject; struct intel_texture_object *intel_texobj = intel_texture_object(texobj); - _mesa_init_teximage_fields(&intel->ctx, target, image, + _mesa_init_teximage_fields(&intel->ctx, image, region->width, region->height, 1, 0, internalFormat, format); diff -Nru mesa-7.12.0~git20120103.2ae591bd/src/mesa/drivers/dri/nouveau/nouveau_texture.c mesa-7.12.0~git20120104.892a2542/src/mesa/drivers/dri/nouveau/nouveau_texture.c --- mesa-7.12.0~git20120103.2ae591bd/src/mesa/drivers/dri/nouveau/nouveau_texture.c 2012-01-03 15:18:15.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/src/mesa/drivers/dri/nouveau/nouveau_texture.c 2012-01-04 16:10:44.000000000 +0000 @@ -666,7 +666,7 @@ s->format = get_texbuffer_format(rb, format); /* Update the image fields. */ - _mesa_init_teximage_fields(ctx, target, ti, s->width, s->height, + _mesa_init_teximage_fields(ctx, ti, s->width, s->height, 1, 0, s->cpp, s->format); nti->base.RowStride = s->pitch / s->cpp; diff -Nru mesa-7.12.0~git20120103.2ae591bd/src/mesa/drivers/dri/r200/r200_texstate.c mesa-7.12.0~git20120104.892a2542/src/mesa/drivers/dri/r200/r200_texstate.c --- mesa-7.12.0~git20120103.2ae591bd/src/mesa/drivers/dri/r200/r200_texstate.c 2012-01-03 15:18:15.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/src/mesa/drivers/dri/r200/r200_texstate.c 2012-01-04 16:10:44.000000000 +0000 @@ -806,7 +806,7 @@ break; } - _mesa_init_teximage_fields(radeon->glCtx, target, texImage, + _mesa_init_teximage_fields(radeon->glCtx, texImage, rb->base.Width, rb->base.Height, 1, 0, rb->cpp, texFormat); rImage->base.RowStride = rb->pitch / rb->cpp; diff -Nru mesa-7.12.0~git20120103.2ae591bd/src/mesa/drivers/dri/radeon/radeon_texstate.c mesa-7.12.0~git20120104.892a2542/src/mesa/drivers/dri/radeon/radeon_texstate.c --- mesa-7.12.0~git20120103.2ae591bd/src/mesa/drivers/dri/radeon/radeon_texstate.c 2012-01-03 15:18:15.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/src/mesa/drivers/dri/radeon/radeon_texstate.c 2012-01-04 16:10:44.000000000 +0000 @@ -680,7 +680,7 @@ break; } - _mesa_init_teximage_fields(radeon->glCtx, target, texImage, + _mesa_init_teximage_fields(radeon->glCtx, texImage, rb->base.Width, rb->base.Height, 1, 0, rb->cpp, texFormat); rImage->base.RowStride = rb->pitch / rb->cpp; diff -Nru mesa-7.12.0~git20120103.2ae591bd/src/mesa/drivers/dri/swrast/swrast.c mesa-7.12.0~git20120104.892a2542/src/mesa/drivers/dri/swrast/swrast.c --- mesa-7.12.0~git20120103.2ae591bd/src/mesa/drivers/dri/swrast/swrast.c 2012-01-03 15:18:15.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/src/mesa/drivers/dri/swrast/swrast.c 2012-01-04 16:10:44.000000000 +0000 @@ -91,7 +91,7 @@ else texFormat = MESA_FORMAT_ARGB8888; - _mesa_init_teximage_fields(&dri_ctx->Base, target, texImage, + _mesa_init_teximage_fields(&dri_ctx->Base, texImage, w, h, 1, 0, internalFormat, texFormat); sPriv->swrast_loader->getImage(dPriv, x, y, w, h, (char *)swImage->Data, diff -Nru mesa-7.12.0~git20120103.2ae591bd/src/mesa/main/ff_fragment_shader.cpp mesa-7.12.0~git20120104.892a2542/src/mesa/main/ff_fragment_shader.cpp --- mesa-7.12.0~git20120103.2ae591bd/src/mesa/main/ff_fragment_shader.cpp 2012-01-03 15:18:15.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/src/mesa/main/ff_fragment_shader.cpp 2012-01-04 16:10:44.000000000 +0000 @@ -632,15 +632,19 @@ new(p->mem_ctx) ir_constant(1.0f), src); - case OPR_SRC_ALPHA: - return new(p->mem_ctx) ir_swizzle(src, 3, 3, 3, 3, 1); + case OPR_SRC_ALPHA: + return src->type->is_scalar() + ? src : (ir_rvalue *) new(p->mem_ctx) ir_swizzle(src, 3, 3, 3, 3, 1); + + case OPR_ONE_MINUS_SRC_ALPHA: { + ir_rvalue *const scalar = (src->type->is_scalar()) + ? src : (ir_rvalue *) new(p->mem_ctx) ir_swizzle(src, 3, 3, 3, 3, 1); - case OPR_ONE_MINUS_SRC_ALPHA: return new(p->mem_ctx) ir_expression(ir_binop_sub, new(p->mem_ctx) ir_constant(1.0f), - new(p->mem_ctx) ir_swizzle(src, - 3, 3, - 3, 3, 1)); + scalar); + } + case OPR_ZERO: return new(p->mem_ctx) ir_constant(0.0f); case OPR_ONE: diff -Nru mesa-7.12.0~git20120103.2ae591bd/src/mesa/main/mipmap.c mesa-7.12.0~git20120104.892a2542/src/mesa/main/mipmap.c --- mesa-7.12.0~git20120103.2ae591bd/src/mesa/main/mipmap.c 2012-01-03 15:18:15.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/src/mesa/main/mipmap.c 2012-01-04 16:10:44.000000000 +0000 @@ -1860,7 +1860,7 @@ /* need to (re)allocate image */ ctx->Driver.FreeTextureImageBuffer(ctx, dstImage); - _mesa_init_teximage_fields(ctx, target, dstImage, + _mesa_init_teximage_fields(ctx, dstImage, width, height, depth, border, intFormat, format); diff -Nru mesa-7.12.0~git20120103.2ae591bd/src/mesa/main/teximage.c mesa-7.12.0~git20120104.892a2542/src/mesa/main/teximage.c --- mesa-7.12.0~git20120103.2ae591bd/src/mesa/main/teximage.c 2012-01-03 15:18:15.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/src/mesa/main/teximage.c 2012-01-04 16:10:44.000000000 +0000 @@ -1059,7 +1059,6 @@ * Initialize basic fields of the gl_texture_image struct. * * \param ctx GL context. - * \param target texture target (GL_TEXTURE_1D, GL_TEXTURE_RECTANGLE, etc). * \param img texture image structure to be initialized. * \param width image width. * \param height image height. @@ -1072,7 +1071,7 @@ * Note: width, height and depth include the border. */ void -_mesa_init_teximage_fields(struct gl_context *ctx, GLenum target, +_mesa_init_teximage_fields(struct gl_context *ctx, struct gl_texture_image *img, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum internalFormat, @@ -2422,7 +2421,7 @@ format, type); if (legal_texture_size(ctx, texFormat, width, height, depth)) { - _mesa_init_teximage_fields(ctx, target, texImage, width, height, + _mesa_init_teximage_fields(ctx, texImage, width, height, depth, border, internalFormat, texFormat); } @@ -2473,7 +2472,7 @@ type); if (legal_texture_size(ctx, texFormat, width, height, depth)) { - _mesa_init_teximage_fields(ctx, target, texImage, + _mesa_init_teximage_fields(ctx, texImage, width, height, depth, border, internalFormat, texFormat); @@ -2812,7 +2811,7 @@ /* Free old texture image */ ctx->Driver.FreeTextureImageBuffer(ctx, texImage); - _mesa_init_teximage_fields(ctx, target, texImage, width, height, 1, + _mesa_init_teximage_fields(ctx, texImage, width, height, 1, border, internalFormat, texFormat); /* Allocate texture memory (no pixel data yet) */ @@ -3404,7 +3403,7 @@ } else { /* no error: store the teximage parameters */ - _mesa_init_teximage_fields(ctx, target, texImage, width, height, + _mesa_init_teximage_fields(ctx, texImage, width, height, depth, border, internalFormat, MESA_FORMAT_NONE); } @@ -3439,7 +3438,7 @@ GL_NONE); if (legal_texture_size(ctx, texFormat, width, height, depth)) { - _mesa_init_teximage_fields(ctx, target, texImage, + _mesa_init_teximage_fields(ctx, texImage, width, height, depth, border, internalFormat, texFormat); diff -Nru mesa-7.12.0~git20120103.2ae591bd/src/mesa/main/teximage.h mesa-7.12.0~git20120104.892a2542/src/mesa/main/teximage.h --- mesa-7.12.0~git20120103.2ae591bd/src/mesa/main/teximage.h 2012-01-03 15:18:15.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/src/mesa/main/teximage.h 2012-01-04 16:10:44.000000000 +0000 @@ -67,7 +67,7 @@ extern void -_mesa_init_teximage_fields(struct gl_context *ctx, GLenum target, +_mesa_init_teximage_fields(struct gl_context *ctx, struct gl_texture_image *img, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum internalFormat, diff -Nru mesa-7.12.0~git20120103.2ae591bd/src/mesa/main/texobj.c mesa-7.12.0~git20120104.892a2542/src/mesa/main/texobj.c --- mesa-7.12.0~git20120103.2ae591bd/src/mesa/main/texobj.c 2012-01-03 15:18:15.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/src/mesa/main/texobj.c 2012-01-04 16:10:44.000000000 +0000 @@ -793,7 +793,7 @@ GL_UNSIGNED_BYTE); /* init the image fields */ - _mesa_init_teximage_fields(ctx, GL_TEXTURE_2D, texImage, + _mesa_init_teximage_fields(ctx, texImage, 8, 8, 1, 0, GL_RGBA, texFormat); ASSERT(texImage->TexFormat != MESA_FORMAT_NONE); diff -Nru mesa-7.12.0~git20120103.2ae591bd/src/mesa/main/texstorage.c mesa-7.12.0~git20120104.892a2542/src/mesa/main/texstorage.c --- mesa-7.12.0~git20120103.2ae591bd/src/mesa/main/texstorage.c 2012-01-03 15:18:15.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/src/mesa/main/texstorage.c 2012-01-04 16:10:44.000000000 +0000 @@ -155,7 +155,7 @@ return; } - _mesa_init_teximage_fields(ctx, target, texImage, + _mesa_init_teximage_fields(ctx, texImage, levelWidth, levelHeight, levelDepth, 0, internalFormat, texFormat); } @@ -180,7 +180,7 @@ for (face = 0; face < numFaces; face++) { struct gl_texture_image *texImage = texObj->Image[face][level]; if (texImage) { - _mesa_init_teximage_fields(ctx, target, texImage, + _mesa_init_teximage_fields(ctx, texImage, 0, 0, 0, 0, GL_NONE, MESA_FORMAT_NONE); } @@ -223,7 +223,7 @@ return; } - _mesa_init_teximage_fields(ctx, target, texImage, + _mesa_init_teximage_fields(ctx, texImage, 0, 0, 0, 0, GL_NONE, MESA_FORMAT_NONE); } } diff -Nru mesa-7.12.0~git20120103.2ae591bd/src/mesa/state_tracker/st_cb_eglimage.c mesa-7.12.0~git20120104.892a2542/src/mesa/state_tracker/st_cb_eglimage.c --- mesa-7.12.0~git20120103.2ae591bd/src/mesa/state_tracker/st_cb_eglimage.c 2012-01-03 15:18:15.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/src/mesa/state_tracker/st_cb_eglimage.c 2012-01-04 16:10:44.000000000 +0000 @@ -125,7 +125,7 @@ texFormat = st_pipe_format_to_mesa_format(ps->format); - _mesa_init_teximage_fields(ctx, target, texImage, + _mesa_init_teximage_fields(ctx, texImage, ps->width, ps->height, 1, 0, internalFormat, texFormat); diff -Nru mesa-7.12.0~git20120103.2ae591bd/src/mesa/state_tracker/st_cb_texture.c mesa-7.12.0~git20120104.892a2542/src/mesa/state_tracker/st_cb_texture.c --- mesa-7.12.0~git20120103.2ae591bd/src/mesa/state_tracker/st_cb_texture.c 2012-01-03 15:18:15.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/src/mesa/state_tracker/st_cb_texture.c 2012-01-04 16:10:44.000000000 +0000 @@ -533,7 +533,7 @@ texFormat = _mesa_choose_texture_format(ctx, texObj, target, level, internalFormat, format, type); - _mesa_init_teximage_fields(ctx, target, texImage, + _mesa_init_teximage_fields(ctx, texImage, width, height, depth, border, internalFormat, texFormat); @@ -1625,7 +1625,7 @@ texImg = _mesa_get_tex_image(st->ctx, texObj, target, 0); - _mesa_init_teximage_fields(st->ctx, target, texImg, + _mesa_init_teximage_fields(st->ctx, texImg, 16, 16, 1, 0, /* w, h, d, border */ GL_RGBA, MESA_FORMAT_RGBA8888); diff -Nru mesa-7.12.0~git20120103.2ae591bd/src/mesa/state_tracker/st_draw.c mesa-7.12.0~git20120104.892a2542/src/mesa/state_tracker/st_draw.c --- mesa-7.12.0~git20120103.2ae591bd/src/mesa/state_tracker/st_draw.c 2012-01-03 15:18:15.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/src/mesa/state_tracker/st_draw.c 2012-01-04 16:10:44.000000000 +0000 @@ -102,6 +102,13 @@ PIPE_FORMAT_R32G32B32A32_USCALED }; +static GLuint uint_types_int[4] = { + PIPE_FORMAT_R32_UINT, + PIPE_FORMAT_R32G32_UINT, + PIPE_FORMAT_R32G32B32_UINT, + PIPE_FORMAT_R32G32B32A32_UINT +}; + static GLuint int_types_norm[4] = { PIPE_FORMAT_R32_SNORM, PIPE_FORMAT_R32G32_SNORM, @@ -116,6 +123,13 @@ PIPE_FORMAT_R32G32B32A32_SSCALED }; +static GLuint int_types_int[4] = { + PIPE_FORMAT_R32_SINT, + PIPE_FORMAT_R32G32_SINT, + PIPE_FORMAT_R32G32B32_SINT, + PIPE_FORMAT_R32G32B32A32_SINT +}; + static GLuint ushort_types_norm[4] = { PIPE_FORMAT_R16_UNORM, PIPE_FORMAT_R16G16_UNORM, @@ -130,6 +144,13 @@ PIPE_FORMAT_R16G16B16A16_USCALED }; +static GLuint ushort_types_int[4] = { + PIPE_FORMAT_R16_UINT, + PIPE_FORMAT_R16G16_UINT, + PIPE_FORMAT_R16G16B16_UINT, + PIPE_FORMAT_R16G16B16A16_UINT +}; + static GLuint short_types_norm[4] = { PIPE_FORMAT_R16_SNORM, PIPE_FORMAT_R16G16_SNORM, @@ -144,6 +165,13 @@ PIPE_FORMAT_R16G16B16A16_SSCALED }; +static GLuint short_types_int[4] = { + PIPE_FORMAT_R16_SINT, + PIPE_FORMAT_R16G16_SINT, + PIPE_FORMAT_R16G16B16_SINT, + PIPE_FORMAT_R16G16B16A16_SINT +}; + static GLuint ubyte_types_norm[4] = { PIPE_FORMAT_R8_UNORM, PIPE_FORMAT_R8G8_UNORM, @@ -158,6 +186,13 @@ PIPE_FORMAT_R8G8B8A8_USCALED }; +static GLuint ubyte_types_int[4] = { + PIPE_FORMAT_R8_UINT, + PIPE_FORMAT_R8G8_UINT, + PIPE_FORMAT_R8G8B8_UINT, + PIPE_FORMAT_R8G8B8A8_UINT +}; + static GLuint byte_types_norm[4] = { PIPE_FORMAT_R8_SNORM, PIPE_FORMAT_R8G8_SNORM, @@ -172,6 +207,13 @@ PIPE_FORMAT_R8G8B8A8_SSCALED }; +static GLuint byte_types_int[4] = { + PIPE_FORMAT_R8_SINT, + PIPE_FORMAT_R8G8_SINT, + PIPE_FORMAT_R8G8B8_SINT, + PIPE_FORMAT_R8G8B8A8_SINT +}; + static GLuint fixed_types[4] = { PIPE_FORMAT_R32_FIXED, PIPE_FORMAT_R32G32_FIXED, @@ -186,7 +228,7 @@ */ enum pipe_format st_pipe_vertex_format(GLenum type, GLuint size, GLenum format, - GLboolean normalized) + GLboolean normalized, GLboolean integer) { assert((type >= GL_BYTE && type <= GL_DOUBLE) || type == GL_FIXED || type == GL_HALF_FLOAT || @@ -199,6 +241,7 @@ if (type == GL_INT_2_10_10_10_REV || type == GL_UNSIGNED_INT_2_10_10_10_REV) { assert(size == 4); + assert(!integer); if (format == GL_BGRA) { if (type == GL_INT_2_10_10_10_REV) { @@ -234,7 +277,18 @@ return PIPE_FORMAT_B8G8R8A8_UNORM; } - if (normalized) { + if (integer) { + switch (type) { + case GL_INT: return int_types_int[size-1]; + case GL_SHORT: return short_types_int[size-1]; + case GL_BYTE: return byte_types_int[size-1]; + case GL_UNSIGNED_INT: return uint_types_int[size-1]; + case GL_UNSIGNED_SHORT: return ushort_types_int[size-1]; + case GL_UNSIGNED_BYTE: return ubyte_types_int[size-1]; + default: assert(0); return 0; + } + } + else if (normalized) { switch (type) { case GL_DOUBLE: return double_types[size-1]; case GL_FLOAT: return float_types[size-1]; @@ -407,7 +461,8 @@ velements[attr].src_format = st_pipe_vertex_format(array->Type, array->Size, array->Format, - array->Normalized); + array->Normalized, + array->Integer); assert(velements[attr].src_format); if (!usingVBO) { @@ -564,7 +619,8 @@ velements[attr].src_format = st_pipe_vertex_format(array->Type, array->Size, array->Format, - array->Normalized); + array->Normalized, + array->Integer); assert(velements[attr].src_format); } diff -Nru mesa-7.12.0~git20120103.2ae591bd/src/mesa/state_tracker/st_draw_feedback.c mesa-7.12.0~git20120104.892a2542/src/mesa/state_tracker/st_draw_feedback.c --- mesa-7.12.0~git20120103.2ae591bd/src/mesa/state_tracker/st_draw_feedback.c 2012-01-03 15:18:15.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/src/mesa/state_tracker/st_draw_feedback.c 2012-01-04 16:10:44.000000000 +0000 @@ -196,7 +196,8 @@ st_pipe_vertex_format(arrays[mesaAttr]->Type, arrays[mesaAttr]->Size, arrays[mesaAttr]->Format, - arrays[mesaAttr]->Normalized); + arrays[mesaAttr]->Normalized, + arrays[mesaAttr]->Integer); assert(velements[attr].src_format); /* tell draw about this attribute */ diff -Nru mesa-7.12.0~git20120103.2ae591bd/src/mesa/state_tracker/st_draw.h mesa-7.12.0~git20120104.892a2542/src/mesa/state_tracker/st_draw.h --- mesa-7.12.0~git20120103.2ae591bd/src/mesa/state_tracker/st_draw.h 2012-01-03 15:18:15.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/src/mesa/state_tracker/st_draw.h 2012-01-04 16:10:44.000000000 +0000 @@ -73,7 +73,7 @@ */ extern enum pipe_format st_pipe_vertex_format(GLenum type, GLuint size, GLenum format, - GLboolean normalized); + GLboolean normalized, GLboolean integer); /** diff -Nru mesa-7.12.0~git20120103.2ae591bd/src/mesa/state_tracker/st_gen_mipmap.c mesa-7.12.0~git20120104.892a2542/src/mesa/state_tracker/st_gen_mipmap.c --- mesa-7.12.0~git20120103.2ae591bd/src/mesa/state_tracker/st_gen_mipmap.c 2012-01-03 15:18:15.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/src/mesa/state_tracker/st_gen_mipmap.c 2012-01-04 16:10:44.000000000 +0000 @@ -244,7 +244,7 @@ ctx->Driver.FreeTextureImageBuffer(ctx, dstImage); /* initialize new image */ - _mesa_init_teximage_fields(ctx, target, dstImage, dstWidth, dstHeight, + _mesa_init_teximage_fields(ctx, dstImage, dstWidth, dstHeight, dstDepth, border, srcImage->InternalFormat, srcImage->TexFormat); diff -Nru mesa-7.12.0~git20120103.2ae591bd/src/mesa/state_tracker/st_manager.c mesa-7.12.0~git20120104.892a2542/src/mesa/state_tracker/st_manager.c --- mesa-7.12.0~git20120103.2ae591bd/src/mesa/state_tracker/st_manager.c 2012-01-03 15:18:15.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/src/mesa/state_tracker/st_manager.c 2012-01-04 16:10:44.000000000 +0000 @@ -535,7 +535,7 @@ texFormat = st_ChooseTextureFormat(ctx, internalFormat, GL_BGRA, GL_UNSIGNED_BYTE); - _mesa_init_teximage_fields(ctx, target, texImage, + _mesa_init_teximage_fields(ctx, texImage, tex->width0, tex->height0, 1, 0, internalFormat, texFormat); diff -Nru mesa-7.12.0~git20120103.2ae591bd/tests/glx/Makefile.am mesa-7.12.0~git20120104.892a2542/tests/glx/Makefile.am --- mesa-7.12.0~git20120103.2ae591bd/tests/glx/Makefile.am 2012-01-03 15:18:15.000000000 +0000 +++ mesa-7.12.0~git20120104.892a2542/tests/glx/Makefile.am 2012-01-04 16:10:57.000000000 +0000 @@ -4,6 +4,7 @@ $(X11_CFLAGS) $(GTEST_CFLAGS) if HAVE_GTEST +if HAVE_XCB_GLX_CREATE_CONTEXT TESTS = glx_unittest check_PROGRAMS = glx_unittest @@ -13,4 +14,5 @@ fake_glx_screen.cpp glx_unittest_LDADD = $(top_builddir)/src/glx/libglx.a $(GTEST_LIBS) -lgtest_main -endif \ No newline at end of file +endif +endif