-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);