refi64 / rpms / mesa

Forked from rpms/mesa 3 years ago
Clone
d24e61e
Tip: 906f670f1a1f33d69139f520ee931b268049eac6
d24e61e
d24e61e
diff --git a/configure.ac b/configure.ac
d24e61e
index 817bf8b..fb74cfd 100644
d24e61e
--- a/configure.ac
d24e61e
+++ b/configure.ac
d24e61e
@@ -75,13 +75,13 @@ AC_COMPILE_IFELSE(
d24e61e
        not clang
d24e61e
 #endif
d24e61e
 ]])],
d24e61e
-[CLANG=yes], [CLANG=no])
d24e61e
+[acv_mesa_CLANG=yes], [acv_mesa_CLANG=no])
d24e61e
 
d24e61e
-AC_MSG_RESULT([$CLANG])
d24e61e
+AC_MSG_RESULT([$acv_mesa_CLANG])
d24e61e
 
d24e61e
 dnl If we're using GCC, make sure that it is at least version 3.3.0.  Older
d24e61e
 dnl versions are explictly not supported.
d24e61e
-if test "x$GCC" = xyes -a "x$CLANG" = xno; then
d24e61e
+if test "x$GCC" = xyes -a "x$acv_mesa_CLANG" = xno; then
d24e61e
     AC_MSG_CHECKING([whether gcc version is sufficient])
d24e61e
     major=0
d24e61e
     minor=0
d24e61e
diff --git a/docs/news.html b/docs/news.html
d24e61e
index dbd4933..6e1f810 100644
d24e61e
--- a/docs/news.html
d24e61e
+++ b/docs/news.html
d24e61e
@@ -11,6 +11,16 @@
d24e61e
 

News

d24e61e
 
d24e61e
 
d24e61e
+

November 27, 2011

d24e61e
+
d24e61e
+

d24e61e
+Mesa 7.11.2 is released.
d24e61e
+This release was made primarily to fix build problems with 7.11.1 on
d24e61e
+Mandriva and to fix problems related to glCopyTexImage to
d24e61e
+luminance-alpha textures.  That later was believed to have been fixed
d24e61e
+in 7.11.1 but was not.
d24e61e
+

d24e61e
+
d24e61e
 

November 17, 2011

d24e61e
 
d24e61e
 

d24e61e
diff --git a/docs/relnotes.html b/docs/relnotes.html
d24e61e
index 1057bd1..49595de 100644
d24e61e
--- a/docs/relnotes.html
d24e61e
+++ b/docs/relnotes.html
d24e61e
@@ -13,6 +13,7 @@ The release notes summarize what's new or changed in each Mesa release.
d24e61e
 

d24e61e
 
d24e61e
 
    d24e61e
    +
  • 7.11.2 release notes
  • d24e61e
     
  • 7.11.1 release notes
  • d24e61e
     
  • 7.11 release notes
  • d24e61e
     
  • 7.10.3 release notes
  • d24e61e
    diff --git a/src/gallium/auxiliary/draw/draw_llvm.c b/src/gallium/auxiliary/draw/draw_llvm.c
    d24e61e
    index 56c26f5..d477c40 100644
    d24e61e
    --- a/src/gallium/auxiliary/draw/draw_llvm.c
    d24e61e
    +++ b/src/gallium/auxiliary/draw/draw_llvm.c
    d24e61e
    @@ -96,7 +96,7 @@ draw_llvm_generate_elts(struct draw_llvm *llvm, struct draw_llvm_variant *var);
    d24e61e
      * Create LLVM type for struct draw_jit_texture
    d24e61e
      */
    d24e61e
     static LLVMTypeRef
    d24e61e
    -create_jit_texture_type(struct gallivm_state *gallivm)
    d24e61e
    +create_jit_texture_type(struct gallivm_state *gallivm, const char *struct_name)
    d24e61e
     {
    d24e61e
        LLVMTargetDataRef target = gallivm->target;
    d24e61e
        LLVMTypeRef texture_type;
    d24e61e
    @@ -120,13 +120,21 @@ create_jit_texture_type(struct gallivm_state *gallivm)
    d24e61e
        elem_types[DRAW_JIT_TEXTURE_BORDER_COLOR] = 
    d24e61e
           LLVMArrayType(LLVMFloatTypeInContext(gallivm->context), 4);
    d24e61e
     
    d24e61e
    +#if HAVE_LLVM >= 0x0300
    d24e61e
    +   texture_type = LLVMStructCreateNamed(gallivm->context, struct_name);
    d24e61e
    +   LLVMStructSetBody(texture_type, elem_types,
    d24e61e
    +                     Elements(elem_types), 0);
    d24e61e
    +#else
    d24e61e
        texture_type = LLVMStructTypeInContext(gallivm->context, elem_types,
    d24e61e
                                               Elements(elem_types), 0);
    d24e61e
     
    d24e61e
    +   LLVMAddTypeName(gallivm->module, struct_name, texture_type);
    d24e61e
    +
    d24e61e
        /* Make sure the target's struct layout cache doesn't return
    d24e61e
         * stale/invalid data.
    d24e61e
         */
    d24e61e
        LLVMInvalidateStructLayout(gallivm->target, texture_type);
    d24e61e
    +#endif
    d24e61e
     
    d24e61e
        LP_CHECK_MEMBER_OFFSET(struct draw_jit_texture, width,
    d24e61e
                               target, texture_type,
    d24e61e
    @@ -176,7 +184,7 @@ create_jit_texture_type(struct gallivm_state *gallivm)
    d24e61e
      */
    d24e61e
     static LLVMTypeRef
    d24e61e
     create_jit_context_type(struct gallivm_state *gallivm,
    d24e61e
    -                        LLVMTypeRef texture_type)
    d24e61e
    +                        LLVMTypeRef texture_type, const char *struct_name)
    d24e61e
     {
    d24e61e
        LLVMTargetDataRef target = gallivm->target;
    d24e61e
        LLVMTypeRef float_type = LLVMFloatTypeInContext(gallivm->context);
    d24e61e
    @@ -189,11 +197,17 @@ create_jit_context_type(struct gallivm_state *gallivm,
    d24e61e
        elem_types[3] = LLVMPointerType(float_type, 0); /* viewport */
    d24e61e
        elem_types[4] = LLVMArrayType(texture_type,
    d24e61e
                                      PIPE_MAX_VERTEX_SAMPLERS); /* textures */
    d24e61e
    -
    d24e61e
    +#if HAVE_LLVM >= 0x0300
    d24e61e
    +   context_type = LLVMStructCreateNamed(gallivm->context, struct_name);
    d24e61e
    +   LLVMStructSetBody(context_type, elem_types,
    d24e61e
    +                     Elements(elem_types), 0);
    d24e61e
    +#else
    d24e61e
        context_type = LLVMStructTypeInContext(gallivm->context, elem_types,
    d24e61e
                                               Elements(elem_types), 0);
    d24e61e
    +   LLVMAddTypeName(gallivm->module, struct_name, context_type);
    d24e61e
     
    d24e61e
        LLVMInvalidateStructLayout(gallivm->target, context_type);
    d24e61e
    +#endif
    d24e61e
     
    d24e61e
        LP_CHECK_MEMBER_OFFSET(struct draw_jit_context, vs_constants,
    d24e61e
                               target, context_type, 0);
    d24e61e
    @@ -215,7 +229,7 @@ create_jit_context_type(struct gallivm_state *gallivm,
    d24e61e
      * Create LLVM type for struct pipe_vertex_buffer
    d24e61e
      */
    d24e61e
     static LLVMTypeRef
    d24e61e
    -create_jit_vertex_buffer_type(struct gallivm_state *gallivm)
    d24e61e
    +create_jit_vertex_buffer_type(struct gallivm_state *gallivm, const char *struct_name)
    d24e61e
     {
    d24e61e
        LLVMTargetDataRef target = gallivm->target;
    d24e61e
        LLVMTypeRef elem_types[3];
    d24e61e
    @@ -225,10 +239,17 @@ create_jit_vertex_buffer_type(struct gallivm_state *gallivm)
    d24e61e
        elem_types[1] = LLVMInt32TypeInContext(gallivm->context);
    d24e61e
        elem_types[2] = LLVMPointerType(LLVMInt8TypeInContext(gallivm->context), 0); /* vs_constants */
    d24e61e
     
    d24e61e
    +#if HAVE_LLVM >= 0x0300
    d24e61e
    +   vb_type = LLVMStructCreateNamed(gallivm->context, struct_name);
    d24e61e
    +   LLVMStructSetBody(vb_type, elem_types,
    d24e61e
    +                     Elements(elem_types), 0);
    d24e61e
    +#else
    d24e61e
        vb_type = LLVMStructTypeInContext(gallivm->context, elem_types,
    d24e61e
                                          Elements(elem_types), 0);
    d24e61e
    +   LLVMAddTypeName(gallivm->module, struct_name, vb_type);
    d24e61e
     
    d24e61e
        LLVMInvalidateStructLayout(gallivm->target, vb_type);
    d24e61e
    +#endif
    d24e61e
     
    d24e61e
        LP_CHECK_MEMBER_OFFSET(struct pipe_vertex_buffer, stride,
    d24e61e
                               target, vb_type, 0);
    d24e61e
    @@ -258,10 +279,17 @@ create_jit_vertex_header(struct gallivm_state *gallivm, int data_elems)
    d24e61e
        elem_types[1]  = LLVMArrayType(LLVMFloatTypeInContext(gallivm->context), 4);
    d24e61e
        elem_types[2]  = LLVMArrayType(elem_types[1], data_elems);
    d24e61e
     
    d24e61e
    +#if HAVE_LLVM >= 0x0300
    d24e61e
    +   vertex_header = LLVMStructCreateNamed(gallivm->context, struct_name);
    d24e61e
    +   LLVMStructSetBody(vertex_header, elem_types,
    d24e61e
    +                     Elements(elem_types), 0);
    d24e61e
    +#else
    d24e61e
        vertex_header = LLVMStructTypeInContext(gallivm->context, elem_types,
    d24e61e
                                                Elements(elem_types), 0);
    d24e61e
    +   LLVMAddTypeName(gallivm->module, struct_name, vertex_header);
    d24e61e
     
    d24e61e
        LLVMInvalidateStructLayout(gallivm->target, vertex_header);
    d24e61e
    +#endif
    d24e61e
     
    d24e61e
        /* these are bit-fields and we can't take address of them
    d24e61e
           LP_CHECK_MEMBER_OFFSET(struct vertex_header, clipmask,
    d24e61e
    @@ -284,8 +312,6 @@ create_jit_vertex_header(struct gallivm_state *gallivm, int data_elems)
    d24e61e
                               target, vertex_header,
    d24e61e
                               DRAW_JIT_VERTEX_DATA);
    d24e61e
     
    d24e61e
    -   LLVMAddTypeName(gallivm->module, struct_name, vertex_header);
    d24e61e
    -
    d24e61e
        return vertex_header;
    d24e61e
     }
    d24e61e
     
    d24e61e
    @@ -299,19 +325,15 @@ create_jit_types(struct draw_llvm *llvm)
    d24e61e
        struct gallivm_state *gallivm = llvm->gallivm;
    d24e61e
        LLVMTypeRef texture_type, context_type, buffer_type, vb_type;
    d24e61e
     
    d24e61e
    -   texture_type = create_jit_texture_type(gallivm);
    d24e61e
    -   LLVMAddTypeName(gallivm->module, "texture", texture_type);
    d24e61e
    +   texture_type = create_jit_texture_type(gallivm, "texture");
    d24e61e
     
    d24e61e
    -   context_type = create_jit_context_type(gallivm, texture_type);
    d24e61e
    -   LLVMAddTypeName(gallivm->module, "draw_jit_context", context_type);
    d24e61e
    +   context_type = create_jit_context_type(gallivm, texture_type, "draw_jit_context");
    d24e61e
        llvm->context_ptr_type = LLVMPointerType(context_type, 0);
    d24e61e
     
    d24e61e
        buffer_type = LLVMPointerType(LLVMIntTypeInContext(gallivm->context, 8), 0);
    d24e61e
    -   LLVMAddTypeName(gallivm->module, "buffer", buffer_type);
    d24e61e
        llvm->buffer_ptr_type = LLVMPointerType(buffer_type, 0);
    d24e61e
     
    d24e61e
    -   vb_type = create_jit_vertex_buffer_type(gallivm);
    d24e61e
    -   LLVMAddTypeName(gallivm->module, "pipe_vertex_buffer", vb_type);
    d24e61e
    +   vb_type = create_jit_vertex_buffer_type(gallivm, "pipe_vertex_buffer");
    d24e61e
        llvm->vb_ptr_type = LLVMPointerType(vb_type, 0);
    d24e61e
     }
    d24e61e
     
    d24e61e
    diff --git a/src/gallium/auxiliary/gallivm/lp_bld_debug.cpp b/src/gallium/auxiliary/gallivm/lp_bld_debug.cpp
    d24e61e
    index 8636cd6..f44749d 100644
    d24e61e
    --- a/src/gallium/auxiliary/gallivm/lp_bld_debug.cpp
    d24e61e
    +++ b/src/gallium/auxiliary/gallivm/lp_bld_debug.cpp
    d24e61e
    @@ -27,17 +27,23 @@
    d24e61e
     
    d24e61e
     #include <llvm-c/Core.h>
    d24e61e
     #include <llvm/Target/TargetMachine.h>
    d24e61e
    -#include <llvm/Target/TargetRegistry.h>
    d24e61e
    -#include <llvm/Target/TargetSelect.h>
    d24e61e
     #include <llvm/Target/TargetInstrInfo.h>
    d24e61e
     #include <llvm/Support/raw_ostream.h>
    d24e61e
     #include <llvm/Support/MemoryObject.h>
    d24e61e
     
    d24e61e
    +#if HAVE_LLVM >= 0x0300
    d24e61e
    +#include <llvm/Support/TargetRegistry.h>
    d24e61e
    +#include <llvm/Support/TargetSelect.h>
    d24e61e
    +#else /* HAVE_LLVM < 0x0300 */
    d24e61e
    +#include <llvm/Target/TargetRegistry.h>
    d24e61e
    +#include <llvm/Target/TargetSelect.h>
    d24e61e
    +#endif /* HAVE_LLVM < 0x0300 */
    d24e61e
    +
    d24e61e
     #if HAVE_LLVM >= 0x0209
    d24e61e
     #include <llvm/Support/Host.h>
    d24e61e
    -#else
    d24e61e
    +#else /* HAVE_LLVM < 0x0209 */
    d24e61e
     #include <llvm/System/Host.h>
    d24e61e
    -#endif
    d24e61e
    +#endif /* HAVE_LLVM < 0x0209 */
    d24e61e
     
    d24e61e
     #if HAVE_LLVM >= 0x0207
    d24e61e
     #include <llvm/MC/MCDisassembler.h>
    d24e61e
    @@ -193,14 +199,23 @@ lp_disassemble(const void* func)
    d24e61e
     
    d24e61e
        InitializeAllDisassemblers();
    d24e61e
     
    d24e61e
    +#if HAVE_LLVM >= 0x0300
    d24e61e
    +   OwningPtr<const MCAsmInfo> AsmInfo(T->createMCAsmInfo(Triple));
    d24e61e
    +#else
    d24e61e
        OwningPtr<const MCAsmInfo> AsmInfo(T->createAsmInfo(Triple));
    d24e61e
    +#endif
    d24e61e
     
    d24e61e
        if (!AsmInfo) {
    d24e61e
           debug_printf("error: no assembly info for target %s\n", Triple.c_str());
    d24e61e
           return;
    d24e61e
        }
    d24e61e
     
    d24e61e
    +#if HAVE_LLVM >= 0x0300
    d24e61e
    +   const MCSubtargetInfo *STI = T->createMCSubtargetInfo(Triple, sys::getHostCPUName(), "");
    d24e61e
    +   OwningPtr<const MCDisassembler> DisAsm(T->createMCDisassembler(*STI));
    d24e61e
    +#else 
    d24e61e
        OwningPtr<const MCDisassembler> DisAsm(T->createMCDisassembler());
    d24e61e
    +#endif 
    d24e61e
        if (!DisAsm) {
    d24e61e
           debug_printf("error: no disassembler for target %s\n", Triple.c_str());
    d24e61e
           return;
    d24e61e
    @@ -213,7 +228,11 @@ lp_disassemble(const void* func)
    d24e61e
     #else
    d24e61e
        int AsmPrinterVariant = AsmInfo->getAssemblerDialect();
    d24e61e
     #endif
    d24e61e
    -#if HAVE_LLVM >= 0x0208
    d24e61e
    +
    d24e61e
    +#if HAVE_LLVM >= 0x0300
    d24e61e
    +   OwningPtr<MCInstPrinter> Printer(
    d24e61e
    +         T->createMCInstPrinter(AsmPrinterVariant, *AsmInfo, *STI));
    d24e61e
    +#elif HAVE_LLVM >= 0x0208
    d24e61e
        OwningPtr<MCInstPrinter> Printer(
    d24e61e
              T->createMCInstPrinter(AsmPrinterVariant, *AsmInfo));
    d24e61e
     #else
    d24e61e
    @@ -253,7 +272,11 @@ lp_disassemble(const void* func)
    d24e61e
     
    d24e61e
           if (!DisAsm->getInstruction(Inst, Size, memoryObject,
    d24e61e
                                      pc,
    d24e61e
    -                                 nulls())) {
    d24e61e
    +#if HAVE_LLVM >= 0x0300
    d24e61e
    +				  nulls(), nulls())) {
    d24e61e
    +#else
    d24e61e
    +				  nulls())) {
    d24e61e
    +#endif
    d24e61e
              debug_printf("invalid\n");
    d24e61e
              pc += 1;
    d24e61e
           }
    d24e61e
    @@ -276,7 +299,9 @@ lp_disassemble(const void* func)
    d24e61e
            * Print the instruction.
    d24e61e
            */
    d24e61e
     
    d24e61e
    -#if HAVE_LLVM >= 0x208
    d24e61e
    +#if HAVE_LLVM >= 0x0300
    d24e61e
    +      Printer->printInst(&Inst, Out, "");
    d24e61e
    +#elif HAVE_LLVM >= 0x208
    d24e61e
           Printer->printInst(&Inst, Out);
    d24e61e
     #else
    d24e61e
           Printer->printInst(&Inst);
    d24e61e
    @@ -289,7 +314,11 @@ lp_disassemble(const void* func)
    d24e61e
     
    d24e61e
           pc += Size;
    d24e61e
     
    d24e61e
    +#if HAVE_LLVM >= 0x0300
    d24e61e
    +      const MCInstrDesc &TID = TII->get(Inst.getOpcode());
    d24e61e
    +#else
    d24e61e
           const TargetInstrDesc &TID = TII->get(Inst.getOpcode());
    d24e61e
    +#endif
    d24e61e
     
    d24e61e
           /*
    d24e61e
            * Keep track of forward jumps to a nearby address.
    d24e61e
    diff --git a/src/gallium/auxiliary/gallivm/lp_bld_type.c b/src/gallium/auxiliary/gallivm/lp_bld_type.c
    d24e61e
    index c5cf6d4..efd159f 100644
    d24e61e
    --- a/src/gallium/auxiliary/gallivm/lp_bld_type.c
    d24e61e
    +++ b/src/gallium/auxiliary/gallivm/lp_bld_type.c
    d24e61e
    @@ -325,16 +325,18 @@ lp_typekind_name(LLVMTypeKind t)
    d24e61e
           return "LLVMArrayTypeKind";
    d24e61e
        case LLVMPointerTypeKind:
    d24e61e
           return "LLVMPointerTypeKind";
    d24e61e
    +#if HAVE_LLVM < 0x0300
    d24e61e
        case LLVMOpaqueTypeKind:
    d24e61e
           return "LLVMOpaqueTypeKind";
    d24e61e
    +#endif
    d24e61e
        case LLVMVectorTypeKind:
    d24e61e
           return "LLVMVectorTypeKind";
    d24e61e
        case LLVMMetadataTypeKind:
    d24e61e
           return "LLVMMetadataTypeKind";
    d24e61e
    -   /* Only in LLVM 2.7 and later???
    d24e61e
    +#if HAVE_LLVM == 0x0207
    d24e61e
        case LLVMUnionTypeKind:
    d24e61e
           return "LLVMUnionTypeKind";
    d24e61e
    -   */
    d24e61e
    +#endif
    d24e61e
        default:
    d24e61e
           return "unknown LLVMTypeKind";
    d24e61e
        }
    d24e61e
    diff --git a/src/gallium/drivers/llvmpipe/lp_jit.c b/src/gallium/drivers/llvmpipe/lp_jit.c
    d24e61e
    index 268f0fa..ce92a80 100644
    d24e61e
    --- a/src/gallium/drivers/llvmpipe/lp_jit.c
    d24e61e
    +++ b/src/gallium/drivers/llvmpipe/lp_jit.c
    d24e61e
    @@ -68,10 +68,17 @@ lp_jit_create_types(struct llvmpipe_context *lp)
    d24e61e
           elem_types[LP_JIT_TEXTURE_BORDER_COLOR] = 
    d24e61e
              LLVMArrayType(LLVMFloatTypeInContext(lc), 4);
    d24e61e
     
    d24e61e
    +#if HAVE_LLVM >= 0x0300
    d24e61e
    +   texture_type = LLVMStructCreateNamed(gallivm->context, "texture");
    d24e61e
    +   LLVMStructSetBody(texture_type, elem_types,
    d24e61e
    +                     Elements(elem_types), 0);
    d24e61e
    +#else
    d24e61e
           texture_type = LLVMStructTypeInContext(lc, elem_types,
    d24e61e
                                                  Elements(elem_types), 0);
    d24e61e
    +      LLVMAddTypeName(gallivm->module, "texture", texture_type);
    d24e61e
     
    d24e61e
           LLVMInvalidateStructLayout(gallivm->target, texture_type);
    d24e61e
    +#endif
    d24e61e
     
    d24e61e
           LP_CHECK_MEMBER_OFFSET(struct lp_jit_texture, width,
    d24e61e
                                  gallivm->target, texture_type,
    d24e61e
    @@ -112,8 +119,6 @@ lp_jit_create_types(struct llvmpipe_context *lp)
    d24e61e
     
    d24e61e
           LP_CHECK_STRUCT_SIZE(struct lp_jit_texture,
    d24e61e
                                gallivm->target, texture_type);
    d24e61e
    -
    d24e61e
    -      LLVMAddTypeName(gallivm->module, "texture", texture_type);
    d24e61e
        }
    d24e61e
     
    d24e61e
        /* struct lp_jit_context */
    d24e61e
    @@ -129,11 +134,19 @@ lp_jit_create_types(struct llvmpipe_context *lp)
    d24e61e
           elem_types[LP_JIT_CTX_TEXTURES] = LLVMArrayType(texture_type,
    d24e61e
                                                           PIPE_MAX_SAMPLERS);
    d24e61e
     
    d24e61e
    +#if HAVE_LLVM >= 0x0300
    d24e61e
    +   context_type = LLVMStructCreateNamed(gallivm->context, "context");
    d24e61e
    +   LLVMStructSetBody(context_type, elem_types,
    d24e61e
    +                     Elements(elem_types), 0);
    d24e61e
    +#else
    d24e61e
           context_type = LLVMStructTypeInContext(lc, elem_types,
    d24e61e
                                                  Elements(elem_types), 0);
    d24e61e
     
    d24e61e
           LLVMInvalidateStructLayout(gallivm->target, context_type);
    d24e61e
     
    d24e61e
    +      LLVMAddTypeName(gallivm->module, "context", context_type);
    d24e61e
    +#endif
    d24e61e
    +
    d24e61e
           LP_CHECK_MEMBER_OFFSET(struct lp_jit_context, constants,
    d24e61e
                                  gallivm->target, context_type,
    d24e61e
                                  LP_JIT_CTX_CONSTANTS);
    d24e61e
    @@ -155,8 +168,6 @@ lp_jit_create_types(struct llvmpipe_context *lp)
    d24e61e
           LP_CHECK_STRUCT_SIZE(struct lp_jit_context,
    d24e61e
                                gallivm->target, context_type);
    d24e61e
     
    d24e61e
    -      LLVMAddTypeName(gallivm->module, "context", context_type);
    d24e61e
    -
    d24e61e
           lp->jit_context_ptr_type = LLVMPointerType(context_type, 0);
    d24e61e
        }
    d24e61e
     
    d24e61e
    diff --git a/src/gallium/drivers/nv50/nv50_context.c b/src/gallium/drivers/nv50/nv50_context.c
    d24e61e
    index ceb83f6..ac3e361 100644
    d24e61e
    --- a/src/gallium/drivers/nv50/nv50_context.c
    d24e61e
    +++ b/src/gallium/drivers/nv50/nv50_context.c
    d24e61e
    @@ -60,13 +60,13 @@ nv50_texture_barrier(struct pipe_context *pipe)
    d24e61e
     void
    d24e61e
     nv50_default_flush_notify(struct nouveau_channel *chan)
    d24e61e
     {
    d24e61e
    -   struct nv50_context *nv50 = chan->user_private;
    d24e61e
    +   struct nv50_screen *screen = chan->user_private;
    d24e61e
     
    d24e61e
    -   if (!nv50)
    d24e61e
    +   if (!screen)
    d24e61e
           return;
    d24e61e
     
    d24e61e
    -   nouveau_fence_update(&nv50->screen->base, TRUE);
    d24e61e
    -   nouveau_fence_next(&nv50->screen->base);
    d24e61e
    +   nouveau_fence_update(&screen->base, TRUE);
    d24e61e
    +   nouveau_fence_next(&screen->base);
    d24e61e
     }
    d24e61e
     
    d24e61e
     static void
    d24e61e
    @@ -100,10 +100,8 @@ nv50_destroy(struct pipe_context *pipe)
    d24e61e
     
    d24e61e
        draw_destroy(nv50->draw);
    d24e61e
     
    d24e61e
    -   if (nv50->screen->cur_ctx == nv50) {
    d24e61e
    -      nv50->screen->base.channel->user_private = NULL;
    d24e61e
    +   if (nv50->screen->cur_ctx == nv50)
    d24e61e
           nv50->screen->cur_ctx = NULL;
    d24e61e
    -   }
    d24e61e
     
    d24e61e
        FREE(nv50);
    d24e61e
     }
    d24e61e
    @@ -140,7 +138,6 @@ nv50_create(struct pipe_screen *pscreen, void *priv)
    d24e61e
     
    d24e61e
        if (!screen->cur_ctx)
    d24e61e
           screen->cur_ctx = nv50;
    d24e61e
    -   screen->base.channel->user_private = nv50;
    d24e61e
        screen->base.channel->flush_notify = nv50_default_flush_notify;
    d24e61e
     
    d24e61e
        nv50_init_query_functions(nv50);
    d24e61e
    diff --git a/src/gallium/drivers/nv50/nv50_screen.c b/src/gallium/drivers/nv50/nv50_screen.c
    d24e61e
    index 9606c99..f176a86 100644
    d24e61e
    --- a/src/gallium/drivers/nv50/nv50_screen.c
    d24e61e
    +++ b/src/gallium/drivers/nv50/nv50_screen.c
    d24e61e
    @@ -215,6 +215,8 @@ nv50_screen_destroy(struct pipe_screen *pscreen)
    d24e61e
           nouveau_fence_wait(screen->base.fence.current);
    d24e61e
           nouveau_fence_ref (NULL, &screen->base.fence.current);
    d24e61e
        }
    d24e61e
    +   if (screen->base.channel)
    d24e61e
    +      screen->base.channel->user_private = NULL;
    d24e61e
     
    d24e61e
        nouveau_bo_ref(NULL, &screen->code);
    d24e61e
        nouveau_bo_ref(NULL, &screen->tls_bo);
    d24e61e
    @@ -304,6 +306,7 @@ nv50_screen_create(struct pipe_winsys *ws, struct nouveau_device *dev)
    d24e61e
           FAIL_SCREEN_INIT("nouveau_screen_init failed: %d\n", ret);
    d24e61e
     
    d24e61e
        chan = screen->base.channel;
    d24e61e
    +   chan->user_private = screen;
    d24e61e
     
    d24e61e
        pscreen->winsys = ws;
    d24e61e
        pscreen->destroy = nv50_screen_destroy;
    d24e61e
    diff --git a/src/gallium/drivers/nv50/nv50_state_validate.c b/src/gallium/drivers/nv50/nv50_state_validate.c
    d24e61e
    index 11561f5..d29c1e9 100644
    d24e61e
    --- a/src/gallium/drivers/nv50/nv50_state_validate.c
    d24e61e
    +++ b/src/gallium/drivers/nv50/nv50_state_validate.c
    d24e61e
    @@ -282,8 +282,7 @@ nv50_switch_pipe_context(struct nv50_context *ctx_to)
    d24e61e
        if (!ctx_to->zsa)
    d24e61e
           ctx_to->dirty &= ~NV50_NEW_ZSA;
    d24e61e
     
    d24e61e
    -   ctx_to->screen->base.channel->user_private = ctx_to->screen->cur_ctx =
    d24e61e
    -      ctx_to;
    d24e61e
    +   ctx_to->screen->cur_ctx = ctx_to;
    d24e61e
     }
    d24e61e
     
    d24e61e
     static struct state_validate {
    d24e61e
    diff --git a/src/gallium/drivers/nv50/nv50_vbo.c b/src/gallium/drivers/nv50/nv50_vbo.c
    d24e61e
    index bb08941..f23008a 100644
    d24e61e
    --- a/src/gallium/drivers/nv50/nv50_vbo.c
    d24e61e
    +++ b/src/gallium/drivers/nv50/nv50_vbo.c
    d24e61e
    @@ -389,11 +389,11 @@ nv50_prim_gl(unsigned prim)
    d24e61e
     static void
    d24e61e
     nv50_draw_vbo_flush_notify(struct nouveau_channel *chan)
    d24e61e
     {
    d24e61e
    -   struct nv50_context *nv50 = chan->user_private;
    d24e61e
    +   struct nv50_screen *screen = chan->user_private;
    d24e61e
     
    d24e61e
    -   nouveau_fence_update(&nv50->screen->base, TRUE);
    d24e61e
    +   nouveau_fence_update(&screen->base, TRUE);
    d24e61e
     
    d24e61e
    -   nv50_bufctx_emit_relocs(nv50);
    d24e61e
    +   nv50_bufctx_emit_relocs(screen->cur_ctx);
    d24e61e
     }
    d24e61e
     
    d24e61e
     static void
    d24e61e
    @@ -650,7 +650,6 @@ nv50_draw_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info)
    d24e61e
        nv50_state_validate(nv50);
    d24e61e
     
    d24e61e
        chan->flush_notify = nv50_draw_vbo_flush_notify;
    d24e61e
    -   chan->user_private = nv50;
    d24e61e
     
    d24e61e
        if (nv50->vbo_fifo) {
    d24e61e
           nv50_push_vbo(nv50, info);
    d24e61e
    diff --git a/src/gallium/drivers/nvc0/nvc0_context.c b/src/gallium/drivers/nvc0/nvc0_context.c
    d24e61e
    index 2679b7f..983db23 100644
    d24e61e
    --- a/src/gallium/drivers/nvc0/nvc0_context.c
    d24e61e
    +++ b/src/gallium/drivers/nvc0/nvc0_context.c
    d24e61e
    @@ -89,10 +89,8 @@ nvc0_destroy(struct pipe_context *pipe)
    d24e61e
     
    d24e61e
        draw_destroy(nvc0->draw);
    d24e61e
     
    d24e61e
    -   if (nvc0->screen->cur_ctx == nvc0) {
    d24e61e
    -      nvc0->screen->base.channel->user_private = NULL;
    d24e61e
    +   if (nvc0->screen->cur_ctx == nvc0)
    d24e61e
           nvc0->screen->cur_ctx = NULL;
    d24e61e
    -   }
    d24e61e
     
    d24e61e
        FREE(nvc0);
    d24e61e
     }
    d24e61e
    @@ -100,13 +98,13 @@ nvc0_destroy(struct pipe_context *pipe)
    d24e61e
     void
    d24e61e
     nvc0_default_flush_notify(struct nouveau_channel *chan)
    d24e61e
     {
    d24e61e
    -   struct nvc0_context *nvc0 = chan->user_private;
    d24e61e
    +   struct nvc0_screen *screen = chan->user_private;
    d24e61e
     
    d24e61e
    -   if (!nvc0)
    d24e61e
    +   if (!screen)
    d24e61e
           return;
    d24e61e
     
    d24e61e
    -   nouveau_fence_update(&nvc0->screen->base, TRUE);
    d24e61e
    -   nouveau_fence_next(&nvc0->screen->base);
    d24e61e
    +   nouveau_fence_update(&screen->base, TRUE);
    d24e61e
    +   nouveau_fence_next(&screen->base);
    d24e61e
     }
    d24e61e
     
    d24e61e
     struct pipe_context *
    d24e61e
    @@ -141,7 +139,6 @@ nvc0_create(struct pipe_screen *pscreen, void *priv)
    d24e61e
     
    d24e61e
        if (!screen->cur_ctx)
    d24e61e
           screen->cur_ctx = nvc0;
    d24e61e
    -   screen->base.channel->user_private = nvc0;
    d24e61e
        screen->base.channel->flush_notify = nvc0_default_flush_notify;
    d24e61e
     
    d24e61e
        nvc0_init_query_functions(nvc0);
    d24e61e
    diff --git a/src/gallium/drivers/nvc0/nvc0_screen.c b/src/gallium/drivers/nvc0/nvc0_screen.c
    d24e61e
    index e87688e..43eb6ce 100644
    d24e61e
    --- a/src/gallium/drivers/nvc0/nvc0_screen.c
    d24e61e
    +++ b/src/gallium/drivers/nvc0/nvc0_screen.c
    d24e61e
    @@ -198,8 +198,12 @@ nvc0_screen_destroy(struct pipe_screen *pscreen)
    d24e61e
     {
    d24e61e
        struct nvc0_screen *screen = nvc0_screen(pscreen);
    d24e61e
     
    d24e61e
    -   nouveau_fence_wait(screen->base.fence.current);
    d24e61e
    -   nouveau_fence_ref(NULL, &screen->base.fence.current);
    d24e61e
    +   if (screen->base.fence.current) {
    d24e61e
    +      nouveau_fence_wait(screen->base.fence.current);
    d24e61e
    +      nouveau_fence_ref(NULL, &screen->base.fence.current);
    d24e61e
    +   }
    d24e61e
    +   if (screen->base.channel)
    d24e61e
    +      screen->base.channel->user_private = NULL;
    d24e61e
     
    d24e61e
        nouveau_bo_ref(NULL, &screen->text);
    d24e61e
        nouveau_bo_ref(NULL, &screen->tls);
    d24e61e
    @@ -362,6 +366,7 @@ nvc0_screen_create(struct pipe_winsys *ws, struct nouveau_device *dev)
    d24e61e
           return NULL;
    d24e61e
        }
    d24e61e
        chan = screen->base.channel;
    d24e61e
    +   chan->user_private = screen;
    d24e61e
     
    d24e61e
        pscreen->winsys = ws;
    d24e61e
        pscreen->destroy = nvc0_screen_destroy;
    d24e61e
    diff --git a/src/gallium/drivers/nvc0/nvc0_state_validate.c b/src/gallium/drivers/nvc0/nvc0_state_validate.c
    d24e61e
    index 9b2a281..f300f37 100644
    d24e61e
    --- a/src/gallium/drivers/nvc0/nvc0_state_validate.c
    d24e61e
    +++ b/src/gallium/drivers/nvc0/nvc0_state_validate.c
    d24e61e
    @@ -428,8 +428,7 @@ nvc0_switch_pipe_context(struct nvc0_context *ctx_to)
    d24e61e
        if (!ctx_to->zsa)
    d24e61e
           ctx_to->dirty &= ~NVC0_NEW_ZSA;
    d24e61e
     
    d24e61e
    -   ctx_to->screen->base.channel->user_private = ctx_to->screen->cur_ctx =
    d24e61e
    -      ctx_to;
    d24e61e
    +   ctx_to->screen->cur_ctx = ctx_to;
    d24e61e
     }
    d24e61e
     
    d24e61e
     static struct state_validate {
    d24e61e
    diff --git a/src/gallium/drivers/nvc0/nvc0_vbo.c b/src/gallium/drivers/nvc0/nvc0_vbo.c
    d24e61e
    index 4107910..8a5bf8d 100644
    d24e61e
    --- a/src/gallium/drivers/nvc0/nvc0_vbo.c
    d24e61e
    +++ b/src/gallium/drivers/nvc0/nvc0_vbo.c
    d24e61e
    @@ -367,11 +367,11 @@ nvc0_prim_gl(unsigned prim)
    d24e61e
     static void
    d24e61e
     nvc0_draw_vbo_flush_notify(struct nouveau_channel *chan)
    d24e61e
     {
    d24e61e
    -   struct nvc0_context *nvc0 = chan->user_private;
    d24e61e
    +   struct nvc0_screen *screen = chan->user_private;
    d24e61e
     
    d24e61e
    -   nouveau_fence_update(&nvc0->screen->base, TRUE);
    d24e61e
    +   nouveau_fence_update(&screen->base, TRUE);
    d24e61e
     
    d24e61e
    -   nvc0_bufctx_emit_relocs(nvc0);
    d24e61e
    +   nvc0_bufctx_emit_relocs(screen->cur_ctx);
    d24e61e
     }
    d24e61e
     
    d24e61e
     static void
    d24e61e
    @@ -587,7 +587,6 @@ nvc0_draw_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info)
    d24e61e
        nvc0_state_validate(nvc0);
    d24e61e
     
    d24e61e
        chan->flush_notify = nvc0_draw_vbo_flush_notify;
    d24e61e
    -   chan->user_private = nvc0;
    d24e61e
     
    d24e61e
        if (nvc0->vbo_fifo) {
    d24e61e
           nvc0_push_vbo(nvc0, info);
    d24e61e
    diff --git a/src/glsl/ast.h b/src/glsl/ast.h
    d24e61e
    index d1de227..532347d 100644
    d24e61e
    --- a/src/glsl/ast.h
    d24e61e
    +++ b/src/glsl/ast.h
    d24e61e
    @@ -372,7 +372,7 @@ struct ast_type_qualifier {
    d24e61e
         * \note
    d24e61e
         * This field is only valid if \c explicit_location is set.
    d24e61e
         */
    d24e61e
    -   unsigned location;
    d24e61e
    +   int location;
    d24e61e
     
    d24e61e
        /**
    d24e61e
         * Return true if and only if an interpolation qualifier is present.
    d24e61e
    diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
    d24e61e
    index 2289047..1650978 100644
    d24e61e
    --- a/src/glsl/ast_to_hir.cpp
    d24e61e
    +++ b/src/glsl/ast_to_hir.cpp
    d24e61e
    @@ -1140,7 +1140,7 @@ ast_expression::hir(exec_list *instructions,
    d24e61e
     	 error_emitted = true;
    d24e61e
           }
    d24e61e
     
    d24e61e
    -      type = op[0]->type;
    d24e61e
    +      type = error_emitted ? glsl_type::error_type : op[0]->type;
    d24e61e
           result = new(ctx) ir_expression(ir_unop_bit_not, type, op[0], NULL);
    d24e61e
           break;
    d24e61e
     
    d24e61e
    diff --git a/src/glsl/lower_vec_index_to_swizzle.cpp b/src/glsl/lower_vec_index_to_swizzle.cpp
    d24e61e
    index c7630c2..46fd6ac 100644
    d24e61e
    --- a/src/glsl/lower_vec_index_to_swizzle.cpp
    d24e61e
    +++ b/src/glsl/lower_vec_index_to_swizzle.cpp
    d24e61e
    @@ -33,6 +33,7 @@
    d24e61e
     #include "ir_visitor.h"
    d24e61e
     #include "ir_optimization.h"
    d24e61e
     #include "glsl_types.h"
    d24e61e
    +#include "main/macros.h"
    d24e61e
     
    d24e61e
     /**
    d24e61e
      * Visitor class for replacing expressions with ir_constant values.
    d24e61e
    @@ -76,8 +77,25 @@ ir_vec_index_to_swizzle_visitor::convert_vec_index_to_swizzle(ir_rvalue *ir)
    d24e61e
     
    d24e61e
        void *ctx = ralloc_parent(ir);
    d24e61e
        this->progress = true;
    d24e61e
    -   return new(ctx) ir_swizzle(deref->array,
    d24e61e
    -			      ir_constant->value.i[0], 0, 0, 0, 1);
    d24e61e
    +
    d24e61e
    +   /* Page 40 of the GLSL 1.20 spec says:
    d24e61e
    +    *
    d24e61e
    +    *     "When indexing with non-constant expressions, behavior is undefined
    d24e61e
    +    *     if the index is negative, or greater than or equal to the size of
    d24e61e
    +    *     the vector."
    d24e61e
    +    *
    d24e61e
    +    * The quoted spec text mentions non-constant expressions, but this code
    d24e61e
    +    * operates on constants.  These constants are the result of non-constant
    d24e61e
    +    * expressions that have been optimized to constants.  The common case here
    d24e61e
    +    * is a loop counter from an unrolled loop that is used to index a vector.
    d24e61e
    +    *
    d24e61e
    +    * The ir_swizzle constructor gets angry if the index is negative or too
    d24e61e
    +    * large.  For simplicity sake, just clamp the index to [0, size-1].
    d24e61e
    +    */
    d24e61e
    +   const int i = MIN2(MAX2(ir_constant->value.i[0], 0),
    d24e61e
    +		      (deref->array->type->vector_elements - 1));
    d24e61e
    +
    d24e61e
    +   return new(ctx) ir_swizzle(deref->array, i, 0, 0, 0, 1);
    d24e61e
     }
    d24e61e
     
    d24e61e
     ir_visitor_status
    d24e61e
    diff --git a/src/glw/GLwDrawA.c b/src/glw/GLwDrawA.c
    d24e61e
    index 30304a4..b9ef47b 100644
    d24e61e
    --- a/src/glw/GLwDrawA.c
    d24e61e
    +++ b/src/glw/GLwDrawA.c
    d24e61e
    @@ -270,7 +270,7 @@ static XtResource backgroundResources[] = {
    d24e61e
     static XtResource otherColorResources[] = {
    d24e61e
       {XmNforeground,XmCForeground,XmRPixel, 
    d24e61e
        sizeof(Pixel),XtOffset(GLwDrawingAreaWidget,primitive.foreground),
    d24e61e
    -   XmRString,(XtPointer)"lighgrey"},
    d24e61e
    +   XmRString,(XtPointer)"lightgrey"},
    d24e61e
        /*XmRCallProc, (XtPointer) _XmForegroundColorDefault},*/
    d24e61e
     
    d24e61e
       {XmNhighlightColor,XmCHighlightColor,XmRPixel,sizeof(Pixel),
    d24e61e
    diff --git a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
    d24e61e
    index 89fea9c..5ec8d67 100644
    d24e61e
    --- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
    d24e61e
    +++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
    d24e61e
    @@ -283,10 +283,10 @@ brw_create_constant_surface(struct brw_context *brw,
    d24e61e
     
    d24e61e
        surf[1] = bo->offset; /* reloc */
    d24e61e
     
    d24e61e
    -   surf[2] = (((w & 0x7f) - 1) << BRW_SURFACE_WIDTH_SHIFT |
    d24e61e
    -	      (((w >> 7) & 0x1fff) - 1) << BRW_SURFACE_HEIGHT_SHIFT);
    d24e61e
    +   surf[2] = ((w & 0x7f) << BRW_SURFACE_WIDTH_SHIFT |
    d24e61e
    +	      ((w >> 7) & 0x1fff) << BRW_SURFACE_HEIGHT_SHIFT);
    d24e61e
     
    d24e61e
    -   surf[3] = ((((w >> 20) & 0x7f) - 1) << BRW_SURFACE_DEPTH_SHIFT |
    d24e61e
    +   surf[3] = (((w >> 20) & 0x7f) << BRW_SURFACE_DEPTH_SHIFT |
    d24e61e
     	      (width * 16 - 1) << BRW_SURFACE_PITCH_SHIFT);
    d24e61e
     
    d24e61e
        surf[4] = 0;
    d24e61e
    diff --git a/src/mesa/drivers/dri/i965/gen7_viewport_state.c b/src/mesa/drivers/dri/i965/gen7_viewport_state.c
    d24e61e
    index 838ad3a..be6a324 100644
    d24e61e
    --- a/src/mesa/drivers/dri/i965/gen7_viewport_state.c
    d24e61e
    +++ b/src/mesa/drivers/dri/i965/gen7_viewport_state.c
    d24e61e
    @@ -36,7 +36,7 @@ prepare_sf_clip_viewport(struct brw_context *brw)
    d24e61e
        const GLfloat *v = ctx->Viewport._WindowMap.m;
    d24e61e
        struct gen7_sf_clip_viewport *vp;
    d24e61e
     
    d24e61e
    -   vp = brw_state_batch(brw, sizeof(vp), 64, &brw->sf.vp_offset);
    d24e61e
    +   vp = brw_state_batch(brw, sizeof(*vp), 64, &brw->sf.vp_offset);
    d24e61e
        /* Also assign to clip.vp_offset in case something uses it. */
    d24e61e
        brw->clip.vp_offset = brw->sf.vp_offset;
    d24e61e
     
    d24e61e
    diff --git a/src/mesa/drivers/dri/intel/intel_screen.c b/src/mesa/drivers/dri/intel/intel_screen.c
    d24e61e
    index 5ca9b66..96d448c 100644
    d24e61e
    --- a/src/mesa/drivers/dri/intel/intel_screen.c
    d24e61e
    +++ b/src/mesa/drivers/dri/intel/intel_screen.c
    d24e61e
    @@ -108,13 +108,15 @@ intelDRI2Flush(__DRIdrawable *drawable)
    d24e61e
        GET_CURRENT_CONTEXT(ctx);
    d24e61e
        struct intel_context *intel = intel_context(ctx);
    d24e61e
     
    d24e61e
    -   if (intel->gen < 4)
    d24e61e
    -      INTEL_FIREVERTICES(intel);
    d24e61e
    +   if (intel != NULL) {
    d24e61e
    +      if (intel->gen < 4)
    d24e61e
    +	 INTEL_FIREVERTICES(intel);
    d24e61e
     
    d24e61e
    -   intel->need_throttle = GL_TRUE;
    d24e61e
    +      intel->need_throttle = GL_TRUE;
    d24e61e
     
    d24e61e
    -   if (intel->batch.used)
    d24e61e
    -      intel_batchbuffer_flush(intel);
    d24e61e
    +      if (intel->batch.used)
    d24e61e
    +	 intel_batchbuffer_flush(intel);
    d24e61e
    +   }
    d24e61e
     }
    d24e61e
     
    d24e61e
     static const struct __DRI2flushExtensionRec intelFlushExtension = {
    d24e61e
    diff --git a/src/mesa/main/texgetimage.c b/src/mesa/main/texgetimage.c
    d24e61e
    index 2bcbf06..1e327a0 100644
    d24e61e
    --- a/src/mesa/main/texgetimage.c
    d24e61e
    +++ b/src/mesa/main/texgetimage.c
    d24e61e
    @@ -713,6 +713,9 @@ _mesa_GetnTexImageARB( GLenum target, GLint level, GLenum format,
    d24e61e
        texObj = _mesa_get_current_tex_object(ctx, target);
    d24e61e
        texImage = _mesa_select_tex_image(ctx, texObj, target, level);
    d24e61e
     
    d24e61e
    +   if (_mesa_is_zero_size_texture(texImage))
    d24e61e
    +      return;
    d24e61e
    +
    d24e61e
        if (MESA_VERBOSE & (VERBOSE_API | VERBOSE_TEXTURE)) {
    d24e61e
           _mesa_debug(ctx, "glGetTexImage(tex %u) format = %s, w=%d, h=%d,"
    d24e61e
                       " dstFmt=0x%x, dstType=0x%x\n",
    d24e61e
    @@ -846,6 +849,9 @@ _mesa_GetnCompressedTexImageARB(GLenum target, GLint level, GLsizei bufSize,
    d24e61e
        texObj = _mesa_get_current_tex_object(ctx, target);
    d24e61e
        texImage = _mesa_select_tex_image(ctx, texObj, target, level);
    d24e61e
     
    d24e61e
    +   if (_mesa_is_zero_size_texture(texImage))
    d24e61e
    +      return;
    d24e61e
    +
    d24e61e
        if (MESA_VERBOSE & (VERBOSE_API | VERBOSE_TEXTURE)) {
    d24e61e
           _mesa_debug(ctx,
    d24e61e
                       "glGetCompressedTexImage(tex %u) format = %s, w=%d, h=%d\n",
    d24e61e
    diff --git a/src/mesa/main/teximage.h b/src/mesa/main/teximage.h
    d24e61e
    index 19abc64..534cc1b 100644
    d24e61e
    --- a/src/mesa/main/teximage.h
    d24e61e
    +++ b/src/mesa/main/teximage.h
    d24e61e
    @@ -42,6 +42,14 @@ _mesa_alloc_texmemory(GLsizei bytes);
    d24e61e
     extern void
    d24e61e
     _mesa_free_texmemory(void *m);
    d24e61e
     
    d24e61e
    +/** Is any of the dimensions of given texture equal to zero? */
    d24e61e
    +static inline GLboolean
    d24e61e
    +_mesa_is_zero_size_texture(const struct gl_texture_image *texImage)
    d24e61e
    +{
    d24e61e
    +   return (texImage->Width == 0 ||
    d24e61e
    +           texImage->Height == 0 ||
    d24e61e
    +           texImage->Depth == 0);
    d24e61e
    +}
    d24e61e
     
    d24e61e
     /** \name Internal functions */
    d24e61e
     /*@{*/