]>
Commit | Line | Data |
---|---|---|
d732f05e AM |
1 | diff --git a/include/GL/gl_mangle.h b/include/GL/gl_mangle.h |
2 | index 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) | |
243 | diff --git a/progs/glsl/skinning.c b/progs/glsl/skinning.c | |
244 | index 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"; | |
257 | diff --git a/progs/glsl/texaaline.c b/progs/glsl/texaaline.c | |
258 | index 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; | |
271 | diff --git a/progs/glsl/twoside.c b/progs/glsl/twoside.c | |
272 | index 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; | |
285 | diff --git a/progs/xdemos/pbdemo.c b/progs/xdemos/pbdemo.c | |
286 | index 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) { | |
320 | diff --git a/src/gallium/auxiliary/cso_cache/cso_context.c b/src/gallium/auxiliary/cso_cache/cso_context.c | |
321 | index 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 | } | |
333 | diff --git a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_emit.c b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_emit.c | |
334 | index 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 ) | |
355 | diff --git a/src/gallium/auxiliary/draw/draw_pt_post_vs.c b/src/gallium/auxiliary/draw/draw_pt_post_vs.c | |
356 | index 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 | } | |
368 | diff --git a/src/gallium/auxiliary/draw/draw_vs_aos.c b/src/gallium/auxiliary/draw/draw_vs_aos.c | |
369 | index 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: | |
398 | diff --git a/src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c b/src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c | |
399 | index 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); | |
411 | diff --git a/src/gallium/auxiliary/translate/translate_generic.c b/src/gallium/auxiliary/translate/translate_generic.c | |
412 | index 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 ) | |
424 | diff --git a/src/gallium/auxiliary/util/u_cpu_detect.c b/src/gallium/auxiliary/util/u_cpu_detect.c | |
425 | index 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. | |
437 | diff --git a/src/gallium/auxiliary/util/u_debug_profile.c b/src/gallium/auxiliary/util/u_debug_profile.c | |
438 | index 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') { | |
450 | diff --git a/src/gallium/auxiliary/util/u_debug_symbol.c b/src/gallium/auxiliary/util/u_debug_symbol.c | |
451 | index 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 | ||
463 | diff --git a/src/gallium/auxiliary/util/u_gen_mipmap.c b/src/gallium/auxiliary/util/u_gen_mipmap.c | |
464 | index 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 | ||
475 | diff --git a/src/gallium/drivers/softpipe/sp_context.c b/src/gallium/drivers/softpipe/sp_context.c | |
476 | index 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) { | |
499 | diff --git a/src/gallium/drivers/softpipe/sp_fs_sse.c b/src/gallium/drivers/softpipe/sp_fs_sse.c | |
500 | index 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]); | |
512 | diff --git a/src/gallium/drivers/softpipe/sp_state_surface.c b/src/gallium/drivers/softpipe/sp_state_surface.c | |
513 | index 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); | |
534 | diff --git a/src/gallium/drivers/softpipe/sp_tile_cache.c b/src/gallium/drivers/softpipe/sp_tile_cache.c | |
535 | index 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 | } | |
550 | diff --git a/src/gallium/state_trackers/glx/xlib/glx_api.c b/src/gallium/state_trackers/glx/xlib/glx_api.c | |
551 | index 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; | |
684 | diff --git a/src/gallium/state_trackers/glx/xlib/xm_api.c b/src/gallium/state_trackers/glx/xlib/xm_api.c | |
685 | index 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 | { | |
697 | diff --git a/src/gallium/state_trackers/glx/xlib/xm_api.h b/src/gallium/state_trackers/glx/xlib/xm_api.h | |
698 | index 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 | |
722 | diff --git a/src/glx/x11/glxcmds.c b/src/glx/x11/glxcmds.c | |
723 | index 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; | |
794 | diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c | |
795 | index 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 | } | |
837 | diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri/i965/brw_state.h | |
838 | index 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 | |
849 | diff --git a/src/mesa/drivers/dri/i965/brw_state_cache.c b/src/mesa/drivers/dri/i965/brw_state_cache.c | |
850 | index 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) | |
909 | diff --git a/src/mesa/drivers/dri/intel/intel_context.c b/src/mesa/drivers/dri/intel/intel_context.c | |
910 | index 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); | |
982 | diff --git a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c | |
983 | index 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++) | |
1016 | diff --git a/src/mesa/drivers/dri/intel/intel_pixel_read.c b/src/mesa/drivers/dri/intel/intel_pixel_read.c | |
1017 | index 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; | |
1037 | diff --git a/src/mesa/drivers/dri/intel/intel_tex_copy.c b/src/mesa/drivers/dri/intel/intel_tex_copy.c | |
1038 | index 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 | ||
1050 | diff --git a/src/mesa/drivers/dri/r200/r200_state.c b/src/mesa/drivers/dri/r200/r200_state.c | |
1051 | index 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 ) | |
1091 | diff --git a/src/mesa/drivers/dri/r300/r300_context.c b/src/mesa/drivers/dri/r300/r300_context.c | |
1092 | index 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; | |
1122 | diff --git a/src/mesa/drivers/dri/r300/r300_fragprog_common.c b/src/mesa/drivers/dri/r300/r300_fragprog_common.c | |
1123 | index 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; | |
1146 | diff --git a/src/mesa/drivers/x11/fakeglx.c b/src/mesa/drivers/x11/fakeglx.c | |
1147 | index 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; | |
1285 | diff --git a/src/mesa/drivers/x11/xmesaP.h b/src/mesa/drivers/x11/xmesaP.h | |
1286 | index 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 | ||
1299 | diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c | |
1300 | index 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); | |
1311 | diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c | |
1312 | index 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 */ | |
1335 | diff --git a/src/mesa/main/image.c b/src/mesa/main/image.c | |
1336 | index 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 | } | |
1357 | diff --git a/src/mesa/main/mipmap.c b/src/mesa/main/mipmap.c | |
1358 | index 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 | ||
1408 | diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c | |
1409 | index 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 | } | |
1421 | diff --git a/src/mesa/main/texstate.c b/src/mesa/main/texstate.c | |
1422 | index 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 | ||
1456 | diff --git a/src/mesa/main/version.h b/src/mesa/main/version.h | |
1457 | index 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)) | |
1479 | diff --git a/src/mesa/shader/prog_execute.c b/src/mesa/shader/prog_execute.c | |
1480 | index 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; | |
1492 | diff --git a/src/mesa/shader/prog_optimize.c b/src/mesa/shader/prog_optimize.c | |
1493 | index 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);*/ | |
1521 | diff --git a/src/mesa/shader/prog_parameter.h b/src/mesa/shader/prog_parameter.h | |
1522 | index 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 */ | |
1540 | diff --git a/src/mesa/shader/shader_api.c b/src/mesa/shader/shader_api.c | |
1541 | index 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 */ | |
1612 | diff --git a/src/mesa/shader/slang/library/slang_common_builtin.gc b/src/mesa/shader/slang/library/slang_common_builtin.gc | |
1613 | index 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 | ||
1701 | diff --git a/src/mesa/shader/slang/library/slang_common_builtin_gc.h b/src/mesa/shader/slang/library/slang_common_builtin_gc.h | |
1702 | index 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, | |
1818 | diff --git a/src/mesa/shader/slang/slang_codegen.c b/src/mesa/shader/slang/slang_codegen.c | |
1819 | index 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 }, | |
1830 | diff --git a/src/mesa/shader/slang/slang_emit.c b/src/mesa/shader/slang/slang_emit.c | |
1831 | index 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: | |
1842 | diff --git a/src/mesa/shader/slang/slang_ir.c b/src/mesa/shader/slang/slang_ir.c | |
1843 | index 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 }, | |
1854 | diff --git a/src/mesa/shader/slang/slang_ir.h b/src/mesa/shader/slang/slang_ir.h | |
1855 | index 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) */ | |
1866 | diff --git a/src/mesa/shader/slang/slang_link.c b/src/mesa/shader/slang/slang_link.c | |
1867 | index 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 | } | |
1878 | diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c b/src/mesa/state_tracker/st_cb_drawpixels.c | |
1879 | index 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); | |
1904 | diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c | |
1905 | index 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 | ||
1935 | diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c | |
1936 | index 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]); | |
1952 | diff --git a/src/mesa/swrast/s_depth.c b/src/mesa/swrast/s_depth.c | |
1953 | index 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); |