From d732f05e4aea3c89344ffa9d99a3413fa198e9cb Mon Sep 17 00:00:00 2001 From: =?utf8?q?Arkadiusz=20Mi=C5=9Bkiewicz?= Date: Thu, 8 Oct 2009 18:30:07 +0000 Subject: [PATCH] - rel 2; fixes from git Changed files: Mesa-git.patch -> 1.5 Mesa.spec -> 1.222 --- Mesa-git.patch | 1973 ++++++++++++++++++++++++++++++++++++++++++++++++ Mesa.spec | 6 +- 2 files changed, 1977 insertions(+), 2 deletions(-) create mode 100644 Mesa-git.patch diff --git a/Mesa-git.patch b/Mesa-git.patch new file mode 100644 index 0000000..f07d9db --- /dev/null +++ b/Mesa-git.patch @@ -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 + #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 + #include + ++#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 + #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;ivs.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); diff --git a/Mesa.spec b/Mesa.spec index ef6a04d..52b18be 100644 --- 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 -- 2.44.0