]> git.pld-linux.org Git - packages/Mesa.git/blame - Mesa-git.patch
- rel 2; fixes from git
[packages/Mesa.git] / Mesa-git.patch
CommitLineData
d732f05e
AM
1diff --git a/include/GL/gl_mangle.h b/include/GL/gl_mangle.h
2index 54147f7..59f6149 100644
3--- a/include/GL/gl_mangle.h
4+++ b/include/GL/gl_mangle.h
5@@ -108,12 +108,20 @@
6 #define glBlendColorEXT MANGLE(BlendColorEXT)
7 #define glBlendColor MANGLE(BlendColor)
8 #define glBlendEquationEXT MANGLE(BlendEquationEXT)
9+#define glBlendEquationi MANGLE(BlendEquationi)
10+#define glBlendEquationIndexedAMD MANGLE(BlendEquationIndexedAMD)
11 #define glBlendEquation MANGLE(BlendEquation)
12 #define glBlendEquationSeparateATI MANGLE(BlendEquationSeparateATI)
13 #define glBlendEquationSeparateEXT MANGLE(BlendEquationSeparateEXT)
14+#define glBlendEquationSeparatei MANGLE(BlendEquationSeparatei)
15+#define glBlendEquationSeparateIndexedAMD MANGLE(BlendEquationSeparateIndexedAMD)
16 #define glBlendEquationSeparate MANGLE(BlendEquationSeparate)
17+#define glBlendFunci MANGLE(BlendFunci)
18+#define glBlendFuncIndexedAMD MANGLE(BlendFuncIndexedAMD)
19 #define glBlendFunc MANGLE(BlendFunc)
20 #define glBlendFuncSeparateEXT MANGLE(BlendFuncSeparateEXT)
21+#define glBlendFuncSeparatei MANGLE(BlendFuncSeparatei)
22+#define glBlendFuncSeparateIndexedAMD MANGLE(BlendFuncSeparateIndexedAMD)
23 #define glBlendFuncSeparateINGR MANGLE(BlendFuncSeparateINGR)
24 #define glBlendFuncSeparate MANGLE(BlendFuncSeparate)
25 #define glBlitFramebufferEXT MANGLE(BlitFramebufferEXT)
26@@ -148,6 +156,7 @@
27 #define glClientActiveTexture MANGLE(ClientActiveTexture)
28 #define glClientActiveVertexStreamATI MANGLE(ClientActiveVertexStreamATI)
29 #define glClientAttribDefaultEXT MANGLE(ClientAttribDefaultEXT)
30+#define glClientWaitSync MANGLE(ClientWaitSync)
31 #define glClipPlane MANGLE(ClipPlane)
32 #define glColor3b MANGLE(Color3b)
33 #define glColor3bv MANGLE(Color3bv)
34@@ -320,6 +329,7 @@
35 #define glDeleteRenderbuffersEXT MANGLE(DeleteRenderbuffersEXT)
36 #define glDeleteRenderbuffers MANGLE(DeleteRenderbuffers)
37 #define glDeleteShader MANGLE(DeleteShader)
38+#define glDeleteSync MANGLE(DeleteSync)
39 #define glDeleteTexturesEXT MANGLE(DeleteTexturesEXT)
40 #define glDeleteTextures MANGLE(DeleteTextures)
41 #define glDeleteTransformFeedbacksNV MANGLE(DeleteTransformFeedbacksNV)
42@@ -341,6 +351,7 @@
43 #define glDisableIndexedEXT MANGLE(DisableIndexedEXT)
44 #define glDisable MANGLE(Disable)
45 #define glDisableVariantClientStateEXT MANGLE(DisableVariantClientStateEXT)
46+#define glDisableVertexAttribAPPLE MANGLE(DisableVertexAttribAPPLE)
47 #define glDisableVertexAttribArrayARB MANGLE(DisableVertexAttribArrayARB)
48 #define glDisableVertexAttribArray MANGLE(DisableVertexAttribArray)
49 #define glDrawArraysEXT MANGLE(DrawArraysEXT)
50@@ -354,7 +365,9 @@
51 #define glDrawBuffers MANGLE(DrawBuffers)
52 #define glDrawElementArrayAPPLE MANGLE(DrawElementArrayAPPLE)
53 #define glDrawElementArrayATI MANGLE(DrawElementArrayATI)
54+#define glDrawElementsBaseVertex MANGLE(DrawElementsBaseVertex)
55 #define glDrawElementsInstancedARB MANGLE(DrawElementsInstancedARB)
56+#define glDrawElementsInstancedBaseVertex MANGLE(DrawElementsInstancedBaseVertex)
57 #define glDrawElementsInstancedEXT MANGLE(DrawElementsInstancedEXT)
58 #define glDrawElementsInstanced MANGLE(DrawElementsInstanced)
59 #define glDrawElements MANGLE(DrawElements)
60@@ -362,6 +375,7 @@
61 #define glDrawPixels MANGLE(DrawPixels)
62 #define glDrawRangeElementArrayAPPLE MANGLE(DrawRangeElementArrayAPPLE)
63 #define glDrawRangeElementArrayATI MANGLE(DrawRangeElementArrayATI)
64+#define glDrawRangeElementsBaseVertex MANGLE(DrawRangeElementsBaseVertex)
65 #define glDrawRangeElementsEXT MANGLE(DrawRangeElementsEXT)
66 #define glDrawRangeElements MANGLE(DrawRangeElements)
67 #define glDrawTransformFeedbackNV MANGLE(DrawTransformFeedbackNV)
68@@ -378,6 +392,7 @@
69 #define glEnableIndexedEXT MANGLE(EnableIndexedEXT)
70 #define glEnable MANGLE(Enable)
71 #define glEnableVariantClientStateEXT MANGLE(EnableVariantClientStateEXT)
72+#define glEnableVertexAttribAPPLE MANGLE(EnableVertexAttribAPPLE)
73 #define glEnableVertexAttribArrayARB MANGLE(EnableVertexAttribArrayARB)
74 #define glEnableVertexAttribArray MANGLE(EnableVertexAttribArray)
75 #define glEndConditionalRender MANGLE(EndConditionalRender)
76@@ -409,6 +424,7 @@
77 #define glExecuteProgramNV MANGLE(ExecuteProgramNV)
78 #define glExtractComponentEXT MANGLE(ExtractComponentEXT)
79 #define glFeedbackBuffer MANGLE(FeedbackBuffer)
80+#define glFenceSync MANGLE(FenceSync)
81 #define glFinalCombinerInputNV MANGLE(FinalCombinerInputNV)
82 #define glFinishAsyncSGIX MANGLE(FinishAsyncSGIX)
83 #define glFinishFenceAPPLE MANGLE(FinishFenceAPPLE)
84@@ -469,9 +485,11 @@
85 #define glFramebufferTextureEXT MANGLE(FramebufferTextureEXT)
86 #define glFramebufferTextureFaceARB MANGLE(FramebufferTextureFaceARB)
87 #define glFramebufferTextureFaceEXT MANGLE(FramebufferTextureFaceEXT)
88+#define glFramebufferTextureFace MANGLE(FramebufferTextureFace)
89 #define glFramebufferTextureLayerARB MANGLE(FramebufferTextureLayerARB)
90 #define glFramebufferTextureLayerEXT MANGLE(FramebufferTextureLayerEXT)
91 #define glFramebufferTextureLayer MANGLE(FramebufferTextureLayer)
92+#define glFramebufferTexture MANGLE(FramebufferTexture)
93 #define glFrameTerminatorGREMEDY MANGLE(FrameTerminatorGREMEDY)
94 #define glFrameZoomSGIX MANGLE(FrameZoomSGIX)
95 #define glFreeObjectBufferATI MANGLE(FreeObjectBufferATI)
96@@ -523,6 +541,7 @@
97 #define glGetBooleanIndexedvEXT MANGLE(GetBooleanIndexedvEXT)
98 #define glGetBooleani_v MANGLE(GetBooleani_v)
99 #define glGetBooleanv MANGLE(GetBooleanv)
100+#define glGetBufferParameteri64v MANGLE(GetBufferParameteri64v)
101 #define glGetBufferParameterivARB MANGLE(GetBufferParameterivARB)
102 #define glGetBufferParameteriv MANGLE(GetBufferParameteriv)
103 #define glGetBufferPointervARB MANGLE(GetBufferPointervARB)
104@@ -586,6 +605,8 @@
105 #define glGetImageTransformParameterivHP MANGLE(GetImageTransformParameterivHP)
106 #define glGetInfoLogARB MANGLE(GetInfoLogARB)
107 #define glGetInstrumentsSGIX MANGLE(GetInstrumentsSGIX)
108+#define glGetInteger64i_v MANGLE(GetInteger64i_v)
109+#define glGetInteger64v MANGLE(GetInteger64v)
110 #define glGetIntegerIndexedvEXT MANGLE(GetIntegerIndexedvEXT)
111 #define glGetIntegeri_v MANGLE(GetIntegeri_v)
112 #define glGetIntegerv MANGLE(GetIntegerv)
113@@ -615,6 +636,7 @@
114 #define glGetMinmaxParameterfv MANGLE(GetMinmaxParameterfv)
115 #define glGetMinmaxParameterivEXT MANGLE(GetMinmaxParameterivEXT)
116 #define glGetMinmaxParameteriv MANGLE(GetMinmaxParameteriv)
117+#define glGetMultisamplefv MANGLE(GetMultisamplefv)
118 #define glGetMultisamplefvNV MANGLE(GetMultisamplefvNV)
119 #define glGetMultiTexEnvfvEXT MANGLE(GetMultiTexEnvfvEXT)
120 #define glGetMultiTexEnvivEXT MANGLE(GetMultiTexEnvivEXT)
121@@ -642,6 +664,7 @@
122 #define glGetObjectBufferfvATI MANGLE(GetObjectBufferfvATI)
123 #define glGetObjectBufferivATI MANGLE(GetObjectBufferivATI)
124 #define glGetObjectParameterfvARB MANGLE(GetObjectParameterfvARB)
125+#define glGetObjectParameterivAPPLE MANGLE(GetObjectParameterivAPPLE)
126 #define glGetObjectParameterivARB MANGLE(GetObjectParameterivARB)
127 #define glGetOcclusionQueryivNV MANGLE(GetOcclusionQueryivNV)
128 #define glGetOcclusionQueryuivNV MANGLE(GetOcclusionQueryuivNV)
129@@ -698,6 +721,7 @@
130 #define glGetSharpenTexFuncSGIS MANGLE(GetSharpenTexFuncSGIS)
131 #define glGetStringi MANGLE(GetStringi)
132 #define glGetString MANGLE(GetString)
133+#define glGetSynciv MANGLE(GetSynciv)
134 #define glGetTexBumpParameterfvATI MANGLE(GetTexBumpParameterfvATI)
135 #define glGetTexBumpParameterivATI MANGLE(GetTexBumpParameterivATI)
136 #define glGetTexEnvfv MANGLE(GetTexEnvfv)
137@@ -715,6 +739,7 @@
138 #define glGetTexParameterIuivEXT MANGLE(GetTexParameterIuivEXT)
139 #define glGetTexParameterIuiv MANGLE(GetTexParameterIuiv)
140 #define glGetTexParameteriv MANGLE(GetTexParameteriv)
141+#define glGetTexParameterPointervAPPLE MANGLE(GetTexParameterPointervAPPLE)
142 #define glGetTextureImageEXT MANGLE(GetTextureImageEXT)
143 #define glGetTextureLevelParameterfvEXT MANGLE(GetTextureLevelParameterfvEXT)
144 #define glGetTextureLevelParameterivEXT MANGLE(GetTextureLevelParameterivEXT)
145@@ -825,12 +850,14 @@
146 #define glIsRenderbufferEXT MANGLE(IsRenderbufferEXT)
147 #define glIsRenderbuffer MANGLE(IsRenderbuffer)
148 #define glIsShader MANGLE(IsShader)
149+#define glIsSync MANGLE(IsSync)
150 #define glIsTextureEXT MANGLE(IsTextureEXT)
151 #define glIsTexture MANGLE(IsTexture)
152 #define glIsTransformFeedbackNV MANGLE(IsTransformFeedbackNV)
153 #define glIsVariantEnabledEXT MANGLE(IsVariantEnabledEXT)
154 #define glIsVertexArrayAPPLE MANGLE(IsVertexArrayAPPLE)
155 #define glIsVertexArray MANGLE(IsVertexArray)
156+#define glIsVertexAttribEnabledAPPLE MANGLE(IsVertexAttribEnabledAPPLE)
157 #define glLightEnviSGIX MANGLE(LightEnviSGIX)
158 #define glLightf MANGLE(Lightf)
159 #define glLightfv MANGLE(Lightfv)
160@@ -877,6 +904,10 @@
161 #define glMapObjectBufferATI MANGLE(MapObjectBufferATI)
162 #define glMapParameterfvNV MANGLE(MapParameterfvNV)
163 #define glMapParameterivNV MANGLE(MapParameterivNV)
164+#define glMapVertexAttrib1dAPPLE MANGLE(MapVertexAttrib1dAPPLE)
165+#define glMapVertexAttrib1fAPPLE MANGLE(MapVertexAttrib1fAPPLE)
166+#define glMapVertexAttrib2dAPPLE MANGLE(MapVertexAttrib2dAPPLE)
167+#define glMapVertexAttrib2fAPPLE MANGLE(MapVertexAttrib2fAPPLE)
168 #define glMaterialf MANGLE(Materialf)
169 #define glMaterialfv MANGLE(Materialfv)
170 #define glMateriali MANGLE(Materiali)
171@@ -907,9 +938,11 @@
172 #define glMatrixTranslatefEXT MANGLE(MatrixTranslatefEXT)
173 #define glMinmaxEXT MANGLE(MinmaxEXT)
174 #define glMinmax MANGLE(Minmax)
175+#define glMinSampleShading MANGLE(MinSampleShading)
176 #define glMultiDrawArraysEXT MANGLE(MultiDrawArraysEXT)
177 #define glMultiDrawArrays MANGLE(MultiDrawArrays)
178 #define glMultiDrawElementArrayAPPLE MANGLE(MultiDrawElementArrayAPPLE)
179+#define glMultiDrawElementsBaseVertex MANGLE(MultiDrawElementsBaseVertex)
180 #define glMultiDrawElementsEXT MANGLE(MultiDrawElementsEXT)
181 #define glMultiDrawElements MANGLE(MultiDrawElements)
182 #define glMultiDrawRangeElementArrayAPPLE MANGLE(MultiDrawRangeElementArrayAPPLE)
183@@ -1072,6 +1105,8 @@
184 #define glNormalStream3ivATI MANGLE(NormalStream3ivATI)
185 #define glNormalStream3sATI MANGLE(NormalStream3sATI)
186 #define glNormalStream3svATI MANGLE(NormalStream3svATI)
187+#define glObjectPurgeableAPPLE MANGLE(ObjectPurgeableAPPLE)
188+#define glObjectUnpurgeableAPPLE MANGLE(ObjectUnpurgeableAPPLE)
189 #define glOrtho MANGLE(Ortho)
190 #define glPassTexCoordATI MANGLE(PassTexCoordATI)
191 #define glPassThrough MANGLE(PassThrough)
192@@ -1162,6 +1197,7 @@
193 #define glProgramParameter4fvNV MANGLE(ProgramParameter4fvNV)
194 #define glProgramParameteriARB MANGLE(ProgramParameteriARB)
195 #define glProgramParameteriEXT MANGLE(ProgramParameteriEXT)
196+#define glProgramParameteri MANGLE(ProgramParameteri)
197 #define glProgramParameters4dvNV MANGLE(ProgramParameters4dvNV)
198 #define glProgramParameters4fvNV MANGLE(ProgramParameters4fvNV)
199 #define glProgramStringARB MANGLE(ProgramStringARB)
200@@ -1200,6 +1236,7 @@
201 #define glProgramUniformMatrix4x3fvEXT MANGLE(ProgramUniformMatrix4x3fvEXT)
202 #define glProgramVertexLimitNV MANGLE(ProgramVertexLimitNV)
203 #define glProvokingVertexEXT MANGLE(ProvokingVertexEXT)
204+#define glProvokingVertex MANGLE(ProvokingVertex)
205 #define glPushAttrib MANGLE(PushAttrib)
206 #define glPushClientAttribDefaultEXT MANGLE(PushClientAttribDefaultEXT)
207 #define glPushClientAttrib MANGLE(PushClientAttrib)
208@@ -1283,6 +1320,7 @@
209 #define glSampleCoverage MANGLE(SampleCoverage)
210 #define glSampleMapATI MANGLE(SampleMapATI)
211 #define glSampleMaskEXT MANGLE(SampleMaskEXT)
212+#define glSampleMaski MANGLE(SampleMaski)
213 #define glSampleMaskIndexedNV MANGLE(SampleMaskIndexedNV)
214 #define glSampleMaskSGIS MANGLE(SampleMaskSGIS)
215 #define glSamplePatternEXT MANGLE(SamplePatternEXT)
216@@ -1454,8 +1492,10 @@
217 #define glTexGeniv MANGLE(TexGeniv)
218 #define glTexImage1D MANGLE(TexImage1D)
219 #define glTexImage2D MANGLE(TexImage2D)
220+#define glTexImage2DMultisample MANGLE(TexImage2DMultisample)
221 #define glTexImage3DEXT MANGLE(TexImage3DEXT)
222 #define glTexImage3D MANGLE(TexImage3D)
223+#define glTexImage3DMultisample MANGLE(TexImage3DMultisample)
224 #define glTexImage4DSGIS MANGLE(TexImage4DSGIS)
225 #define glTexParameterf MANGLE(TexParameterf)
226 #define glTexParameterfv MANGLE(TexParameterfv)
227@@ -1487,6 +1527,7 @@
228 #define glTextureParameterIivEXT MANGLE(TextureParameterIivEXT)
229 #define glTextureParameterIuivEXT MANGLE(TextureParameterIuivEXT)
230 #define glTextureParameterivEXT MANGLE(TextureParameterivEXT)
231+#define glTextureRangeAPPLE MANGLE(TextureRangeAPPLE)
232 #define glTextureRenderbufferEXT MANGLE(TextureRenderbufferEXT)
233 #define glTextureSubImage1DEXT MANGLE(TextureSubImage1DEXT)
234 #define glTextureSubImage2DEXT MANGLE(TextureSubImage2DEXT)
235@@ -1828,6 +1869,7 @@
236 #define glVertexWeighthvNV MANGLE(VertexWeighthvNV)
237 #define glVertexWeightPointerEXT MANGLE(VertexWeightPointerEXT)
238 #define glViewport MANGLE(Viewport)
239+#define glWaitSync MANGLE(WaitSync)
240 #define glWeightbvARB MANGLE(WeightbvARB)
241 #define glWeightdvARB MANGLE(WeightdvARB)
242 #define glWeightfvARB MANGLE(WeightfvARB)
243diff --git a/progs/glsl/skinning.c b/progs/glsl/skinning.c
244index 65ba983..2b96f31 100644
245--- a/progs/glsl/skinning.c
246+++ b/progs/glsl/skinning.c
247@@ -16,6 +16,9 @@
248 #include <GL/glut.h>
249 #include "shaderutil.h"
250
251+#ifndef M_PI
252+#define M_PI 3.1415926535
253+#endif
254
255 static char *FragProgFile = "skinning.frag";
256 static char *VertProgFile = "skinning.vert";
257diff --git a/progs/glsl/texaaline.c b/progs/glsl/texaaline.c
258index 7a5ac40..2e4f932 100644
259--- a/progs/glsl/texaaline.c
260+++ b/progs/glsl/texaaline.c
261@@ -14,6 +14,9 @@
262 #include <GL/glew.h>
263 #include <GL/glut.h>
264
265+#ifndef M_PI
266+#define M_PI 3.1415926535
267+#endif
268
269 static GLint WinWidth = 300, WinHeight = 300;
270 static GLint win = 0;
271diff --git a/progs/glsl/twoside.c b/progs/glsl/twoside.c
272index a57484f..ce155d6 100644
273--- a/progs/glsl/twoside.c
274+++ b/progs/glsl/twoside.c
275@@ -16,6 +16,9 @@
276 #include <GL/glut.h>
277 #include "shaderutil.h"
278
279+#ifndef M_PI
280+#define M_PI 3.1415926535
281+#endif
282
283 static GLint WinWidth = 300, WinHeight = 300;
284 static char *FragProgFile = NULL;
285diff --git a/progs/xdemos/pbdemo.c b/progs/xdemos/pbdemo.c
286index 7db0017..2573209 100644
287--- a/progs/xdemos/pbdemo.c
288+++ b/progs/xdemos/pbdemo.c
289@@ -143,7 +143,7 @@ MakePbuffer( Display *dpy, int screen, int width, int height )
290
291 /* Create the pbuffer using first fbConfig in the list that works. */
292 for (i=0;i<nConfigs;i++) {
293- pBuffer = CreatePbuffer(dpy, screen, fbConfigs[i], width, height, preserve, largest);
294+ pBuffer = CreatePbuffer(dpy, screen, fbConfigs[i], width, height, largest, preserve);
295 if (pBuffer) {
296 gFBconfig = fbConfigs[i];
297 gWidth = width;
298@@ -210,6 +210,21 @@ Setup(int width, int height)
299 return 0;
300 }
301
302+ /* Test drawable queries */
303+ {
304+ unsigned int v;
305+ glXQueryDrawable( gDpy, gPBuffer, GLX_WIDTH, &v);
306+ printf("GLX_WIDTH = %u\n", v);
307+ glXQueryDrawable( gDpy, gPBuffer, GLX_HEIGHT, &v);
308+ printf("GLX_HEIGHT = %u\n", v);
309+ glXQueryDrawable( gDpy, gPBuffer, GLX_PRESERVED_CONTENTS, &v);
310+ printf("GLX_PRESERVED_CONTENTS = %u\n", v);
311+ glXQueryDrawable( gDpy, gPBuffer, GLX_LARGEST_PBUFFER, &v);
312+ printf("GLX_LARGEST_PBUFFER = %u\n", v);
313+ glXQueryDrawable( gDpy, gPBuffer, GLX_FBCONFIG_ID, &v);
314+ printf("GLX_FBCONFIG_ID = %u\n", v);
315+ }
316+
317 /* Get corresponding XVisualInfo */
318 visInfo = GetVisualFromFBConfig(gDpy, gScreen, gFBconfig);
319 if (!visInfo) {
320diff --git a/src/gallium/auxiliary/cso_cache/cso_context.c b/src/gallium/auxiliary/cso_cache/cso_context.c
321index 36c882a..4f13b3e 100644
322--- a/src/gallium/auxiliary/cso_cache/cso_context.c
323+++ b/src/gallium/auxiliary/cso_cache/cso_context.c
324@@ -268,7 +268,7 @@ void cso_release_all( struct cso_context *ctx )
325 void cso_destroy_context( struct cso_context *ctx )
326 {
327 if (ctx) {
328- //cso_release_all( ctx );
329+ /*cso_release_all( ctx );*/
330 FREE( ctx );
331 }
332 }
333diff --git a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_emit.c b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_emit.c
334index 44147ae..734c05f 100644
335--- a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_emit.c
336+++ b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_emit.c
337@@ -212,17 +212,10 @@ static void fse_prepare( struct draw_pt_middle_end *middle,
338 struct draw_vertex_shader *vs = draw->vs.vertex_shader;
339 vs->prepare(vs, draw);
340 }
341-
342-
343- //return TRUE;
344 }
345
346
347
348-
349-
350-
351-
352 static void fse_run_linear( struct draw_pt_middle_end *middle,
353 unsigned start,
354 unsigned count )
355diff --git a/src/gallium/auxiliary/draw/draw_pt_post_vs.c b/src/gallium/auxiliary/draw/draw_pt_post_vs.c
356index 00d7197..78953bc 100644
357--- a/src/gallium/auxiliary/draw/draw_pt_post_vs.c
358+++ b/src/gallium/auxiliary/draw/draw_pt_post_vs.c
359@@ -210,7 +210,7 @@ void draw_pt_post_vs_prepare( struct pt_post_vs *pvs,
360 pvs->run = post_vs_viewport;
361 }
362 else {
363- //if (opengl)
364+ /* if (opengl) */
365 pvs->run = post_vs_cliptest_viewport_gl;
366 }
367 }
368diff --git a/src/gallium/auxiliary/draw/draw_vs_aos.c b/src/gallium/auxiliary/draw/draw_vs_aos.c
369index 62e04a6..645d7cc 100644
370--- a/src/gallium/auxiliary/draw/draw_vs_aos.c
371+++ b/src/gallium/auxiliary/draw/draw_vs_aos.c
372@@ -891,7 +891,7 @@ static void x87_emit_ex2( struct aos_compilation *cp )
373 struct x86_reg st1 = x86_make_reg(file_x87, 1);
374 int stack = cp->func->x87_stack;
375
376-// set_fpu_round_neg_inf( cp );
377+ /* set_fpu_round_neg_inf( cp ); */
378
379 x87_fld(cp->func, st0); /* a a */
380 x87_fprndint( cp->func ); /* int(a) a*/
381@@ -1759,14 +1759,14 @@ emit_instruction( struct aos_compilation *cp,
382 return emit_SUB(cp, inst);
383
384 case TGSI_OPCODE_LRP:
385-// return emit_LERP(cp, inst);
386+ /*return emit_LERP(cp, inst);*/
387 return FALSE;
388
389 case TGSI_OPCODE_FRC:
390 return emit_FRC(cp, inst);
391
392 case TGSI_OPCODE_CLAMP:
393-// return emit_CLAMP(cp, inst);
394+ /*return emit_CLAMP(cp, inst);*/
395 return FALSE;
396
397 case TGSI_OPCODE_FLR:
398diff --git a/src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c b/src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c
399index 109ac7c..0d30363 100644
400--- a/src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c
401+++ b/src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c
402@@ -584,7 +584,7 @@ fenced_buffer_list_destroy(struct fenced_buffer_list *fenced_list)
403 }
404
405 #ifdef DEBUG
406- //assert(!fenced_list->numUnfenced);
407+ /*assert(!fenced_list->numUnfenced);*/
408 #endif
409
410 pipe_mutex_unlock(fenced_list->mutex);
411diff --git a/src/gallium/auxiliary/translate/translate_generic.c b/src/gallium/auxiliary/translate/translate_generic.c
412index 8d39b64..266e7ee 100644
413--- a/src/gallium/auxiliary/translate/translate_generic.c
414+++ b/src/gallium/auxiliary/translate/translate_generic.c
415@@ -217,7 +217,7 @@ ATTRIB( R8G8_SNORM, 2, char, FROM_8_SNORM, TO_8_SNORM )
416 ATTRIB( R8_SNORM, 1, char, FROM_8_SNORM, TO_8_SNORM )
417
418 ATTRIB( A8R8G8B8_UNORM, 4, ubyte, FROM_8_UNORM, TO_8_UNORM )
419-//ATTRIB( R8G8B8A8_UNORM, 4, ubyte, FROM_8_UNORM, TO_8_UNORM )
420+/*ATTRIB( R8G8B8A8_UNORM, 4, ubyte, FROM_8_UNORM, TO_8_UNORM )*/
421
422 ATTRIB( R32G32B32A32_FIXED, 4, int, FROM_32_FIXED, TO_32_FIXED )
423 ATTRIB( R32G32B32_FIXED, 3, int, FROM_32_FIXED, TO_32_FIXED )
424diff --git a/src/gallium/auxiliary/util/u_cpu_detect.c b/src/gallium/auxiliary/util/u_cpu_detect.c
425index d9f2f8f..f78706f 100644
426--- a/src/gallium/auxiliary/util/u_cpu_detect.c
427+++ b/src/gallium/auxiliary/util/u_cpu_detect.c
428@@ -268,7 +268,7 @@ static void check_os_katmai_support(void)
429 * and therefore to be safe I'm going to leave this test in here.
430 */
431 if (__cpu_detect_caps.hasSSE) {
432- // test_os_katmai_exception_support();
433+ /* test_os_katmai_exception_support(); */
434 }
435
436 /* Restore the original signal handlers.
437diff --git a/src/gallium/auxiliary/util/u_debug_profile.c b/src/gallium/auxiliary/util/u_debug_profile.c
438index 6d8b244..d765b50 100644
439--- a/src/gallium/auxiliary/util/u_debug_profile.c
440+++ b/src/gallium/auxiliary/util/u_debug_profile.c
441@@ -254,7 +254,7 @@ debug_profile_start(void)
442 {
443 WCHAR *p;
444
445- // increment starting from the less significant digit
446+ /* increment starting from the less significant digit */
447 p = &wFileName[14];
448 while(1) {
449 if(*p == '9') {
450diff --git a/src/gallium/auxiliary/util/u_debug_symbol.c b/src/gallium/auxiliary/util/u_debug_symbol.c
451index 811931f..417d0cf 100644
452--- a/src/gallium/auxiliary/util/u_debug_symbol.c
453+++ b/src/gallium/auxiliary/util/u_debug_symbol.c
454@@ -214,7 +214,7 @@ debug_symbol_print_imagehlp(const void *addr)
455 HANDLE hProcess;
456 BYTE symbolBuffer[1024];
457 PIMAGEHLP_SYMBOL pSymbol = (PIMAGEHLP_SYMBOL) symbolBuffer;
458- DWORD dwDisplacement = 0; // Displacement of the input address, relative to the start of the symbol
459+ DWORD dwDisplacement = 0; /* Displacement of the input address, relative to the start of the symbol */
460
461 hProcess = GetCurrentProcess();
462
463diff --git a/src/gallium/auxiliary/util/u_gen_mipmap.c b/src/gallium/auxiliary/util/u_gen_mipmap.c
464index 4e3d35f..aa823aa 100644
465--- a/src/gallium/auxiliary/util/u_gen_mipmap.c
466+++ b/src/gallium/auxiliary/util/u_gen_mipmap.c
467@@ -1427,6 +1427,7 @@ set_vertex_data(struct gen_mipmap_state *ctx,
468 rz = -1.0f;
469 break;
470 default:
471+ rx = ry = rz = 0.0f;
472 assert(0);
473 }
474
475diff --git a/src/gallium/drivers/softpipe/sp_context.c b/src/gallium/drivers/softpipe/sp_context.c
476index 86df320..b4650c0 100644
477--- a/src/gallium/drivers/softpipe/sp_context.c
478+++ b/src/gallium/drivers/softpipe/sp_context.c
479@@ -105,12 +105,17 @@ static void softpipe_destroy( struct pipe_context *pipe )
480 softpipe->quad[i].output->destroy( softpipe->quad[i].output );
481 }
482
483- for (i = 0; i < PIPE_MAX_COLOR_BUFS; i++)
484+ for (i = 0; i < PIPE_MAX_COLOR_BUFS; i++) {
485 sp_destroy_tile_cache(softpipe->cbuf_cache[i]);
486+ pipe_surface_reference(&softpipe->framebuffer.cbufs[i], NULL);
487+ }
488 sp_destroy_tile_cache(softpipe->zsbuf_cache);
489+ pipe_surface_reference(&softpipe->framebuffer.zsbuf, NULL);
490
491- for (i = 0; i < PIPE_MAX_SAMPLERS; i++)
492+ for (i = 0; i < PIPE_MAX_SAMPLERS; i++) {
493 sp_destroy_tile_cache(softpipe->tex_cache[i]);
494+ pipe_texture_reference(&softpipe->texture[i], NULL);
495+ }
496
497 for (i = 0; i < Elements(softpipe->constants); i++) {
498 if (softpipe->constants[i].buffer) {
499diff --git a/src/gallium/drivers/softpipe/sp_fs_sse.c b/src/gallium/drivers/softpipe/sp_fs_sse.c
500index f4fa090..31ccc3b 100644
501--- a/src/gallium/drivers/softpipe/sp_fs_sse.c
502+++ b/src/gallium/drivers/softpipe/sp_fs_sse.c
503@@ -101,7 +101,7 @@ fs_sse_run( const struct sp_fragment_shader *base,
504 machine->Consts,
505 (const float (*)[4])shader->immediates,
506 machine->InterpCoefs
507- // , &machine->QuadPos
508+ /*, &machine->QuadPos*/
509 );
510
511 return ~(machine->Temps[TGSI_EXEC_TEMP_KILMASK_I].xyzw[TGSI_EXEC_TEMP_KILMASK_C].u[0]);
512diff --git a/src/gallium/drivers/softpipe/sp_state_surface.c b/src/gallium/drivers/softpipe/sp_state_surface.c
513index 7c06d86..181bff8 100644
514--- a/src/gallium/drivers/softpipe/sp_state_surface.c
515+++ b/src/gallium/drivers/softpipe/sp_state_surface.c
516@@ -56,7 +56,7 @@ softpipe_set_framebuffer_state(struct pipe_context *pipe,
517 sp_flush_tile_cache(sp, sp->cbuf_cache[i]);
518
519 /* assign new */
520- sp->framebuffer.cbufs[i] = fb->cbufs[i];
521+ pipe_surface_reference(&sp->framebuffer.cbufs[i], fb->cbufs[i]);
522
523 /* update cache */
524 sp_tile_cache_set_surface(sp->cbuf_cache[i], fb->cbufs[i]);
525@@ -71,7 +71,7 @@ softpipe_set_framebuffer_state(struct pipe_context *pipe,
526 sp_flush_tile_cache(sp, sp->zsbuf_cache);
527
528 /* assign new */
529- sp->framebuffer.zsbuf = fb->zsbuf;
530+ pipe_surface_reference(&sp->framebuffer.zsbuf, fb->zsbuf);
531
532 /* update cache */
533 sp_tile_cache_set_surface(sp->zsbuf_cache, fb->zsbuf);
534diff --git a/src/gallium/drivers/softpipe/sp_tile_cache.c b/src/gallium/drivers/softpipe/sp_tile_cache.c
535index 461cbb9..5f7864e 100644
536--- a/src/gallium/drivers/softpipe/sp_tile_cache.c
537+++ b/src/gallium/drivers/softpipe/sp_tile_cache.c
538@@ -130,6 +130,11 @@ sp_create_tile_cache( struct pipe_screen *screen )
539 tc->entries[pos].x =
540 tc->entries[pos].y = -1;
541 }
542+
543+#if TILE_CLEAR_OPTIMIZATION
544+ /* set flags to indicate all the tiles are cleared */
545+ memset(tc->clear_flags, 255, sizeof(tc->clear_flags));
546+#endif
547 }
548 return tc;
549 }
550diff --git a/src/gallium/state_trackers/glx/xlib/glx_api.c b/src/gallium/state_trackers/glx/xlib/glx_api.c
551index d1a98f8..f2881b9 100644
552--- a/src/gallium/state_trackers/glx/xlib/glx_api.c
553+++ b/src/gallium/state_trackers/glx/xlib/glx_api.c
554@@ -850,10 +850,10 @@ choose_visual( Display *dpy, int screen, const int *list, GLboolean fbConfig )
555 if (!fbConfig)
556 return NULL;
557 parselist++;
558- if (*parselist == GLX_RGBA_BIT) {
559+ if (*parselist & GLX_RGBA_BIT) {
560 rgb_flag = GL_TRUE;
561 }
562- else if (*parselist == GLX_COLOR_INDEX_BIT) {
563+ else if (*parselist & GLX_COLOR_INDEX_BIT) {
564 rgb_flag = GL_FALSE;
565 }
566 else if (*parselist == 0) {
567@@ -1309,13 +1309,17 @@ glXCopyContext( Display *dpy, GLXContext src, GLXContext dst,
568
569
570 Bool
571-glXQueryExtension( Display *dpy, int *errorb, int *event )
572+glXQueryExtension( Display *dpy, int *errorBase, int *eventBase )
573 {
574+ int op, ev, err;
575 /* Mesa's GLX isn't really an X extension but we try to act like one. */
576- (void) dpy;
577- (void) errorb;
578- (void) event;
579- return True;
580+ if (!XQueryExtension(dpy, GLX_EXTENSION_NAME, &op, &ev, &err))
581+ ev = err = 0;
582+ if (errorBase)
583+ *errorBase = err;
584+ if (eventBase)
585+ *eventBase = ev;
586+ return True; /* we're faking GLX so always return success */
587 }
588
589
590@@ -1990,32 +1994,42 @@ glXCreatePbuffer( Display *dpy, GLXFBConfig config,
591 break;
592 case GLX_PRESERVED_CONTENTS:
593 attrib++;
594- preserveContents = *attrib; /* ignored */
595+ preserveContents = *attrib;
596 break;
597 case GLX_LARGEST_PBUFFER:
598 attrib++;
599- useLargest = *attrib; /* ignored */
600+ useLargest = *attrib;
601 break;
602 default:
603 return 0;
604 }
605 }
606
607- /* not used at this time */
608- (void) useLargest;
609- (void) preserveContents;
610-
611 if (width == 0 || height == 0)
612 return 0;
613
614+ if (width > MAX_WIDTH || height > MAX_HEIGHT) {
615+ /* If allocation would have failed and GLX_LARGEST_PBUFFER is set,
616+ * allocate the largest possible buffer.
617+ */
618+ if (useLargest) {
619+ width = MAX_WIDTH;
620+ height = MAX_HEIGHT;
621+ }
622+ }
623+
624 xmbuf = XMesaCreatePBuffer( xmvis, 0, width, height);
625 /* A GLXPbuffer handle must be an X Drawable because that's what
626 * glXMakeCurrent takes.
627 */
628- if (xmbuf)
629+ if (xmbuf) {
630+ xmbuf->largestPbuffer = useLargest;
631+ xmbuf->preservedContents = preserveContents;
632 return (GLXPbuffer) xmbuf->drawable;
633- else
634+ }
635+ else {
636 return 0;
637+ }
638 }
639
640
641@@ -2033,22 +2047,26 @@ void
642 glXQueryDrawable( Display *dpy, GLXDrawable draw, int attribute,
643 unsigned int *value )
644 {
645+ GLuint width, height;
646 XMesaBuffer xmbuf = XMesaFindBuffer(dpy, draw);
647 if (!xmbuf)
648 return;
649
650+ /* make sure buffer's dimensions are up to date */
651+ xmesa_get_window_size(dpy, xmbuf, &width, &height);
652+
653 switch (attribute) {
654 case GLX_WIDTH:
655- *value = xmesa_buffer_width(xmbuf);
656+ *value = width;
657 break;
658 case GLX_HEIGHT:
659- *value = xmesa_buffer_width(xmbuf);
660+ *value = height;
661 break;
662 case GLX_PRESERVED_CONTENTS:
663- *value = True;
664+ *value = xmbuf->preservedContents;
665 break;
666 case GLX_LARGEST_PBUFFER:
667- *value = xmesa_buffer_width(xmbuf) * xmesa_buffer_height(xmbuf);
668+ *value = xmbuf->largestPbuffer;
669 break;
670 case GLX_FBCONFIG_ID:
671 *value = xmbuf->xm_visual->visinfo->visualid;
672@@ -2120,9 +2138,9 @@ glXQueryContext( Display *dpy, GLXContext ctx, int attribute, int *value )
673 break;
674 case GLX_RENDER_TYPE:
675 if (xmctx->xm_visual->mesa_visual.rgbMode)
676- *value = GLX_RGBA_BIT;
677+ *value = GLX_RGBA_TYPE;
678 else
679- *value = GLX_COLOR_INDEX_BIT;
680+ *value = GLX_COLOR_INDEX_TYPE;
681 break;
682 case GLX_SCREEN:
683 *value = 0;
684diff --git a/src/gallium/state_trackers/glx/xlib/xm_api.c b/src/gallium/state_trackers/glx/xlib/xm_api.c
685index 957002d..c76dfb3 100644
686--- a/src/gallium/state_trackers/glx/xlib/xm_api.c
687+++ b/src/gallium/state_trackers/glx/xlib/xm_api.c
688@@ -228,7 +228,7 @@ get_drawable_size( Display *dpy, Drawable d, uint *width, uint *height )
689 * \param width returns width in pixels
690 * \param height returns height in pixels
691 */
692-static void
693+void
694 xmesa_get_window_size(Display *dpy, XMesaBuffer b,
695 GLuint *width, GLuint *height)
696 {
697diff --git a/src/gallium/state_trackers/glx/xlib/xm_api.h b/src/gallium/state_trackers/glx/xlib/xm_api.h
698index ce97a3e..d24971c 100644
699--- a/src/gallium/state_trackers/glx/xlib/xm_api.h
700+++ b/src/gallium/state_trackers/glx/xlib/xm_api.h
701@@ -323,6 +323,9 @@ struct xmesa_buffer {
702 Colormap cmap; /* the X colormap */
703 BufferType type; /* window, pixmap, pbuffer or glxwindow */
704
705+ GLboolean largestPbuffer; /**< for pbuffers */
706+ GLboolean preservedContents; /**< for pbuffers */
707+
708 XImage *tempImage;
709 unsigned long selectedEvents;/* for pbuffers only */
710
711@@ -370,6 +373,10 @@ extern XMesaBuffer
712 xmesa_find_buffer(Display *dpy, Colormap cmap, XMesaBuffer notThis);
713
714 extern void
715+xmesa_get_window_size(Display *dpy, XMesaBuffer b,
716+ GLuint *width, GLuint *height);
717+
718+extern void
719 xmesa_check_and_update_buffer_size(XMesaContext xmctx, XMesaBuffer drawBuffer);
720
721 extern void
722diff --git a/src/glx/x11/glxcmds.c b/src/glx/x11/glxcmds.c
723index ea55cc4..cd4aede 100644
724--- a/src/glx/x11/glxcmds.c
725+++ b/src/glx/x11/glxcmds.c
726@@ -398,6 +398,10 @@ CreateContext(Display * dpy, XVisualInfo * vis,
727 _XError(dpy, &error);
728 return None;
729 }
730+ if (renderType == 0) {
731+ /* Initialize renderType now */
732+ renderType = mode->rgbMode ? GLX_RGBA_TYPE : GLX_COLOR_INDEX_TYPE;
733+ }
734 }
735 else {
736 mode = fbconfig;
737@@ -484,6 +488,8 @@ CreateContext(Display * dpy, XVisualInfo * vis,
738 gc->imported = GL_TRUE;
739 }
740
741+ gc->renderType = renderType;
742+
743 return gc;
744 }
745
746@@ -1575,7 +1581,7 @@ GLX_ALIAS(Display *, glXGetCurrentDisplayEXT, (void), (),
747 * This function dynamically determines whether to use the EXT_import_context
748 * version of the protocol or the GLX 1.3 version of the protocol.
749 */
750- static int __glXQueryContextInfo(Display * dpy, GLXContext ctx)
751+static int __glXQueryContextInfo(Display * dpy, GLXContext ctx)
752 {
753 __GLXdisplayPrivate *priv = __glXInitialize(dpy);
754 xGLXQueryContextReply reply;
755@@ -1713,7 +1719,7 @@ GLX_ALIAS(int, glXQueryContextInfoEXT,
756 (Display * dpy, GLXContext ctx, int attribute, int *value),
757 (dpy, ctx, attribute, value), glXQueryContext)
758
759- PUBLIC GLXContextID glXGetContextIDEXT(const GLXContext ctx)
760+PUBLIC GLXContextID glXGetContextIDEXT(const GLXContext ctx)
761 {
762 return ctx->xid;
763 }
764@@ -2159,18 +2165,19 @@ GLX_ALIAS(int, glXGetFBConfigAttribSGIX,
765 (Display * dpy, GLXFBConfigSGIX config, int attribute, int *value),
766 (dpy, config, attribute, value), glXGetFBConfigAttrib)
767
768- PUBLIC GLX_ALIAS(GLXFBConfigSGIX *, glXChooseFBConfigSGIX,
769- (Display * dpy, int screen, int *attrib_list,
770- int *nelements), (dpy, screen, attrib_list, nelements),
771- glXChooseFBConfig)
772+PUBLIC GLX_ALIAS(GLXFBConfigSGIX *, glXChooseFBConfigSGIX,
773+ (Display * dpy, int screen, int *attrib_list,
774+ int *nelements), (dpy, screen, attrib_list, nelements),
775+ glXChooseFBConfig)
776
777- PUBLIC GLX_ALIAS(XVisualInfo *, glXGetVisualFromFBConfigSGIX,
778- (Display * dpy, GLXFBConfigSGIX config),
779- (dpy, config), glXGetVisualFromFBConfig)
780+PUBLIC GLX_ALIAS(XVisualInfo *, glXGetVisualFromFBConfigSGIX,
781+ (Display * dpy, GLXFBConfigSGIX config),
782+ (dpy, config), glXGetVisualFromFBConfig)
783
784- PUBLIC GLXPixmap glXCreateGLXPixmapWithConfigSGIX(Display * dpy,
785- GLXFBConfigSGIX config,
786- Pixmap pixmap)
787+PUBLIC GLXPixmap
788+glXCreateGLXPixmapWithConfigSGIX(Display * dpy,
789+ GLXFBConfigSGIX config,
790+ Pixmap pixmap)
791 {
792 xGLXVendorPrivateWithReplyReq *vpreq;
793 xGLXCreateGLXPixmapWithConfigSGIXReq *req;
794diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c
795index 2741a41..b6c6ef7 100644
796--- a/src/mesa/drivers/common/meta.c
797+++ b/src/mesa/drivers/common/meta.c
798@@ -238,34 +238,10 @@ _mesa_meta_init(GLcontext *ctx)
799 void
800 _mesa_meta_free(GLcontext *ctx)
801 {
802- struct gl_meta_state *meta = ctx->Meta;
803-
804- if (_mesa_get_current_context()) {
805- /* if there's no current context, these textures, buffers, etc should
806- * still get freed by _mesa_free_context_data().
807- */
808-
809- _mesa_DeleteTextures(1, &meta->TempTex.TexObj);
810-
811- /* glBlitFramebuffer */
812- _mesa_DeleteBuffersARB(1, & meta->Blit.VBO);
813- _mesa_DeleteVertexArraysAPPLE(1, &meta->Blit.ArrayObj);
814- _mesa_DeletePrograms(1, &meta->Blit.DepthFP);
815-
816- /* glClear */
817- _mesa_DeleteBuffersARB(1, & meta->Clear.VBO);
818- _mesa_DeleteVertexArraysAPPLE(1, &meta->Clear.ArrayObj);
819-
820- /* glCopyPixels */
821- _mesa_DeleteBuffersARB(1, & meta->CopyPix.VBO);
822- _mesa_DeleteVertexArraysAPPLE(1, &meta->CopyPix.ArrayObj);
823-
824- /* glDrawPixels */
825- _mesa_DeleteVertexArraysAPPLE(1, &meta->DrawPix.ArrayObj);
826- _mesa_DeletePrograms(1, &meta->DrawPix.DepthFP);
827- _mesa_DeletePrograms(1, &meta->DrawPix.StencilFP);
828- }
829-
830+ /* Note: Any textures, VBOs, etc, that we allocate should get
831+ * freed by the normal context destruction code. But this would be
832+ * the place to free other meta data someday.
833+ */
834 _mesa_free(ctx->Meta);
835 ctx->Meta = NULL;
836 }
837diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri/i965/brw_state.h
838index 5335eac..d639656 100644
839--- a/src/mesa/drivers/dri/i965/brw_state.h
840+++ b/src/mesa/drivers/dri/i965/brw_state.h
841@@ -151,6 +151,7 @@ void brw_state_cache_check_size( struct brw_context *brw );
842
843 void brw_init_caches( struct brw_context *brw );
844 void brw_destroy_caches( struct brw_context *brw );
845+void brw_state_cache_bo_delete(struct brw_cache *cache, dri_bo *bo);
846
847 /***********************************************************************
848 * brw_state_batch.c
849diff --git a/src/mesa/drivers/dri/i965/brw_state_cache.c b/src/mesa/drivers/dri/i965/brw_state_cache.c
850index e40d7a0..f8e46aa 100644
851--- a/src/mesa/drivers/dri/i965/brw_state_cache.c
852+++ b/src/mesa/drivers/dri/i965/brw_state_cache.c
853@@ -517,6 +517,55 @@ brw_clear_cache(struct brw_context *brw, struct brw_cache *cache)
854 brw->state.dirty.cache |= ~0;
855 }
856
857+/* Clear all entries from the cache that point to the given bo.
858+ *
859+ * This lets us release memory for reuse earlier for known-dead buffers,
860+ * at the cost of walking the entire hash table.
861+ */
862+void
863+brw_state_cache_bo_delete(struct brw_cache *cache, dri_bo *bo)
864+{
865+ struct brw_cache_item **prev;
866+ GLuint i;
867+
868+ if (INTEL_DEBUG & DEBUG_STATE)
869+ _mesa_printf("%s\n", __FUNCTION__);
870+
871+ for (i = 0; i < cache->size; i++) {
872+ for (prev = &cache->items[i]; *prev;) {
873+ struct brw_cache_item *c = *prev;
874+ int j;
875+
876+ for (j = 0; j < c->nr_reloc_bufs; j++) {
877+ if (c->reloc_bufs[j] == bo)
878+ break;
879+ }
880+
881+ if (j != c->nr_reloc_bufs) {
882+
883+ *prev = c->next;
884+
885+ for (j = 0; j < c->nr_reloc_bufs; j++)
886+ dri_bo_unreference(c->reloc_bufs[j]);
887+ dri_bo_unreference(c->bo);
888+ free((void *)c->key);
889+ free(c);
890+ cache->n_items--;
891+
892+ /* Delete up the tree. Notably we're trying to get from
893+ * a request to delete the surface, to deleting the surface state
894+ * object, to deleting the binding table. We're slack and restart
895+ * the deletion process when we do this because the other delete
896+ * may kill our *prev.
897+ */
898+ brw_state_cache_bo_delete(cache, c->bo);
899+ prev = &cache->items[i];
900+ } else {
901+ prev = &(*prev)->next;
902+ }
903+ }
904+ }
905+}
906
907 void
908 brw_state_cache_check_size(struct brw_context *brw)
909diff --git a/src/mesa/drivers/dri/intel/intel_context.c b/src/mesa/drivers/dri/intel/intel_context.c
910index fce42e9..c49f06e 100644
911--- a/src/mesa/drivers/dri/intel/intel_context.c
912+++ b/src/mesa/drivers/dri/intel/intel_context.c
913@@ -993,41 +993,35 @@ intelMakeCurrent(__DRIcontextPrivate * driContextPriv,
914
915 _mesa_make_current(&intel->ctx, &intel_fb->Base, readFb);
916
917- /* The drawbuffer won't always be updated by _mesa_make_current:
918- */
919- if (intel->ctx.DrawBuffer == &intel_fb->Base) {
920-
921- if (intel->driReadDrawable != driReadPriv)
922- intel->driReadDrawable = driReadPriv;
923-
924- if (intel->driDrawable != driDrawPriv) {
925- if (driDrawPriv->swap_interval == (unsigned)-1) {
926- int i;
927-
928- driDrawPriv->vblFlags = (intel->intelScreen->irq_active != 0)
929- ? driGetDefaultVBlankFlags(&intel->optionCache)
930- : VBLANK_FLAG_NO_IRQ;
931-
932- /* Prevent error printf if one crtc is disabled, this will
933- * be properly calculated in intelWindowMoved() next.
934- */
935- driDrawPriv->vblFlags = intelFixupVblank(intel, driDrawPriv);
936-
937- (*psp->systemTime->getUST) (&intel_fb->swap_ust);
938- driDrawableInitVBlank(driDrawPriv);
939- intel_fb->vbl_waited = driDrawPriv->vblSeq;
940-
941- for (i = 0; i < 2; i++) {
942- if (intel_fb->color_rb[i])
943- intel_fb->color_rb[i]->vbl_pending = driDrawPriv->vblSeq;
944- }
945- }
946- intel->driDrawable = driDrawPriv;
947- intelWindowMoved(intel);
948- }
949+ intel->driReadDrawable = driReadPriv;
950+
951+ if (intel->driDrawable != driDrawPriv) {
952+ if (driDrawPriv->swap_interval == (unsigned)-1) {
953+ int i;
954+
955+ driDrawPriv->vblFlags = (intel->intelScreen->irq_active != 0)
956+ ? driGetDefaultVBlankFlags(&intel->optionCache)
957+ : VBLANK_FLAG_NO_IRQ;
958
959- intel_draw_buffer(&intel->ctx, &intel_fb->Base);
960+ /* Prevent error printf if one crtc is disabled, this will
961+ * be properly calculated in intelWindowMoved() next.
962+ */
963+ driDrawPriv->vblFlags = intelFixupVblank(intel, driDrawPriv);
964+
965+ (*psp->systemTime->getUST) (&intel_fb->swap_ust);
966+ driDrawableInitVBlank(driDrawPriv);
967+ intel_fb->vbl_waited = driDrawPriv->vblSeq;
968+
969+ for (i = 0; i < 2; i++) {
970+ if (intel_fb->color_rb[i])
971+ intel_fb->color_rb[i]->vbl_pending = driDrawPriv->vblSeq;
972+ }
973+ }
974+ intel->driDrawable = driDrawPriv;
975+ intelWindowMoved(intel);
976 }
977+
978+ intel_draw_buffer(&intel->ctx, &intel_fb->Base);
979 }
980 else {
981 _mesa_make_current(NULL, NULL, NULL);
982diff --git a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
983index c985da5..4f5101a 100644
984--- a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
985+++ b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
986@@ -29,6 +29,9 @@
987 #include "intel_mipmap_tree.h"
988 #include "intel_regions.h"
989 #include "intel_chipset.h"
990+#ifndef I915
991+#include "brw_state.h"
992+#endif
993 #include "main/enums.h"
994
995 #define FILE_DEBUG_FLAG DEBUG_MIPTREE
996@@ -269,6 +272,19 @@ intel_miptree_release(struct intel_context *intel,
997
998 DBG("%s deleting %p\n", __FUNCTION__, *mt);
999
1000+#ifndef I915
1001+ /* Free up cached binding tables holding a reference on our buffer, to
1002+ * avoid excessive memory consumption.
1003+ *
1004+ * This isn't as aggressive as we could be, as we'd like to do
1005+ * it from any time we free the last ref on a region. But intel_region.c
1006+ * is context-agnostic. Perhaps our constant state cache should be, as
1007+ * well.
1008+ */
1009+ brw_state_cache_bo_delete(&brw_context(&intel->ctx)->surface_cache,
1010+ (*mt)->region->buffer);
1011+#endif
1012+
1013 intel_region_release(&((*mt)->region));
1014
1015 for (i = 0; i < MAX_TEXTURE_LEVELS; i++)
1016diff --git a/src/mesa/drivers/dri/intel/intel_pixel_read.c b/src/mesa/drivers/dri/intel/intel_pixel_read.c
1017index 8713463..e036736 100644
1018--- a/src/mesa/drivers/dri/intel/intel_pixel_read.c
1019+++ b/src/mesa/drivers/dri/intel/intel_pixel_read.c
1020@@ -236,14 +236,14 @@ do_blit_readpixels(GLcontext * ctx,
1021 intelFlush(&intel->ctx);
1022 LOCK_HARDWARE(intel);
1023
1024- if (intel->driDrawable->numClipRects) {
1025+ if (intel->driReadDrawable->numClipRects) {
1026 GLboolean all = (width * height * src->cpp == dst->Base.Size &&
1027 x == 0 && dst_offset == 0);
1028
1029 dri_bo *dst_buffer = intel_bufferobj_buffer(intel, dst,
1030 all ? INTEL_WRITE_FULL :
1031 INTEL_WRITE_PART);
1032- __DRIdrawablePrivate *dPriv = intel->driDrawable;
1033+ __DRIdrawablePrivate *dPriv = intel->driReadDrawable;
1034 int nbox = dPriv->numClipRects;
1035 drm_clip_rect_t *box = dPriv->pClipRects;
1036 drm_clip_rect_t rect;
1037diff --git a/src/mesa/drivers/dri/intel/intel_tex_copy.c b/src/mesa/drivers/dri/intel/intel_tex_copy.c
1038index 74f7f58..b241c11 100644
1039--- a/src/mesa/drivers/dri/intel/intel_tex_copy.c
1040+++ b/src/mesa/drivers/dri/intel/intel_tex_copy.c
1041@@ -135,7 +135,7 @@ do_copy_texsubimage(struct intel_context *intel,
1042
1043 if (ctx->ReadBuffer->Name == 0) {
1044 /* reading from a window, adjust x, y */
1045- __DRIdrawablePrivate *dPriv = intel->driDrawable;
1046+ const __DRIdrawablePrivate *dPriv = intel->driReadDrawable;
1047 y = dPriv->y + (dPriv->h - (y + height));
1048 x += dPriv->x;
1049
1050diff --git a/src/mesa/drivers/dri/r200/r200_state.c b/src/mesa/drivers/dri/r200/r200_state.c
1051index 76852e3..d28e96d 100644
1052--- a/src/mesa/drivers/dri/r200/r200_state.c
1053+++ b/src/mesa/drivers/dri/r200/r200_state.c
1054@@ -1578,13 +1578,6 @@ static void r200ClearStencil( GLcontext *ctx, GLint s )
1055 * Window position and viewport transformation
1056 */
1057
1058-/*
1059- * To correctly position primitives:
1060- */
1061-#define SUBPIXEL_X 0.125
1062-#define SUBPIXEL_Y 0.125
1063-
1064-
1065 /**
1066 * Called when window size or position changes or viewport or depth range
1067 * state is changed. We update the hardware viewport state here.
1068@@ -1609,9 +1602,9 @@ void r200UpdateWindow( GLcontext *ctx )
1069 }
1070
1071 float_ui32_type sx = { v[MAT_SX] };
1072- float_ui32_type tx = { v[MAT_TX] + xoffset + SUBPIXEL_X };
1073+ float_ui32_type tx = { v[MAT_TX] + xoffset };
1074 float_ui32_type sy = { v[MAT_SY] * y_scale };
1075- float_ui32_type ty = { (v[MAT_TY] * y_scale) + y_bias + SUBPIXEL_Y };
1076+ float_ui32_type ty = { (v[MAT_TY] * y_scale) + y_bias };
1077 float_ui32_type sz = { v[MAT_SZ] * depthScale };
1078 float_ui32_type tz = { v[MAT_TZ] * depthScale };
1079
1080@@ -1680,8 +1673,8 @@ void r200UpdateViewportOffset( GLcontext *ctx )
1081 float_ui32_type tx;
1082 float_ui32_type ty;
1083
1084- tx.f = v[MAT_TX] + xoffset + SUBPIXEL_X;
1085- ty.f = (- v[MAT_TY]) + yoffset + SUBPIXEL_Y;
1086+ tx.f = v[MAT_TX] + xoffset;
1087+ ty.f = (- v[MAT_TY]) + yoffset;
1088
1089 if ( rmesa->hw.vpt.cmd[VPT_SE_VPORT_XOFFSET] != tx.ui32 ||
1090 rmesa->hw.vpt.cmd[VPT_SE_VPORT_YOFFSET] != ty.ui32 )
1091diff --git a/src/mesa/drivers/dri/r300/r300_context.c b/src/mesa/drivers/dri/r300/r300_context.c
1092index 2ea1b82..9df3897 100644
1093--- a/src/mesa/drivers/dri/r300/r300_context.c
1094+++ b/src/mesa/drivers/dri/r300/r300_context.c
1095@@ -374,11 +374,21 @@ static void r300InitConstValues(GLcontext *ctx, radeonScreenPtr screen)
1096 if (screen->chip_family >= CHIP_FAMILY_RV515) {
1097 ctx->Const.FragmentProgram.MaxNativeTemps = R500_PFS_NUM_TEMP_REGS;
1098 ctx->Const.FragmentProgram.MaxNativeAttribs = 11; /* copy i915... */
1099- ctx->Const.FragmentProgram.MaxNativeParameters = R500_PFS_NUM_CONST_REGS;
1100- ctx->Const.FragmentProgram.MaxNativeAluInstructions = R500_PFS_MAX_INST;
1101- ctx->Const.FragmentProgram.MaxNativeTexInstructions = R500_PFS_MAX_INST;
1102- ctx->Const.FragmentProgram.MaxNativeInstructions = R500_PFS_MAX_INST;
1103- ctx->Const.FragmentProgram.MaxNativeTexIndirections = R500_PFS_MAX_INST;
1104+
1105+ /* The hardware limits are higher than this,
1106+ * but the non-KMS DRM interface artificially limits us
1107+ * to this many instructions.
1108+ *
1109+ * We could of course work around it in the KMS path,
1110+ * but it would be a mess, so it seems wiser
1111+ * to leave it as is. Going forward, the Gallium driver
1112+ * will not be subject to these limitations.
1113+ */
1114+ ctx->Const.FragmentProgram.MaxNativeParameters = 255;
1115+ ctx->Const.FragmentProgram.MaxNativeAluInstructions = 255;
1116+ ctx->Const.FragmentProgram.MaxNativeTexInstructions = 255;
1117+ ctx->Const.FragmentProgram.MaxNativeInstructions = 255;
1118+ ctx->Const.FragmentProgram.MaxNativeTexIndirections = 255;
1119 ctx->Const.FragmentProgram.MaxNativeAddressRegs = 0;
1120 } else {
1121 ctx->Const.FragmentProgram.MaxNativeTemps = R300_PFS_NUM_TEMP_REGS;
1122diff --git a/src/mesa/drivers/dri/r300/r300_fragprog_common.c b/src/mesa/drivers/dri/r300/r300_fragprog_common.c
1123index 0bdc90b..70c9252 100644
1124--- a/src/mesa/drivers/dri/r300/r300_fragprog_common.c
1125+++ b/src/mesa/drivers/dri/r300/r300_fragprog_common.c
1126@@ -239,6 +239,19 @@ static void translate_fragment_program(GLcontext *ctx, struct r300_fragment_prog
1127 rewriteFog(&compiler, fp);
1128
1129 r3xx_compile_fragment_program(&compiler);
1130+
1131+ if (compiler.is_r500) {
1132+ /* We need to support the non-KMS DRM interface, which
1133+ * artificially limits the number of instructions and
1134+ * constants which are available to us.
1135+ *
1136+ * See also the comment in r300_context.c where we
1137+ * set the MAX_NATIVE_xxx values.
1138+ */
1139+ if (fp->code.code.r500.inst_end >= 255 || fp->code.constants.Count > 255)
1140+ rc_error(&compiler.Base, "Program is too big (upgrade to r300g to avoid this limitation).\n");
1141+ }
1142+
1143 fp->error = compiler.Base.Error;
1144
1145 fp->InputsRead = compiler.Base.Program.InputsRead;
1146diff --git a/src/mesa/drivers/x11/fakeglx.c b/src/mesa/drivers/x11/fakeglx.c
1147index 34e0b8b..5c0084f 100644
1148--- a/src/mesa/drivers/x11/fakeglx.c
1149+++ b/src/mesa/drivers/x11/fakeglx.c
1150@@ -1197,10 +1197,10 @@ choose_visual( Display *dpy, int screen, const int *list, GLboolean fbConfig )
1151 if (!fbConfig)
1152 return NULL;
1153 parselist++;
1154- if (*parselist == GLX_RGBA_BIT) {
1155+ if (*parselist & GLX_RGBA_BIT) {
1156 rgb_flag = GL_TRUE;
1157 }
1158- else if (*parselist == GLX_COLOR_INDEX_BIT) {
1159+ else if (*parselist & GLX_COLOR_INDEX_BIT) {
1160 rgb_flag = GL_FALSE;
1161 }
1162 else if (*parselist == 0) {
1163@@ -1637,13 +1637,17 @@ Fake_glXCopyContext( Display *dpy, GLXContext src, GLXContext dst,
1164
1165
1166 static Bool
1167-Fake_glXQueryExtension( Display *dpy, int *errorb, int *event )
1168+Fake_glXQueryExtension( Display *dpy, int *errorBase, int *eventBase )
1169 {
1170+ int op, ev, err;
1171 /* Mesa's GLX isn't really an X extension but we try to act like one. */
1172- (void) dpy;
1173- (void) errorb;
1174- (void) event;
1175- return True;
1176+ if (!XQueryExtension(dpy, GLX_EXTENSION_NAME, &op, &ev, &err))
1177+ ev = err = 0;
1178+ if (errorBase)
1179+ *errorBase = err;
1180+ if (eventBase)
1181+ *eventBase = ev;
1182+ return True; /* we're faking GLX so always return success */
1183 }
1184
1185
1186@@ -2349,32 +2353,42 @@ Fake_glXCreatePbuffer( Display *dpy, GLXFBConfig config,
1187 break;
1188 case GLX_PRESERVED_CONTENTS:
1189 attrib++;
1190- preserveContents = *attrib; /* ignored */
1191+ preserveContents = *attrib;
1192 break;
1193 case GLX_LARGEST_PBUFFER:
1194 attrib++;
1195- useLargest = *attrib; /* ignored */
1196+ useLargest = *attrib;
1197 break;
1198 default:
1199 return 0;
1200 }
1201 }
1202
1203- /* not used at this time */
1204- (void) useLargest;
1205- (void) preserveContents;
1206-
1207 if (width == 0 || height == 0)
1208 return 0;
1209
1210+ if (width > MAX_WIDTH || height > MAX_HEIGHT) {
1211+ /* If allocation would have failed and GLX_LARGEST_PBUFFER is set,
1212+ * allocate the largest possible buffer.
1213+ */
1214+ if (useLargest) {
1215+ width = MAX_WIDTH;
1216+ height = MAX_HEIGHT;
1217+ }
1218+ }
1219+
1220 xmbuf = XMesaCreatePBuffer( xmvis, 0, width, height);
1221 /* A GLXPbuffer handle must be an X Drawable because that's what
1222 * glXMakeCurrent takes.
1223 */
1224- if (xmbuf)
1225+ if (xmbuf) {
1226+ xmbuf->largestPbuffer = useLargest;
1227+ xmbuf->preservedContents = preserveContents;
1228 return (GLXPbuffer) xmbuf->frontxrb->pixmap;
1229- else
1230+ }
1231+ else {
1232 return 0;
1233+ }
1234 }
1235
1236
1237@@ -2396,6 +2410,9 @@ Fake_glXQueryDrawable( Display *dpy, GLXDrawable draw, int attribute,
1238 if (!xmbuf)
1239 return;
1240
1241+ /* make sure buffer's dimensions are up to date */
1242+ xmesa_check_and_update_buffer_size(NULL, xmbuf);
1243+
1244 switch (attribute) {
1245 case GLX_WIDTH:
1246 *value = xmbuf->mesa_buffer.Width;
1247@@ -2404,10 +2421,10 @@ Fake_glXQueryDrawable( Display *dpy, GLXDrawable draw, int attribute,
1248 *value = xmbuf->mesa_buffer.Height;
1249 break;
1250 case GLX_PRESERVED_CONTENTS:
1251- *value = True;
1252+ *value = xmbuf->preservedContents;
1253 break;
1254 case GLX_LARGEST_PBUFFER:
1255- *value = xmbuf->mesa_buffer.Width * xmbuf->mesa_buffer.Height;
1256+ *value = xmbuf->largestPbuffer;
1257 break;
1258 case GLX_FBCONFIG_ID:
1259 *value = xmbuf->xm_visual->visinfo->visualid;
1260@@ -2477,9 +2494,9 @@ Fake_glXQueryContext( Display *dpy, GLXContext ctx, int attribute, int *value )
1261 break;
1262 case GLX_RENDER_TYPE:
1263 if (xmctx->xm_visual->mesa_visual.rgbMode)
1264- *value = GLX_RGBA_BIT;
1265+ *value = GLX_RGBA_TYPE;
1266 else
1267- *value = GLX_COLOR_INDEX_BIT;
1268+ *value = GLX_COLOR_INDEX_TYPE;
1269 break;
1270 case GLX_SCREEN:
1271 *value = 0;
1272@@ -2764,10 +2781,10 @@ Fake_glXQueryGLXPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuf, int attribute, un
1273
1274 switch (attribute) {
1275 case GLX_PRESERVED_CONTENTS_SGIX:
1276- *value = True;
1277+ *value = xmbuf->preservedContents;
1278 break;
1279 case GLX_LARGEST_PBUFFER_SGIX:
1280- *value = xmbuf->mesa_buffer.Width * xmbuf->mesa_buffer.Height;
1281+ *value = xmbuf->largestPbuffer;
1282 break;
1283 case GLX_WIDTH_SGIX:
1284 *value = xmbuf->mesa_buffer.Width;
1285diff --git a/src/mesa/drivers/x11/xmesaP.h b/src/mesa/drivers/x11/xmesaP.h
1286index 25db558..3ffd766 100644
1287--- a/src/mesa/drivers/x11/xmesaP.h
1288+++ b/src/mesa/drivers/x11/xmesaP.h
1289@@ -212,6 +212,9 @@ struct xmesa_buffer {
1290 XMesaDisplay *display;
1291 BufferType type; /* window, pixmap, pbuffer or glxwindow */
1292
1293+ GLboolean largestPbuffer; /**< for pbuffers */
1294+ GLboolean preservedContents; /**< for pbuffers */
1295+
1296 struct xmesa_renderbuffer *frontxrb; /* front color renderbuffer */
1297 struct xmesa_renderbuffer *backxrb; /* back color renderbuffer */
1298
1299diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
1300index f6d4ac4..ac6540f 100644
1301--- a/src/mesa/main/context.c
1302+++ b/src/mesa/main/context.c
1303@@ -898,6 +898,7 @@ _mesa_initialize_context(GLcontext *ctx,
1304 _mesa_free_shared_state(ctx, ctx->Shared);
1305 if (ctx->Exec)
1306 _mesa_free(ctx->Exec);
1307+ return GL_FALSE;
1308 }
1309 #if FEATURE_dispatch
1310 _mesa_init_exec_table(ctx->Exec);
1311diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c
1312index b53c173..41a5b61 100644
1313--- a/src/mesa/main/dlist.c
1314+++ b/src/mesa/main/dlist.c
1315@@ -1956,6 +1956,9 @@ save_Fogiv(GLenum pname, const GLint *params)
1316 case GL_FOG_END:
1317 case GL_FOG_INDEX:
1318 p[0] = (GLfloat) *params;
1319+ p[1] = 0.0f;
1320+ p[2] = 0.0f;
1321+ p[3] = 0.0f;
1322 break;
1323 case GL_FOG_COLOR:
1324 p[0] = INT_TO_FLOAT(params[0]);
1325@@ -2244,6 +2247,9 @@ save_LightModeliv(GLenum pname, const GLint *params)
1326 case GL_LIGHT_MODEL_TWO_SIDE:
1327 case GL_LIGHT_MODEL_COLOR_CONTROL:
1328 fparam[0] = (GLfloat) params[0];
1329+ fparam[1] = 0.0F;
1330+ fparam[2] = 0.0F;
1331+ fparam[3] = 0.0F;
1332 break;
1333 default:
1334 /* Error will be caught later in gl_LightModelfv */
1335diff --git a/src/mesa/main/image.c b/src/mesa/main/image.c
1336index baecbab..139e56a 100644
1337--- a/src/mesa/main/image.c
1338+++ b/src/mesa/main/image.c
1339@@ -5511,7 +5511,7 @@ _mesa_clip_drawpixels(const GLcontext *ctx,
1340 }
1341
1342 if (*height <= 0)
1343- return GL_TRUE;
1344+ return GL_FALSE;
1345
1346 return GL_TRUE;
1347 }
1348@@ -5564,7 +5564,7 @@ _mesa_clip_readpixels(const GLcontext *ctx,
1349 *height -= (*srcY + *height - buffer->Height);
1350
1351 if (*height <= 0)
1352- return GL_TRUE;
1353+ return GL_FALSE;
1354
1355 return GL_TRUE;
1356 }
1357diff --git a/src/mesa/main/mipmap.c b/src/mesa/main/mipmap.c
1358index 3dca09d..c3928fa 100644
1359--- a/src/mesa/main/mipmap.c
1360+++ b/src/mesa/main/mipmap.c
1361@@ -1501,8 +1501,7 @@ _mesa_generate_mipmap(GLcontext *ctx, GLenum target,
1362 GLuint comps;
1363
1364 ASSERT(texObj);
1365- /* XXX choose cube map face here??? */
1366- srcImage = texObj->Image[0][texObj->BaseLevel];
1367+ srcImage = _mesa_select_tex_image(ctx, texObj, target, texObj->BaseLevel);
1368 ASSERT(srcImage);
1369
1370 maxLevels = _mesa_max_texture_levels(ctx, texObj->Target);
1371@@ -1510,7 +1509,9 @@ _mesa_generate_mipmap(GLcontext *ctx, GLenum target,
1372
1373 /* Find convertFormat - the format that do_row() will process */
1374 if (srcImage->IsCompressed) {
1375- /* setup for compressed textures */
1376+ /* setup for compressed textures - need to allocate temporary
1377+ * image buffers to hold uncompressed images.
1378+ */
1379 GLuint row;
1380 GLint components, size;
1381 GLchan *dst;
1382@@ -1587,11 +1588,7 @@ _mesa_generate_mipmap(GLcontext *ctx, GLenum target,
1383 &dstWidth, &dstHeight, &dstDepth);
1384 if (!nextLevel) {
1385 /* all done */
1386- if (srcImage->IsCompressed) {
1387- _mesa_free((void *) srcData);
1388- _mesa_free(dstData);
1389- }
1390- return;
1391+ break;
1392 }
1393
1394 /* get dest gl_texture_image */
1395@@ -1682,6 +1679,12 @@ _mesa_generate_mipmap(GLcontext *ctx, GLenum target,
1396 }
1397
1398 } /* loop over mipmap levels */
1399+
1400+ if (srcImage->IsCompressed) {
1401+ /* free uncompressed image buffers */
1402+ _mesa_free((void *) srcData);
1403+ _mesa_free(dstData);
1404+ }
1405 }
1406
1407
1408diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c
1409index d09c439..da55ac8 100644
1410--- a/src/mesa/main/texobj.c
1411+++ b/src/mesa/main/texobj.c
1412@@ -863,7 +863,7 @@ unbind_texobj_from_texunits(GLcontext *ctx, struct gl_texture_object *texObj)
1413 for (tex = 0; tex < NUM_TEXTURE_TARGETS; tex++) {
1414 if (texObj == unit->CurrentTex[tex]) {
1415 _mesa_reference_texobj(&unit->CurrentTex[tex],
1416- ctx->Shared->DefaultTex[TEXTURE_1D_INDEX]);
1417+ ctx->Shared->DefaultTex[tex]);
1418 ASSERT(unit->CurrentTex[tex]);
1419 break;
1420 }
1421diff --git a/src/mesa/main/texstate.c b/src/mesa/main/texstate.c
1422index 861c5f3..8292d43 100644
1423--- a/src/mesa/main/texstate.c
1424+++ b/src/mesa/main/texstate.c
1425@@ -99,16 +99,22 @@ _mesa_copy_texture_state( const GLcontext *src, GLcontext *dst )
1426 dst->Texture.Unit[u].BumpTarget = src->Texture.Unit[u].BumpTarget;
1427 COPY_4V(dst->Texture.Unit[u].RotMatrix, src->Texture.Unit[u].RotMatrix);
1428
1429+ /*
1430+ * XXX strictly speaking, we should compare texture names/ids and
1431+ * bind textures in the dest context according to id. For now, only
1432+ * copy bindings if the contexts share the same pool of textures to
1433+ * avoid refcounting bugs.
1434+ */
1435+ if (dst->Shared == src->Shared) {
1436+ /* copy texture object bindings, not contents of texture objects */
1437+ _mesa_lock_context_textures(dst);
1438
1439- /* copy texture object bindings, not contents of texture objects */
1440- _mesa_lock_context_textures(dst);
1441-
1442- for (tex = 0; tex < NUM_TEXTURE_TARGETS; tex++) {
1443- _mesa_reference_texobj(&dst->Texture.Unit[u].CurrentTex[tex],
1444- src->Texture.Unit[u].CurrentTex[tex]);
1445+ for (tex = 0; tex < NUM_TEXTURE_TARGETS; tex++) {
1446+ _mesa_reference_texobj(&dst->Texture.Unit[u].CurrentTex[tex],
1447+ src->Texture.Unit[u].CurrentTex[tex]);
1448+ }
1449+ _mesa_unlock_context_textures(dst);
1450 }
1451-
1452- _mesa_unlock_context_textures(dst);
1453 }
1454 }
1455
1456diff --git a/src/mesa/main/version.h b/src/mesa/main/version.h
1457index 0ccdbf9..f24e11c 100644
1458--- a/src/mesa/main/version.h
1459+++ b/src/mesa/main/version.h
1460@@ -1,6 +1,6 @@
1461 /*
1462 * Mesa 3-D graphics library
1463- * Version: 7.6
1464+ * Version: 7.6.1
1465 *
1466 * Copyright (C) 1999-2008 Brian Paul All Rights Reserved.
1467 * Copyright (C) 2009 VMware, Inc. All Rights Reserved.
1468@@ -31,8 +31,8 @@
1469 /* Mesa version */
1470 #define MESA_MAJOR 7
1471 #define MESA_MINOR 6
1472-#define MESA_PATCH 0
1473-#define MESA_VERSION_STRING "7.6"
1474+#define MESA_PATCH 1
1475+#define MESA_VERSION_STRING "7.6.1-devel"
1476
1477 /* To make version comparison easy */
1478 #define MESA_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
1479diff --git a/src/mesa/shader/prog_execute.c b/src/mesa/shader/prog_execute.c
1480index 69b81e7..192d39a 100644
1481--- a/src/mesa/shader/prog_execute.c
1482+++ b/src/mesa/shader/prog_execute.c
1483@@ -939,7 +939,7 @@ _mesa_execute_program(GLcontext * ctx,
1484 /* The fast LOG2 macro doesn't meet the precision requirements.
1485 */
1486 if (a[0] == 0.0F) {
1487- val = 0.0F;
1488+ val = -FLT_MAX;
1489 }
1490 else {
1491 val = log(a[0]) * 1.442695F;
1492diff --git a/src/mesa/shader/prog_optimize.c b/src/mesa/shader/prog_optimize.c
1493index be90310..9d93748 100644
1494--- a/src/mesa/shader/prog_optimize.c
1495+++ b/src/mesa/shader/prog_optimize.c
1496@@ -217,6 +217,7 @@ _mesa_remove_dead_code(struct gl_program *prog)
1497 if (inst->SrcReg[j].RelAddr) {
1498 if (dbg)
1499 _mesa_printf("abort remove dead code (indirect temp)\n");
1500+ _mesa_free(removeInst);
1501 return;
1502 }
1503
1504@@ -232,6 +233,7 @@ _mesa_remove_dead_code(struct gl_program *prog)
1505 if (inst->DstReg.RelAddr) {
1506 if (dbg)
1507 _mesa_printf("abort remove dead code (indirect temp)\n");
1508+ _mesa_free(removeInst);
1509 return;
1510 }
1511
1512@@ -422,6 +424,8 @@ _mesa_remove_extra_moves(struct gl_program *prog)
1513 /* now remove the instructions which aren't needed */
1514 rem = remove_instructions(prog, removeInst);
1515
1516+ _mesa_free(removeInst);
1517+
1518 if (dbg) {
1519 _mesa_printf("Optimize: End remove extra moves. %u instructions removed\n", rem);
1520 /*_mesa_print_program(prog);*/
1521diff --git a/src/mesa/shader/prog_parameter.h b/src/mesa/shader/prog_parameter.h
1522index d1fcf47..699cb0c 100644
1523--- a/src/mesa/shader/prog_parameter.h
1524+++ b/src/mesa/shader/prog_parameter.h
1525@@ -56,7 +56,13 @@ struct gl_program_parameter
1526 const char *Name; /**< Null-terminated string */
1527 gl_register_file Type; /**< PROGRAM_NAMED_PARAM, CONSTANT or STATE_VAR */
1528 GLenum DataType; /**< GL_FLOAT, GL_FLOAT_VEC2, etc */
1529- GLuint Size; /**< Number of components (1..4) */
1530+ /**
1531+ * Number of components (1..4), or more.
1532+ * If the number of components is greater than 4,
1533+ * this parameter is part of a larger uniform like a GLSL matrix or array.
1534+ * The next program parameter's Size will be Size-4 of this parameter.
1535+ */
1536+ GLuint Size;
1537 GLboolean Used; /**< Helper flag for GLSL uniform tracking */
1538 GLboolean Initialized; /**< Has the ParameterValue[] been set? */
1539 GLbitfield Flags; /**< Bitmask of PROG_PARAM_*_BIT */
1540diff --git a/src/mesa/shader/shader_api.c b/src/mesa/shader/shader_api.c
1541index 178b7d0..b282d7a 100644
1542--- a/src/mesa/shader/shader_api.c
1543+++ b/src/mesa/shader/shader_api.c
1544@@ -1702,8 +1702,8 @@ set_program_uniform(GLcontext *ctx, struct gl_program *program,
1545 /* we'll ignore extra data below */
1546 }
1547 else {
1548- /* non-array: count must be one */
1549- if (count != 1) {
1550+ /* non-array: count must be at most one; count == 0 is handled by the loop below */
1551+ if (count > 1) {
1552 _mesa_error(ctx, GL_INVALID_OPERATION,
1553 "glUniform(uniform is not an array)");
1554 return;
1555@@ -1880,20 +1880,27 @@ set_program_uniform_matrix(GLcontext *ctx, struct gl_program *program,
1556 GLboolean transpose, const GLfloat *values)
1557 {
1558 GLuint mat, row, col;
1559- GLuint dst = index + offset, src = 0;
1560+ GLuint src = 0;
1561+ const struct gl_program_parameter * param = &program->Parameters->Parameters[index];
1562+ const GLint slots = (param->Size + 3) / 4;
1563+ const GLint typeSize = sizeof_glsl_type(param->DataType);
1564 GLint nr, nc;
1565
1566 /* check that the number of rows, columns is correct */
1567- get_matrix_dims(program->Parameters->Parameters[index].DataType, &nr, &nc);
1568+ get_matrix_dims(param->DataType, &nr, &nc);
1569 if (rows != nr || cols != nc) {
1570 _mesa_error(ctx, GL_INVALID_OPERATION,
1571 "glUniformMatrix(matrix size mismatch)");
1572 return;
1573 }
1574
1575- if (index + offset > program->Parameters->Size) {
1576- /* out of bounds! */
1577- return;
1578+ if (param->Size <= typeSize) {
1579+ /* non-array: count must be at most one; count == 0 is handled by the loop below */
1580+ if (count > 1) {
1581+ _mesa_error(ctx, GL_INVALID_OPERATION,
1582+ "glUniformMatrix(uniform is not an array)");
1583+ return;
1584+ }
1585 }
1586
1587 /*
1588@@ -1907,7 +1914,12 @@ set_program_uniform_matrix(GLcontext *ctx, struct gl_program *program,
1589
1590 /* each matrix: */
1591 for (col = 0; col < cols; col++) {
1592- GLfloat *v = program->Parameters->ParameterValues[dst];
1593+ GLfloat *v;
1594+ if (offset >= slots) {
1595+ /* Ignore writes beyond the end of (the used part of) an array */
1596+ return;
1597+ }
1598+ v = program->Parameters->ParameterValues[index + offset];
1599 for (row = 0; row < rows; row++) {
1600 if (transpose) {
1601 v[row] = values[src + row * cols + col];
1602@@ -1916,7 +1928,8 @@ set_program_uniform_matrix(GLcontext *ctx, struct gl_program *program,
1603 v[row] = values[src + col * rows + row];
1604 }
1605 }
1606- dst++;
1607+
1608+ offset++;
1609 }
1610
1611 src += rows * cols; /* next matrix */
1612diff --git a/src/mesa/shader/slang/library/slang_common_builtin.gc b/src/mesa/shader/slang/library/slang_common_builtin.gc
1613index 9764fc2..56de47e 100644
1614--- a/src/mesa/shader/slang/library/slang_common_builtin.gc
1615+++ b/src/mesa/shader/slang/library/slang_common_builtin.gc
1616@@ -602,42 +602,50 @@ vec4 exp2(const vec4 a)
1617
1618 float sqrt(const float x)
1619 {
1620+ const float nx = -x;
1621 float r;
1622 __asm float_rsq r, x;
1623- __asm float_rcp __retVal, r;
1624-}
1625-
1626-vec2 sqrt(const vec2 v)
1627-{
1628- float r;
1629- __asm float_rsq r, v.x;
1630- __asm float_rcp __retVal.x, r;
1631- __asm float_rsq r, v.y;
1632- __asm float_rcp __retVal.y, r;
1633-}
1634-
1635-vec3 sqrt(const vec3 v)
1636-{
1637- float r;
1638- __asm float_rsq r, v.x;
1639- __asm float_rcp __retVal.x, r;
1640- __asm float_rsq r, v.y;
1641- __asm float_rcp __retVal.y, r;
1642- __asm float_rsq r, v.z;
1643- __asm float_rcp __retVal.z, r;
1644-}
1645-
1646-vec4 sqrt(const vec4 v)
1647-{
1648- float r;
1649- __asm float_rsq r, v.x;
1650- __asm float_rcp __retVal.x, r;
1651- __asm float_rsq r, v.y;
1652- __asm float_rcp __retVal.y, r;
1653- __asm float_rsq r, v.z;
1654- __asm float_rcp __retVal.z, r;
1655- __asm float_rsq r, v.w;
1656- __asm float_rcp __retVal.w, r;
1657+ __asm float_rcp r, r;
1658+ __asm vec4_cmp __retVal, nx, r, 0.0;
1659+}
1660+
1661+vec2 sqrt(const vec2 x)
1662+{
1663+ const vec2 nx = -x, zero = vec2(0.0);
1664+ vec2 r;
1665+ __asm float_rsq r.x, x.x;
1666+ __asm float_rsq r.y, x.y;
1667+ __asm float_rcp r.x, r.x;
1668+ __asm float_rcp r.y, r.y;
1669+ __asm vec4_cmp __retVal, nx, r, zero;
1670+}
1671+
1672+vec3 sqrt(const vec3 x)
1673+{
1674+ const vec3 nx = -x, zero = vec3(0.0);
1675+ vec3 r;
1676+ __asm float_rsq r.x, x.x;
1677+ __asm float_rsq r.y, x.y;
1678+ __asm float_rsq r.z, x.z;
1679+ __asm float_rcp r.x, r.x;
1680+ __asm float_rcp r.y, r.y;
1681+ __asm float_rcp r.z, r.z;
1682+ __asm vec4_cmp __retVal, nx, r, zero;
1683+}
1684+
1685+vec4 sqrt(const vec4 x)
1686+{
1687+ const vec4 nx = -x, zero = vec4(0.0);
1688+ vec4 r;
1689+ __asm float_rsq r.x, x.x;
1690+ __asm float_rsq r.y, x.y;
1691+ __asm float_rsq r.z, x.z;
1692+ __asm float_rsq r.w, x.w;
1693+ __asm float_rcp r.x, r.x;
1694+ __asm float_rcp r.y, r.y;
1695+ __asm float_rcp r.z, r.z;
1696+ __asm float_rcp r.w, r.w;
1697+ __asm vec4_cmp __retVal, nx, r, zero;
1698 }
1699
1700
1701diff --git a/src/mesa/shader/slang/library/slang_common_builtin_gc.h b/src/mesa/shader/slang/library/slang_common_builtin_gc.h
1702index 78a7b83..3c3666e 100644
1703--- a/src/mesa/shader/slang/library/slang_common_builtin_gc.h
1704+++ b/src/mesa/shader/slang/library/slang_common_builtin_gc.h
1705@@ -307,55 +307,63 @@
1706 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,
1707 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,
1708 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,
1709-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,
1710-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,
1711-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,
1712-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,
1713-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,
1714-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,
1715-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,
1716-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,
1717-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,
1718-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,
1719-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,
1720-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,
1721-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,
1722-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,
1723-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,
1724-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,
1725-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,
1726-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,
1727-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,
1728-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,
1729-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,
1730-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,
1731-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,
1732-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,
1733-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,
1734-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,
1735-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,
1736-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,
1737-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,
1738-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,
1739-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,
1740-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,
1741-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,
1742-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,
1743-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,
1744-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,
1745-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,
1746-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,
1747-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,
1748-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,
1749-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,
1750-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,
1751-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,
1752-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,
1753-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,
1754-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,
1755-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,
1756-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,
1757-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,
1758+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,
1759+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,
1760+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,
1761+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,
1762+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,
1763+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,
1764+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,
1765+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,
1766+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,
1767+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,
1768+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,
1769+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,
1770+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,
1771+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,
1772+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,
1773+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,
1774+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,
1775+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,
1776+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,
1777+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,
1778+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,
1779+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,
1780+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,
1781+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,
1782+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,
1783+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,
1784+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,
1785+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,
1786+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,
1787+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,
1788+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,
1789+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,
1790+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,
1791+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,
1792+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,
1793+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,
1794+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,
1795+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,
1796+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,
1797+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,
1798+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,
1799+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,
1800+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,
1801+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,
1802+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,
1803+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,
1804+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,
1805+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,
1806+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,
1807+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,
1808+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,
1809+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,
1810+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,
1811+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,
1812+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,
1813+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,
1814+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,
1815 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,
1816 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,
1817 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,
1818diff --git a/src/mesa/shader/slang/slang_codegen.c b/src/mesa/shader/slang/slang_codegen.c
1819index 703af9f..344dfdc 100644
1820--- a/src/mesa/shader/slang/slang_codegen.c
1821+++ b/src/mesa/shader/slang/slang_codegen.c
1822@@ -422,6 +422,7 @@ static slang_asm_info AsmInfo[] = {
1823 { "vec4_lrp", IR_LRP, 1, 3 },
1824 { "vec4_min", IR_MIN, 1, 2 },
1825 { "vec4_max", IR_MAX, 1, 2 },
1826+ { "vec4_cmp", IR_CMP, 1, 3 },
1827 { "vec4_clamp", IR_CLAMP, 1, 3 },
1828 { "vec4_seq", IR_SEQUAL, 1, 2 },
1829 { "vec4_sne", IR_SNEQUAL, 1, 2 },
1830diff --git a/src/mesa/shader/slang/slang_emit.c b/src/mesa/shader/slang/slang_emit.c
1831index 3f455e0..3af301e 100644
1832--- a/src/mesa/shader/slang/slang_emit.c
1833+++ b/src/mesa/shader/slang/slang_emit.c
1834@@ -2287,6 +2287,7 @@ emit(slang_emit_info *emitInfo, slang_ir_node *n)
1835 case IR_POW:
1836 /* trinary operators */
1837 case IR_LRP:
1838+ case IR_CMP:
1839 return emit_arith(emitInfo, n);
1840
1841 case IR_EQUAL:
1842diff --git a/src/mesa/shader/slang/slang_ir.c b/src/mesa/shader/slang/slang_ir.c
1843index 1c7f747..6260350 100644
1844--- a/src/mesa/shader/slang/slang_ir.c
1845+++ b/src/mesa/shader/slang/slang_ir.c
1846@@ -80,6 +80,7 @@ static const slang_ir_info IrInfo[] = {
1847 { IR_NOISE4, "IR_NOISE4", OPCODE_NOISE4, 1, 1 },
1848
1849 /* other */
1850+ { IR_CMP, "IR_CMP", OPCODE_CMP, 4, 3 }, /* compare/select */
1851 { IR_SEQ, "IR_SEQ", OPCODE_NOP, 0, 0 },
1852 { IR_SCOPE, "IR_SCOPE", OPCODE_NOP, 0, 0 },
1853 { IR_LABEL, "IR_LABEL", OPCODE_NOP, 0, 0 },
1854diff --git a/src/mesa/shader/slang/slang_ir.h b/src/mesa/shader/slang/slang_ir.h
1855index e796693..166b4e8 100644
1856--- a/src/mesa/shader/slang/slang_ir.h
1857+++ b/src/mesa/shader/slang/slang_ir.h
1858@@ -91,6 +91,7 @@ typedef enum
1859 IR_CLAMP,
1860 IR_MIN,
1861 IR_MAX,
1862+ IR_CMP, /* = (op0 < 0) ? op1 : op2 */
1863 IR_SEQUAL, /* Set if args are equal (vector) */
1864 IR_SNEQUAL, /* Set if args are not equal (vector) */
1865 IR_SGE, /* Set if greater or equal (vector) */
1866diff --git a/src/mesa/shader/slang/slang_link.c b/src/mesa/shader/slang/slang_link.c
1867index 8f2b40d..71038d2 100644
1868--- a/src/mesa/shader/slang/slang_link.c
1869+++ b/src/mesa/shader/slang/slang_link.c
1870@@ -670,6 +670,7 @@ get_main_shader(GLcontext *ctx,
1871 !shader->Main ||
1872 shader->UnresolvedRefs) {
1873 link_error(shProg, "Unresolved symbols");
1874+ _mesa_free_shader(ctx, shader);
1875 return NULL;
1876 }
1877 }
1878diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c b/src/mesa/state_tracker/st_cb_drawpixels.c
1879index a9cafbf..c655690 100644
1880--- a/src/mesa/state_tracker/st_cb_drawpixels.c
1881+++ b/src/mesa/state_tracker/st_cb_drawpixels.c
1882@@ -598,15 +598,15 @@ draw_textured_quad(GLcontext *ctx, GLint x, GLint y, GLfloat z,
1883
1884 /* viewport state: viewport matching window dims */
1885 {
1886- const float width = (float) ctx->DrawBuffer->Width;
1887- const float height = (float) ctx->DrawBuffer->Height;
1888+ const float w = (float) ctx->DrawBuffer->Width;
1889+ const float h = (float) ctx->DrawBuffer->Height;
1890 struct pipe_viewport_state vp;
1891- vp.scale[0] = 0.5f * width;
1892- vp.scale[1] = -0.5f * height;
1893+ vp.scale[0] = 0.5f * w;
1894+ vp.scale[1] = -0.5f * h;
1895 vp.scale[2] = 1.0f;
1896 vp.scale[3] = 1.0f;
1897- vp.translate[0] = 0.5f * width;
1898- vp.translate[1] = 0.5f * height;
1899+ vp.translate[0] = 0.5f * w;
1900+ vp.translate[1] = 0.5f * h;
1901 vp.translate[2] = 0.0f;
1902 vp.translate[3] = 0.0f;
1903 cso_set_viewport(cso, &vp);
1904diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c
1905index fe0a121..e8399de 100644
1906--- a/src/mesa/state_tracker/st_cb_fbo.c
1907+++ b/src/mesa/state_tracker/st_cb_fbo.c
1908@@ -165,12 +165,12 @@ st_renderbuffer_alloc_storage(GLcontext * ctx, struct gl_renderbuffer *rb,
1909 strb->texture,
1910 0, 0, 0,
1911 surface_usage );
1912-
1913- assert(strb->surface->texture);
1914- assert(strb->surface->format);
1915- assert(strb->surface->width == width);
1916- assert(strb->surface->height == height);
1917-
1918+ if (strb->surface) {
1919+ assert(strb->surface->texture);
1920+ assert(strb->surface->format);
1921+ assert(strb->surface->width == width);
1922+ assert(strb->surface->height == height);
1923+ }
1924
1925 return strb->surface != NULL;
1926 }
1927@@ -298,6 +298,7 @@ st_new_renderbuffer_fb(enum pipe_format format, int samples, boolean sw)
1928 default:
1929 _mesa_problem(NULL,
1930 "Unexpected format in st_new_renderbuffer_fb");
1931+ _mesa_free(strb);
1932 return NULL;
1933 }
1934
1935diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c
1936index b13e377..50675b5 100644
1937--- a/src/mesa/state_tracker/st_cb_texture.c
1938+++ b/src/mesa/state_tracker/st_cb_texture.c
1939@@ -1775,7 +1775,11 @@ st_finalize_texture(GLcontext *ctx,
1940 * incomplete. In that case, we'll have set stObj->lastLevel before
1941 * we get here.
1942 */
1943- stObj->lastLevel = stObj->base._MaxLevel - stObj->base.BaseLevel;
1944+ if (stObj->base.MinFilter == GL_LINEAR ||
1945+ stObj->base.MinFilter == GL_NEAREST)
1946+ stObj->lastLevel = stObj->base.BaseLevel;
1947+ else
1948+ stObj->lastLevel = stObj->base._MaxLevel - stObj->base.BaseLevel;
1949 }
1950
1951 firstImage = st_texture_image(stObj->base.Image[0][stObj->base.BaseLevel]);
1952diff --git a/src/mesa/swrast/s_depth.c b/src/mesa/swrast/s_depth.c
1953index 26e23f0..7086cae 100644
1954--- a/src/mesa/swrast/s_depth.c
1955+++ b/src/mesa/swrast/s_depth.c
1956@@ -1211,6 +1211,7 @@ _swrast_read_depth_span_float( GLcontext *ctx, struct gl_renderbuffer *rb,
1957 if (!rb) {
1958 /* really only doing this to prevent FP exceptions later */
1959 _mesa_bzero(depth, n * sizeof(GLfloat));
1960+ return;
1961 }
1962
1963 ASSERT(rb->_BaseFormat == GL_DEPTH_COMPONENT);
1964@@ -1273,7 +1274,8 @@ _swrast_read_depth_span_uint( GLcontext *ctx, struct gl_renderbuffer *rb,
1965 {
1966 if (!rb) {
1967 /* really only doing this to prevent FP exceptions later */
1968- _mesa_bzero(depth, n * sizeof(GLfloat));
1969+ _mesa_bzero(depth, n * sizeof(GLuint));
1970+ return;
1971 }
1972
1973 ASSERT(rb->_BaseFormat == GL_DEPTH_COMPONENT);
This page took 0.285875 seconds and 4 git commands to generate.