Hello community, here is the log from the commit of package Mesa for openSUSE:Factory checked in at 2012-09-25 14:04:32 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/Mesa (Old) and /work/SRC/openSUSE:Factory/.Mesa.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "Mesa", Maintainer is "sndir...@suse.com" Changes: -------- --- /work/SRC/openSUSE:Factory/Mesa/Mesa.changes 2012-09-17 15:18:18.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.Mesa.new/Mesa.changes 2012-09-25 14:18:18.000000000 +0200 @@ -1,0 +2,26 @@ +Mon Sep 24 17:04:35 UTC 2012 - sndir...@suse.com + +- removed any .la file +- moved libglapi.so from Mesa-devel to Mesa-libglapi-devel package; + Mesa-devel requires Mesa-libglapi-devel package anyway + +------------------------------------------------------------------- +Fri Sep 21 08:28:28 UTC 2012 - sndir...@suse.com + +- fixed libOSMesa packaging (only a dangling symlink has been + packaged) + +------------------------------------------------------------------- +Fri Sep 21 07:08:05 UTC 2012 - co...@suse.com + +- fix baselibs.conf after package split + +------------------------------------------------------------------- +Thu Sep 20 13:05:15 UTC 2012 - sndir...@suse.com + +- instead of using "make install" for installing libIndirectGL/ + libOSMesa, do install these libs manually, so we no longer end + up with linking *everything* against libIndirectGL (instead of + having it correctly linked against GL!) + +------------------------------------------------------------------- Old: ---- mesa-8.98.1.tar.bz2 New: ---- mesa-8.98.5.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ Mesa.spec ++++++ --- /var/tmp/diff_new_pack.qjiYUM/_old 2012-09-25 14:18:20.000000000 +0200 +++ /var/tmp/diff_new_pack.qjiYUM/_new 2012-09-25 14:18:20.000000000 +0200 @@ -17,11 +17,11 @@ %define glamor 1 -%define _version 8.98.1 +%define _version 8.98.5 %define _name_archive mesa Name: Mesa -Version: 8.98.1 +Version: 8.98.5 Release: 0 BuildRequires: autoconf >= 2.60 BuildRequires: automake @@ -489,6 +489,7 @@ export TALLOC_CFLAGS="-I/usr/include" autoreconf -fi ### --with-gallium-drivers=r300,r600,radeonsi,nouveau,swrast,svga \ +### --with-gallium-drivers=r300,r600,nouveau,swrast,svga \ %configure --enable-gles1 \ --enable-gles2 \ --enable-dri \ @@ -519,6 +520,7 @@ CFLAGS="$RPM_OPT_FLAGS -DNDEBUG" make %{?_smp_mflags} make install DESTDIR=$RPM_BUILD_ROOT +find $RPM_BUILD_ROOT -name "*.la" -exec rm {} \; # build and install Indirect Rendering only libGL make clean-local %configure --enable-xlib-glx \ @@ -531,7 +533,12 @@ CFLAGS="$RPM_OPT_FLAGS -DNDEBUG" make %{?_smp_mflags} -make install DESTDIR=$RPM_BUILD_ROOT +cp -a \ + src/mesa/drivers/x11/.libs/libIndirectGL.so* \ + src/mesa/drivers/osmesa/.libs/libOSMesa.so* \ + $RPM_BUILD_ROOT/usr/%{_lib} +install -m 644 src/mesa/drivers/osmesa/osmesa.pc \ + $RPM_BUILD_ROOT/usr/%{_lib}/pkgconfig #for dir in ../xc/doc/man/{GL/gl,GL/glx,GLU}; do for dir in ../xc/doc/man/{GL/gl,GL/glx}; do @@ -634,7 +641,6 @@ %_includedir/KHR %_libdir/libEGL.so %_libdir/pkgconfig/egl.pc -%_libdir/libEGL.la %files -n Mesa-libGL1 %defattr(-,root,root) @@ -644,9 +650,9 @@ %defattr(-,root,root) %dir %_includedir/GL %_includedir/GL/*.h +%exclude %_includedir/GL/osmesa.h %_libdir/libGL.so %_libdir/pkgconfig/gl.pc -%_libdir/libGL.la %_mandir/man3/gl[A-Z]* %files -n Mesa-libGLESv1_CM1 @@ -657,7 +663,6 @@ %defattr(-,root,root) %_includedir/GLES %_libdir/libGLESv1_CM.so -%_libdir/libGLESv1_CM.la %_libdir/pkgconfig/glesv1_cm.pc %files -n Mesa-libGLESv2-2 @@ -668,7 +673,6 @@ %defattr(-,root,root) %_includedir/GLES2 %_libdir/libGLESv2.so -%_libdir/libGLESv2.la %_libdir/pkgconfig/glesv2.pc %files -n Mesa-libIndirectGL1 @@ -678,16 +682,16 @@ %files -n Mesa-libIndirectGL-devel %defattr(-,root,root) %_libdir/libIndirectGL.so -%_libdir/libIndirectGL.la %files -n libOSMesa9 %defattr(-,root,root) -%_libdir/libOSMesa.so.* +%_libdir/libOSMesa.so.8.0.0 +%_libdir/libOSMesa.so.8 %files -n libOSMesa-devel %defattr(-,root,root) +%_includedir/GL/osmesa.h %_libdir/libOSMesa.so -%_libdir/libOSMesa.la %_libdir/pkgconfig/osmesa.pc %files -n libgbm1 @@ -698,7 +702,6 @@ %defattr(-,root,root) %_includedir/gbm.h %_libdir/libgbm.so -%_libdir/libgbm.la %_libdir/pkgconfig/gbm.pc %ifnarch s390 s390x %arm ppc ppc64 @@ -774,15 +777,13 @@ %files -n Mesa-libglapi-devel %defattr(-,root,root) -%_libdir/libglapi.la +%_libdir/libglapi.so %files devel %defattr(-,root,root) %doc docs/*.html docs/*.spec %_includedir/GL/internal -%_libdir/libglapi.so %_libdir/libdricore9*.so -%_libdir/libdricore9*.la %_libdir/pkgconfig/dri.pc %changelog ++++++ baselibs.conf ++++++ --- /var/tmp/diff_new_pack.qjiYUM/_old 2012-09-25 14:18:20.000000000 +0200 +++ /var/tmp/diff_new_pack.qjiYUM/_new 2012-09-25 14:18:20.000000000 +0200 @@ -8,7 +8,6 @@ requires "Mesa-libGL-devel-<targettype> = <version>" requires "Mesa-libGLESv1_CM-devel-<targettype> = <version>" requires "Mesa-libGLESv2-devel-<targettype> = <version>" - requires "Mesa-libGLU-devel-<targettype> = <version>" requires "Mesa-libIndirectGL1-<targettype> = <version>" requires "Mesa-libIndirectGL-devel-<targettype> = <version>" requires "libOSMesa9-<targettype> = <version>" @@ -34,12 +33,8 @@ Mesa-libGLESv2-devel requires -Mesa-libGLESv2-<targettype> requires "Mesa-libGLESv2-2-<targettype> = <version>" -Mesa-libGLU1 -Mesa-libGLU-devel - requires -Mesa-libGLU-<targettype> - requires "Mesa-libGLU1-<targettype> = <version>" Mesa-libIndirectGL1 -Mesa-libIndirectGL1-devel +Mesa-libIndirectGL-devel requires -Mesa-libIndirectGL-<targettype> requires "Mesa-libIndirectGL1-<targettype> = <version>" libOSMesa9 ++++++ mesa-8.98.1.tar.bz2 -> mesa-8.98.5.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/bin/mklib new/mesa-8.98.5/bin/mklib --- old/mesa-8.98.1/bin/mklib 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/bin/mklib 2012-09-15 00:27:51.000000000 +0200 @@ -319,6 +319,25 @@ fi fi + # Check if objects are 32-bit and we're running in 64-bit + # environment. If so, pass -m32 flag to linker. + add_abi_flag_to_opts() { + case $(file $1) in + *32-bit*x86-64*) + # x86_64 x32 ABI. + OPTS="-mx32 ${OPTS}" + ;; + *64-bit*x86-64*) + # x86_64 64-bit ABI. + OPTS="-m64 ${OPTS}" + ;; + *32-bit*Intel*) + # x86 32-bit ABI. + OPTS="-m32 ${OPTS}" + ;; + esac + } + if [ $NOPREFIX = 1 ] ; then # No "lib" or ".so" part echo "mklib: Making" $ARCH "shared library: " ${LIBNAME} @@ -330,15 +349,8 @@ ;; esac - # Check if objects are 32-bit and we're running in 64-bit - # environment. If so, pass -m32 flag to linker. - set ${OBJECTS} - ABI32=`file $1 | grep 32-bit` - ARM=`file $1 | grep ARM` - # Do not add "-m32" option for arm. - if [ -z "$ARM" -a "${ABI32}" -a `uname -m` = "x86_64" ] ; then - OPTS="-m32 ${OPTS}" - fi + # Check to see if we are building for a different ABI. + add_abi_flag_to_opts ${OBJECTS} if [ "${ALTOPTS}" ] ; then OPTS=${ALTOPTS} @@ -389,15 +401,9 @@ # exptmp is removed below fi - # Check if objects are 32-bit and we're running in 64-bit - # environment. If so, pass -m32 flag to linker. - set ${OBJECTS} - ABI32=`file $1 | grep 32-bit` - ARM=`file $1 | grep ARM` - # Do not add "-m32" option for arm. - if [ -z "$ARM" -a "${ABI32}" -a `uname -m` = "x86_64" ] ; then - OPTS="-m32 ${OPTS}" - fi + # Check to see if we are building for a different ABI. + add_abi_flag_to_opts ${OBJECTS} + if [ "${ALTOPTS}" ] ; then OPTS=${ALTOPTS} fi diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/configure.ac new/mesa-8.98.5/configure.ac --- old/mesa-8.98.1/configure.ac 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/configure.ac 2012-09-15 00:27:51.000000000 +0200 @@ -26,6 +26,10 @@ LT_PREREQ([2.2]) LT_INIT([disable-static]) +dnl Set internal versions +OSMESA_VERSION=8 +AC_SUBST([OSMESA_VERSION]) + dnl Versions for external dependencies LIBDRM_REQUIRED=2.4.24 LIBDRM_RADEON_REQUIRED=2.4.39 @@ -1920,10 +1924,6 @@ AM_CONDITIONAL(HAVE_X86_64_ASM, echo "$DEFINES" | grep 'X86_64_ASM' >/dev/null 2>&1) AM_CONDITIONAL(HAVE_SPARC_ASM, echo "$DEFINES" | grep 'SPARC_ASM' >/dev/null 2>&1) -# To pass as an argument to libtool's -version-number flag -VERSION_NUMBER=`echo "$VERSION" | $SED 's/\./:/g'` -AC_SUBST([VERSION_NUMBER]) - dnl prepend CORE_DIRS to SRC_DIRS SRC_DIRS="$CORE_DIRS $SRC_DIRS" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/src/egl/drivers/dri2/platform_android.c new/mesa-8.98.5/src/egl/drivers/dri2/platform_android.c --- old/mesa-8.98.1/src/egl/drivers/dri2/platform_android.c 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/src/egl/drivers/dri2/platform_android.c 2012-09-15 00:27:51.000000000 +0200 @@ -500,6 +500,14 @@ for (j = 0; dri2_dpy->driver_configs[j]; j++) { const EGLint surface_type = EGL_WINDOW_BIT | EGL_PBUFFER_BIT; struct dri2_egl_config *dri2_conf; + unsigned int double_buffered = 0; + + dri2_dpy->core->getConfigAttrib(dri2_dpy->driver_configs[j], + __DRI_ATTRIB_DOUBLE_BUFFER, &double_buffered); + + /* support only double buffered configs */ + if (!double_buffered) + continue; dri2_conf = dri2_add_config(dpy, dri2_dpy->driver_configs[j], count + 1, visuals[i].size, surface_type, NULL, @@ -525,17 +533,6 @@ /* there is no front buffer so no OpenGL */ dri2_conf->base.RenderableType &= ~EGL_OPENGL_BIT; dri2_conf->base.Conformant &= ~EGL_OPENGL_BIT; - - /* - * We want to make sure GL_DRAW_BUFFER for windows or pbuffers is always - * GL_BACK. For EGL configs that do not have a double DRI config, clear - * the surface type. - * - * This is just to be on the safe side. dri2_add_config never sets - * EGL_WINDOW_BIT or EGL_PBUFFER_BIT for such configs. - */ - if (!dri2_conf->dri_double_config) - dri2_conf->base.SurfaceType = 0; } return (count != 0); @@ -660,18 +657,29 @@ return (fd >= 0) ? dup(fd) : -1; } +/* support versions < JellyBean */ +#ifndef ALOGW +#define ALOGW LOGW +#endif +#ifndef ALOGD +#define ALOGD LOGD +#endif +#ifndef ALOGI +#define ALOGI LOGI +#endif + static void droid_log(EGLint level, const char *msg) { switch (level) { case _EGL_DEBUG: - LOGD("%s", msg); + ALOGD("%s", msg); break; case _EGL_INFO: - LOGI("%s", msg); + ALOGI("%s", msg); break; case _EGL_WARNING: - LOGW("%s", msg); + ALOGW("%s", msg); break; case _EGL_FATAL: LOG_FATAL("%s", msg); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/src/gallium/drivers/r600/evergreen_state.c new/mesa-8.98.5/src/gallium/drivers/r600/evergreen_state.c --- old/mesa-8.98.1/src/gallium/drivers/r600/evergreen_state.c 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/src/gallium/drivers/r600/evergreen_state.c 2012-09-15 00:27:51.000000000 +0200 @@ -920,7 +920,8 @@ S_028C08_PIX_CENTER_HALF(state->gl_rasterization_rules)); } else { r600_pipe_state_add_reg(rstate, R_028C08_PA_SU_VTX_CNTL, - S_028C08_PIX_CENTER_HALF(state->gl_rasterization_rules)); + S_028C08_PIX_CENTER_HALF(state->gl_rasterization_rules) | + S_028C08_QUANT_MODE(V_028C08_X_1_256TH)); } r600_pipe_state_add_reg(rstate, R_028B7C_PA_SU_POLY_OFFSET_CLAMP, fui(state->offset_clamp)); r600_pipe_state_add_reg(rstate, R_028814_PA_SU_SC_MODE_CNTL, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/src/gallium/drivers/r600/evergreend.h new/mesa-8.98.5/src/gallium/drivers/r600/evergreend.h --- old/mesa-8.98.1/src/gallium/drivers/r600/evergreend.h 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/src/gallium/drivers/r600/evergreend.h 2012-09-15 00:27:51.000000000 +0200 @@ -1955,6 +1955,17 @@ #define S_028C08_PIX_CENTER_HALF(x) (((x) & 0x1) << 0) #define G_028C08_PIX_CENTER_HALF(x) (((x) >> 0) & 0x1) #define C_028C08_PIX_CENTER_HALF 0xFFFFFFFE +#define S_028C08_QUANT_MODE(x) (((x) & 0x7) << 3) +#define G_028C08_QUANT_MODE(x) (((x) >> 3) & 0x7) +#define C_028C08_QUANT_MODE 0xFFFFFFC7 +#define V_028C08_X_1_16TH 0x00 +#define V_028C08_X_1_8TH 0x01 +#define V_028C08_X_1_4TH 0x02 +#define V_028C08_X_1_2 0x03 +#define V_028C08_X_1 0x04 +#define V_028C08_X_1_256TH 0x05 +#define V_028C08_X_1_1024TH 0x06 +#define V_028C08_X_1_4096TH 0x07 #define R_028C0C_PA_CL_GB_VERT_CLIP_ADJ 0x00028C0C #define R_028C10_PA_CL_GB_VERT_DISC_ADJ 0x00028C10 #define R_028C14_PA_CL_GB_HORZ_CLIP_ADJ 0x00028C14 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/src/gallium/drivers/r600/r600_state.c new/mesa-8.98.5/src/gallium/drivers/r600/r600_state.c --- old/mesa-8.98.1/src/gallium/drivers/r600/r600_state.c 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/src/gallium/drivers/r600/r600_state.c 2012-09-15 00:27:51.000000000 +0200 @@ -948,7 +948,8 @@ r600_pipe_state_add_reg(rstate, R_028A4C_PA_SC_MODE_CNTL, sc_mode_cntl); r600_pipe_state_add_reg(rstate, R_028C08_PA_SU_VTX_CNTL, - S_028C08_PIX_CENTER_HALF(state->gl_rasterization_rules)); + S_028C08_PIX_CENTER_HALF(state->gl_rasterization_rules) | + S_028C08_QUANT_MODE(V_028C08_X_1_256TH)); r600_pipe_state_add_reg(rstate, R_028DFC_PA_SU_POLY_OFFSET_CLAMP, fui(state->offset_clamp)); r600_pipe_state_add_reg(rstate, R_028814_PA_SU_SC_MODE_CNTL, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/src/gallium/drivers/r600/r600_state_common.c new/mesa-8.98.5/src/gallium/drivers/r600/r600_state_common.c --- old/mesa-8.98.1/src/gallium/drivers/r600/r600_state_common.c 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/src/gallium/drivers/r600/r600_state_common.c 2012-09-15 00:27:51.000000000 +0200 @@ -108,7 +108,7 @@ { r600_init_atom(&rctx->surface_sync_cmd.atom, r600_emit_surface_sync, 5, EMIT_EARLY); r600_init_atom(&rctx->r6xx_flush_and_inv_cmd, r600_emit_r6xx_flush_and_inv, 2, EMIT_EARLY); - r600_init_atom(&rctx->alphatest_state.atom, r600_emit_alphatest_state, 3, 0); + r600_init_atom(&rctx->alphatest_state.atom, r600_emit_alphatest_state, 6, 0); r600_atom_dirty(rctx, &rctx->alphatest_state.atom); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/src/gallium/drivers/r600/r600d.h new/mesa-8.98.5/src/gallium/drivers/r600/r600d.h --- old/mesa-8.98.1/src/gallium/drivers/r600/r600d.h 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/src/gallium/drivers/r600/r600d.h 2012-09-15 00:27:51.000000000 +0200 @@ -2194,6 +2194,15 @@ #define S_028C08_PIX_CENTER_HALF(x) (((x) & 0x1) << 0) #define G_028C08_PIX_CENTER_HALF(x) (((x) >> 0) & 0x1) #define C_028C08_PIX_CENTER_HALF 0xFFFFFFFE +#define S_028C08_QUANT_MODE(x) (((x) & 0x7) << 3) +#define G_028C08_QUANT_MODE(x) (((x) >> 3) & 0x7) +#define C_028C08_QUANT_MODE 0xFFFFFFC7 +#define V_028C08_X_1_16TH 0x00 +#define V_028C08_X_1_8TH 0x01 +#define V_028C08_X_1_4TH 0x02 +#define V_028C08_X_1_2 0x03 +#define V_028C08_X_1 0x04 +#define V_028C08_X_1_256TH 0x05 #define R_028C1C_PA_SC_AA_SAMPLE_LOCS_MCTX 0x028C1C #define R_028C48_PA_SC_AA_MASK 0x028C48 #define R_028810_PA_CL_CLIP_CNTL 0x028810 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/src/glsl/ast_to_hir.cpp new/mesa-8.98.5/src/glsl/ast_to_hir.cpp --- old/mesa-8.98.1/src/glsl/ast_to_hir.cpp 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/src/glsl/ast_to_hir.cpp 2012-09-15 00:27:51.000000000 +0200 @@ -2086,9 +2086,24 @@ } else { var->location = qual->location; } + if (qual->flags.q.explicit_index) { - var->explicit_index = true; - var->index = qual->index; + /* From the GLSL 4.30 specification, section 4.4.2 (Output + * Layout Qualifiers): + * + * "It is also a compile-time error if a fragment shader + * sets a layout index to less than 0 or greater than 1." + * + * Older specifications don't mandate a behavior; we take + * this as a clarification and always generate the error. + */ + if (qual->index < 0 || qual->index > 1) { + _mesa_glsl_error(loc, state, + "explicit index may only be 0 or 1\n"); + } else { + var->explicit_index = true; + var->index = qual->index; + } } } } else if (qual->flags.q.explicit_index) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/src/glsl/glcpp/Makefile.am new/mesa-8.98.5/src/glsl/glcpp/Makefile.am --- old/mesa-8.98.1/src/glsl/glcpp/Makefile.am 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/src/glsl/glcpp/Makefile.am 2012-09-15 00:27:51.000000000 +0200 @@ -31,7 +31,7 @@ $(LIBRARY_DEFINES) \ $(API_DEFINES) -AM_YFLAGS = -v -d +AM_YFLAGS = -v -d -p "glcpp_parser_" AM_LFLAGS = --nounistd -o$(LEX_OUTPUT_ROOT).c noinst_LTLIBRARIES = libglcpp.la diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/src/glsl/glcpp/glcpp-parse.y new/mesa-8.98.5/src/glsl/glcpp/glcpp-parse.y --- old/mesa-8.98.1/src/glsl/glcpp/glcpp-parse.y 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/src/glsl/glcpp/glcpp-parse.y 2012-09-15 00:27:51.000000000 +0200 @@ -133,8 +133,6 @@ static void _glcpp_parser_skip_stack_pop (glcpp_parser_t *parser, YYLTYPE *loc); -#define yylex glcpp_parser_lex - static int glcpp_parser_lex (YYSTYPE *yylval, YYLTYPE *yylloc, glcpp_parser_t *parser); @@ -1197,12 +1195,6 @@ return parser; } -int -glcpp_parser_parse (glcpp_parser_t *parser) -{ - return yyparse (parser); -} - void glcpp_parser_destroy (glcpp_parser_t *parser) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/src/glsl/glcpp/glcpp.c new/mesa-8.98.5/src/glsl/glcpp/glcpp.c --- old/mesa-8.98.1/src/glsl/glcpp/glcpp.c 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/src/glsl/glcpp/glcpp.c 2012-09-15 00:27:51.000000000 +0200 @@ -111,7 +111,7 @@ if (shader == NULL) return 1; - ret = preprocess(ctx, &shader, &info_log, NULL, API_OPENGL); + ret = glcpp_preprocess(ctx, &shader, &info_log, NULL, API_OPENGL); printf("%s", shader); fprintf(stderr, "%s", info_log); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/src/glsl/glcpp/glcpp.h new/mesa-8.98.5/src/glsl/glcpp/glcpp.h --- old/mesa-8.98.1/src/glsl/glcpp/glcpp.h 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/src/glsl/glcpp/glcpp.h 2012-09-15 00:27:51.000000000 +0200 @@ -196,7 +196,7 @@ glcpp_parser_destroy (glcpp_parser_t *parser); int -preprocess(void *ralloc_ctx, const char **shader, char **info_log, +glcpp_preprocess(void *ralloc_ctx, const char **shader, char **info_log, const struct gl_extensions *extensions, int api); /* Functions for writing to the info log */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/src/glsl/glcpp/pp.c new/mesa-8.98.5/src/glsl/glcpp/pp.c --- old/mesa-8.98.1/src/glsl/glcpp/pp.c 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/src/glsl/glcpp/pp.c 2012-09-15 00:27:51.000000000 +0200 @@ -150,7 +150,7 @@ } int -preprocess(void *ralloc_ctx, const char **shader, char **info_log, +glcpp_preprocess(void *ralloc_ctx, const char **shader, char **info_log, const struct gl_extensions *extensions, int api) { int errors; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/src/glsl/glsl_parser_extras.h new/mesa-8.98.5/src/glsl/glsl_parser_extras.h --- old/mesa-8.98.1/src/glsl/glsl_parser_extras.h 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/src/glsl/glsl_parser_extras.h 2012-09-15 00:27:51.000000000 +0200 @@ -296,7 +296,7 @@ extern "C" { #endif -extern int preprocess(void *ctx, const char **shader, char **info_log, +extern int glcpp_preprocess(void *ctx, const char **shader, char **info_log, const struct gl_extensions *extensions, int api); extern void _mesa_destroy_shader_compiler(void); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/src/glsl/main.cpp new/mesa-8.98.5/src/glsl/main.cpp --- old/mesa-8.98.1/src/glsl/main.cpp 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/src/glsl/main.cpp 2012-09-15 00:27:51.000000000 +0200 @@ -144,7 +144,7 @@ new(shader) _mesa_glsl_parse_state(ctx, shader->Type, shader); const char *source = shader->Source; - state->error = preprocess(state, &source, &state->info_log, + state->error = glcpp_preprocess(state, &source, &state->info_log, state->extensions, ctx->API) != 0; if (!state->error) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/src/glsl/test_optpass.cpp new/mesa-8.98.5/src/glsl/test_optpass.cpp --- old/mesa-8.98.1/src/glsl/test_optpass.cpp 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/src/glsl/test_optpass.cpp 2012-09-15 00:27:51.000000000 +0200 @@ -216,7 +216,7 @@ } else { shader->Source = input.c_str(); const char *source = shader->Source; - state->error = preprocess(state, &source, &state->info_log, + state->error = glcpp_preprocess(state, &source, &state->info_log, state->extensions, ctx->API) != 0; if (!state->error) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/src/mapi/glapi/gen/glX_proto_send.py new/mesa-8.98.5/src/mapi/glapi/gen/glX_proto_send.py --- old/mesa-8.98.1/src/mapi/glapi/gen/glX_proto_send.py 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/src/mapi/glapi/gen/glX_proto_send.py 2012-09-15 00:27:51.000000000 +0200 @@ -423,9 +423,9 @@ print '' print '#if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)' print ' if (gc->isDirect) {' - print ' const _glapi_proc *const table = GET_DISPATCH();' + print ' const _glapi_proc *const disp_table = GET_DISPATCH();' print ' PFNGL%sPROC p =' % (name.upper()) - print ' (PFNGL%sPROC) table[%d];' % (name.upper(), func.offset) + print ' (PFNGL%sPROC) disp_table[%d];' % (name.upper(), func.offset) print ' %sp(%s);' % (ret_string, func.get_called_parameter_string()) print ' } else' print '#endif' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/src/mesa/Makefile.am new/mesa-8.98.5/src/mesa/Makefile.am --- old/mesa-8.98.1/src/mesa/Makefile.am 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/src/mesa/Makefile.am 2012-09-15 00:27:51.000000000 +0200 @@ -73,7 +73,7 @@ program/program_parse.tab.c program/program_parse.tab.h: program/program_parse.y $(MKDIR_P) program - $(AM_V_GEN) $(YACC) -v -d --output=program/program_parse.tab.c $< + $(AM_V_GEN) $(YACC) -p "_mesa_program_" -v -d --output=program/program_parse.tab.c $< program/lex.yy.c: program/program_lexer.l $(MKDIR_P) program diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/src/mesa/drivers/common/meta.c new/mesa-8.98.5/src/mesa/drivers/common/meta.c --- old/mesa-8.98.1/src/mesa/drivers/common/meta.c 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/src/mesa/drivers/common/meta.c 2012-09-15 00:27:51.000000000 +0200 @@ -538,7 +538,9 @@ _mesa_set_enable(ctx, GL_DEPTH_TEST, GL_FALSE); } - if (state & MESA_META_FOG) { + if ((state & MESA_META_FOG) + && ctx->API != API_OPENGL_CORE + && ctx->API != API_OPENGLES2) { save->Fog = ctx->Fog.Enabled; if (ctx->Fog.Enabled) _mesa_set_enable(ctx, GL_FOG, GL_FALSE); @@ -856,7 +858,9 @@ _mesa_DepthMask(save->Depth.Mask); } - if (state & MESA_META_FOG) { + if ((state & MESA_META_FOG) + && ctx->API != API_OPENGL_CORE + && ctx->API != API_OPENGLES2) { _mesa_set_enable(ctx, GL_FOG, save->Fog); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/src/mesa/drivers/dri/common/xmlconfig.c new/mesa-8.98.5/src/mesa/drivers/dri/common/xmlconfig.c --- old/mesa-8.98.1/src/mesa/drivers/dri/common/xmlconfig.c 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/src/mesa/drivers/dri/common/xmlconfig.c 2012-09-15 00:27:51.000000000 +0200 @@ -86,7 +86,7 @@ #endif #if !defined(GET_PROGRAM_NAME) -# if defined(__OpenBSD__) || defined(NetBSD) || defined(__UCLIBC__) +# if defined(__OpenBSD__) || defined(NetBSD) || defined(__UCLIBC__) || defined(ANDROID) /* This is a hack. It's said to work on OpenBSD, NetBSD and GNU. * Rogelio M.Serrano Jr. reported it's also working with UCLIBC. It's * used as a last resort, if there is no documented facility available. */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/src/mesa/drivers/dri/i965/brw_fs_live_variables.cpp new/mesa-8.98.5/src/mesa/drivers/dri/i965/brw_fs_live_variables.cpp --- old/mesa-8.98.1/src/mesa/drivers/dri/i965/brw_fs_live_variables.cpp 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/src/mesa/drivers/dri/i965/brw_fs_live_variables.cpp 2012-09-15 00:27:51.000000000 +0200 @@ -221,6 +221,30 @@ } this->live_intervals_valid = true; + + /* Note in the non-control-flow code above, that we only take def[] as the + * first store, and use[] as the last use. We use this in dead code + * elimination, to determine when a store never gets used. However, we + * also use these arrays to answer the virtual_grf_interferes() question + * (live interval analysis), which is used for register coalescing and + * register allocation. + * + * So, there's a conflict over what the array should mean: if use[] + * considers a def after the last use, then the dead code elimination pass + * never does anything (and it's an important pass!). But if we don't + * include dead code, then virtual_grf_interferes() lies and we'll do + * horrible things like coalesce the register that is dead-code-written + * into another register that was live across the dead write (causing the + * use of the second register to take the dead write's source value instead + * of the coalesced MOV's source value). + * + * To resolve the conflict, immediately after calculating live intervals, + * detect dead code, nuke it, and if we changed anything, calculate again + * before returning to the caller. Now we happen to produce def[] and + * use[] arrays that will work for virtual_grf_interferes(). + */ + if (dead_code_eliminate()) + calculate_live_intervals(); } bool diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/src/mesa/drivers/dri/i965/brw_wm_sampler_state.c new/mesa-8.98.5/src/mesa/drivers/dri/i965/brw_wm_sampler_state.c --- old/mesa-8.98.1/src/mesa/drivers/dri/i965/brw_wm_sampler_state.c 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/src/mesa/drivers/dri/i965/brw_wm_sampler_state.c 2012-09-15 00:27:51.000000000 +0200 @@ -341,7 +341,10 @@ GLbitfield SamplersUsed = vs->SamplersUsed | fs->SamplersUsed; - brw->sampler.count = _mesa_bitcount(SamplersUsed); + /* ARB programs use the texture unit number as the sampler index, so we + * need to find the highest unit used. A bit-count will not work. + */ + brw->sampler.count = _mesa_fls(SamplersUsed); if (brw->sampler.count == 0) return; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/src/mesa/drivers/dri/i965/brw_wm_surface_state.c new/mesa-8.98.5/src/mesa/drivers/dri/i965/brw_wm_surface_state.c --- old/mesa-8.98.1/src/mesa/drivers/dri/i965/brw_wm_surface_state.c 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/src/mesa/drivers/dri/i965/brw_wm_surface_state.c 2012-09-15 00:27:51.000000000 +0200 @@ -1250,7 +1250,7 @@ struct gl_program *vs = (struct gl_program *) brw->vertex_program; struct gl_program *fs = (struct gl_program *) brw->fragment_program; - unsigned num_samplers = _mesa_bitcount(vs->SamplersUsed | fs->SamplersUsed); + unsigned num_samplers = _mesa_fls(vs->SamplersUsed | fs->SamplersUsed); for (unsigned s = 0; s < num_samplers; s++) { brw->vs.surf_offset[SURF_INDEX_VS_TEXTURE(s)] = 0; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/src/mesa/drivers/osmesa/Makefile.am new/mesa-8.98.5/src/mesa/drivers/osmesa/Makefile.am --- old/mesa-8.98.1/src/mesa/drivers/osmesa/Makefile.am 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/src/mesa/drivers/osmesa/Makefile.am 2012-09-15 00:27:51.000000000 +0200 @@ -35,7 +35,7 @@ lib@OSMESA_LIB@_la_SOURCES = osmesa.c -lib@OSMESA_LIB@_la_LDFLAGS = -module -version-number @VERSION_NUMBER@ -no-undefined +lib@OSMESA_LIB@_la_LDFLAGS = -module -version-number @OSMESA_VERSION@ -no-undefined lib@OSMESA_LIB@_la_LIBADD = \ $(top_builddir)/src/mesa/libmesa.la \ $(top_builddir)/src/mapi/glapi/libglapi.la @@ -46,7 +46,7 @@ all-local: lib@OSMESA_LIB@.la $(MKDIR_P) $(top_builddir)/$(LIB_DIR); ln -f .libs/lib@OSMESA_LIB@.so $(top_builddir)/$(LIB_DIR)/lib@OSMESA_LIB@.so; - ln -f .libs/lib@OSMESA_LIB@.so.@VERSION@ $(top_builddir)/$(LIB_DIR)/lib@OSMESA_LIB@.so.@VERSION@; + ln -f .libs/lib@OSMESA_LIB@.so.@OSMESA_VERSION@ $(top_builddir)/$(LIB_DIR)/lib@OSMESA_LIB@.so.@OSMESA_VERSION@; endif pkgconfigdir = $(libdir)/pkgconfig diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/src/mesa/drivers/osmesa/osmesa.pc.in new/mesa-8.98.5/src/mesa/drivers/osmesa/osmesa.pc.in --- old/mesa-8.98.1/src/mesa/drivers/osmesa/osmesa.pc.in 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/src/mesa/drivers/osmesa/osmesa.pc.in 2012-09-15 00:27:51.000000000 +0200 @@ -6,7 +6,7 @@ Name: osmesa Description: Mesa Off-screen Rendering library Requires: @OSMESA_PC_REQ@ -Version: @PACKAGE_VERSION@ +Version: @OSMESA_VERSION@ Libs: -L${libdir} -l@OSMESA_LIB@ Libs.private: @OSMESA_PC_LIB_PRIV@ Cflags: -I${includedir} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/src/mesa/main/extensions.c new/mesa-8.98.5/src/mesa/main/extensions.c --- old/mesa-8.98.1/src/mesa/main/extensions.c 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/src/mesa/main/extensions.c 2012-09-15 00:27:51.000000000 +0200 @@ -927,7 +927,7 @@ base = (GLboolean *) &ctx->Extensions; for (i = extension_table; i->name != 0; ++i) { - if (base[i->offset]) { + if (base[i->offset] && (i->api_set & (1 << ctx->API))) { ctx->Extensions.Count++; } } @@ -947,10 +947,11 @@ base = (GLboolean*) &ctx->Extensions; n = 0; for (i = extension_table; i->name != 0; ++i) { - if (n == index && base[i->offset]) { - return (const GLubyte*) i->name; - } else if (base[i->offset]) { - ++n; + if (base[i->offset] & (i->api_set & (1 << ctx->API))) { + if (n == index) + return (const GLubyte*) i->name; + else + ++n; } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/src/mesa/main/fbobject.c new/mesa-8.98.5/src/mesa/main/fbobject.c --- old/mesa-8.98.1/src/mesa/main/fbobject.c 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/src/mesa/main/fbobject.c 2012-09-15 00:27:51.000000000 +0200 @@ -2979,8 +2979,8 @@ /* extra checks for multisample copies... */ if (readFb->Visual.samples > 0 || drawFb->Visual.samples > 0) { /* src and dest region sizes must be the same */ - if (srcX1 - srcX0 != dstX1 - dstX0 || - srcY1 - srcY0 != dstY1 - dstY0) { + if (abs(srcX1 - srcX0) != abs(dstX1 - dstX0) || + abs(srcY1 - srcY0) != abs(dstY1 - dstY0)) { _mesa_error(ctx, GL_INVALID_OPERATION, "glBlitFramebufferEXT(bad src/dst multisample region sizes)"); return; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/src/mesa/main/imports.h new/mesa-8.98.5/src/mesa/main/imports.h --- old/mesa-8.98.1/src/mesa/main/imports.h 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/src/mesa/main/imports.h 2012-09-15 00:27:51.000000000 +0200 @@ -587,6 +587,28 @@ _mesa_bitcount_64(uint64_t n); #endif +/** + * Find the last (most significant) bit set in a word. + * + * Essentially ffs() in the reverse direction. + */ +static inline unsigned int +_mesa_fls(unsigned int n) +{ +#if defined(__GNUC__) && ((__GNUC__ * 100 + __GNUC_MINOR__) >= 304) + return n == 0 ? 0 : 32 - __builtin_clz(n); +#else + unsigned int v = 1; + + if (n == 0) + return 0; + + while (n >>= 1) + v++; + + return v; +#endif +} extern GLhalfARB _mesa_float_to_half(float f); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/src/mesa/main/syncobj.c new/mesa-8.98.5/src/mesa/main/syncobj.c --- old/mesa-8.98.1/src/mesa/main/syncobj.c 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/src/mesa/main/syncobj.c 2012-09-15 00:27:51.000000000 +0200 @@ -326,9 +326,13 @@ if (syncObj->StatusFlag) { ret = GL_ALREADY_SIGNALED; } else { - ctx->Driver.ClientWaitSync(ctx, syncObj, flags, timeout); + if (timeout == 0) { + ret = GL_TIMEOUT_EXPIRED; + } else { + ctx->Driver.ClientWaitSync(ctx, syncObj, flags, timeout); - ret = syncObj->StatusFlag ? GL_CONDITION_SATISFIED : GL_TIMEOUT_EXPIRED; + ret = syncObj->StatusFlag ? GL_CONDITION_SATISFIED : GL_TIMEOUT_EXPIRED; + } } _mesa_unref_sync_object(ctx, syncObj); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/src/mesa/main/teximage.c new/mesa-8.98.5/src/mesa/main/teximage.c --- old/mesa-8.98.1/src/mesa/main/teximage.c 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/src/mesa/main/teximage.c 2012-09-15 00:27:51.000000000 +0200 @@ -660,8 +660,8 @@ /** * Return the proxy target which corresponds to the given texture target */ -static GLenum -get_proxy_target(GLenum target) +GLenum +_mesa_get_proxy_target(GLenum target) { switch (target) { case GL_TEXTURE_1D: @@ -692,7 +692,7 @@ case GL_PROXY_TEXTURE_2D_ARRAY_EXT: return GL_PROXY_TEXTURE_2D_ARRAY_EXT; default: - _mesa_problem(NULL, "unexpected target in get_proxy_target()"); + _mesa_problem(NULL, "unexpected target in _mesa_get_proxy_target()"); return 0; } } @@ -1247,11 +1247,12 @@ switch (target) { case GL_PROXY_TEXTURE_1D: - maxSize = 1 << (ctx->Const.MaxTextureLevels - 1); - if (width < 2 * border || width > 2 * border + maxSize) - return GL_FALSE; if (level >= ctx->Const.MaxTextureLevels) return GL_FALSE; + maxSize = 1 << (ctx->Const.MaxTextureLevels - 1); /* level zero size */ + maxSize >>= level; /* level size */ + if (width < 2 * border || width > 2 * border + maxSize) + return GL_FALSE; if (!ctx->Extensions.ARB_texture_non_power_of_two) { if (width > 0 && !_mesa_is_pow_two(width - 2 * border)) return GL_FALSE; @@ -1259,13 +1260,14 @@ return GL_TRUE; case GL_PROXY_TEXTURE_2D: + if (level >= ctx->Const.MaxTextureLevels) + return GL_FALSE; maxSize = 1 << (ctx->Const.MaxTextureLevels - 1); + maxSize >>= level; if (width < 2 * border || width > 2 * border + maxSize) return GL_FALSE; if (height < 2 * border || height > 2 * border + maxSize) return GL_FALSE; - if (level >= ctx->Const.MaxTextureLevels) - return GL_FALSE; if (!ctx->Extensions.ARB_texture_non_power_of_two) { if (width > 0 && !_mesa_is_pow_two(width - 2 * border)) return GL_FALSE; @@ -1275,15 +1277,16 @@ return GL_TRUE; case GL_PROXY_TEXTURE_3D: + if (level >= ctx->Const.Max3DTextureLevels) + return GL_FALSE; maxSize = 1 << (ctx->Const.Max3DTextureLevels - 1); + maxSize >>= level; if (width < 2 * border || width > 2 * border + maxSize) return GL_FALSE; if (height < 2 * border || height > 2 * border + maxSize) return GL_FALSE; if (depth < 2 * border || depth > 2 * border + maxSize) return GL_FALSE; - if (level >= ctx->Const.Max3DTextureLevels) - return GL_FALSE; if (!ctx->Extensions.ARB_texture_non_power_of_two) { if (width > 0 && !_mesa_is_pow_two(width - 2 * border)) return GL_FALSE; @@ -1295,23 +1298,24 @@ return GL_TRUE; case GL_PROXY_TEXTURE_RECTANGLE_NV: + if (level != 0) + return GL_FALSE; maxSize = ctx->Const.MaxTextureRectSize; if (width < 0 || width > maxSize) return GL_FALSE; if (height < 0 || height > maxSize) return GL_FALSE; - if (level != 0) - return GL_FALSE; return GL_TRUE; case GL_PROXY_TEXTURE_CUBE_MAP_ARB: + if (level >= ctx->Const.MaxCubeTextureLevels) + return GL_FALSE; maxSize = 1 << (ctx->Const.MaxCubeTextureLevels - 1); + maxSize >>= level; if (width < 2 * border || width > 2 * border + maxSize) return GL_FALSE; if (height < 2 * border || height > 2 * border + maxSize) return GL_FALSE; - if (level >= ctx->Const.MaxCubeTextureLevels) - return GL_FALSE; if (!ctx->Extensions.ARB_texture_non_power_of_two) { if (width > 0 && !_mesa_is_pow_two(width - 2 * border)) return GL_FALSE; @@ -1321,13 +1325,14 @@ return GL_TRUE; case GL_PROXY_TEXTURE_1D_ARRAY_EXT: + if (level >= ctx->Const.MaxTextureLevels) + return GL_FALSE; maxSize = 1 << (ctx->Const.MaxTextureLevels - 1); + maxSize >>= level; if (width < 2 * border || width > 2 * border + maxSize) return GL_FALSE; if (height < 1 || height > ctx->Const.MaxArrayTextureLayers) return GL_FALSE; - if (level >= ctx->Const.MaxTextureLevels) - return GL_FALSE; if (!ctx->Extensions.ARB_texture_non_power_of_two) { if (width > 0 && !_mesa_is_pow_two(width - 2 * border)) return GL_FALSE; @@ -1335,15 +1340,16 @@ return GL_TRUE; case GL_PROXY_TEXTURE_2D_ARRAY_EXT: + if (level >= ctx->Const.MaxTextureLevels) + return GL_FALSE; maxSize = 1 << (ctx->Const.MaxTextureLevels - 1); + maxSize >>= level; if (width < 2 * border || width > 2 * border + maxSize) return GL_FALSE; if (height < 2 * border || height > 2 * border + maxSize) return GL_FALSE; if (depth < 1 || depth > ctx->Const.MaxArrayTextureLayers) return GL_FALSE; - if (level >= ctx->Const.MaxTextureLevels) - return GL_FALSE; if (!ctx->Extensions.ARB_texture_non_power_of_two) { if (width > 0 && !_mesa_is_pow_two(width - 2 * border)) return GL_FALSE; @@ -1697,7 +1703,7 @@ GLint width, GLint height, GLint depth, GLint border ) { - const GLenum proxyTarget = get_proxy_target(target); + const GLenum proxyTarget = _mesa_get_proxy_target(target); const GLboolean isProxy = target == proxyTarget; GLboolean sizeOK = GL_TRUE; GLboolean colorFormat; @@ -1927,7 +1933,7 @@ GLsizei height, GLsizei depth, GLint border, GLsizei imageSize) { - const GLenum proxyTarget = get_proxy_target(target); + const GLenum proxyTarget = _mesa_get_proxy_target(target); const GLint maxLevels = _mesa_max_texture_levels(ctx, target); GLint expectedSize; GLenum choose_format; @@ -2302,7 +2308,7 @@ GLenum target, GLint level, GLint internalFormat, GLint width, GLint height, GLint border ) { - const GLenum proxyTarget = get_proxy_target(target); + const GLenum proxyTarget = _mesa_get_proxy_target(target); const GLenum type = GL_FLOAT; GLboolean sizeOK; GLint baseFormat; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/src/mesa/main/teximage.h new/mesa-8.98.5/src/mesa/main/teximage.h --- old/mesa-8.98.1/src/mesa/main/teximage.h 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/src/mesa/main/teximage.h 2012-09-15 00:27:51.000000000 +0200 @@ -66,6 +66,8 @@ extern GLboolean _mesa_is_proxy_texture(GLenum target); +extern GLenum +_mesa_get_proxy_target(GLenum target); extern struct gl_texture_image * _mesa_new_texture_image( struct gl_context *ctx ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/src/mesa/main/texstorage.c new/mesa-8.98.5/src/mesa/main/texstorage.c --- old/mesa-8.98.1/src/mesa/main/texstorage.c 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/src/mesa/main/texstorage.c 2012-09-15 00:27:51.000000000 +0200 @@ -192,9 +192,10 @@ return; } - } - texObj->Immutable = GL_TRUE; + /* Only set this field for non-proxy texture objects */ + texObj->Immutable = GL_TRUE; + } } @@ -242,25 +243,68 @@ GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) { - const GLboolean isProxy = _mesa_is_proxy_texture(target); struct gl_texture_object *texObj; GLuint maxDim; + GLboolean legalFormat; + + /* check internal format - note that only sized formats are allowed */ + switch (internalformat) { + case GL_ALPHA: + case GL_LUMINANCE: + case GL_LUMINANCE_ALPHA: + case GL_INTENSITY: + case GL_RED: + case GL_RG: + case GL_RGB: + case GL_RGBA: + case GL_BGRA: + case GL_DEPTH_COMPONENT: + case GL_DEPTH_STENCIL: + case GL_COMPRESSED_ALPHA: + case GL_COMPRESSED_LUMINANCE_ALPHA: + case GL_COMPRESSED_LUMINANCE: + case GL_COMPRESSED_INTENSITY: + case GL_COMPRESSED_RGB: + case GL_COMPRESSED_RGBA: + case GL_COMPRESSED_SRGB: + case GL_COMPRESSED_SRGB_ALPHA: + case GL_COMPRESSED_SLUMINANCE: + case GL_COMPRESSED_SLUMINANCE_ALPHA: + case GL_RED_INTEGER: + case GL_GREEN_INTEGER: + case GL_BLUE_INTEGER: + case GL_ALPHA_INTEGER: + case GL_RGB_INTEGER: + case GL_RGBA_INTEGER: + case GL_BGR_INTEGER: + case GL_BGRA_INTEGER: + case GL_LUMINANCE_INTEGER_EXT: + case GL_LUMINANCE_ALPHA_INTEGER_EXT: + /* these unsized formats are illegal */ + legalFormat = GL_FALSE; + break; + default: + legalFormat = _mesa_base_tex_format(ctx, internalformat) > 0; + } + + if (!legalFormat) { + _mesa_error(ctx, GL_INVALID_ENUM, + "glTexStorage%uD(internalformat = %s)", dims, + _mesa_lookup_enum_by_nr(internalformat)); + return GL_TRUE; + } /* size check */ if (width < 1 || height < 1 || depth < 1) { - if (!isProxy) { - _mesa_error(ctx, GL_INVALID_VALUE, - "glTexStorage%uD(width, height or depth < 1)", dims); - } + _mesa_error(ctx, GL_INVALID_VALUE, + "glTexStorage%uD(width, height or depth < 1)", dims); return GL_TRUE; } /* levels check */ if (levels < 1 || height < 1 || depth < 1) { - if (!isProxy) { - _mesa_error(ctx, GL_INVALID_VALUE, "glTexStorage%uD(levels < 1)", - dims); - } + _mesa_error(ctx, GL_INVALID_VALUE, "glTexStorage%uD(levels < 1)", + dims); return GL_TRUE; } @@ -274,40 +318,32 @@ /* check levels against maximum */ if (levels > _mesa_max_texture_levels(ctx, target)) { - if (!isProxy) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glTexStorage%uD(levels too large)", dims); - } + _mesa_error(ctx, GL_INVALID_OPERATION, + "glTexStorage%uD(levels too large)", dims); return GL_TRUE; } /* check levels against width/height/depth */ maxDim = MAX3(width, height, depth); if (levels > _mesa_logbase2(maxDim) + 1) { - if (!isProxy) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glTexStorage%uD(too many levels for max texture dimension)", - dims); - } + _mesa_error(ctx, GL_INVALID_OPERATION, + "glTexStorage%uD(too many levels for max texture dimension)", + dims); return GL_TRUE; } /* non-default texture object check */ texObj = _mesa_get_current_tex_object(ctx, target); - if (!texObj || (texObj->Name == 0 && !isProxy)) { - if (!isProxy) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glTexStorage%uD(texture object 0)", dims); - } + if (!texObj || (texObj->Name == 0)) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glTexStorage%uD(texture object 0)", dims); return GL_TRUE; } /* Check if texObj->Immutable is set */ if (texObj->Immutable) { - if (!isProxy) { - _mesa_error(ctx, GL_INVALID_OPERATION, "glTexStorage%uD(immutable)", - dims); - } + _mesa_error(ctx, GL_INVALID_OPERATION, "glTexStorage%uD(immutable)", + dims); return GL_TRUE; } @@ -323,22 +359,38 @@ GLsizei width, GLsizei height, GLsizei depth) { struct gl_texture_object *texObj; - GLboolean error; + GLboolean sizeOK; + GLenum proxyTarget = _mesa_get_proxy_target(target); GET_CURRENT_CONTEXT(ctx); texObj = _mesa_get_current_tex_object(ctx, target); - error = tex_storage_error_check(ctx, dims, target, levels, - internalformat, width, height, depth); - if (!error) { + if (tex_storage_error_check(ctx, dims, target, levels, + internalformat, width, height, depth)) { + return; /* error was recorded */ + } + + sizeOK = ctx->Driver.TestProxyTexImage(ctx, proxyTarget, 0, + internalformat, GL_NONE, GL_NONE, + width, height, depth, 0); + + if (!sizeOK) { + if (_mesa_is_proxy_texture(texObj->Target)) { + /* clear all image fields for [levels] */ + clear_image_fields(ctx, dims, texObj); + } + else { + _mesa_error(ctx, GL_INVALID_VALUE, + "glTexStorage%uD(invalid width, height or depth)", + dims); + return; + } + } + else { setup_texstorage(ctx, texObj, dims, levels, internalformat, width, height, depth); } - else if (_mesa_is_proxy_texture(target)) { - /* clear all image fields for [levels] */ - clear_image_fields(ctx, dims, texObj); - } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/src/mesa/program/ir_to_mesa.cpp new/mesa-8.98.5/src/mesa/program/ir_to_mesa.cpp --- old/mesa-8.98.1/src/mesa/program/ir_to_mesa.cpp 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/src/mesa/program/ir_to_mesa.cpp 2012-09-15 00:27:51.000000000 +0200 @@ -3060,7 +3060,7 @@ return; } - state->error = preprocess(state, &source, &state->info_log, + state->error = glcpp_preprocess(state, &source, &state->info_log, &ctx->Extensions, ctx->API); if (ctx->Shader.Flags & GLSL_DUMP) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/src/mesa/program/program_lexer.l new/mesa-8.98.5/src/mesa/program/program_lexer.l --- old/mesa-8.98.1/src/mesa/program/program_lexer.l 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/src/mesa/program/program_lexer.l 2012-09-15 00:27:51.000000000 +0200 @@ -165,6 +165,7 @@ cc C? sat (_SAT)? +%option prefix="_mesa_program_" %option bison-bridge bison-locations reentrant noyywrap %% diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mesa-8.98.1/src/mesa/state_tracker/st_mesa_to_tgsi.c new/mesa-8.98.5/src/mesa/state_tracker/st_mesa_to_tgsi.c --- old/mesa-8.98.1/src/mesa/state_tracker/st_mesa_to_tgsi.c 2012-09-01 08:00:25.000000000 +0200 +++ new/mesa-8.98.5/src/mesa/state_tracker/st_mesa_to_tgsi.c 2012-09-15 00:27:51.000000000 +0200 @@ -1198,7 +1198,7 @@ * for these, so we put all the translated regs in t->constants. */ if (program->Parameters) { - t->constants = CALLOC( program->Parameters->NumParameters, + t->constants = calloc( program->Parameters->NumParameters, sizeof t->constants[0] ); if (t->constants == NULL) { ret = PIPE_ERROR_OUT_OF_MEMORY; -- To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org For additional commands, e-mail: opensuse-commit+h...@opensuse.org