]> git.pld-linux.org Git - packages/Mesa.git/commitdiff
- rel 2; fixes from git auto/th/Mesa-7_6-2
authorArkadiusz Miśkiewicz <arekm@maven.pl>
Thu, 8 Oct 2009 18:30:07 +0000 (18:30 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    Mesa-git.patch -> 1.5
    Mesa.spec -> 1.222

Mesa-git.patch [new file with mode: 0644]
Mesa.spec

diff --git a/Mesa-git.patch b/Mesa-git.patch
new file mode 100644 (file)
index 0000000..f07d9db
--- /dev/null
@@ -0,0 +1,1973 @@
+diff --git a/include/GL/gl_mangle.h b/include/GL/gl_mangle.h
+index 54147f7..59f6149 100644
+--- a/include/GL/gl_mangle.h
++++ b/include/GL/gl_mangle.h
+@@ -108,12 +108,20 @@
+ #define glBlendColorEXT               MANGLE(BlendColorEXT)
+ #define glBlendColor          MANGLE(BlendColor)
+ #define glBlendEquationEXT            MANGLE(BlendEquationEXT)
++#define glBlendEquationi              MANGLE(BlendEquationi)
++#define glBlendEquationIndexedAMD             MANGLE(BlendEquationIndexedAMD)
+ #define glBlendEquation               MANGLE(BlendEquation)
+ #define glBlendEquationSeparateATI            MANGLE(BlendEquationSeparateATI)
+ #define glBlendEquationSeparateEXT            MANGLE(BlendEquationSeparateEXT)
++#define glBlendEquationSeparatei              MANGLE(BlendEquationSeparatei)
++#define glBlendEquationSeparateIndexedAMD             MANGLE(BlendEquationSeparateIndexedAMD)
+ #define glBlendEquationSeparate               MANGLE(BlendEquationSeparate)
++#define glBlendFunci          MANGLE(BlendFunci)
++#define glBlendFuncIndexedAMD         MANGLE(BlendFuncIndexedAMD)
+ #define glBlendFunc           MANGLE(BlendFunc)
+ #define glBlendFuncSeparateEXT                MANGLE(BlendFuncSeparateEXT)
++#define glBlendFuncSeparatei          MANGLE(BlendFuncSeparatei)
++#define glBlendFuncSeparateIndexedAMD         MANGLE(BlendFuncSeparateIndexedAMD)
+ #define glBlendFuncSeparateINGR               MANGLE(BlendFuncSeparateINGR)
+ #define glBlendFuncSeparate           MANGLE(BlendFuncSeparate)
+ #define glBlitFramebufferEXT          MANGLE(BlitFramebufferEXT)
+@@ -148,6 +156,7 @@
+ #define glClientActiveTexture         MANGLE(ClientActiveTexture)
+ #define glClientActiveVertexStreamATI         MANGLE(ClientActiveVertexStreamATI)
+ #define glClientAttribDefaultEXT              MANGLE(ClientAttribDefaultEXT)
++#define glClientWaitSync              MANGLE(ClientWaitSync)
+ #define glClipPlane           MANGLE(ClipPlane)
+ #define glColor3b             MANGLE(Color3b)
+ #define glColor3bv            MANGLE(Color3bv)
+@@ -320,6 +329,7 @@
+ #define glDeleteRenderbuffersEXT              MANGLE(DeleteRenderbuffersEXT)
+ #define glDeleteRenderbuffers         MANGLE(DeleteRenderbuffers)
+ #define glDeleteShader                MANGLE(DeleteShader)
++#define glDeleteSync          MANGLE(DeleteSync)
+ #define glDeleteTexturesEXT           MANGLE(DeleteTexturesEXT)
+ #define glDeleteTextures              MANGLE(DeleteTextures)
+ #define glDeleteTransformFeedbacksNV          MANGLE(DeleteTransformFeedbacksNV)
+@@ -341,6 +351,7 @@
+ #define glDisableIndexedEXT           MANGLE(DisableIndexedEXT)
+ #define glDisable             MANGLE(Disable)
+ #define glDisableVariantClientStateEXT                MANGLE(DisableVariantClientStateEXT)
++#define glDisableVertexAttribAPPLE            MANGLE(DisableVertexAttribAPPLE)
+ #define glDisableVertexAttribArrayARB         MANGLE(DisableVertexAttribArrayARB)
+ #define glDisableVertexAttribArray            MANGLE(DisableVertexAttribArray)
+ #define glDrawArraysEXT               MANGLE(DrawArraysEXT)
+@@ -354,7 +365,9 @@
+ #define glDrawBuffers         MANGLE(DrawBuffers)
+ #define glDrawElementArrayAPPLE               MANGLE(DrawElementArrayAPPLE)
+ #define glDrawElementArrayATI         MANGLE(DrawElementArrayATI)
++#define glDrawElementsBaseVertex              MANGLE(DrawElementsBaseVertex)
+ #define glDrawElementsInstancedARB            MANGLE(DrawElementsInstancedARB)
++#define glDrawElementsInstancedBaseVertex             MANGLE(DrawElementsInstancedBaseVertex)
+ #define glDrawElementsInstancedEXT            MANGLE(DrawElementsInstancedEXT)
+ #define glDrawElementsInstanced               MANGLE(DrawElementsInstanced)
+ #define glDrawElements                MANGLE(DrawElements)
+@@ -362,6 +375,7 @@
+ #define glDrawPixels          MANGLE(DrawPixels)
+ #define glDrawRangeElementArrayAPPLE          MANGLE(DrawRangeElementArrayAPPLE)
+ #define glDrawRangeElementArrayATI            MANGLE(DrawRangeElementArrayATI)
++#define glDrawRangeElementsBaseVertex         MANGLE(DrawRangeElementsBaseVertex)
+ #define glDrawRangeElementsEXT                MANGLE(DrawRangeElementsEXT)
+ #define glDrawRangeElements           MANGLE(DrawRangeElements)
+ #define glDrawTransformFeedbackNV             MANGLE(DrawTransformFeedbackNV)
+@@ -378,6 +392,7 @@
+ #define glEnableIndexedEXT            MANGLE(EnableIndexedEXT)
+ #define glEnable              MANGLE(Enable)
+ #define glEnableVariantClientStateEXT         MANGLE(EnableVariantClientStateEXT)
++#define glEnableVertexAttribAPPLE             MANGLE(EnableVertexAttribAPPLE)
+ #define glEnableVertexAttribArrayARB          MANGLE(EnableVertexAttribArrayARB)
+ #define glEnableVertexAttribArray             MANGLE(EnableVertexAttribArray)
+ #define glEndConditionalRender                MANGLE(EndConditionalRender)
+@@ -409,6 +424,7 @@
+ #define glExecuteProgramNV            MANGLE(ExecuteProgramNV)
+ #define glExtractComponentEXT         MANGLE(ExtractComponentEXT)
+ #define glFeedbackBuffer              MANGLE(FeedbackBuffer)
++#define glFenceSync           MANGLE(FenceSync)
+ #define glFinalCombinerInputNV                MANGLE(FinalCombinerInputNV)
+ #define glFinishAsyncSGIX             MANGLE(FinishAsyncSGIX)
+ #define glFinishFenceAPPLE            MANGLE(FinishFenceAPPLE)
+@@ -469,9 +485,11 @@
+ #define glFramebufferTextureEXT               MANGLE(FramebufferTextureEXT)
+ #define glFramebufferTextureFaceARB           MANGLE(FramebufferTextureFaceARB)
+ #define glFramebufferTextureFaceEXT           MANGLE(FramebufferTextureFaceEXT)
++#define glFramebufferTextureFace              MANGLE(FramebufferTextureFace)
+ #define glFramebufferTextureLayerARB          MANGLE(FramebufferTextureLayerARB)
+ #define glFramebufferTextureLayerEXT          MANGLE(FramebufferTextureLayerEXT)
+ #define glFramebufferTextureLayer             MANGLE(FramebufferTextureLayer)
++#define glFramebufferTexture          MANGLE(FramebufferTexture)
+ #define glFrameTerminatorGREMEDY              MANGLE(FrameTerminatorGREMEDY)
+ #define glFrameZoomSGIX               MANGLE(FrameZoomSGIX)
+ #define glFreeObjectBufferATI         MANGLE(FreeObjectBufferATI)
+@@ -523,6 +541,7 @@
+ #define glGetBooleanIndexedvEXT               MANGLE(GetBooleanIndexedvEXT)
+ #define glGetBooleani_v               MANGLE(GetBooleani_v)
+ #define glGetBooleanv         MANGLE(GetBooleanv)
++#define glGetBufferParameteri64v              MANGLE(GetBufferParameteri64v)
+ #define glGetBufferParameterivARB             MANGLE(GetBufferParameterivARB)
+ #define glGetBufferParameteriv                MANGLE(GetBufferParameteriv)
+ #define glGetBufferPointervARB                MANGLE(GetBufferPointervARB)
+@@ -586,6 +605,8 @@
+ #define glGetImageTransformParameterivHP              MANGLE(GetImageTransformParameterivHP)
+ #define glGetInfoLogARB               MANGLE(GetInfoLogARB)
+ #define glGetInstrumentsSGIX          MANGLE(GetInstrumentsSGIX)
++#define glGetInteger64i_v             MANGLE(GetInteger64i_v)
++#define glGetInteger64v               MANGLE(GetInteger64v)
+ #define glGetIntegerIndexedvEXT               MANGLE(GetIntegerIndexedvEXT)
+ #define glGetIntegeri_v               MANGLE(GetIntegeri_v)
+ #define glGetIntegerv         MANGLE(GetIntegerv)
+@@ -615,6 +636,7 @@
+ #define glGetMinmaxParameterfv                MANGLE(GetMinmaxParameterfv)
+ #define glGetMinmaxParameterivEXT             MANGLE(GetMinmaxParameterivEXT)
+ #define glGetMinmaxParameteriv                MANGLE(GetMinmaxParameteriv)
++#define glGetMultisamplefv            MANGLE(GetMultisamplefv)
+ #define glGetMultisamplefvNV          MANGLE(GetMultisamplefvNV)
+ #define glGetMultiTexEnvfvEXT         MANGLE(GetMultiTexEnvfvEXT)
+ #define glGetMultiTexEnvivEXT         MANGLE(GetMultiTexEnvivEXT)
+@@ -642,6 +664,7 @@
+ #define glGetObjectBufferfvATI                MANGLE(GetObjectBufferfvATI)
+ #define glGetObjectBufferivATI                MANGLE(GetObjectBufferivATI)
+ #define glGetObjectParameterfvARB             MANGLE(GetObjectParameterfvARB)
++#define glGetObjectParameterivAPPLE           MANGLE(GetObjectParameterivAPPLE)
+ #define glGetObjectParameterivARB             MANGLE(GetObjectParameterivARB)
+ #define glGetOcclusionQueryivNV               MANGLE(GetOcclusionQueryivNV)
+ #define glGetOcclusionQueryuivNV              MANGLE(GetOcclusionQueryuivNV)
+@@ -698,6 +721,7 @@
+ #define glGetSharpenTexFuncSGIS               MANGLE(GetSharpenTexFuncSGIS)
+ #define glGetStringi          MANGLE(GetStringi)
+ #define glGetString           MANGLE(GetString)
++#define glGetSynciv           MANGLE(GetSynciv)
+ #define glGetTexBumpParameterfvATI            MANGLE(GetTexBumpParameterfvATI)
+ #define glGetTexBumpParameterivATI            MANGLE(GetTexBumpParameterivATI)
+ #define glGetTexEnvfv         MANGLE(GetTexEnvfv)
+@@ -715,6 +739,7 @@
+ #define glGetTexParameterIuivEXT              MANGLE(GetTexParameterIuivEXT)
+ #define glGetTexParameterIuiv         MANGLE(GetTexParameterIuiv)
+ #define glGetTexParameteriv           MANGLE(GetTexParameteriv)
++#define glGetTexParameterPointervAPPLE                MANGLE(GetTexParameterPointervAPPLE)
+ #define glGetTextureImageEXT          MANGLE(GetTextureImageEXT)
+ #define glGetTextureLevelParameterfvEXT               MANGLE(GetTextureLevelParameterfvEXT)
+ #define glGetTextureLevelParameterivEXT               MANGLE(GetTextureLevelParameterivEXT)
+@@ -825,12 +850,14 @@
+ #define glIsRenderbufferEXT           MANGLE(IsRenderbufferEXT)
+ #define glIsRenderbuffer              MANGLE(IsRenderbuffer)
+ #define glIsShader            MANGLE(IsShader)
++#define glIsSync              MANGLE(IsSync)
+ #define glIsTextureEXT                MANGLE(IsTextureEXT)
+ #define glIsTexture           MANGLE(IsTexture)
+ #define glIsTransformFeedbackNV               MANGLE(IsTransformFeedbackNV)
+ #define glIsVariantEnabledEXT         MANGLE(IsVariantEnabledEXT)
+ #define glIsVertexArrayAPPLE          MANGLE(IsVertexArrayAPPLE)
+ #define glIsVertexArray               MANGLE(IsVertexArray)
++#define glIsVertexAttribEnabledAPPLE          MANGLE(IsVertexAttribEnabledAPPLE)
+ #define glLightEnviSGIX               MANGLE(LightEnviSGIX)
+ #define glLightf              MANGLE(Lightf)
+ #define glLightfv             MANGLE(Lightfv)
+@@ -877,6 +904,10 @@
+ #define glMapObjectBufferATI          MANGLE(MapObjectBufferATI)
+ #define glMapParameterfvNV            MANGLE(MapParameterfvNV)
+ #define glMapParameterivNV            MANGLE(MapParameterivNV)
++#define glMapVertexAttrib1dAPPLE              MANGLE(MapVertexAttrib1dAPPLE)
++#define glMapVertexAttrib1fAPPLE              MANGLE(MapVertexAttrib1fAPPLE)
++#define glMapVertexAttrib2dAPPLE              MANGLE(MapVertexAttrib2dAPPLE)
++#define glMapVertexAttrib2fAPPLE              MANGLE(MapVertexAttrib2fAPPLE)
+ #define glMaterialf           MANGLE(Materialf)
+ #define glMaterialfv          MANGLE(Materialfv)
+ #define glMateriali           MANGLE(Materiali)
+@@ -907,9 +938,11 @@
+ #define glMatrixTranslatefEXT         MANGLE(MatrixTranslatefEXT)
+ #define glMinmaxEXT           MANGLE(MinmaxEXT)
+ #define glMinmax              MANGLE(Minmax)
++#define glMinSampleShading            MANGLE(MinSampleShading)
+ #define glMultiDrawArraysEXT          MANGLE(MultiDrawArraysEXT)
+ #define glMultiDrawArrays             MANGLE(MultiDrawArrays)
+ #define glMultiDrawElementArrayAPPLE          MANGLE(MultiDrawElementArrayAPPLE)
++#define glMultiDrawElementsBaseVertex         MANGLE(MultiDrawElementsBaseVertex)
+ #define glMultiDrawElementsEXT                MANGLE(MultiDrawElementsEXT)
+ #define glMultiDrawElements           MANGLE(MultiDrawElements)
+ #define glMultiDrawRangeElementArrayAPPLE             MANGLE(MultiDrawRangeElementArrayAPPLE)
+@@ -1072,6 +1105,8 @@
+ #define glNormalStream3ivATI          MANGLE(NormalStream3ivATI)
+ #define glNormalStream3sATI           MANGLE(NormalStream3sATI)
+ #define glNormalStream3svATI          MANGLE(NormalStream3svATI)
++#define glObjectPurgeableAPPLE                MANGLE(ObjectPurgeableAPPLE)
++#define glObjectUnpurgeableAPPLE              MANGLE(ObjectUnpurgeableAPPLE)
+ #define glOrtho               MANGLE(Ortho)
+ #define glPassTexCoordATI             MANGLE(PassTexCoordATI)
+ #define glPassThrough         MANGLE(PassThrough)
+@@ -1162,6 +1197,7 @@
+ #define glProgramParameter4fvNV               MANGLE(ProgramParameter4fvNV)
+ #define glProgramParameteriARB                MANGLE(ProgramParameteriARB)
+ #define glProgramParameteriEXT                MANGLE(ProgramParameteriEXT)
++#define glProgramParameteri           MANGLE(ProgramParameteri)
+ #define glProgramParameters4dvNV              MANGLE(ProgramParameters4dvNV)
+ #define glProgramParameters4fvNV              MANGLE(ProgramParameters4fvNV)
+ #define glProgramStringARB            MANGLE(ProgramStringARB)
+@@ -1200,6 +1236,7 @@
+ #define glProgramUniformMatrix4x3fvEXT                MANGLE(ProgramUniformMatrix4x3fvEXT)
+ #define glProgramVertexLimitNV                MANGLE(ProgramVertexLimitNV)
+ #define glProvokingVertexEXT          MANGLE(ProvokingVertexEXT)
++#define glProvokingVertex             MANGLE(ProvokingVertex)
+ #define glPushAttrib          MANGLE(PushAttrib)
+ #define glPushClientAttribDefaultEXT          MANGLE(PushClientAttribDefaultEXT)
+ #define glPushClientAttrib            MANGLE(PushClientAttrib)
+@@ -1283,6 +1320,7 @@
+ #define glSampleCoverage              MANGLE(SampleCoverage)
+ #define glSampleMapATI                MANGLE(SampleMapATI)
+ #define glSampleMaskEXT               MANGLE(SampleMaskEXT)
++#define glSampleMaski         MANGLE(SampleMaski)
+ #define glSampleMaskIndexedNV         MANGLE(SampleMaskIndexedNV)
+ #define glSampleMaskSGIS              MANGLE(SampleMaskSGIS)
+ #define glSamplePatternEXT            MANGLE(SamplePatternEXT)
+@@ -1454,8 +1492,10 @@
+ #define glTexGeniv            MANGLE(TexGeniv)
+ #define glTexImage1D          MANGLE(TexImage1D)
+ #define glTexImage2D          MANGLE(TexImage2D)
++#define glTexImage2DMultisample               MANGLE(TexImage2DMultisample)
+ #define glTexImage3DEXT               MANGLE(TexImage3DEXT)
+ #define glTexImage3D          MANGLE(TexImage3D)
++#define glTexImage3DMultisample               MANGLE(TexImage3DMultisample)
+ #define glTexImage4DSGIS              MANGLE(TexImage4DSGIS)
+ #define glTexParameterf               MANGLE(TexParameterf)
+ #define glTexParameterfv              MANGLE(TexParameterfv)
+@@ -1487,6 +1527,7 @@
+ #define glTextureParameterIivEXT              MANGLE(TextureParameterIivEXT)
+ #define glTextureParameterIuivEXT             MANGLE(TextureParameterIuivEXT)
+ #define glTextureParameterivEXT               MANGLE(TextureParameterivEXT)
++#define glTextureRangeAPPLE           MANGLE(TextureRangeAPPLE)
+ #define glTextureRenderbufferEXT              MANGLE(TextureRenderbufferEXT)
+ #define glTextureSubImage1DEXT                MANGLE(TextureSubImage1DEXT)
+ #define glTextureSubImage2DEXT                MANGLE(TextureSubImage2DEXT)
+@@ -1828,6 +1869,7 @@
+ #define glVertexWeighthvNV            MANGLE(VertexWeighthvNV)
+ #define glVertexWeightPointerEXT              MANGLE(VertexWeightPointerEXT)
+ #define glViewport            MANGLE(Viewport)
++#define glWaitSync            MANGLE(WaitSync)
+ #define glWeightbvARB         MANGLE(WeightbvARB)
+ #define glWeightdvARB         MANGLE(WeightdvARB)
+ #define glWeightfvARB         MANGLE(WeightfvARB)
+diff --git a/progs/glsl/skinning.c b/progs/glsl/skinning.c
+index 65ba983..2b96f31 100644
+--- a/progs/glsl/skinning.c
++++ b/progs/glsl/skinning.c
+@@ -16,6 +16,9 @@
+ #include <GL/glut.h>
+ #include "shaderutil.h"
++#ifndef M_PI
++#define M_PI 3.1415926535
++#endif
+ static char *FragProgFile = "skinning.frag";
+ static char *VertProgFile = "skinning.vert";
+diff --git a/progs/glsl/texaaline.c b/progs/glsl/texaaline.c
+index 7a5ac40..2e4f932 100644
+--- a/progs/glsl/texaaline.c
++++ b/progs/glsl/texaaline.c
+@@ -14,6 +14,9 @@
+ #include <GL/glew.h>
+ #include <GL/glut.h>
++#ifndef M_PI
++#define M_PI 3.1415926535
++#endif
+ static GLint WinWidth = 300, WinHeight = 300;
+ static GLint win = 0;
+diff --git a/progs/glsl/twoside.c b/progs/glsl/twoside.c
+index a57484f..ce155d6 100644
+--- a/progs/glsl/twoside.c
++++ b/progs/glsl/twoside.c
+@@ -16,6 +16,9 @@
+ #include <GL/glut.h>
+ #include "shaderutil.h"
++#ifndef M_PI
++#define M_PI 3.1415926535
++#endif
+ static GLint WinWidth = 300, WinHeight = 300;
+ static char *FragProgFile = NULL;
+diff --git a/progs/xdemos/pbdemo.c b/progs/xdemos/pbdemo.c
+index 7db0017..2573209 100644
+--- a/progs/xdemos/pbdemo.c
++++ b/progs/xdemos/pbdemo.c
+@@ -143,7 +143,7 @@ MakePbuffer( Display *dpy, int screen, int width, int height )
+       /* Create the pbuffer using first fbConfig in the list that works. */
+       for (i=0;i<nConfigs;i++) {
+-         pBuffer = CreatePbuffer(dpy, screen, fbConfigs[i], width, height, preserve, largest);
++         pBuffer = CreatePbuffer(dpy, screen, fbConfigs[i], width, height, largest, preserve);
+          if (pBuffer) {
+             gFBconfig = fbConfigs[i];
+             gWidth = width;
+@@ -210,6 +210,21 @@ Setup(int width, int height)
+       return 0;
+    }
++   /* Test drawable queries */
++   {
++      unsigned int v;
++      glXQueryDrawable( gDpy, gPBuffer, GLX_WIDTH, &v);
++      printf("GLX_WIDTH = %u\n", v);
++      glXQueryDrawable( gDpy, gPBuffer, GLX_HEIGHT, &v);
++      printf("GLX_HEIGHT = %u\n", v);
++      glXQueryDrawable( gDpy, gPBuffer, GLX_PRESERVED_CONTENTS, &v);
++      printf("GLX_PRESERVED_CONTENTS = %u\n", v);
++      glXQueryDrawable( gDpy, gPBuffer, GLX_LARGEST_PBUFFER, &v);
++      printf("GLX_LARGEST_PBUFFER = %u\n", v);
++      glXQueryDrawable( gDpy, gPBuffer, GLX_FBCONFIG_ID, &v);
++      printf("GLX_FBCONFIG_ID = %u\n", v);
++   }
++
+    /* Get corresponding XVisualInfo */
+    visInfo = GetVisualFromFBConfig(gDpy, gScreen, gFBconfig);
+    if (!visInfo) {
+diff --git a/src/gallium/auxiliary/cso_cache/cso_context.c b/src/gallium/auxiliary/cso_cache/cso_context.c
+index 36c882a..4f13b3e 100644
+--- a/src/gallium/auxiliary/cso_cache/cso_context.c
++++ b/src/gallium/auxiliary/cso_cache/cso_context.c
+@@ -268,7 +268,7 @@ void cso_release_all( struct cso_context *ctx )
+ void cso_destroy_context( struct cso_context *ctx )
+ {
+    if (ctx) {
+-      //cso_release_all( ctx );
++      /*cso_release_all( ctx );*/
+       FREE( ctx );
+    }
+ }
+diff --git a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_emit.c b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_emit.c
+index 44147ae..734c05f 100644
+--- a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_emit.c
++++ b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_emit.c
+@@ -212,17 +212,10 @@ static void fse_prepare( struct draw_pt_middle_end *middle,
+       struct draw_vertex_shader *vs = draw->vs.vertex_shader;
+       vs->prepare(vs, draw);
+    }
+-   
+-
+-   //return TRUE;
+ }
+-
+-
+-
+-
+ static void fse_run_linear( struct draw_pt_middle_end *middle, 
+                             unsigned start, 
+                             unsigned count )
+diff --git a/src/gallium/auxiliary/draw/draw_pt_post_vs.c b/src/gallium/auxiliary/draw/draw_pt_post_vs.c
+index 00d7197..78953bc 100644
+--- a/src/gallium/auxiliary/draw/draw_pt_post_vs.c
++++ b/src/gallium/auxiliary/draw/draw_pt_post_vs.c
+@@ -210,7 +210,7 @@ void draw_pt_post_vs_prepare( struct pt_post_vs *pvs,
+        pvs->run = post_vs_viewport;
+    }
+    else {
+-      //if (opengl) 
++      /* if (opengl) */
+       pvs->run = post_vs_cliptest_viewport_gl;
+    }
+ }
+diff --git a/src/gallium/auxiliary/draw/draw_vs_aos.c b/src/gallium/auxiliary/draw/draw_vs_aos.c
+index 62e04a6..645d7cc 100644
+--- a/src/gallium/auxiliary/draw/draw_vs_aos.c
++++ b/src/gallium/auxiliary/draw/draw_vs_aos.c
+@@ -891,7 +891,7 @@ static void x87_emit_ex2( struct aos_compilation *cp )
+    struct x86_reg st1 = x86_make_reg(file_x87, 1);
+    int stack = cp->func->x87_stack;
+-//   set_fpu_round_neg_inf( cp );
++   /* set_fpu_round_neg_inf( cp ); */
+    x87_fld(cp->func, st0);      /* a a */
+    x87_fprndint( cp->func );  /* int(a) a*/
+@@ -1759,14 +1759,14 @@ emit_instruction( struct aos_compilation *cp,
+       return emit_SUB(cp, inst);
+  
+    case TGSI_OPCODE_LRP:
+-//      return emit_LERP(cp, inst);
++      /*return emit_LERP(cp, inst);*/
+       return FALSE;
+    case TGSI_OPCODE_FRC:
+       return emit_FRC(cp, inst);
+    case TGSI_OPCODE_CLAMP:
+-//      return emit_CLAMP(cp, inst);
++      /*return emit_CLAMP(cp, inst);*/
+       return FALSE;
+    case TGSI_OPCODE_FLR:
+diff --git a/src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c b/src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c
+index 109ac7c..0d30363 100644
+--- a/src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c
++++ b/src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c
+@@ -584,7 +584,7 @@ fenced_buffer_list_destroy(struct fenced_buffer_list *fenced_list)
+    }
+ #ifdef DEBUG
+-   //assert(!fenced_list->numUnfenced);
++   /*assert(!fenced_list->numUnfenced);*/
+ #endif
+       
+    pipe_mutex_unlock(fenced_list->mutex);
+diff --git a/src/gallium/auxiliary/translate/translate_generic.c b/src/gallium/auxiliary/translate/translate_generic.c
+index 8d39b64..266e7ee 100644
+--- a/src/gallium/auxiliary/translate/translate_generic.c
++++ b/src/gallium/auxiliary/translate/translate_generic.c
+@@ -217,7 +217,7 @@ ATTRIB( R8G8_SNORM,      2, char, FROM_8_SNORM, TO_8_SNORM )
+ ATTRIB( R8_SNORM,        1, char, FROM_8_SNORM, TO_8_SNORM )
+ ATTRIB( A8R8G8B8_UNORM,       4, ubyte, FROM_8_UNORM, TO_8_UNORM )
+-//ATTRIB( R8G8B8A8_UNORM,       4, ubyte, FROM_8_UNORM, TO_8_UNORM )
++/*ATTRIB( R8G8B8A8_UNORM,       4, ubyte, FROM_8_UNORM, TO_8_UNORM )*/
+ ATTRIB( R32G32B32A32_FIXED,   4, int, FROM_32_FIXED, TO_32_FIXED )
+ ATTRIB( R32G32B32_FIXED,      3, int, FROM_32_FIXED, TO_32_FIXED )
+diff --git a/src/gallium/auxiliary/util/u_cpu_detect.c b/src/gallium/auxiliary/util/u_cpu_detect.c
+index d9f2f8f..f78706f 100644
+--- a/src/gallium/auxiliary/util/u_cpu_detect.c
++++ b/src/gallium/auxiliary/util/u_cpu_detect.c
+@@ -268,7 +268,7 @@ static void check_os_katmai_support(void)
+        * and therefore to be safe I'm going to leave this test in here.
+        */
+       if (__cpu_detect_caps.hasSSE) {
+-              //      test_os_katmai_exception_support();
++           /* test_os_katmai_exception_support(); */
+       }
+       /* Restore the original signal handlers.
+diff --git a/src/gallium/auxiliary/util/u_debug_profile.c b/src/gallium/auxiliary/util/u_debug_profile.c
+index 6d8b244..d765b50 100644
+--- a/src/gallium/auxiliary/util/u_debug_profile.c
++++ b/src/gallium/auxiliary/util/u_debug_profile.c
+@@ -254,7 +254,7 @@ debug_profile_start(void)
+ {
+    WCHAR *p;
+-   // increment starting from the less significant digit
++   /* increment starting from the less significant digit */
+    p = &wFileName[14];
+    while(1) {
+       if(*p == '9') {
+diff --git a/src/gallium/auxiliary/util/u_debug_symbol.c b/src/gallium/auxiliary/util/u_debug_symbol.c
+index 811931f..417d0cf 100644
+--- a/src/gallium/auxiliary/util/u_debug_symbol.c
++++ b/src/gallium/auxiliary/util/u_debug_symbol.c
+@@ -214,7 +214,7 @@ debug_symbol_print_imagehlp(const void *addr)
+    HANDLE hProcess;
+    BYTE symbolBuffer[1024];
+    PIMAGEHLP_SYMBOL pSymbol = (PIMAGEHLP_SYMBOL) symbolBuffer;
+-   DWORD dwDisplacement = 0;  // Displacement of the input address, relative to the start of the symbol
++   DWORD dwDisplacement = 0;  /* Displacement of the input address, relative to the start of the symbol */
+    hProcess = GetCurrentProcess();
+diff --git a/src/gallium/auxiliary/util/u_gen_mipmap.c b/src/gallium/auxiliary/util/u_gen_mipmap.c
+index 4e3d35f..aa823aa 100644
+--- a/src/gallium/auxiliary/util/u_gen_mipmap.c
++++ b/src/gallium/auxiliary/util/u_gen_mipmap.c
+@@ -1427,6 +1427,7 @@ set_vertex_data(struct gen_mipmap_state *ctx,
+             rz = -1.0f;
+             break;
+          default:
++            rx = ry = rz = 0.0f;
+             assert(0);
+          }
+diff --git a/src/gallium/drivers/softpipe/sp_context.c b/src/gallium/drivers/softpipe/sp_context.c
+index 86df320..b4650c0 100644
+--- a/src/gallium/drivers/softpipe/sp_context.c
++++ b/src/gallium/drivers/softpipe/sp_context.c
+@@ -105,12 +105,17 @@ static void softpipe_destroy( struct pipe_context *pipe )
+       softpipe->quad[i].output->destroy( softpipe->quad[i].output );
+    }
+-   for (i = 0; i < PIPE_MAX_COLOR_BUFS; i++)
++   for (i = 0; i < PIPE_MAX_COLOR_BUFS; i++) {
+       sp_destroy_tile_cache(softpipe->cbuf_cache[i]);
++      pipe_surface_reference(&softpipe->framebuffer.cbufs[i], NULL);
++   }
+    sp_destroy_tile_cache(softpipe->zsbuf_cache);
++   pipe_surface_reference(&softpipe->framebuffer.zsbuf, NULL);
+-   for (i = 0; i < PIPE_MAX_SAMPLERS; i++)
++   for (i = 0; i < PIPE_MAX_SAMPLERS; i++) {
+       sp_destroy_tile_cache(softpipe->tex_cache[i]);
++      pipe_texture_reference(&softpipe->texture[i], NULL);
++   }
+    for (i = 0; i < Elements(softpipe->constants); i++) {
+       if (softpipe->constants[i].buffer) {
+diff --git a/src/gallium/drivers/softpipe/sp_fs_sse.c b/src/gallium/drivers/softpipe/sp_fs_sse.c
+index f4fa090..31ccc3b 100644
+--- a/src/gallium/drivers/softpipe/sp_fs_sse.c
++++ b/src/gallium/drivers/softpipe/sp_fs_sse.c
+@@ -101,7 +101,7 @@ fs_sse_run( const struct sp_fragment_shader *base,
+                machine->Consts,
+                  (const float (*)[4])shader->immediates,
+                machine->InterpCoefs
+-               //      , &machine->QuadPos
++               /*, &machine->QuadPos*/
+       );
+    return ~(machine->Temps[TGSI_EXEC_TEMP_KILMASK_I].xyzw[TGSI_EXEC_TEMP_KILMASK_C].u[0]);
+diff --git a/src/gallium/drivers/softpipe/sp_state_surface.c b/src/gallium/drivers/softpipe/sp_state_surface.c
+index 7c06d86..181bff8 100644
+--- a/src/gallium/drivers/softpipe/sp_state_surface.c
++++ b/src/gallium/drivers/softpipe/sp_state_surface.c
+@@ -56,7 +56,7 @@ softpipe_set_framebuffer_state(struct pipe_context *pipe,
+          sp_flush_tile_cache(sp, sp->cbuf_cache[i]);
+          /* assign new */
+-         sp->framebuffer.cbufs[i] = fb->cbufs[i];
++         pipe_surface_reference(&sp->framebuffer.cbufs[i], fb->cbufs[i]);
+          /* update cache */
+          sp_tile_cache_set_surface(sp->cbuf_cache[i], fb->cbufs[i]);
+@@ -71,7 +71,7 @@ softpipe_set_framebuffer_state(struct pipe_context *pipe,
+       sp_flush_tile_cache(sp, sp->zsbuf_cache);
+       /* assign new */
+-      sp->framebuffer.zsbuf = fb->zsbuf;
++      pipe_surface_reference(&sp->framebuffer.zsbuf, fb->zsbuf);
+       /* update cache */
+       sp_tile_cache_set_surface(sp->zsbuf_cache, fb->zsbuf);
+diff --git a/src/gallium/drivers/softpipe/sp_tile_cache.c b/src/gallium/drivers/softpipe/sp_tile_cache.c
+index 461cbb9..5f7864e 100644
+--- a/src/gallium/drivers/softpipe/sp_tile_cache.c
++++ b/src/gallium/drivers/softpipe/sp_tile_cache.c
+@@ -130,6 +130,11 @@ sp_create_tile_cache( struct pipe_screen *screen )
+          tc->entries[pos].x =
+          tc->entries[pos].y = -1;
+       }
++
++#if TILE_CLEAR_OPTIMIZATION
++      /* set flags to indicate all the tiles are cleared */
++      memset(tc->clear_flags, 255, sizeof(tc->clear_flags));
++#endif
+    }
+    return tc;
+ }
+diff --git a/src/gallium/state_trackers/glx/xlib/glx_api.c b/src/gallium/state_trackers/glx/xlib/glx_api.c
+index d1a98f8..f2881b9 100644
+--- a/src/gallium/state_trackers/glx/xlib/glx_api.c
++++ b/src/gallium/state_trackers/glx/xlib/glx_api.c
+@@ -850,10 +850,10 @@ choose_visual( Display *dpy, int screen, const int *list, GLboolean fbConfig )
+             if (!fbConfig)
+                return NULL;
+             parselist++;
+-            if (*parselist == GLX_RGBA_BIT) {
++            if (*parselist & GLX_RGBA_BIT) {
+                rgb_flag = GL_TRUE;
+             }
+-            else if (*parselist == GLX_COLOR_INDEX_BIT) {
++            else if (*parselist & GLX_COLOR_INDEX_BIT) {
+                rgb_flag = GL_FALSE;
+             }
+             else if (*parselist == 0) {
+@@ -1309,13 +1309,17 @@ glXCopyContext( Display *dpy, GLXContext src, GLXContext dst,
+ Bool
+-glXQueryExtension( Display *dpy, int *errorb, int *event )
++glXQueryExtension( Display *dpy, int *errorBase, int *eventBase )
+ {
++   int op, ev, err;
+    /* Mesa's GLX isn't really an X extension but we try to act like one. */
+-   (void) dpy;
+-   (void) errorb;
+-   (void) event;
+-   return True;
++   if (!XQueryExtension(dpy, GLX_EXTENSION_NAME, &op, &ev, &err))
++      ev = err = 0;
++   if (errorBase)
++      *errorBase = err;
++   if (eventBase)
++      *eventBase = ev;
++   return True; /* we're faking GLX so always return success */
+ }
+@@ -1990,32 +1994,42 @@ glXCreatePbuffer( Display *dpy, GLXFBConfig config,
+             break;
+          case GLX_PRESERVED_CONTENTS:
+             attrib++;
+-            preserveContents = *attrib; /* ignored */
++            preserveContents = *attrib;
+             break;
+          case GLX_LARGEST_PBUFFER:
+             attrib++;
+-            useLargest = *attrib; /* ignored */
++            useLargest = *attrib;
+             break;
+          default:
+             return 0;
+       }
+    }
+-   /* not used at this time */
+-   (void) useLargest;
+-   (void) preserveContents;
+-
+    if (width == 0 || height == 0)
+       return 0;
++   if (width > MAX_WIDTH || height > MAX_HEIGHT) {
++      /* If allocation would have failed and GLX_LARGEST_PBUFFER is set,
++       * allocate the largest possible buffer.
++       */
++      if (useLargest) {
++         width = MAX_WIDTH;
++         height = MAX_HEIGHT;
++      }
++   }
++
+    xmbuf = XMesaCreatePBuffer( xmvis, 0, width, height);
+    /* A GLXPbuffer handle must be an X Drawable because that's what
+     * glXMakeCurrent takes.
+     */
+-   if (xmbuf)
++   if (xmbuf) {
++      xmbuf->largestPbuffer = useLargest;
++      xmbuf->preservedContents = preserveContents;
+       return (GLXPbuffer) xmbuf->drawable;
+-   else
++   }
++   else {
+       return 0;
++   }
+ }
+@@ -2033,22 +2047,26 @@ void
+ glXQueryDrawable( Display *dpy, GLXDrawable draw, int attribute,
+                        unsigned int *value )
+ {
++   GLuint width, height;
+    XMesaBuffer xmbuf = XMesaFindBuffer(dpy, draw);
+    if (!xmbuf)
+       return;
++   /* make sure buffer's dimensions are up to date */
++   xmesa_get_window_size(dpy, xmbuf, &width, &height);
++
+    switch (attribute) {
+       case GLX_WIDTH:
+-         *value = xmesa_buffer_width(xmbuf);
++         *value = width;
+          break;
+       case GLX_HEIGHT:
+-         *value = xmesa_buffer_width(xmbuf);
++         *value = height;
+          break;
+       case GLX_PRESERVED_CONTENTS:
+-         *value = True;
++         *value = xmbuf->preservedContents;
+          break;
+       case GLX_LARGEST_PBUFFER:
+-         *value = xmesa_buffer_width(xmbuf) * xmesa_buffer_height(xmbuf);
++         *value = xmbuf->largestPbuffer;
+          break;
+       case GLX_FBCONFIG_ID:
+          *value = xmbuf->xm_visual->visinfo->visualid;
+@@ -2120,9 +2138,9 @@ glXQueryContext( Display *dpy, GLXContext ctx, int attribute, int *value )
+       break;
+    case GLX_RENDER_TYPE:
+       if (xmctx->xm_visual->mesa_visual.rgbMode)
+-         *value = GLX_RGBA_BIT;
++         *value = GLX_RGBA_TYPE;
+       else
+-         *value = GLX_COLOR_INDEX_BIT;
++         *value = GLX_COLOR_INDEX_TYPE;
+       break;
+    case GLX_SCREEN:
+       *value = 0;
+diff --git a/src/gallium/state_trackers/glx/xlib/xm_api.c b/src/gallium/state_trackers/glx/xlib/xm_api.c
+index 957002d..c76dfb3 100644
+--- a/src/gallium/state_trackers/glx/xlib/xm_api.c
++++ b/src/gallium/state_trackers/glx/xlib/xm_api.c
+@@ -228,7 +228,7 @@ get_drawable_size( Display *dpy, Drawable d, uint *width, uint *height )
+  * \param width  returns width in pixels
+  * \param height  returns height in pixels
+  */
+-static void
++void
+ xmesa_get_window_size(Display *dpy, XMesaBuffer b,
+                       GLuint *width, GLuint *height)
+ {
+diff --git a/src/gallium/state_trackers/glx/xlib/xm_api.h b/src/gallium/state_trackers/glx/xlib/xm_api.h
+index ce97a3e..d24971c 100644
+--- a/src/gallium/state_trackers/glx/xlib/xm_api.h
++++ b/src/gallium/state_trackers/glx/xlib/xm_api.h
+@@ -323,6 +323,9 @@ struct xmesa_buffer {
+    Colormap cmap;             /* the X colormap */
+    BufferType type;             /* window, pixmap, pbuffer or glxwindow */
++   GLboolean largestPbuffer;    /**< for pbuffers */
++   GLboolean preservedContents; /**< for pbuffers */
++
+    XImage *tempImage;
+    unsigned long selectedEvents;/* for pbuffers only */
+@@ -370,6 +373,10 @@ extern XMesaBuffer
+ xmesa_find_buffer(Display *dpy, Colormap cmap, XMesaBuffer notThis);
+ extern void
++xmesa_get_window_size(Display *dpy, XMesaBuffer b,
++                      GLuint *width, GLuint *height);
++
++extern void
+ xmesa_check_and_update_buffer_size(XMesaContext xmctx, XMesaBuffer drawBuffer);
+ extern void
+diff --git a/src/glx/x11/glxcmds.c b/src/glx/x11/glxcmds.c
+index ea55cc4..cd4aede 100644
+--- a/src/glx/x11/glxcmds.c
++++ b/src/glx/x11/glxcmds.c
+@@ -398,6 +398,10 @@ CreateContext(Display * dpy, XVisualInfo * vis,
+                _XError(dpy, &error);
+                return None;
+             }
++            if (renderType == 0) {
++               /* Initialize renderType now */
++               renderType = mode->rgbMode ? GLX_RGBA_TYPE : GLX_COLOR_INDEX_TYPE;
++            }
+          }
+          else {
+             mode = fbconfig;
+@@ -484,6 +488,8 @@ CreateContext(Display * dpy, XVisualInfo * vis,
+       gc->imported = GL_TRUE;
+    }
++   gc->renderType = renderType;
++
+    return gc;
+ }
+@@ -1575,7 +1581,7 @@ GLX_ALIAS(Display *, glXGetCurrentDisplayEXT, (void), (),
+  * This function dynamically determines whether to use the EXT_import_context
+  * version of the protocol or the GLX 1.3 version of the protocol.
+  */
+-     static int __glXQueryContextInfo(Display * dpy, GLXContext ctx)
++static int __glXQueryContextInfo(Display * dpy, GLXContext ctx)
+ {
+    __GLXdisplayPrivate *priv = __glXInitialize(dpy);
+    xGLXQueryContextReply reply;
+@@ -1713,7 +1719,7 @@ GLX_ALIAS(int, glXQueryContextInfoEXT,
+           (Display * dpy, GLXContext ctx, int attribute, int *value),
+           (dpy, ctx, attribute, value), glXQueryContext)
+-     PUBLIC GLXContextID glXGetContextIDEXT(const GLXContext ctx)
++PUBLIC GLXContextID glXGetContextIDEXT(const GLXContext ctx)
+ {
+    return ctx->xid;
+ }
+@@ -2159,18 +2165,19 @@ GLX_ALIAS(int, glXGetFBConfigAttribSGIX,
+           (Display * dpy, GLXFBConfigSGIX config, int attribute, int *value),
+           (dpy, config, attribute, value), glXGetFBConfigAttrib)
+-     PUBLIC GLX_ALIAS(GLXFBConfigSGIX *, glXChooseFBConfigSGIX,
+-                      (Display * dpy, int screen, int *attrib_list,
+-                       int *nelements), (dpy, screen, attrib_list, nelements),
+-                      glXChooseFBConfig)
++PUBLIC GLX_ALIAS(GLXFBConfigSGIX *, glXChooseFBConfigSGIX,
++                 (Display * dpy, int screen, int *attrib_list,
++                  int *nelements), (dpy, screen, attrib_list, nelements),
++                 glXChooseFBConfig)
+-     PUBLIC GLX_ALIAS(XVisualInfo *, glXGetVisualFromFBConfigSGIX,
+-                      (Display * dpy, GLXFBConfigSGIX config),
+-                      (dpy, config), glXGetVisualFromFBConfig)
++PUBLIC GLX_ALIAS(XVisualInfo *, glXGetVisualFromFBConfigSGIX,
++                 (Display * dpy, GLXFBConfigSGIX config),
++                 (dpy, config), glXGetVisualFromFBConfig)
+-     PUBLIC GLXPixmap glXCreateGLXPixmapWithConfigSGIX(Display * dpy,
+-                                                       GLXFBConfigSGIX config,
+-                                                       Pixmap pixmap)
++PUBLIC GLXPixmap
++glXCreateGLXPixmapWithConfigSGIX(Display * dpy,
++                                 GLXFBConfigSGIX config,
++                                 Pixmap pixmap)
+ {
+    xGLXVendorPrivateWithReplyReq *vpreq;
+    xGLXCreateGLXPixmapWithConfigSGIXReq *req;
+diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c
+index 2741a41..b6c6ef7 100644
+--- a/src/mesa/drivers/common/meta.c
++++ b/src/mesa/drivers/common/meta.c
+@@ -238,34 +238,10 @@ _mesa_meta_init(GLcontext *ctx)
+ void
+ _mesa_meta_free(GLcontext *ctx)
+ {
+-   struct gl_meta_state *meta = ctx->Meta;
+-
+-   if (_mesa_get_current_context()) {
+-      /* if there's no current context, these textures, buffers, etc should
+-       * still get freed by _mesa_free_context_data().
+-       */
+-
+-      _mesa_DeleteTextures(1, &meta->TempTex.TexObj);
+-
+-      /* glBlitFramebuffer */
+-      _mesa_DeleteBuffersARB(1, & meta->Blit.VBO);
+-      _mesa_DeleteVertexArraysAPPLE(1, &meta->Blit.ArrayObj);
+-      _mesa_DeletePrograms(1, &meta->Blit.DepthFP);
+-
+-      /* glClear */
+-      _mesa_DeleteBuffersARB(1, & meta->Clear.VBO);
+-      _mesa_DeleteVertexArraysAPPLE(1, &meta->Clear.ArrayObj);
+-
+-      /* glCopyPixels */
+-      _mesa_DeleteBuffersARB(1, & meta->CopyPix.VBO);
+-      _mesa_DeleteVertexArraysAPPLE(1, &meta->CopyPix.ArrayObj);
+-
+-      /* glDrawPixels */
+-      _mesa_DeleteVertexArraysAPPLE(1, &meta->DrawPix.ArrayObj);
+-      _mesa_DeletePrograms(1, &meta->DrawPix.DepthFP);
+-      _mesa_DeletePrograms(1, &meta->DrawPix.StencilFP);
+-   }
+-
++   /* Note: Any textures, VBOs, etc, that we allocate should get
++    * freed by the normal context destruction code.  But this would be
++    * the place to free other meta data someday.
++    */
+    _mesa_free(ctx->Meta);
+    ctx->Meta = NULL;
+ }
+diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri/i965/brw_state.h
+index 5335eac..d639656 100644
+--- a/src/mesa/drivers/dri/i965/brw_state.h
++++ b/src/mesa/drivers/dri/i965/brw_state.h
+@@ -151,6 +151,7 @@ void brw_state_cache_check_size( struct brw_context *brw );
+ void brw_init_caches( struct brw_context *brw );
+ void brw_destroy_caches( struct brw_context *brw );
++void brw_state_cache_bo_delete(struct brw_cache *cache, dri_bo *bo);
+ /***********************************************************************
+  * brw_state_batch.c
+diff --git a/src/mesa/drivers/dri/i965/brw_state_cache.c b/src/mesa/drivers/dri/i965/brw_state_cache.c
+index e40d7a0..f8e46aa 100644
+--- a/src/mesa/drivers/dri/i965/brw_state_cache.c
++++ b/src/mesa/drivers/dri/i965/brw_state_cache.c
+@@ -517,6 +517,55 @@ brw_clear_cache(struct brw_context *brw, struct brw_cache *cache)
+    brw->state.dirty.cache |= ~0;
+ }
++/* Clear all entries from the cache that point to the given bo.
++ *
++ * This lets us release memory for reuse earlier for known-dead buffers,
++ * at the cost of walking the entire hash table.
++ */
++void
++brw_state_cache_bo_delete(struct brw_cache *cache, dri_bo *bo)
++{
++   struct brw_cache_item **prev;
++   GLuint i;
++
++   if (INTEL_DEBUG & DEBUG_STATE)
++      _mesa_printf("%s\n", __FUNCTION__);
++
++   for (i = 0; i < cache->size; i++) {
++      for (prev = &cache->items[i]; *prev;) {
++       struct brw_cache_item *c = *prev;
++       int j;
++
++       for (j = 0; j < c->nr_reloc_bufs; j++) {
++          if (c->reloc_bufs[j] == bo)
++             break;
++       }
++
++       if (j != c->nr_reloc_bufs) {
++
++          *prev = c->next;
++
++          for (j = 0; j < c->nr_reloc_bufs; j++)
++             dri_bo_unreference(c->reloc_bufs[j]);
++          dri_bo_unreference(c->bo);
++          free((void *)c->key);
++          free(c);
++          cache->n_items--;
++
++          /* Delete up the tree.  Notably we're trying to get from
++           * a request to delete the surface, to deleting the surface state
++           * object, to deleting the binding table.  We're slack and restart
++           * the deletion process when we do this because the other delete
++           * may kill our *prev.
++           */
++          brw_state_cache_bo_delete(cache, c->bo);
++          prev = &cache->items[i];
++       } else {
++          prev = &(*prev)->next;
++       }
++      }
++   }
++}
+ void
+ brw_state_cache_check_size(struct brw_context *brw)
+diff --git a/src/mesa/drivers/dri/intel/intel_context.c b/src/mesa/drivers/dri/intel/intel_context.c
+index fce42e9..c49f06e 100644
+--- a/src/mesa/drivers/dri/intel/intel_context.c
++++ b/src/mesa/drivers/dri/intel/intel_context.c
+@@ -993,41 +993,35 @@ intelMakeCurrent(__DRIcontextPrivate * driContextPriv,
+       _mesa_make_current(&intel->ctx, &intel_fb->Base, readFb);
+-      /* The drawbuffer won't always be updated by _mesa_make_current: 
+-       */
+-      if (intel->ctx.DrawBuffer == &intel_fb->Base) {
+-
+-       if (intel->driReadDrawable != driReadPriv)
+-          intel->driReadDrawable = driReadPriv;
+-
+-       if (intel->driDrawable != driDrawPriv) {
+-          if (driDrawPriv->swap_interval == (unsigned)-1) {
+-             int i;
+-
+-             driDrawPriv->vblFlags = (intel->intelScreen->irq_active != 0)
+-                ? driGetDefaultVBlankFlags(&intel->optionCache)
+-               : VBLANK_FLAG_NO_IRQ;
+-
+-             /* Prevent error printf if one crtc is disabled, this will
+-              * be properly calculated in intelWindowMoved() next.
+-              */
+-              driDrawPriv->vblFlags = intelFixupVblank(intel, driDrawPriv);
+-
+-             (*psp->systemTime->getUST) (&intel_fb->swap_ust);
+-             driDrawableInitVBlank(driDrawPriv);
+-             intel_fb->vbl_waited = driDrawPriv->vblSeq;
+-
+-             for (i = 0; i < 2; i++) {
+-                if (intel_fb->color_rb[i])
+-                   intel_fb->color_rb[i]->vbl_pending = driDrawPriv->vblSeq;
+-             }
+-          }
+-          intel->driDrawable = driDrawPriv;
+-          intelWindowMoved(intel);
+-       }
++      intel->driReadDrawable = driReadPriv;
++
++      if (intel->driDrawable != driDrawPriv) {
++         if (driDrawPriv->swap_interval == (unsigned)-1) {
++            int i;
++
++            driDrawPriv->vblFlags = (intel->intelScreen->irq_active != 0)
++               ? driGetDefaultVBlankFlags(&intel->optionCache)
++               : VBLANK_FLAG_NO_IRQ;
+-       intel_draw_buffer(&intel->ctx, &intel_fb->Base);
++            /* Prevent error printf if one crtc is disabled, this will
++             * be properly calculated in intelWindowMoved() next.
++             */
++            driDrawPriv->vblFlags = intelFixupVblank(intel, driDrawPriv);
++
++            (*psp->systemTime->getUST) (&intel_fb->swap_ust);
++            driDrawableInitVBlank(driDrawPriv);
++            intel_fb->vbl_waited = driDrawPriv->vblSeq;
++
++            for (i = 0; i < 2; i++) {
++               if (intel_fb->color_rb[i])
++                  intel_fb->color_rb[i]->vbl_pending = driDrawPriv->vblSeq;
++            }
++         }
++         intel->driDrawable = driDrawPriv;
++         intelWindowMoved(intel);
+       }
++
++      intel_draw_buffer(&intel->ctx, &intel_fb->Base);
+    }
+    else {
+       _mesa_make_current(NULL, NULL, NULL);
+diff --git a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
+index c985da5..4f5101a 100644
+--- a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
++++ b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
+@@ -29,6 +29,9 @@
+ #include "intel_mipmap_tree.h"
+ #include "intel_regions.h"
+ #include "intel_chipset.h"
++#ifndef I915
++#include "brw_state.h"
++#endif
+ #include "main/enums.h"
+ #define FILE_DEBUG_FLAG DEBUG_MIPTREE
+@@ -269,6 +272,19 @@ intel_miptree_release(struct intel_context *intel,
+       DBG("%s deleting %p\n", __FUNCTION__, *mt);
++#ifndef I915
++      /* Free up cached binding tables holding a reference on our buffer, to
++       * avoid excessive memory consumption.
++       *
++       * This isn't as aggressive as we could be, as we'd like to do
++       * it from any time we free the last ref on a region.  But intel_region.c
++       * is context-agnostic.  Perhaps our constant state cache should be, as
++       * well.
++       */
++      brw_state_cache_bo_delete(&brw_context(&intel->ctx)->surface_cache,
++                              (*mt)->region->buffer);
++#endif
++
+       intel_region_release(&((*mt)->region));
+       for (i = 0; i < MAX_TEXTURE_LEVELS; i++)
+diff --git a/src/mesa/drivers/dri/intel/intel_pixel_read.c b/src/mesa/drivers/dri/intel/intel_pixel_read.c
+index 8713463..e036736 100644
+--- a/src/mesa/drivers/dri/intel/intel_pixel_read.c
++++ b/src/mesa/drivers/dri/intel/intel_pixel_read.c
+@@ -236,14 +236,14 @@ do_blit_readpixels(GLcontext * ctx,
+    intelFlush(&intel->ctx);
+    LOCK_HARDWARE(intel);
+-   if (intel->driDrawable->numClipRects) {
++   if (intel->driReadDrawable->numClipRects) {
+       GLboolean all = (width * height * src->cpp == dst->Base.Size &&
+                        x == 0 && dst_offset == 0);
+       dri_bo *dst_buffer = intel_bufferobj_buffer(intel, dst,
+                                                 all ? INTEL_WRITE_FULL :
+                                                 INTEL_WRITE_PART);
+-      __DRIdrawablePrivate *dPriv = intel->driDrawable;
++      __DRIdrawablePrivate *dPriv = intel->driReadDrawable;
+       int nbox = dPriv->numClipRects;
+       drm_clip_rect_t *box = dPriv->pClipRects;
+       drm_clip_rect_t rect;
+diff --git a/src/mesa/drivers/dri/intel/intel_tex_copy.c b/src/mesa/drivers/dri/intel/intel_tex_copy.c
+index 74f7f58..b241c11 100644
+--- a/src/mesa/drivers/dri/intel/intel_tex_copy.c
++++ b/src/mesa/drivers/dri/intel/intel_tex_copy.c
+@@ -135,7 +135,7 @@ do_copy_texsubimage(struct intel_context *intel,
+       if (ctx->ReadBuffer->Name == 0) {
+        /* reading from a window, adjust x, y */
+-       __DRIdrawablePrivate *dPriv = intel->driDrawable;
++       const __DRIdrawablePrivate *dPriv = intel->driReadDrawable;
+        y = dPriv->y + (dPriv->h - (y + height));
+        x += dPriv->x;
+diff --git a/src/mesa/drivers/dri/r200/r200_state.c b/src/mesa/drivers/dri/r200/r200_state.c
+index 76852e3..d28e96d 100644
+--- a/src/mesa/drivers/dri/r200/r200_state.c
++++ b/src/mesa/drivers/dri/r200/r200_state.c
+@@ -1578,13 +1578,6 @@ static void r200ClearStencil( GLcontext *ctx, GLint s )
+  * Window position and viewport transformation
+  */
+-/*
+- * To correctly position primitives:
+- */
+-#define SUBPIXEL_X 0.125
+-#define SUBPIXEL_Y 0.125
+-
+-
+ /**
+  * Called when window size or position changes or viewport or depth range
+  * state is changed.  We update the hardware viewport state here.
+@@ -1609,9 +1602,9 @@ void r200UpdateWindow( GLcontext *ctx )
+    }
+    float_ui32_type sx = { v[MAT_SX] };
+-   float_ui32_type tx = { v[MAT_TX] + xoffset + SUBPIXEL_X };
++   float_ui32_type tx = { v[MAT_TX] + xoffset };
+    float_ui32_type sy = { v[MAT_SY] * y_scale };
+-   float_ui32_type ty = { (v[MAT_TY] * y_scale) + y_bias + SUBPIXEL_Y };
++   float_ui32_type ty = { (v[MAT_TY] * y_scale) + y_bias };
+    float_ui32_type sz = { v[MAT_SZ] * depthScale };
+    float_ui32_type tz = { v[MAT_TZ] * depthScale };
+@@ -1680,8 +1673,8 @@ void r200UpdateViewportOffset( GLcontext *ctx )
+    float_ui32_type tx;
+    float_ui32_type ty;
+-   tx.f = v[MAT_TX] + xoffset + SUBPIXEL_X;
+-   ty.f = (- v[MAT_TY]) + yoffset + SUBPIXEL_Y;
++   tx.f = v[MAT_TX] + xoffset;
++   ty.f = (- v[MAT_TY]) + yoffset;
+    if ( rmesa->hw.vpt.cmd[VPT_SE_VPORT_XOFFSET] != tx.ui32 ||
+       rmesa->hw.vpt.cmd[VPT_SE_VPORT_YOFFSET] != ty.ui32 )
+diff --git a/src/mesa/drivers/dri/r300/r300_context.c b/src/mesa/drivers/dri/r300/r300_context.c
+index 2ea1b82..9df3897 100644
+--- a/src/mesa/drivers/dri/r300/r300_context.c
++++ b/src/mesa/drivers/dri/r300/r300_context.c
+@@ -374,11 +374,21 @@ static void r300InitConstValues(GLcontext *ctx, radeonScreenPtr screen)
+       if (screen->chip_family >= CHIP_FAMILY_RV515) {
+               ctx->Const.FragmentProgram.MaxNativeTemps = R500_PFS_NUM_TEMP_REGS;
+               ctx->Const.FragmentProgram.MaxNativeAttribs = 11;       /* copy i915... */
+-              ctx->Const.FragmentProgram.MaxNativeParameters = R500_PFS_NUM_CONST_REGS;
+-              ctx->Const.FragmentProgram.MaxNativeAluInstructions = R500_PFS_MAX_INST;
+-              ctx->Const.FragmentProgram.MaxNativeTexInstructions = R500_PFS_MAX_INST;
+-              ctx->Const.FragmentProgram.MaxNativeInstructions = R500_PFS_MAX_INST;
+-              ctx->Const.FragmentProgram.MaxNativeTexIndirections = R500_PFS_MAX_INST;
++
++              /* The hardware limits are higher than this,
++               * but the non-KMS DRM interface artificially limits us
++               * to this many instructions.
++               *
++               * We could of course work around it in the KMS path,
++               * but it would be a mess, so it seems wiser
++               * to leave it as is. Going forward, the Gallium driver
++               * will not be subject to these limitations.
++               */
++              ctx->Const.FragmentProgram.MaxNativeParameters = 255;
++              ctx->Const.FragmentProgram.MaxNativeAluInstructions = 255;
++              ctx->Const.FragmentProgram.MaxNativeTexInstructions = 255;
++              ctx->Const.FragmentProgram.MaxNativeInstructions = 255;
++              ctx->Const.FragmentProgram.MaxNativeTexIndirections = 255;
+               ctx->Const.FragmentProgram.MaxNativeAddressRegs = 0;
+       } else {
+               ctx->Const.FragmentProgram.MaxNativeTemps = R300_PFS_NUM_TEMP_REGS;
+diff --git a/src/mesa/drivers/dri/r300/r300_fragprog_common.c b/src/mesa/drivers/dri/r300/r300_fragprog_common.c
+index 0bdc90b..70c9252 100644
+--- a/src/mesa/drivers/dri/r300/r300_fragprog_common.c
++++ b/src/mesa/drivers/dri/r300/r300_fragprog_common.c
+@@ -239,6 +239,19 @@ static void translate_fragment_program(GLcontext *ctx, struct r300_fragment_prog
+       rewriteFog(&compiler, fp);
+       r3xx_compile_fragment_program(&compiler);
++
++      if (compiler.is_r500) {
++              /* We need to support the non-KMS DRM interface, which
++               * artificially limits the number of instructions and
++               * constants which are available to us.
++               *
++               * See also the comment in r300_context.c where we
++               * set the MAX_NATIVE_xxx values.
++               */
++              if (fp->code.code.r500.inst_end >= 255 || fp->code.constants.Count > 255)
++                      rc_error(&compiler.Base, "Program is too big (upgrade to r300g to avoid this limitation).\n");
++      }
++
+       fp->error = compiler.Base.Error;
+       fp->InputsRead = compiler.Base.Program.InputsRead;
+diff --git a/src/mesa/drivers/x11/fakeglx.c b/src/mesa/drivers/x11/fakeglx.c
+index 34e0b8b..5c0084f 100644
+--- a/src/mesa/drivers/x11/fakeglx.c
++++ b/src/mesa/drivers/x11/fakeglx.c
+@@ -1197,10 +1197,10 @@ choose_visual( Display *dpy, int screen, const int *list, GLboolean fbConfig )
+             if (!fbConfig)
+                return NULL;
+             parselist++;
+-            if (*parselist == GLX_RGBA_BIT) {
++            if (*parselist & GLX_RGBA_BIT) {
+                rgb_flag = GL_TRUE;
+             }
+-            else if (*parselist == GLX_COLOR_INDEX_BIT) {
++            else if (*parselist & GLX_COLOR_INDEX_BIT) {
+                rgb_flag = GL_FALSE;
+             }
+             else if (*parselist == 0) {
+@@ -1637,13 +1637,17 @@ Fake_glXCopyContext( Display *dpy, GLXContext src, GLXContext dst,
+ static Bool
+-Fake_glXQueryExtension( Display *dpy, int *errorb, int *event )
++Fake_glXQueryExtension( Display *dpy, int *errorBase, int *eventBase )
+ {
++   int op, ev, err;
+    /* Mesa's GLX isn't really an X extension but we try to act like one. */
+-   (void) dpy;
+-   (void) errorb;
+-   (void) event;
+-   return True;
++   if (!XQueryExtension(dpy, GLX_EXTENSION_NAME, &op, &ev, &err))
++      ev = err = 0;
++   if (errorBase)
++      *errorBase = err;
++   if (eventBase)
++      *eventBase = ev;
++   return True; /* we're faking GLX so always return success */
+ }
+@@ -2349,32 +2353,42 @@ Fake_glXCreatePbuffer( Display *dpy, GLXFBConfig config,
+             break;
+          case GLX_PRESERVED_CONTENTS:
+             attrib++;
+-            preserveContents = *attrib; /* ignored */
++            preserveContents = *attrib;
+             break;
+          case GLX_LARGEST_PBUFFER:
+             attrib++;
+-            useLargest = *attrib; /* ignored */
++            useLargest = *attrib;
+             break;
+          default:
+             return 0;
+       }
+    }
+-   /* not used at this time */
+-   (void) useLargest;
+-   (void) preserveContents;
+-
+    if (width == 0 || height == 0)
+       return 0;
++   if (width > MAX_WIDTH || height > MAX_HEIGHT) {
++      /* If allocation would have failed and GLX_LARGEST_PBUFFER is set,
++       * allocate the largest possible buffer.
++       */
++      if (useLargest) {
++         width = MAX_WIDTH;
++         height = MAX_HEIGHT;
++      }
++   }
++
+    xmbuf = XMesaCreatePBuffer( xmvis, 0, width, height);
+    /* A GLXPbuffer handle must be an X Drawable because that's what
+     * glXMakeCurrent takes.
+     */
+-   if (xmbuf)
++   if (xmbuf) {
++      xmbuf->largestPbuffer = useLargest;
++      xmbuf->preservedContents = preserveContents;
+       return (GLXPbuffer) xmbuf->frontxrb->pixmap;
+-   else
++   }
++   else {
+       return 0;
++   }
+ }
+@@ -2396,6 +2410,9 @@ Fake_glXQueryDrawable( Display *dpy, GLXDrawable draw, int attribute,
+    if (!xmbuf)
+       return;
++   /* make sure buffer's dimensions are up to date */
++   xmesa_check_and_update_buffer_size(NULL, xmbuf);
++
+    switch (attribute) {
+       case GLX_WIDTH:
+          *value = xmbuf->mesa_buffer.Width;
+@@ -2404,10 +2421,10 @@ Fake_glXQueryDrawable( Display *dpy, GLXDrawable draw, int attribute,
+          *value = xmbuf->mesa_buffer.Height;
+          break;
+       case GLX_PRESERVED_CONTENTS:
+-         *value = True;
++         *value = xmbuf->preservedContents;
+          break;
+       case GLX_LARGEST_PBUFFER:
+-         *value = xmbuf->mesa_buffer.Width * xmbuf->mesa_buffer.Height;
++         *value = xmbuf->largestPbuffer;
+          break;
+       case GLX_FBCONFIG_ID:
+          *value = xmbuf->xm_visual->visinfo->visualid;
+@@ -2477,9 +2494,9 @@ Fake_glXQueryContext( Display *dpy, GLXContext ctx, int attribute, int *value )
+       break;
+    case GLX_RENDER_TYPE:
+       if (xmctx->xm_visual->mesa_visual.rgbMode)
+-         *value = GLX_RGBA_BIT;
++         *value = GLX_RGBA_TYPE;
+       else
+-         *value = GLX_COLOR_INDEX_BIT;
++         *value = GLX_COLOR_INDEX_TYPE;
+       break;
+    case GLX_SCREEN:
+       *value = 0;
+@@ -2764,10 +2781,10 @@ Fake_glXQueryGLXPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuf, int attribute, un
+    switch (attribute) {
+       case GLX_PRESERVED_CONTENTS_SGIX:
+-         *value = True;
++         *value = xmbuf->preservedContents;
+          break;
+       case GLX_LARGEST_PBUFFER_SGIX:
+-         *value = xmbuf->mesa_buffer.Width * xmbuf->mesa_buffer.Height;
++         *value = xmbuf->largestPbuffer;
+          break;
+       case GLX_WIDTH_SGIX:
+          *value = xmbuf->mesa_buffer.Width;
+diff --git a/src/mesa/drivers/x11/xmesaP.h b/src/mesa/drivers/x11/xmesaP.h
+index 25db558..3ffd766 100644
+--- a/src/mesa/drivers/x11/xmesaP.h
++++ b/src/mesa/drivers/x11/xmesaP.h
+@@ -212,6 +212,9 @@ struct xmesa_buffer {
+    XMesaDisplay *display;
+    BufferType type;             /* window, pixmap, pbuffer or glxwindow */
++   GLboolean largestPbuffer;    /**< for pbuffers */
++   GLboolean preservedContents; /**< for pbuffers */
++
+    struct xmesa_renderbuffer *frontxrb; /* front color renderbuffer */
+    struct xmesa_renderbuffer *backxrb;  /* back color renderbuffer */
+diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
+index f6d4ac4..ac6540f 100644
+--- a/src/mesa/main/context.c
++++ b/src/mesa/main/context.c
+@@ -898,6 +898,7 @@ _mesa_initialize_context(GLcontext *ctx,
+       _mesa_free_shared_state(ctx, ctx->Shared);
+       if (ctx->Exec)
+          _mesa_free(ctx->Exec);
++      return GL_FALSE;
+    }
+ #if FEATURE_dispatch
+    _mesa_init_exec_table(ctx->Exec);
+diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c
+index b53c173..41a5b61 100644
+--- a/src/mesa/main/dlist.c
++++ b/src/mesa/main/dlist.c
+@@ -1956,6 +1956,9 @@ save_Fogiv(GLenum pname, const GLint *params)
+    case GL_FOG_END:
+    case GL_FOG_INDEX:
+       p[0] = (GLfloat) *params;
++      p[1] = 0.0f;
++      p[2] = 0.0f;
++      p[3] = 0.0f;
+       break;
+    case GL_FOG_COLOR:
+       p[0] = INT_TO_FLOAT(params[0]);
+@@ -2244,6 +2247,9 @@ save_LightModeliv(GLenum pname, const GLint *params)
+    case GL_LIGHT_MODEL_TWO_SIDE:
+    case GL_LIGHT_MODEL_COLOR_CONTROL:
+       fparam[0] = (GLfloat) params[0];
++      fparam[1] = 0.0F;
++      fparam[2] = 0.0F;
++      fparam[3] = 0.0F;
+       break;
+    default:
+       /* Error will be caught later in gl_LightModelfv */
+diff --git a/src/mesa/main/image.c b/src/mesa/main/image.c
+index baecbab..139e56a 100644
+--- a/src/mesa/main/image.c
++++ b/src/mesa/main/image.c
+@@ -5511,7 +5511,7 @@ _mesa_clip_drawpixels(const GLcontext *ctx,
+    }
+    if (*height <= 0)
+-      return GL_TRUE;
++      return GL_FALSE;
+    return GL_TRUE;
+ }
+@@ -5564,7 +5564,7 @@ _mesa_clip_readpixels(const GLcontext *ctx,
+       *height -= (*srcY + *height - buffer->Height);
+    if (*height <= 0)
+-      return GL_TRUE;
++      return GL_FALSE;
+    return GL_TRUE;
+ }
+diff --git a/src/mesa/main/mipmap.c b/src/mesa/main/mipmap.c
+index 3dca09d..c3928fa 100644
+--- a/src/mesa/main/mipmap.c
++++ b/src/mesa/main/mipmap.c
+@@ -1501,8 +1501,7 @@ _mesa_generate_mipmap(GLcontext *ctx, GLenum target,
+    GLuint comps;
+    ASSERT(texObj);
+-   /* XXX choose cube map face here??? */
+-   srcImage = texObj->Image[0][texObj->BaseLevel];
++   srcImage = _mesa_select_tex_image(ctx, texObj, target, texObj->BaseLevel);
+    ASSERT(srcImage);
+    maxLevels = _mesa_max_texture_levels(ctx, texObj->Target);
+@@ -1510,7 +1509,9 @@ _mesa_generate_mipmap(GLcontext *ctx, GLenum target,
+    /* Find convertFormat - the format that do_row() will process */
+    if (srcImage->IsCompressed) {
+-      /* setup for compressed textures */
++      /* setup for compressed textures - need to allocate temporary
++       * image buffers to hold uncompressed images.
++       */
+       GLuint row;
+       GLint  components, size;
+       GLchan *dst;
+@@ -1587,11 +1588,7 @@ _mesa_generate_mipmap(GLcontext *ctx, GLenum target,
+                                          &dstWidth, &dstHeight, &dstDepth);
+       if (!nextLevel) {
+          /* all done */
+-         if (srcImage->IsCompressed) {
+-            _mesa_free((void *) srcData);
+-            _mesa_free(dstData);
+-         }
+-         return;
++         break;
+       }
+       /* get dest gl_texture_image */
+@@ -1682,6 +1679,12 @@ _mesa_generate_mipmap(GLcontext *ctx, GLenum target,
+       }
+    } /* loop over mipmap levels */
++
++   if (srcImage->IsCompressed) {
++      /* free uncompressed image buffers */
++      _mesa_free((void *) srcData);
++      _mesa_free(dstData);
++   }
+ }
+diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c
+index d09c439..da55ac8 100644
+--- a/src/mesa/main/texobj.c
++++ b/src/mesa/main/texobj.c
+@@ -863,7 +863,7 @@ unbind_texobj_from_texunits(GLcontext *ctx, struct gl_texture_object *texObj)
+       for (tex = 0; tex < NUM_TEXTURE_TARGETS; tex++) {
+          if (texObj == unit->CurrentTex[tex]) {
+             _mesa_reference_texobj(&unit->CurrentTex[tex],
+-                                   ctx->Shared->DefaultTex[TEXTURE_1D_INDEX]);
++                                   ctx->Shared->DefaultTex[tex]);
+             ASSERT(unit->CurrentTex[tex]);
+             break;
+          }
+diff --git a/src/mesa/main/texstate.c b/src/mesa/main/texstate.c
+index 861c5f3..8292d43 100644
+--- a/src/mesa/main/texstate.c
++++ b/src/mesa/main/texstate.c
+@@ -99,16 +99,22 @@ _mesa_copy_texture_state( const GLcontext *src, GLcontext *dst )
+       dst->Texture.Unit[u].BumpTarget = src->Texture.Unit[u].BumpTarget;
+       COPY_4V(dst->Texture.Unit[u].RotMatrix, src->Texture.Unit[u].RotMatrix);
++      /*
++       * XXX strictly speaking, we should compare texture names/ids and
++       * bind textures in the dest context according to id.  For now, only
++       * copy bindings if the contexts share the same pool of textures to
++       * avoid refcounting bugs.
++       */
++      if (dst->Shared == src->Shared) {
++         /* copy texture object bindings, not contents of texture objects */
++         _mesa_lock_context_textures(dst);
+-      /* copy texture object bindings, not contents of texture objects */
+-      _mesa_lock_context_textures(dst);
+-
+-      for (tex = 0; tex < NUM_TEXTURE_TARGETS; tex++) {
+-         _mesa_reference_texobj(&dst->Texture.Unit[u].CurrentTex[tex],
+-                                src->Texture.Unit[u].CurrentTex[tex]);
++         for (tex = 0; tex < NUM_TEXTURE_TARGETS; tex++) {
++            _mesa_reference_texobj(&dst->Texture.Unit[u].CurrentTex[tex],
++                                   src->Texture.Unit[u].CurrentTex[tex]);
++         }
++         _mesa_unlock_context_textures(dst);
+       }
+-
+-      _mesa_unlock_context_textures(dst);
+    }
+ }
+diff --git a/src/mesa/main/version.h b/src/mesa/main/version.h
+index 0ccdbf9..f24e11c 100644
+--- a/src/mesa/main/version.h
++++ b/src/mesa/main/version.h
+@@ -1,6 +1,6 @@
+ /*
+  * Mesa 3-D graphics library
+- * Version:  7.6
++ * Version:  7.6.1
+  *
+  * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
+  * Copyright (C) 2009  VMware, Inc.  All Rights Reserved.
+@@ -31,8 +31,8 @@
+ /* Mesa version */
+ #define MESA_MAJOR 7
+ #define MESA_MINOR 6
+-#define MESA_PATCH 0
+-#define MESA_VERSION_STRING "7.6"
++#define MESA_PATCH 1
++#define MESA_VERSION_STRING "7.6.1-devel"
+ /* To make version comparison easy */
+ #define MESA_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
+diff --git a/src/mesa/shader/prog_execute.c b/src/mesa/shader/prog_execute.c
+index 69b81e7..192d39a 100644
+--- a/src/mesa/shader/prog_execute.c
++++ b/src/mesa/shader/prog_execute.c
+@@ -939,7 +939,7 @@ _mesa_execute_program(GLcontext * ctx,
+           /* The fast LOG2 macro doesn't meet the precision requirements.
+            */
+             if (a[0] == 0.0F) {
+-               val = 0.0F;
++               val = -FLT_MAX;
+             }
+             else {
+                val = log(a[0]) * 1.442695F;
+diff --git a/src/mesa/shader/prog_optimize.c b/src/mesa/shader/prog_optimize.c
+index be90310..9d93748 100644
+--- a/src/mesa/shader/prog_optimize.c
++++ b/src/mesa/shader/prog_optimize.c
+@@ -217,6 +217,7 @@ _mesa_remove_dead_code(struct gl_program *prog)
+             if (inst->SrcReg[j].RelAddr) {
+                if (dbg)
+                   _mesa_printf("abort remove dead code (indirect temp)\n");
++               _mesa_free(removeInst);
+                return;
+             }
+@@ -232,6 +233,7 @@ _mesa_remove_dead_code(struct gl_program *prog)
+          if (inst->DstReg.RelAddr) {
+             if (dbg)
+                _mesa_printf("abort remove dead code (indirect temp)\n");
++            _mesa_free(removeInst);
+             return;
+          }
+@@ -422,6 +424,8 @@ _mesa_remove_extra_moves(struct gl_program *prog)
+    /* now remove the instructions which aren't needed */
+    rem = remove_instructions(prog, removeInst);
++   _mesa_free(removeInst);
++
+    if (dbg) {
+       _mesa_printf("Optimize: End remove extra moves.  %u instructions removed\n", rem);
+       /*_mesa_print_program(prog);*/
+diff --git a/src/mesa/shader/prog_parameter.h b/src/mesa/shader/prog_parameter.h
+index d1fcf47..699cb0c 100644
+--- a/src/mesa/shader/prog_parameter.h
++++ b/src/mesa/shader/prog_parameter.h
+@@ -56,7 +56,13 @@ struct gl_program_parameter
+    const char *Name;        /**< Null-terminated string */
+    gl_register_file Type;   /**< PROGRAM_NAMED_PARAM, CONSTANT or STATE_VAR */
+    GLenum DataType;         /**< GL_FLOAT, GL_FLOAT_VEC2, etc */
+-   GLuint Size;             /**< Number of components (1..4) */
++   /**
++    * Number of components (1..4), or more.
++    * If the number of components is greater than 4,
++    * this parameter is part of a larger uniform like a GLSL matrix or array.
++    * The next program parameter's Size will be Size-4 of this parameter.
++    */
++   GLuint Size;
+    GLboolean Used;          /**< Helper flag for GLSL uniform tracking */
+    GLboolean Initialized;   /**< Has the ParameterValue[] been set? */
+    GLbitfield Flags;        /**< Bitmask of PROG_PARAM_*_BIT */
+diff --git a/src/mesa/shader/shader_api.c b/src/mesa/shader/shader_api.c
+index 178b7d0..b282d7a 100644
+--- a/src/mesa/shader/shader_api.c
++++ b/src/mesa/shader/shader_api.c
+@@ -1702,8 +1702,8 @@ set_program_uniform(GLcontext *ctx, struct gl_program *program,
+          /* we'll ignore extra data below */
+       }
+       else {
+-         /* non-array: count must be one */
+-         if (count != 1) {
++         /* non-array: count must be at most one; count == 0 is handled by the loop below */
++         if (count > 1) {
+             _mesa_error(ctx, GL_INVALID_OPERATION,
+                         "glUniform(uniform is not an array)");
+             return;
+@@ -1880,20 +1880,27 @@ set_program_uniform_matrix(GLcontext *ctx, struct gl_program *program,
+                            GLboolean transpose, const GLfloat *values)
+ {
+    GLuint mat, row, col;
+-   GLuint dst = index + offset, src = 0;
++   GLuint src = 0;
++   const struct gl_program_parameter * param = &program->Parameters->Parameters[index];
++   const GLint slots = (param->Size + 3) / 4;
++   const GLint typeSize = sizeof_glsl_type(param->DataType);
+    GLint nr, nc;
+    /* check that the number of rows, columns is correct */
+-   get_matrix_dims(program->Parameters->Parameters[index].DataType, &nr, &nc);
++   get_matrix_dims(param->DataType, &nr, &nc);
+    if (rows != nr || cols != nc) {
+       _mesa_error(ctx, GL_INVALID_OPERATION,
+                   "glUniformMatrix(matrix size mismatch)");
+       return;
+    }
+-   if (index + offset > program->Parameters->Size) {
+-      /* out of bounds! */
+-      return;
++   if (param->Size <= typeSize) {
++      /* non-array: count must be at most one; count == 0 is handled by the loop below */
++      if (count > 1) {
++         _mesa_error(ctx, GL_INVALID_OPERATION,
++                     "glUniformMatrix(uniform is not an array)");
++         return;
++      }
+    }
+    /*
+@@ -1907,7 +1914,12 @@ set_program_uniform_matrix(GLcontext *ctx, struct gl_program *program,
+       /* each matrix: */
+       for (col = 0; col < cols; col++) {
+-         GLfloat *v = program->Parameters->ParameterValues[dst];
++         GLfloat *v;
++         if (offset >= slots) {
++            /* Ignore writes beyond the end of (the used part of) an array */
++            return;
++         }
++         v = program->Parameters->ParameterValues[index + offset];
+          for (row = 0; row < rows; row++) {
+             if (transpose) {
+                v[row] = values[src + row * cols + col];
+@@ -1916,7 +1928,8 @@ set_program_uniform_matrix(GLcontext *ctx, struct gl_program *program,
+                v[row] = values[src + col * rows + row];
+             }
+          }
+-         dst++;
++
++         offset++;
+       }
+       src += rows * cols;  /* next matrix */
+diff --git a/src/mesa/shader/slang/library/slang_common_builtin.gc b/src/mesa/shader/slang/library/slang_common_builtin.gc
+index 9764fc2..56de47e 100644
+--- a/src/mesa/shader/slang/library/slang_common_builtin.gc
++++ b/src/mesa/shader/slang/library/slang_common_builtin.gc
+@@ -602,42 +602,50 @@ vec4 exp2(const vec4 a)
+ float sqrt(const float x)
+ {
++   const float nx = -x;
+    float r;
+    __asm float_rsq r, x;
+-   __asm float_rcp __retVal, r;
+-}
+-
+-vec2 sqrt(const vec2 v)
+-{
+-   float r;
+-   __asm float_rsq r, v.x;
+-   __asm float_rcp __retVal.x, r;
+-   __asm float_rsq r, v.y;
+-   __asm float_rcp __retVal.y, r;
+-}
+-
+-vec3 sqrt(const vec3 v)
+-{
+-   float r;
+-   __asm float_rsq r, v.x;
+-   __asm float_rcp __retVal.x, r;
+-   __asm float_rsq r, v.y;
+-   __asm float_rcp __retVal.y, r;
+-   __asm float_rsq r, v.z;
+-   __asm float_rcp __retVal.z, r;
+-}
+-
+-vec4 sqrt(const vec4 v)
+-{
+-   float r;
+-   __asm float_rsq r, v.x;
+-   __asm float_rcp __retVal.x, r;
+-   __asm float_rsq r, v.y;
+-   __asm float_rcp __retVal.y, r;
+-   __asm float_rsq r, v.z;
+-   __asm float_rcp __retVal.z, r;
+-   __asm float_rsq r, v.w;
+-   __asm float_rcp __retVal.w, r;
++   __asm float_rcp r, r;
++   __asm vec4_cmp __retVal, nx, r, 0.0;
++}
++
++vec2 sqrt(const vec2 x)
++{
++   const vec2 nx = -x, zero = vec2(0.0);
++   vec2 r;
++   __asm float_rsq r.x, x.x;
++   __asm float_rsq r.y, x.y;
++   __asm float_rcp r.x, r.x;
++   __asm float_rcp r.y, r.y;
++   __asm vec4_cmp __retVal, nx, r, zero;
++}
++
++vec3 sqrt(const vec3 x)
++{
++   const vec3 nx = -x, zero = vec3(0.0);
++   vec3 r;
++   __asm float_rsq r.x, x.x;
++   __asm float_rsq r.y, x.y;
++   __asm float_rsq r.z, x.z;
++   __asm float_rcp r.x, r.x;
++   __asm float_rcp r.y, r.y;
++   __asm float_rcp r.z, r.z;
++   __asm vec4_cmp __retVal, nx, r, zero;
++}
++
++vec4 sqrt(const vec4 x)
++{
++   const vec4 nx = -x, zero = vec4(0.0);
++   vec4 r;
++   __asm float_rsq r.x, x.x;
++   __asm float_rsq r.y, x.y;
++   __asm float_rsq r.z, x.z;
++   __asm float_rsq r.w, x.w;
++   __asm float_rcp r.x, r.x;
++   __asm float_rcp r.y, r.y;
++   __asm float_rcp r.z, r.z;
++   __asm float_rcp r.w, r.w;
++   __asm vec4_cmp __retVal, nx, r, zero;
+ }
+diff --git a/src/mesa/shader/slang/library/slang_common_builtin_gc.h b/src/mesa/shader/slang/library/slang_common_builtin_gc.h
+index 78a7b83..3c3666e 100644
+--- a/src/mesa/shader/slang/library/slang_common_builtin_gc.h
++++ b/src/mesa/shader/slang/library/slang_common_builtin_gc.h
+@@ -307,55 +307,63 @@
+ 0,0,18,97,0,59,121,0,0,0,4,102,108,111,97,116,95,101,120,112,50,0,18,95,95,114,101,116,86,97,108,0,
+ 59,122,0,0,18,97,0,59,122,0,0,0,4,102,108,111,97,116,95,101,120,112,50,0,18,95,95,114,101,116,86,
+ 97,108,0,59,119,0,0,18,97,0,59,119,0,0,0,0,1,90,95,0,0,9,0,0,115,113,114,116,0,1,1,0,0,9,0,120,0,0,
+-0,1,3,2,90,95,0,0,9,0,1,114,0,0,0,4,102,108,111,97,116,95,114,115,113,0,18,114,0,0,18,120,0,0,0,4,
+-102,108,111,97,116,95,114,99,112,0,18,95,95,114,101,116,86,97,108,0,0,18,114,0,0,0,0,1,90,95,0,0,
+-10,0,0,115,113,114,116,0,1,1,0,0,10,0,118,0,0,0,1,3,2,90,95,0,0,9,0,1,114,0,0,0,4,102,108,111,97,
+-116,95,114,115,113,0,18,114,0,0,18,118,0,59,120,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,95,
+-95,114,101,116,86,97,108,0,59,120,0,0,18,114,0,0,0,4,102,108,111,97,116,95,114,115,113,0,18,114,0,
+-0,18,118,0,59,121,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,95,95,114,101,116,86,97,108,0,59,
+-121,0,0,18,114,0,0,0,0,1,90,95,0,0,11,0,0,115,113,114,116,0,1,1,0,0,11,0,118,0,0,0,1,3,2,90,95,0,0,
+-9,0,1,114,0,0,0,4,102,108,111,97,116,95,114,115,113,0,18,114,0,0,18,118,0,59,120,0,0,0,4,102,108,
+-111,97,116,95,114,99,112,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,114,0,0,0,4,102,108,111,
+-97,116,95,114,115,113,0,18,114,0,0,18,118,0,59,121,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,
+-95,95,114,101,116,86,97,108,0,59,121,0,0,18,114,0,0,0,4,102,108,111,97,116,95,114,115,113,0,18,114,
+-0,0,18,118,0,59,122,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,95,95,114,101,116,86,97,108,0,59,
+-122,0,0,18,114,0,0,0,0,1,90,95,0,0,12,0,0,115,113,114,116,0,1,1,0,0,12,0,118,0,0,0,1,3,2,90,95,0,0,
+-9,0,1,114,0,0,0,4,102,108,111,97,116,95,114,115,113,0,18,114,0,0,18,118,0,59,120,0,0,0,4,102,108,
+-111,97,116,95,114,99,112,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,114,0,0,0,4,102,108,111,
+-97,116,95,114,115,113,0,18,114,0,0,18,118,0,59,121,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,
+-95,95,114,101,116,86,97,108,0,59,121,0,0,18,114,0,0,0,4,102,108,111,97,116,95,114,115,113,0,18,114,
+-0,0,18,118,0,59,122,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,95,95,114,101,116,86,97,108,0,59,
+-122,0,0,18,114,0,0,0,4,102,108,111,97,116,95,114,115,113,0,18,114,0,0,18,118,0,59,119,0,0,0,4,102,
+-108,111,97,116,95,114,99,112,0,18,95,95,114,101,116,86,97,108,0,59,119,0,0,18,114,0,0,0,0,1,90,95,
+-0,0,9,0,0,105,110,118,101,114,115,101,115,113,114,116,0,1,1,0,0,9,0,120,0,0,0,1,4,102,108,111,97,
+-116,95,114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,120,0,0,0,0,1,90,95,0,0,10,0,0,
+-105,110,118,101,114,115,101,115,113,114,116,0,1,1,0,0,10,0,118,0,0,0,1,4,102,108,111,97,116,95,114,
+-115,113,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,118,0,59,120,0,0,0,4,102,108,111,97,116,
+-95,114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,121,0,0,18,118,0,59,121,0,0,0,0,1,90,95,0,0,
+-11,0,0,105,110,118,101,114,115,101,115,113,114,116,0,1,1,0,0,11,0,118,0,0,0,1,4,102,108,111,97,116,
+-95,114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,118,0,59,120,0,0,0,4,102,108,111,
+-97,116,95,114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,121,0,0,18,118,0,59,121,0,0,0,4,102,
+-108,111,97,116,95,114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,122,0,0,18,118,0,59,122,0,0,0,
+-0,1,90,95,0,0,12,0,0,105,110,118,101,114,115,101,115,113,114,116,0,1,1,0,0,12,0,118,0,0,0,1,4,102,
+-108,111,97,116,95,114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,118,0,59,120,0,0,0,
+-4,102,108,111,97,116,95,114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,121,0,0,18,118,0,59,121,
+-0,0,0,4,102,108,111,97,116,95,114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,122,0,0,18,118,0,
+-59,122,0,0,0,4,102,108,111,97,116,95,114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,119,0,0,18,
+-118,0,59,119,0,0,0,0,1,90,95,0,0,9,0,0,110,111,114,109,97,108,105,122,101,0,1,1,0,0,9,0,120,0,0,0,
+-1,9,18,95,95,114,101,116,86,97,108,0,17,49,0,48,0,0,20,0,0,1,90,95,0,0,10,0,0,110,111,114,109,97,
+-108,105,122,101,0,1,1,0,0,10,0,118,0,0,0,1,3,2,90,95,1,0,9,0,1,115,0,2,58,105,110,118,101,114,115,
+-101,115,113,114,116,0,0,58,100,111,116,0,0,18,118,0,0,18,118,0,0,0,0,0,0,0,4,118,101,99,52,95,109,
+-117,108,116,105,112,108,121,0,18,95,95,114,101,116,86,97,108,0,59,120,121,0,0,18,118,0,0,18,115,0,
+-0,0,0,1,90,95,0,0,11,0,0,110,111,114,109,97,108,105,122,101,0,1,1,0,0,11,0,118,0,0,0,1,3,2,90,95,0,
+-0,9,0,1,116,109,112,0,0,0,4,118,101,99,51,95,100,111,116,0,18,116,109,112,0,0,18,118,0,0,18,118,0,
+-0,0,4,102,108,111,97,116,95,114,115,113,0,18,116,109,112,0,0,18,116,109,112,0,0,0,4,118,101,99,52,
+-95,109,117,108,116,105,112,108,121,0,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,0,18,118,0,
+-0,18,116,109,112,0,0,0,0,1,90,95,0,0,12,0,0,110,111,114,109,97,108,105,122,101,0,1,1,0,0,12,0,118,
+-0,0,0,1,3,2,90,95,0,0,9,0,1,116,109,112,0,0,0,4,118,101,99,52,95,100,111,116,0,18,116,109,112,0,0,
+-18,118,0,0,18,118,0,0,0,4,102,108,111,97,116,95,114,115,113,0,18,116,109,112,0,0,18,116,109,112,0,
+-0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,95,95,114,101,116,86,97,108,0,59,120,
+-121,122,0,0,18,118,0,0,18,116,109,112,0,0,0,0,1,90,95,0,0,9,0,0,97,98,115,0,1,1,0,0,9,0,97,0,0,0,1,
+-4,118,101,99,52,95,97,98,115,0,18,95,95,114,101,116,86,97,108,0,0,18,97,0,0,0,0,1,90,95,0,0,10,0,0,
++0,1,3,2,90,95,1,0,9,0,1,110,120,0,2,18,120,0,54,0,0,3,2,90,95,0,0,9,0,1,114,0,0,0,4,102,108,111,97,
++116,95,114,115,113,0,18,114,0,0,18,120,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,114,0,0,18,
++114,0,0,0,4,118,101,99,52,95,99,109,112,0,18,95,95,114,101,116,86,97,108,0,0,18,110,120,0,0,18,114,
++0,0,17,48,0,48,0,0,0,0,0,1,90,95,0,0,10,0,0,115,113,114,116,0,1,1,0,0,10,0,120,0,0,0,1,3,2,90,95,1,
++0,10,0,1,110,120,0,2,18,120,0,54,0,1,1,122,101,114,111,0,2,58,118,101,99,50,0,0,17,48,0,48,0,0,0,0,
++0,0,3,2,90,95,0,0,10,0,1,114,0,0,0,4,102,108,111,97,116,95,114,115,113,0,18,114,0,59,120,0,0,18,
++120,0,59,120,0,0,0,4,102,108,111,97,116,95,114,115,113,0,18,114,0,59,121,0,0,18,120,0,59,121,0,0,0,
++4,102,108,111,97,116,95,114,99,112,0,18,114,0,59,120,0,0,18,114,0,59,120,0,0,0,4,102,108,111,97,
++116,95,114,99,112,0,18,114,0,59,121,0,0,18,114,0,59,121,0,0,0,4,118,101,99,52,95,99,109,112,0,18,
++95,95,114,101,116,86,97,108,0,0,18,110,120,0,0,18,114,0,0,18,122,101,114,111,0,0,0,0,1,90,95,0,0,
++11,0,0,115,113,114,116,0,1,1,0,0,11,0,120,0,0,0,1,3,2,90,95,1,0,11,0,1,110,120,0,2,18,120,0,54,0,1,
++1,122,101,114,111,0,2,58,118,101,99,51,0,0,17,48,0,48,0,0,0,0,0,0,3,2,90,95,0,0,11,0,1,114,0,0,0,4,
++102,108,111,97,116,95,114,115,113,0,18,114,0,59,120,0,0,18,120,0,59,120,0,0,0,4,102,108,111,97,116,
++95,114,115,113,0,18,114,0,59,121,0,0,18,120,0,59,121,0,0,0,4,102,108,111,97,116,95,114,115,113,0,
++18,114,0,59,122,0,0,18,120,0,59,122,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,114,0,59,120,0,0,
++18,114,0,59,120,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,114,0,59,121,0,0,18,114,0,59,121,0,0,
++0,4,102,108,111,97,116,95,114,99,112,0,18,114,0,59,122,0,0,18,114,0,59,122,0,0,0,4,118,101,99,52,
++95,99,109,112,0,18,95,95,114,101,116,86,97,108,0,0,18,110,120,0,0,18,114,0,0,18,122,101,114,111,0,
++0,0,0,1,90,95,0,0,12,0,0,115,113,114,116,0,1,1,0,0,12,0,120,0,0,0,1,3,2,90,95,1,0,12,0,1,110,120,0,
++2,18,120,0,54,0,1,1,122,101,114,111,0,2,58,118,101,99,52,0,0,17,48,0,48,0,0,0,0,0,0,3,2,90,95,0,0,
++12,0,1,114,0,0,0,4,102,108,111,97,116,95,114,115,113,0,18,114,0,59,120,0,0,18,120,0,59,120,0,0,0,4,
++102,108,111,97,116,95,114,115,113,0,18,114,0,59,121,0,0,18,120,0,59,121,0,0,0,4,102,108,111,97,116,
++95,114,115,113,0,18,114,0,59,122,0,0,18,120,0,59,122,0,0,0,4,102,108,111,97,116,95,114,115,113,0,
++18,114,0,59,119,0,0,18,120,0,59,119,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,114,0,59,120,0,0,
++18,114,0,59,120,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,114,0,59,121,0,0,18,114,0,59,121,0,0,
++0,4,102,108,111,97,116,95,114,99,112,0,18,114,0,59,122,0,0,18,114,0,59,122,0,0,0,4,102,108,111,97,
++116,95,114,99,112,0,18,114,0,59,119,0,0,18,114,0,59,119,0,0,0,4,118,101,99,52,95,99,109,112,0,18,
++95,95,114,101,116,86,97,108,0,0,18,110,120,0,0,18,114,0,0,18,122,101,114,111,0,0,0,0,1,90,95,0,0,9,
++0,0,105,110,118,101,114,115,101,115,113,114,116,0,1,1,0,0,9,0,120,0,0,0,1,4,102,108,111,97,116,95,
++114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,120,0,0,0,0,1,90,95,0,0,10,0,0,105,
++110,118,101,114,115,101,115,113,114,116,0,1,1,0,0,10,0,118,0,0,0,1,4,102,108,111,97,116,95,114,115,
++113,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,118,0,59,120,0,0,0,4,102,108,111,97,116,95,
++114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,121,0,0,18,118,0,59,121,0,0,0,0,1,90,95,0,0,11,0,
++0,105,110,118,101,114,115,101,115,113,114,116,0,1,1,0,0,11,0,118,0,0,0,1,4,102,108,111,97,116,95,
++114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,118,0,59,120,0,0,0,4,102,108,111,97,
++116,95,114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,121,0,0,18,118,0,59,121,0,0,0,4,102,108,
++111,97,116,95,114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,122,0,0,18,118,0,59,122,0,0,0,0,1,
++90,95,0,0,12,0,0,105,110,118,101,114,115,101,115,113,114,116,0,1,1,0,0,12,0,118,0,0,0,1,4,102,108,
++111,97,116,95,114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,118,0,59,120,0,0,0,4,
++102,108,111,97,116,95,114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,121,0,0,18,118,0,59,121,0,
++0,0,4,102,108,111,97,116,95,114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,122,0,0,18,118,0,59,
++122,0,0,0,4,102,108,111,97,116,95,114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,119,0,0,18,118,
++0,59,119,0,0,0,0,1,90,95,0,0,9,0,0,110,111,114,109,97,108,105,122,101,0,1,1,0,0,9,0,120,0,0,0,1,9,
++18,95,95,114,101,116,86,97,108,0,17,49,0,48,0,0,20,0,0,1,90,95,0,0,10,0,0,110,111,114,109,97,108,
++105,122,101,0,1,1,0,0,10,0,118,0,0,0,1,3,2,90,95,1,0,9,0,1,115,0,2,58,105,110,118,101,114,115,101,
++115,113,114,116,0,0,58,100,111,116,0,0,18,118,0,0,18,118,0,0,0,0,0,0,0,4,118,101,99,52,95,109,117,
++108,116,105,112,108,121,0,18,95,95,114,101,116,86,97,108,0,59,120,121,0,0,18,118,0,0,18,115,0,0,0,
++0,1,90,95,0,0,11,0,0,110,111,114,109,97,108,105,122,101,0,1,1,0,0,11,0,118,0,0,0,1,3,2,90,95,0,0,9,
++0,1,116,109,112,0,0,0,4,118,101,99,51,95,100,111,116,0,18,116,109,112,0,0,18,118,0,0,18,118,0,0,0,
++4,102,108,111,97,116,95,114,115,113,0,18,116,109,112,0,0,18,116,109,112,0,0,0,4,118,101,99,52,95,
++109,117,108,116,105,112,108,121,0,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,0,18,118,0,0,
++18,116,109,112,0,0,0,0,1,90,95,0,0,12,0,0,110,111,114,109,97,108,105,122,101,0,1,1,0,0,12,0,118,0,
++0,0,1,3,2,90,95,0,0,9,0,1,116,109,112,0,0,0,4,118,101,99,52,95,100,111,116,0,18,116,109,112,0,0,18,
++118,0,0,18,118,0,0,0,4,102,108,111,97,116,95,114,115,113,0,18,116,109,112,0,0,18,116,109,112,0,0,0,
++4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,95,95,114,101,116,86,97,108,0,59,120,121,
++122,0,0,18,118,0,0,18,116,109,112,0,0,0,0,1,90,95,0,0,9,0,0,97,98,115,0,1,1,0,0,9,0,97,0,0,0,1,4,
++118,101,99,52,95,97,98,115,0,18,95,95,114,101,116,86,97,108,0,0,18,97,0,0,0,0,1,90,95,0,0,10,0,0,
+ 97,98,115,0,1,1,0,0,10,0,97,0,0,0,1,4,118,101,99,52,95,97,98,115,0,18,95,95,114,101,116,86,97,108,
+ 0,59,120,121,0,0,18,97,0,0,0,0,1,90,95,0,0,11,0,0,97,98,115,0,1,1,0,0,11,0,97,0,0,0,1,4,118,101,99,
+ 52,95,97,98,115,0,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,0,18,97,0,0,0,0,1,90,95,0,0,12,
+diff --git a/src/mesa/shader/slang/slang_codegen.c b/src/mesa/shader/slang/slang_codegen.c
+index 703af9f..344dfdc 100644
+--- a/src/mesa/shader/slang/slang_codegen.c
++++ b/src/mesa/shader/slang/slang_codegen.c
+@@ -422,6 +422,7 @@ static slang_asm_info AsmInfo[] = {
+    { "vec4_lrp", IR_LRP, 1, 3 },
+    { "vec4_min", IR_MIN, 1, 2 },
+    { "vec4_max", IR_MAX, 1, 2 },
++   { "vec4_cmp", IR_CMP, 1, 3 },
+    { "vec4_clamp", IR_CLAMP, 1, 3 },
+    { "vec4_seq", IR_SEQUAL, 1, 2 },
+    { "vec4_sne", IR_SNEQUAL, 1, 2 },
+diff --git a/src/mesa/shader/slang/slang_emit.c b/src/mesa/shader/slang/slang_emit.c
+index 3f455e0..3af301e 100644
+--- a/src/mesa/shader/slang/slang_emit.c
++++ b/src/mesa/shader/slang/slang_emit.c
+@@ -2287,6 +2287,7 @@ emit(slang_emit_info *emitInfo, slang_ir_node *n)
+    case IR_POW:
+    /* trinary operators */
+    case IR_LRP:
++   case IR_CMP:
+       return emit_arith(emitInfo, n);
+    case IR_EQUAL:
+diff --git a/src/mesa/shader/slang/slang_ir.c b/src/mesa/shader/slang/slang_ir.c
+index 1c7f747..6260350 100644
+--- a/src/mesa/shader/slang/slang_ir.c
++++ b/src/mesa/shader/slang/slang_ir.c
+@@ -80,6 +80,7 @@ static const slang_ir_info IrInfo[] = {
+    { IR_NOISE4, "IR_NOISE4", OPCODE_NOISE4, 1, 1 },
+    /* other */
++   { IR_CMP, "IR_CMP", OPCODE_CMP, 4, 3 },  /* compare/select */
+    { IR_SEQ, "IR_SEQ", OPCODE_NOP, 0, 0 },
+    { IR_SCOPE, "IR_SCOPE", OPCODE_NOP, 0, 0 },
+    { IR_LABEL, "IR_LABEL", OPCODE_NOP, 0, 0 },
+diff --git a/src/mesa/shader/slang/slang_ir.h b/src/mesa/shader/slang/slang_ir.h
+index e796693..166b4e8 100644
+--- a/src/mesa/shader/slang/slang_ir.h
++++ b/src/mesa/shader/slang/slang_ir.h
+@@ -91,6 +91,7 @@ typedef enum
+    IR_CLAMP,
+    IR_MIN,
+    IR_MAX,
++   IR_CMP,     /* = (op0 < 0) ? op1 : op2 */
+    IR_SEQUAL,  /* Set if args are equal (vector) */
+    IR_SNEQUAL, /* Set if args are not equal (vector) */
+    IR_SGE,     /* Set if greater or equal (vector) */
+diff --git a/src/mesa/shader/slang/slang_link.c b/src/mesa/shader/slang/slang_link.c
+index 8f2b40d..71038d2 100644
+--- a/src/mesa/shader/slang/slang_link.c
++++ b/src/mesa/shader/slang/slang_link.c
+@@ -670,6 +670,7 @@ get_main_shader(GLcontext *ctx,
+           !shader->Main ||
+           shader->UnresolvedRefs) {
+          link_error(shProg, "Unresolved symbols");
++         _mesa_free_shader(ctx, shader);
+          return NULL;
+       }
+    }
+diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c b/src/mesa/state_tracker/st_cb_drawpixels.c
+index a9cafbf..c655690 100644
+--- a/src/mesa/state_tracker/st_cb_drawpixels.c
++++ b/src/mesa/state_tracker/st_cb_drawpixels.c
+@@ -598,15 +598,15 @@ draw_textured_quad(GLcontext *ctx, GLint x, GLint y, GLfloat z,
+    /* viewport state: viewport matching window dims */
+    {
+-      const float width = (float) ctx->DrawBuffer->Width;
+-      const float height = (float) ctx->DrawBuffer->Height;
++      const float w = (float) ctx->DrawBuffer->Width;
++      const float h = (float) ctx->DrawBuffer->Height;
+       struct pipe_viewport_state vp;
+-      vp.scale[0] =  0.5f * width;
+-      vp.scale[1] = -0.5f * height;
++      vp.scale[0] =  0.5f * w;
++      vp.scale[1] = -0.5f * h;
+       vp.scale[2] = 1.0f;
+       vp.scale[3] = 1.0f;
+-      vp.translate[0] = 0.5f * width;
+-      vp.translate[1] = 0.5f * height;
++      vp.translate[0] = 0.5f * w;
++      vp.translate[1] = 0.5f * h;
+       vp.translate[2] = 0.0f;
+       vp.translate[3] = 0.0f;
+       cso_set_viewport(cso, &vp);
+diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c
+index fe0a121..e8399de 100644
+--- a/src/mesa/state_tracker/st_cb_fbo.c
++++ b/src/mesa/state_tracker/st_cb_fbo.c
+@@ -165,12 +165,12 @@ st_renderbuffer_alloc_storage(GLcontext * ctx, struct gl_renderbuffer *rb,
+                                                      strb->texture,
+                                                      0, 0, 0,
+                                                      surface_usage );
+-
+-      assert(strb->surface->texture);
+-      assert(strb->surface->format);
+-      assert(strb->surface->width == width);
+-      assert(strb->surface->height == height);
+-
++      if (strb->surface) {
++         assert(strb->surface->texture);
++         assert(strb->surface->format);
++         assert(strb->surface->width == width);
++         assert(strb->surface->height == height);
++      }
+       return strb->surface != NULL;
+    }
+@@ -298,6 +298,7 @@ st_new_renderbuffer_fb(enum pipe_format format, int samples, boolean sw)
+    default:
+       _mesa_problem(NULL,
+                   "Unexpected format in st_new_renderbuffer_fb");
++      _mesa_free(strb);
+       return NULL;
+    }
+diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c
+index b13e377..50675b5 100644
+--- a/src/mesa/state_tracker/st_cb_texture.c
++++ b/src/mesa/state_tracker/st_cb_texture.c
+@@ -1775,7 +1775,11 @@ st_finalize_texture(GLcontext *ctx,
+        * incomplete.  In that case, we'll have set stObj->lastLevel before
+        * we get here.
+        */
+-      stObj->lastLevel = stObj->base._MaxLevel - stObj->base.BaseLevel;
++      if (stObj->base.MinFilter == GL_LINEAR ||
++          stObj->base.MinFilter == GL_NEAREST)
++         stObj->lastLevel = stObj->base.BaseLevel;
++      else
++         stObj->lastLevel = stObj->base._MaxLevel - stObj->base.BaseLevel;
+    }
+    firstImage = st_texture_image(stObj->base.Image[0][stObj->base.BaseLevel]);
+diff --git a/src/mesa/swrast/s_depth.c b/src/mesa/swrast/s_depth.c
+index 26e23f0..7086cae 100644
+--- a/src/mesa/swrast/s_depth.c
++++ b/src/mesa/swrast/s_depth.c
+@@ -1211,6 +1211,7 @@ _swrast_read_depth_span_float( GLcontext *ctx, struct gl_renderbuffer *rb,
+    if (!rb) {
+       /* really only doing this to prevent FP exceptions later */
+       _mesa_bzero(depth, n * sizeof(GLfloat));
++      return;
+    }
+    ASSERT(rb->_BaseFormat == GL_DEPTH_COMPONENT);
+@@ -1273,7 +1274,8 @@ _swrast_read_depth_span_uint( GLcontext *ctx, struct gl_renderbuffer *rb,
+ {
+    if (!rb) {
+       /* really only doing this to prevent FP exceptions later */
+-      _mesa_bzero(depth, n * sizeof(GLfloat));
++      _mesa_bzero(depth, n * sizeof(GLuint));
++      return;
+    }
+    ASSERT(rb->_BaseFormat == GL_DEPTH_COMPONENT);
index ef6a04dd056f1e44b2d2adf0c0a51fb5b3133691..52b18be09377af22c82c4f8bbd36b9a11d756786 100644 (file)
--- a/Mesa.spec
+++ b/Mesa.spec
@@ -22,7 +22,7 @@ Summary:      Free OpenGL implementation
 Summary(pl.UTF-8):     Wolnodostępna implementacja standardu OpenGL
 Name:          Mesa
 Version:       7.6
-Release:       1%{?with_multigl:.mgl}
+Release:       2%{?with_multigl:.mgl}
 License:       MIT (core), SGI (GLU,libGLw) and others - see license.html file
 Group:         X11/Libraries
 Source0:       ftp://ftp.freedesktop.org/pub/mesa/%{version}/%{name}Lib-%{version}.tar.bz2
@@ -32,7 +32,8 @@ Source1:      ftp://ftp.freedesktop.org/pub/mesa/%{version}/%{name}Demos-%{version}.t
 Source2:       http://www.archlinux.org/~jgc/gl-manpages-1.0.1.tar.bz2
 # Source2-md5: 6ae05158e678f4594343f32c2ca50515
 Patch0:                %{name}-realclean.patch
-Patch2:                %{name}-sparc64.patch
+Patch1:                %{name}-sparc64.patch
+Patch2:                %{name}-git.patch
 URL:           http://www.mesa3d.org/
 BuildRequires: expat-devel
 %{?with_demos:BuildRequires:   glew-devel}
@@ -613,6 +614,7 @@ Sterownik X.org DRI dla rodziny kart VIA Unichrome.
 %prep
 %setup -q -b1 -a2
 %patch0 -p0
+%patch1 -p1
 %patch2 -p1
 
 # fix demos
This page took 0.122051 seconds and 4 git commands to generate.