mesa: better, smaller error handling code for glGet*()
[mesa.git] / src / mesa / main / get.c
1
2 /***
3 *** NOTE!!! DO NOT EDIT THIS FILE!!! IT IS GENERATED BY get_gen.py
4 ***/
5
6 #include "glheader.h"
7 #include "context.h"
8 #include "enable.h"
9 #include "extensions.h"
10 #include "get.h"
11 #include "macros.h"
12 #include "mtypes.h"
13 #include "state.h"
14 #include "texcompress.h"
15 #include "framebuffer.h"
16
17
18 #define FLOAT_TO_BOOLEAN(X) ( (X) ? GL_TRUE : GL_FALSE )
19
20 #define INT_TO_BOOLEAN(I) ( (I) ? GL_TRUE : GL_FALSE )
21
22 #define INT64_TO_BOOLEAN(I) ( (I) ? GL_TRUE : GL_FALSE )
23 #define INT64_TO_INT(I) ( (GLint)((I > INT_MAX) ? INT_MAX : ((I < INT_MIN) ? INT_MIN : (I))) )
24
25 #define BOOLEAN_TO_INT(B) ( (GLint) (B) )
26 #define BOOLEAN_TO_INT64(B) ( (GLint64) (B) )
27 #define BOOLEAN_TO_FLOAT(B) ( (B) ? 1.0F : 0.0F )
28
29 #define ENUM_TO_INT64(E) ( (GLint64) (E) )
30
31
32 /*
33 * Check if named extension is enabled, if not generate error and return.
34 */
35 #define CHECK_EXT1(EXT1) \
36 if (!ctx->Extensions.EXT1) { \
37 goto invalid_enum_error; \
38 }
39
40 /*
41 * Check if either of two extensions is enabled.
42 */
43 #define CHECK_EXT2(EXT1, EXT2) \
44 if (!ctx->Extensions.EXT1 && !ctx->Extensions.EXT2) { \
45 goto invalid_enum_error; \
46 }
47
48 /*
49 * Check if either of three extensions is enabled.
50 */
51 #define CHECK_EXT3(EXT1, EXT2, EXT3) \
52 if (!ctx->Extensions.EXT1 && !ctx->Extensions.EXT2 && \
53 !ctx->Extensions.EXT3) { \
54 goto invalid_enum_error; \
55 }
56
57 /*
58 * Check if either of four extensions is enabled.
59 */
60 #define CHECK_EXT4(EXT1, EXT2, EXT3, EXT4) \
61 if (!ctx->Extensions.EXT1 && !ctx->Extensions.EXT2 && \
62 !ctx->Extensions.EXT3 && !ctx->Extensions.EXT4) { \
63 goto invalid_enum_error; \
64 }
65
66
67 void GLAPIENTRY
68 _mesa_GetBooleanv( GLenum pname, GLboolean *params )
69 {
70 GET_CURRENT_CONTEXT(ctx);
71 ASSERT_OUTSIDE_BEGIN_END(ctx);
72
73 if (!params)
74 return;
75
76 if (ctx->Driver.GetBooleanv &&
77 ctx->Driver.GetBooleanv(ctx, pname, params))
78 return;
79
80 switch (pname) {
81 case GL_ACCUM_RED_BITS:
82 params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.accumRedBits);
83 break;
84 case GL_ACCUM_GREEN_BITS:
85 params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.accumGreenBits);
86 break;
87 case GL_ACCUM_BLUE_BITS:
88 params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.accumBlueBits);
89 break;
90 case GL_ACCUM_ALPHA_BITS:
91 params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.accumAlphaBits);
92 break;
93 case GL_ACCUM_CLEAR_VALUE:
94 params[0] = FLOAT_TO_BOOLEAN(ctx->Accum.ClearColor[0]);
95 params[1] = FLOAT_TO_BOOLEAN(ctx->Accum.ClearColor[1]);
96 params[2] = FLOAT_TO_BOOLEAN(ctx->Accum.ClearColor[2]);
97 params[3] = FLOAT_TO_BOOLEAN(ctx->Accum.ClearColor[3]);
98 break;
99 case GL_ALPHA_BIAS:
100 params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.AlphaBias);
101 break;
102 case GL_ALPHA_BITS:
103 if (ctx->NewState & _NEW_BUFFERS)
104 _mesa_update_state(ctx);
105 params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.alphaBits);
106 break;
107 case GL_ALPHA_SCALE:
108 params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.AlphaScale);
109 break;
110 case GL_ALPHA_TEST:
111 params[0] = ctx->Color.AlphaEnabled;
112 break;
113 case GL_ALPHA_TEST_FUNC:
114 params[0] = ENUM_TO_BOOLEAN(ctx->Color.AlphaFunc);
115 break;
116 case GL_ALPHA_TEST_REF:
117 params[0] = FLOAT_TO_BOOLEAN(ctx->Color.AlphaRef);
118 break;
119 case GL_ATTRIB_STACK_DEPTH:
120 params[0] = INT_TO_BOOLEAN(ctx->AttribStackDepth);
121 break;
122 case GL_AUTO_NORMAL:
123 params[0] = ctx->Eval.AutoNormal;
124 break;
125 case GL_AUX_BUFFERS:
126 params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.numAuxBuffers);
127 break;
128 case GL_BLEND:
129 params[0] = (ctx->Color.BlendEnabled & 1);
130 break;
131 case GL_BLEND_DST:
132 params[0] = ENUM_TO_BOOLEAN(ctx->Color.BlendDstRGB);
133 break;
134 case GL_BLEND_SRC:
135 params[0] = ENUM_TO_BOOLEAN(ctx->Color.BlendSrcRGB);
136 break;
137 case GL_BLEND_SRC_RGB_EXT:
138 params[0] = ENUM_TO_BOOLEAN(ctx->Color.BlendSrcRGB);
139 break;
140 case GL_BLEND_DST_RGB_EXT:
141 params[0] = ENUM_TO_BOOLEAN(ctx->Color.BlendDstRGB);
142 break;
143 case GL_BLEND_SRC_ALPHA_EXT:
144 params[0] = ENUM_TO_BOOLEAN(ctx->Color.BlendSrcA);
145 break;
146 case GL_BLEND_DST_ALPHA_EXT:
147 params[0] = ENUM_TO_BOOLEAN(ctx->Color.BlendDstA);
148 break;
149 case GL_BLEND_EQUATION:
150 params[0] = ENUM_TO_BOOLEAN(ctx->Color.BlendEquationRGB );
151 break;
152 case GL_BLEND_EQUATION_ALPHA_EXT:
153 params[0] = ENUM_TO_BOOLEAN(ctx->Color.BlendEquationA );
154 break;
155 case GL_BLEND_COLOR_EXT:
156 params[0] = FLOAT_TO_BOOLEAN(ctx->Color.BlendColor[0]);
157 params[1] = FLOAT_TO_BOOLEAN(ctx->Color.BlendColor[1]);
158 params[2] = FLOAT_TO_BOOLEAN(ctx->Color.BlendColor[2]);
159 params[3] = FLOAT_TO_BOOLEAN(ctx->Color.BlendColor[3]);
160 break;
161 case GL_BLUE_BIAS:
162 params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.BlueBias);
163 break;
164 case GL_BLUE_BITS:
165 if (ctx->NewState & _NEW_BUFFERS)
166 _mesa_update_state(ctx);
167 params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.blueBits);
168 break;
169 case GL_BLUE_SCALE:
170 params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.BlueScale);
171 break;
172 case GL_CLIENT_ATTRIB_STACK_DEPTH:
173 params[0] = INT_TO_BOOLEAN(ctx->ClientAttribStackDepth);
174 break;
175 case GL_CLIP_PLANE0:
176 params[0] = (ctx->Transform.ClipPlanesEnabled >> 0) & 1;
177 break;
178 case GL_CLIP_PLANE1:
179 params[0] = (ctx->Transform.ClipPlanesEnabled >> 1) & 1;
180 break;
181 case GL_CLIP_PLANE2:
182 params[0] = (ctx->Transform.ClipPlanesEnabled >> 2) & 1;
183 break;
184 case GL_CLIP_PLANE3:
185 params[0] = (ctx->Transform.ClipPlanesEnabled >> 3) & 1;
186 break;
187 case GL_CLIP_PLANE4:
188 params[0] = (ctx->Transform.ClipPlanesEnabled >> 4) & 1;
189 break;
190 case GL_CLIP_PLANE5:
191 params[0] = (ctx->Transform.ClipPlanesEnabled >> 5) & 1;
192 break;
193 case GL_COLOR_CLEAR_VALUE:
194 params[0] = FLOAT_TO_BOOLEAN(ctx->Color.ClearColor[0]);
195 params[1] = FLOAT_TO_BOOLEAN(ctx->Color.ClearColor[1]);
196 params[2] = FLOAT_TO_BOOLEAN(ctx->Color.ClearColor[2]);
197 params[3] = FLOAT_TO_BOOLEAN(ctx->Color.ClearColor[3]);
198 break;
199 case GL_COLOR_MATERIAL:
200 params[0] = ctx->Light.ColorMaterialEnabled;
201 break;
202 case GL_COLOR_MATERIAL_FACE:
203 params[0] = ENUM_TO_BOOLEAN(ctx->Light.ColorMaterialFace);
204 break;
205 case GL_COLOR_MATERIAL_PARAMETER:
206 params[0] = ENUM_TO_BOOLEAN(ctx->Light.ColorMaterialMode);
207 break;
208 case GL_COLOR_WRITEMASK:
209 params[0] = INT_TO_BOOLEAN(ctx->Color.ColorMask[0][RCOMP] ? 1 : 0);
210 params[1] = INT_TO_BOOLEAN(ctx->Color.ColorMask[0][GCOMP] ? 1 : 0);
211 params[2] = INT_TO_BOOLEAN(ctx->Color.ColorMask[0][BCOMP] ? 1 : 0);
212 params[3] = INT_TO_BOOLEAN(ctx->Color.ColorMask[0][ACOMP] ? 1 : 0);
213 break;
214 case GL_CULL_FACE:
215 params[0] = ctx->Polygon.CullFlag;
216 break;
217 case GL_CULL_FACE_MODE:
218 params[0] = ENUM_TO_BOOLEAN(ctx->Polygon.CullFaceMode);
219 break;
220 case GL_CURRENT_COLOR:
221 FLUSH_CURRENT(ctx, 0);
222 params[0] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][0]);
223 params[1] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][1]);
224 params[2] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][2]);
225 params[3] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][3]);
226 break;
227 case GL_CURRENT_INDEX:
228 FLUSH_CURRENT(ctx, 0);
229 params[0] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_COLOR_INDEX][0]);
230 break;
231 case GL_CURRENT_NORMAL:
232 FLUSH_CURRENT(ctx, 0);
233 params[0] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_NORMAL][0]);
234 params[1] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_NORMAL][1]);
235 params[2] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_NORMAL][2]);
236 break;
237 case GL_CURRENT_RASTER_COLOR:
238 params[0] = FLOAT_TO_BOOLEAN(ctx->Current.RasterColor[0]);
239 params[1] = FLOAT_TO_BOOLEAN(ctx->Current.RasterColor[1]);
240 params[2] = FLOAT_TO_BOOLEAN(ctx->Current.RasterColor[2]);
241 params[3] = FLOAT_TO_BOOLEAN(ctx->Current.RasterColor[3]);
242 break;
243 case GL_CURRENT_RASTER_DISTANCE:
244 params[0] = FLOAT_TO_BOOLEAN(ctx->Current.RasterDistance);
245 break;
246 case GL_CURRENT_RASTER_INDEX:
247 params[0] = FLOAT_TO_BOOLEAN(1.0);
248 break;
249 case GL_CURRENT_RASTER_POSITION:
250 params[0] = FLOAT_TO_BOOLEAN(ctx->Current.RasterPos[0]);
251 params[1] = FLOAT_TO_BOOLEAN(ctx->Current.RasterPos[1]);
252 params[2] = FLOAT_TO_BOOLEAN(ctx->Current.RasterPos[2]);
253 params[3] = FLOAT_TO_BOOLEAN(ctx->Current.RasterPos[3]);
254 break;
255 case GL_CURRENT_RASTER_SECONDARY_COLOR:
256 params[0] = FLOAT_TO_BOOLEAN(ctx->Current.RasterSecondaryColor[0]);
257 params[1] = FLOAT_TO_BOOLEAN(ctx->Current.RasterSecondaryColor[1]);
258 params[2] = FLOAT_TO_BOOLEAN(ctx->Current.RasterSecondaryColor[2]);
259 params[3] = FLOAT_TO_BOOLEAN(ctx->Current.RasterSecondaryColor[3]);
260 break;
261 case GL_CURRENT_RASTER_TEXTURE_COORDS:
262 {
263 const GLuint unit = ctx->Texture.CurrentUnit;
264 if (unit >= ctx->Const.MaxTextureCoordUnits) {
265 _mesa_error(ctx, GL_INVALID_OPERATION,
266 "glGet(raster tex coords, unit %u)", unit);
267 return;
268 }
269 params[0] = FLOAT_TO_BOOLEAN(ctx->Current.RasterTexCoords[unit][0]);
270 params[1] = FLOAT_TO_BOOLEAN(ctx->Current.RasterTexCoords[unit][1]);
271 params[2] = FLOAT_TO_BOOLEAN(ctx->Current.RasterTexCoords[unit][2]);
272 params[3] = FLOAT_TO_BOOLEAN(ctx->Current.RasterTexCoords[unit][3]);
273 }
274 break;
275 case GL_CURRENT_RASTER_POSITION_VALID:
276 params[0] = ctx->Current.RasterPosValid;
277 break;
278 case GL_CURRENT_TEXTURE_COORDS:
279 {
280 const GLuint unit = ctx->Texture.CurrentUnit;
281 if (unit >= ctx->Const.MaxTextureCoordUnits) {
282 _mesa_error(ctx, GL_INVALID_OPERATION,
283 "glGet(current tex coords, unit %u)", unit);
284 return;
285 }
286 FLUSH_CURRENT(ctx, 0);
287 params[0] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_TEX0 + unit][0]);
288 params[1] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_TEX0 + unit][1]);
289 params[2] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_TEX0 + unit][2]);
290 params[3] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_TEX0 + unit][3]);
291 }
292 break;
293 case GL_DEPTH_BIAS:
294 params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.DepthBias);
295 break;
296 case GL_DEPTH_BITS:
297 params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.depthBits);
298 break;
299 case GL_DEPTH_CLEAR_VALUE:
300 params[0] = FLOAT_TO_BOOLEAN(((GLfloat) ctx->Depth.Clear));
301 break;
302 case GL_DEPTH_FUNC:
303 params[0] = ENUM_TO_BOOLEAN(ctx->Depth.Func);
304 break;
305 case GL_DEPTH_RANGE:
306 params[0] = FLOAT_TO_BOOLEAN(ctx->Viewport.Near);
307 params[1] = FLOAT_TO_BOOLEAN(ctx->Viewport.Far);
308 break;
309 case GL_DEPTH_SCALE:
310 params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.DepthScale);
311 break;
312 case GL_DEPTH_TEST:
313 params[0] = ctx->Depth.Test;
314 break;
315 case GL_DEPTH_WRITEMASK:
316 params[0] = ctx->Depth.Mask;
317 break;
318 case GL_DITHER:
319 params[0] = ctx->Color.DitherFlag;
320 break;
321 case GL_DOUBLEBUFFER:
322 params[0] = ctx->DrawBuffer->Visual.doubleBufferMode;
323 break;
324 case GL_DRAW_BUFFER:
325 params[0] = ENUM_TO_BOOLEAN(ctx->DrawBuffer->ColorDrawBuffer[0]);
326 break;
327 case GL_EDGE_FLAG:
328 FLUSH_CURRENT(ctx, 0);
329 params[0] = (ctx->Current.Attrib[VERT_ATTRIB_EDGEFLAG][0] == 1.0);
330 break;
331 case GL_FEEDBACK_BUFFER_SIZE:
332 params[0] = INT_TO_BOOLEAN(ctx->Feedback.BufferSize);
333 break;
334 case GL_FEEDBACK_BUFFER_TYPE:
335 params[0] = ENUM_TO_BOOLEAN(ctx->Feedback.Type);
336 break;
337 case GL_FOG:
338 params[0] = ctx->Fog.Enabled;
339 break;
340 case GL_FOG_COLOR:
341 params[0] = FLOAT_TO_BOOLEAN(ctx->Fog.Color[0]);
342 params[1] = FLOAT_TO_BOOLEAN(ctx->Fog.Color[1]);
343 params[2] = FLOAT_TO_BOOLEAN(ctx->Fog.Color[2]);
344 params[3] = FLOAT_TO_BOOLEAN(ctx->Fog.Color[3]);
345 break;
346 case GL_FOG_DENSITY:
347 params[0] = FLOAT_TO_BOOLEAN(ctx->Fog.Density);
348 break;
349 case GL_FOG_END:
350 params[0] = FLOAT_TO_BOOLEAN(ctx->Fog.End);
351 break;
352 case GL_FOG_HINT:
353 params[0] = ENUM_TO_BOOLEAN(ctx->Hint.Fog);
354 break;
355 case GL_FOG_INDEX:
356 params[0] = FLOAT_TO_BOOLEAN(ctx->Fog.Index);
357 break;
358 case GL_FOG_MODE:
359 params[0] = ENUM_TO_BOOLEAN(ctx->Fog.Mode);
360 break;
361 case GL_FOG_START:
362 params[0] = FLOAT_TO_BOOLEAN(ctx->Fog.Start);
363 break;
364 case GL_FRONT_FACE:
365 params[0] = ENUM_TO_BOOLEAN(ctx->Polygon.FrontFace);
366 break;
367 case GL_GREEN_BIAS:
368 params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.GreenBias);
369 break;
370 case GL_GREEN_BITS:
371 if (ctx->NewState & _NEW_BUFFERS)
372 _mesa_update_state(ctx);
373 params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.greenBits);
374 break;
375 case GL_GREEN_SCALE:
376 params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.GreenScale);
377 break;
378 case GL_INDEX_BITS:
379 if (ctx->NewState & _NEW_BUFFERS)
380 _mesa_update_state(ctx);
381 params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.indexBits);
382 break;
383 case GL_INDEX_CLEAR_VALUE:
384 params[0] = INT_TO_BOOLEAN(ctx->Color.ClearIndex);
385 break;
386 case GL_INDEX_MODE:
387 params[0] = GL_FALSE;
388 break;
389 case GL_INDEX_OFFSET:
390 params[0] = INT_TO_BOOLEAN(ctx->Pixel.IndexOffset);
391 break;
392 case GL_INDEX_SHIFT:
393 params[0] = INT_TO_BOOLEAN(ctx->Pixel.IndexShift);
394 break;
395 case GL_INDEX_WRITEMASK:
396 params[0] = INT_TO_BOOLEAN(ctx->Color.IndexMask);
397 break;
398 case GL_LIGHT0:
399 params[0] = ctx->Light.Light[0].Enabled;
400 break;
401 case GL_LIGHT1:
402 params[0] = ctx->Light.Light[1].Enabled;
403 break;
404 case GL_LIGHT2:
405 params[0] = ctx->Light.Light[2].Enabled;
406 break;
407 case GL_LIGHT3:
408 params[0] = ctx->Light.Light[3].Enabled;
409 break;
410 case GL_LIGHT4:
411 params[0] = ctx->Light.Light[4].Enabled;
412 break;
413 case GL_LIGHT5:
414 params[0] = ctx->Light.Light[5].Enabled;
415 break;
416 case GL_LIGHT6:
417 params[0] = ctx->Light.Light[6].Enabled;
418 break;
419 case GL_LIGHT7:
420 params[0] = ctx->Light.Light[7].Enabled;
421 break;
422 case GL_LIGHTING:
423 params[0] = ctx->Light.Enabled;
424 break;
425 case GL_LIGHT_MODEL_AMBIENT:
426 params[0] = FLOAT_TO_BOOLEAN(ctx->Light.Model.Ambient[0]);
427 params[1] = FLOAT_TO_BOOLEAN(ctx->Light.Model.Ambient[1]);
428 params[2] = FLOAT_TO_BOOLEAN(ctx->Light.Model.Ambient[2]);
429 params[3] = FLOAT_TO_BOOLEAN(ctx->Light.Model.Ambient[3]);
430 break;
431 case GL_LIGHT_MODEL_COLOR_CONTROL:
432 params[0] = ENUM_TO_BOOLEAN(ctx->Light.Model.ColorControl);
433 break;
434 case GL_LIGHT_MODEL_LOCAL_VIEWER:
435 params[0] = ctx->Light.Model.LocalViewer;
436 break;
437 case GL_LIGHT_MODEL_TWO_SIDE:
438 params[0] = ctx->Light.Model.TwoSide;
439 break;
440 case GL_LINE_SMOOTH:
441 params[0] = ctx->Line.SmoothFlag;
442 break;
443 case GL_LINE_SMOOTH_HINT:
444 params[0] = ENUM_TO_BOOLEAN(ctx->Hint.LineSmooth);
445 break;
446 case GL_LINE_STIPPLE:
447 params[0] = ctx->Line.StippleFlag;
448 break;
449 case GL_LINE_STIPPLE_PATTERN:
450 params[0] = INT_TO_BOOLEAN(ctx->Line.StipplePattern);
451 break;
452 case GL_LINE_STIPPLE_REPEAT:
453 params[0] = INT_TO_BOOLEAN(ctx->Line.StippleFactor);
454 break;
455 case GL_LINE_WIDTH:
456 params[0] = FLOAT_TO_BOOLEAN(ctx->Line.Width);
457 break;
458 case GL_LINE_WIDTH_GRANULARITY:
459 params[0] = FLOAT_TO_BOOLEAN(ctx->Const.LineWidthGranularity);
460 break;
461 case GL_LINE_WIDTH_RANGE:
462 params[0] = FLOAT_TO_BOOLEAN(ctx->Const.MinLineWidthAA);
463 params[1] = FLOAT_TO_BOOLEAN(ctx->Const.MaxLineWidthAA);
464 break;
465 case GL_ALIASED_LINE_WIDTH_RANGE:
466 params[0] = FLOAT_TO_BOOLEAN(ctx->Const.MinLineWidth);
467 params[1] = FLOAT_TO_BOOLEAN(ctx->Const.MaxLineWidth);
468 break;
469 case GL_LIST_BASE:
470 params[0] = INT_TO_BOOLEAN(ctx->List.ListBase);
471 break;
472 case GL_LIST_INDEX:
473 params[0] = INT_TO_BOOLEAN((ctx->ListState.CurrentList ? ctx->ListState.CurrentList->Name : 0));
474 break;
475 case GL_LIST_MODE:
476 {
477 GLenum mode;
478 if (!ctx->CompileFlag)
479 mode = 0;
480 else if (ctx->ExecuteFlag)
481 mode = GL_COMPILE_AND_EXECUTE;
482 else
483 mode = GL_COMPILE;
484 params[0] = ENUM_TO_BOOLEAN(mode);
485 }
486 break;
487 case GL_INDEX_LOGIC_OP:
488 params[0] = ctx->Color.IndexLogicOpEnabled;
489 break;
490 case GL_COLOR_LOGIC_OP:
491 params[0] = ctx->Color.ColorLogicOpEnabled;
492 break;
493 case GL_LOGIC_OP_MODE:
494 params[0] = ENUM_TO_BOOLEAN(ctx->Color.LogicOp);
495 break;
496 case GL_MAP1_COLOR_4:
497 params[0] = ctx->Eval.Map1Color4;
498 break;
499 case GL_MAP1_GRID_DOMAIN:
500 params[0] = FLOAT_TO_BOOLEAN(ctx->Eval.MapGrid1u1);
501 params[1] = FLOAT_TO_BOOLEAN(ctx->Eval.MapGrid1u2);
502 break;
503 case GL_MAP1_GRID_SEGMENTS:
504 params[0] = INT_TO_BOOLEAN(ctx->Eval.MapGrid1un);
505 break;
506 case GL_MAP1_INDEX:
507 params[0] = ctx->Eval.Map1Index;
508 break;
509 case GL_MAP1_NORMAL:
510 params[0] = ctx->Eval.Map1Normal;
511 break;
512 case GL_MAP1_TEXTURE_COORD_1:
513 params[0] = ctx->Eval.Map1TextureCoord1;
514 break;
515 case GL_MAP1_TEXTURE_COORD_2:
516 params[0] = ctx->Eval.Map1TextureCoord2;
517 break;
518 case GL_MAP1_TEXTURE_COORD_3:
519 params[0] = ctx->Eval.Map1TextureCoord3;
520 break;
521 case GL_MAP1_TEXTURE_COORD_4:
522 params[0] = ctx->Eval.Map1TextureCoord4;
523 break;
524 case GL_MAP1_VERTEX_3:
525 params[0] = ctx->Eval.Map1Vertex3;
526 break;
527 case GL_MAP1_VERTEX_4:
528 params[0] = ctx->Eval.Map1Vertex4;
529 break;
530 case GL_MAP2_COLOR_4:
531 params[0] = ctx->Eval.Map2Color4;
532 break;
533 case GL_MAP2_GRID_DOMAIN:
534 params[0] = FLOAT_TO_BOOLEAN(ctx->Eval.MapGrid2u1);
535 params[1] = FLOAT_TO_BOOLEAN(ctx->Eval.MapGrid2u2);
536 params[2] = FLOAT_TO_BOOLEAN(ctx->Eval.MapGrid2v1);
537 params[3] = FLOAT_TO_BOOLEAN(ctx->Eval.MapGrid2v2);
538 break;
539 case GL_MAP2_GRID_SEGMENTS:
540 params[0] = INT_TO_BOOLEAN(ctx->Eval.MapGrid2un);
541 params[1] = INT_TO_BOOLEAN(ctx->Eval.MapGrid2vn);
542 break;
543 case GL_MAP2_INDEX:
544 params[0] = ctx->Eval.Map2Index;
545 break;
546 case GL_MAP2_NORMAL:
547 params[0] = ctx->Eval.Map2Normal;
548 break;
549 case GL_MAP2_TEXTURE_COORD_1:
550 params[0] = ctx->Eval.Map2TextureCoord1;
551 break;
552 case GL_MAP2_TEXTURE_COORD_2:
553 params[0] = ctx->Eval.Map2TextureCoord2;
554 break;
555 case GL_MAP2_TEXTURE_COORD_3:
556 params[0] = ctx->Eval.Map2TextureCoord3;
557 break;
558 case GL_MAP2_TEXTURE_COORD_4:
559 params[0] = ctx->Eval.Map2TextureCoord4;
560 break;
561 case GL_MAP2_VERTEX_3:
562 params[0] = ctx->Eval.Map2Vertex3;
563 break;
564 case GL_MAP2_VERTEX_4:
565 params[0] = ctx->Eval.Map2Vertex4;
566 break;
567 case GL_MAP_COLOR:
568 params[0] = ctx->Pixel.MapColorFlag;
569 break;
570 case GL_MAP_STENCIL:
571 params[0] = ctx->Pixel.MapStencilFlag;
572 break;
573 case GL_MATRIX_MODE:
574 params[0] = ENUM_TO_BOOLEAN(ctx->Transform.MatrixMode);
575 break;
576 case GL_MAX_ATTRIB_STACK_DEPTH:
577 params[0] = INT_TO_BOOLEAN(MAX_ATTRIB_STACK_DEPTH);
578 break;
579 case GL_MAX_CLIENT_ATTRIB_STACK_DEPTH:
580 params[0] = INT_TO_BOOLEAN(MAX_CLIENT_ATTRIB_STACK_DEPTH);
581 break;
582 case GL_MAX_CLIP_PLANES:
583 params[0] = INT_TO_BOOLEAN(ctx->Const.MaxClipPlanes);
584 break;
585 case GL_MAX_ELEMENTS_VERTICES:
586 params[0] = INT_TO_BOOLEAN(ctx->Const.MaxArrayLockSize);
587 break;
588 case GL_MAX_ELEMENTS_INDICES:
589 params[0] = INT_TO_BOOLEAN(ctx->Const.MaxArrayLockSize);
590 break;
591 case GL_MAX_EVAL_ORDER:
592 params[0] = INT_TO_BOOLEAN(MAX_EVAL_ORDER);
593 break;
594 case GL_MAX_LIGHTS:
595 params[0] = INT_TO_BOOLEAN(ctx->Const.MaxLights);
596 break;
597 case GL_MAX_LIST_NESTING:
598 params[0] = INT_TO_BOOLEAN(MAX_LIST_NESTING);
599 break;
600 case GL_MAX_MODELVIEW_STACK_DEPTH:
601 params[0] = INT_TO_BOOLEAN(MAX_MODELVIEW_STACK_DEPTH);
602 break;
603 case GL_MAX_NAME_STACK_DEPTH:
604 params[0] = INT_TO_BOOLEAN(MAX_NAME_STACK_DEPTH);
605 break;
606 case GL_MAX_PIXEL_MAP_TABLE:
607 params[0] = INT_TO_BOOLEAN(MAX_PIXEL_MAP_TABLE);
608 break;
609 case GL_MAX_PROJECTION_STACK_DEPTH:
610 params[0] = INT_TO_BOOLEAN(MAX_PROJECTION_STACK_DEPTH);
611 break;
612 case GL_MAX_TEXTURE_SIZE:
613 params[0] = INT_TO_BOOLEAN(1 << (ctx->Const.MaxTextureLevels - 1));
614 break;
615 case GL_MAX_3D_TEXTURE_SIZE:
616 params[0] = INT_TO_BOOLEAN(1 << (ctx->Const.Max3DTextureLevels - 1));
617 break;
618 case GL_MAX_TEXTURE_STACK_DEPTH:
619 params[0] = INT_TO_BOOLEAN(MAX_TEXTURE_STACK_DEPTH);
620 break;
621 case GL_MAX_VIEWPORT_DIMS:
622 params[0] = INT_TO_BOOLEAN(ctx->Const.MaxViewportWidth);
623 params[1] = INT_TO_BOOLEAN(ctx->Const.MaxViewportHeight);
624 break;
625 case GL_MODELVIEW_MATRIX:
626 {
627 const GLfloat *matrix = ctx->ModelviewMatrixStack.Top->m;
628 params[0] = FLOAT_TO_BOOLEAN(matrix[0]);
629 params[1] = FLOAT_TO_BOOLEAN(matrix[1]);
630 params[2] = FLOAT_TO_BOOLEAN(matrix[2]);
631 params[3] = FLOAT_TO_BOOLEAN(matrix[3]);
632 params[4] = FLOAT_TO_BOOLEAN(matrix[4]);
633 params[5] = FLOAT_TO_BOOLEAN(matrix[5]);
634 params[6] = FLOAT_TO_BOOLEAN(matrix[6]);
635 params[7] = FLOAT_TO_BOOLEAN(matrix[7]);
636 params[8] = FLOAT_TO_BOOLEAN(matrix[8]);
637 params[9] = FLOAT_TO_BOOLEAN(matrix[9]);
638 params[10] = FLOAT_TO_BOOLEAN(matrix[10]);
639 params[11] = FLOAT_TO_BOOLEAN(matrix[11]);
640 params[12] = FLOAT_TO_BOOLEAN(matrix[12]);
641 params[13] = FLOAT_TO_BOOLEAN(matrix[13]);
642 params[14] = FLOAT_TO_BOOLEAN(matrix[14]);
643 params[15] = FLOAT_TO_BOOLEAN(matrix[15]);
644 }
645 break;
646 case GL_MODELVIEW_STACK_DEPTH:
647 params[0] = INT_TO_BOOLEAN(ctx->ModelviewMatrixStack.Depth + 1);
648 break;
649 case GL_NAME_STACK_DEPTH:
650 params[0] = INT_TO_BOOLEAN(ctx->Select.NameStackDepth);
651 break;
652 case GL_NORMALIZE:
653 params[0] = ctx->Transform.Normalize;
654 break;
655 case GL_PACK_ALIGNMENT:
656 params[0] = INT_TO_BOOLEAN(ctx->Pack.Alignment);
657 break;
658 case GL_PACK_LSB_FIRST:
659 params[0] = ctx->Pack.LsbFirst;
660 break;
661 case GL_PACK_ROW_LENGTH:
662 params[0] = INT_TO_BOOLEAN(ctx->Pack.RowLength);
663 break;
664 case GL_PACK_SKIP_PIXELS:
665 params[0] = INT_TO_BOOLEAN(ctx->Pack.SkipPixels);
666 break;
667 case GL_PACK_SKIP_ROWS:
668 params[0] = INT_TO_BOOLEAN(ctx->Pack.SkipRows);
669 break;
670 case GL_PACK_SWAP_BYTES:
671 params[0] = ctx->Pack.SwapBytes;
672 break;
673 case GL_PACK_SKIP_IMAGES_EXT:
674 params[0] = INT_TO_BOOLEAN(ctx->Pack.SkipImages);
675 break;
676 case GL_PACK_IMAGE_HEIGHT_EXT:
677 params[0] = INT_TO_BOOLEAN(ctx->Pack.ImageHeight);
678 break;
679 case GL_PACK_INVERT_MESA:
680 params[0] = ctx->Pack.Invert;
681 break;
682 case GL_PERSPECTIVE_CORRECTION_HINT:
683 params[0] = ENUM_TO_BOOLEAN(ctx->Hint.PerspectiveCorrection);
684 break;
685 case GL_PIXEL_MAP_A_TO_A_SIZE:
686 params[0] = INT_TO_BOOLEAN(ctx->PixelMaps.AtoA.Size);
687 break;
688 case GL_PIXEL_MAP_B_TO_B_SIZE:
689 params[0] = INT_TO_BOOLEAN(ctx->PixelMaps.BtoB.Size);
690 break;
691 case GL_PIXEL_MAP_G_TO_G_SIZE:
692 params[0] = INT_TO_BOOLEAN(ctx->PixelMaps.GtoG.Size);
693 break;
694 case GL_PIXEL_MAP_I_TO_A_SIZE:
695 params[0] = INT_TO_BOOLEAN(ctx->PixelMaps.ItoA.Size);
696 break;
697 case GL_PIXEL_MAP_I_TO_B_SIZE:
698 params[0] = INT_TO_BOOLEAN(ctx->PixelMaps.ItoB.Size);
699 break;
700 case GL_PIXEL_MAP_I_TO_G_SIZE:
701 params[0] = INT_TO_BOOLEAN(ctx->PixelMaps.ItoG.Size);
702 break;
703 case GL_PIXEL_MAP_I_TO_I_SIZE:
704 params[0] = INT_TO_BOOLEAN(ctx->PixelMaps.ItoI.Size);
705 break;
706 case GL_PIXEL_MAP_I_TO_R_SIZE:
707 params[0] = INT_TO_BOOLEAN(ctx->PixelMaps.ItoR.Size);
708 break;
709 case GL_PIXEL_MAP_R_TO_R_SIZE:
710 params[0] = INT_TO_BOOLEAN(ctx->PixelMaps.RtoR.Size);
711 break;
712 case GL_PIXEL_MAP_S_TO_S_SIZE:
713 params[0] = INT_TO_BOOLEAN(ctx->PixelMaps.StoS.Size);
714 break;
715 case GL_POINT_SIZE:
716 params[0] = FLOAT_TO_BOOLEAN(ctx->Point.Size);
717 break;
718 case GL_POINT_SIZE_GRANULARITY:
719 params[0] = FLOAT_TO_BOOLEAN(ctx->Const.PointSizeGranularity);
720 break;
721 case GL_POINT_SIZE_RANGE:
722 params[0] = FLOAT_TO_BOOLEAN(ctx->Const.MinPointSizeAA);
723 params[1] = FLOAT_TO_BOOLEAN(ctx->Const.MaxPointSizeAA);
724 break;
725 case GL_ALIASED_POINT_SIZE_RANGE:
726 params[0] = FLOAT_TO_BOOLEAN(ctx->Const.MinPointSize);
727 params[1] = FLOAT_TO_BOOLEAN(ctx->Const.MaxPointSize);
728 break;
729 case GL_POINT_SMOOTH:
730 params[0] = ctx->Point.SmoothFlag;
731 break;
732 case GL_POINT_SMOOTH_HINT:
733 params[0] = ENUM_TO_BOOLEAN(ctx->Hint.PointSmooth);
734 break;
735 case GL_POINT_SIZE_MIN_EXT:
736 params[0] = FLOAT_TO_BOOLEAN(ctx->Point.MinSize);
737 break;
738 case GL_POINT_SIZE_MAX_EXT:
739 params[0] = FLOAT_TO_BOOLEAN(ctx->Point.MaxSize);
740 break;
741 case GL_POINT_FADE_THRESHOLD_SIZE_EXT:
742 params[0] = FLOAT_TO_BOOLEAN(ctx->Point.Threshold);
743 break;
744 case GL_DISTANCE_ATTENUATION_EXT:
745 params[0] = FLOAT_TO_BOOLEAN(ctx->Point.Params[0]);
746 params[1] = FLOAT_TO_BOOLEAN(ctx->Point.Params[1]);
747 params[2] = FLOAT_TO_BOOLEAN(ctx->Point.Params[2]);
748 break;
749 case GL_POLYGON_MODE:
750 params[0] = ENUM_TO_BOOLEAN(ctx->Polygon.FrontMode);
751 params[1] = ENUM_TO_BOOLEAN(ctx->Polygon.BackMode);
752 break;
753 case GL_POLYGON_OFFSET_BIAS_EXT:
754 params[0] = FLOAT_TO_BOOLEAN(ctx->Polygon.OffsetUnits);
755 break;
756 case GL_POLYGON_OFFSET_FACTOR:
757 params[0] = FLOAT_TO_BOOLEAN(ctx->Polygon.OffsetFactor );
758 break;
759 case GL_POLYGON_OFFSET_UNITS:
760 params[0] = FLOAT_TO_BOOLEAN(ctx->Polygon.OffsetUnits );
761 break;
762 case GL_POLYGON_OFFSET_POINT:
763 params[0] = ctx->Polygon.OffsetPoint;
764 break;
765 case GL_POLYGON_OFFSET_LINE:
766 params[0] = ctx->Polygon.OffsetLine;
767 break;
768 case GL_POLYGON_OFFSET_FILL:
769 params[0] = ctx->Polygon.OffsetFill;
770 break;
771 case GL_POLYGON_SMOOTH:
772 params[0] = ctx->Polygon.SmoothFlag;
773 break;
774 case GL_POLYGON_SMOOTH_HINT:
775 params[0] = ENUM_TO_BOOLEAN(ctx->Hint.PolygonSmooth);
776 break;
777 case GL_POLYGON_STIPPLE:
778 params[0] = ctx->Polygon.StippleFlag;
779 break;
780 case GL_PROJECTION_MATRIX:
781 {
782 const GLfloat *matrix = ctx->ProjectionMatrixStack.Top->m;
783 params[0] = FLOAT_TO_BOOLEAN(matrix[0]);
784 params[1] = FLOAT_TO_BOOLEAN(matrix[1]);
785 params[2] = FLOAT_TO_BOOLEAN(matrix[2]);
786 params[3] = FLOAT_TO_BOOLEAN(matrix[3]);
787 params[4] = FLOAT_TO_BOOLEAN(matrix[4]);
788 params[5] = FLOAT_TO_BOOLEAN(matrix[5]);
789 params[6] = FLOAT_TO_BOOLEAN(matrix[6]);
790 params[7] = FLOAT_TO_BOOLEAN(matrix[7]);
791 params[8] = FLOAT_TO_BOOLEAN(matrix[8]);
792 params[9] = FLOAT_TO_BOOLEAN(matrix[9]);
793 params[10] = FLOAT_TO_BOOLEAN(matrix[10]);
794 params[11] = FLOAT_TO_BOOLEAN(matrix[11]);
795 params[12] = FLOAT_TO_BOOLEAN(matrix[12]);
796 params[13] = FLOAT_TO_BOOLEAN(matrix[13]);
797 params[14] = FLOAT_TO_BOOLEAN(matrix[14]);
798 params[15] = FLOAT_TO_BOOLEAN(matrix[15]);
799 }
800 break;
801 case GL_PROJECTION_STACK_DEPTH:
802 params[0] = INT_TO_BOOLEAN(ctx->ProjectionMatrixStack.Depth + 1);
803 break;
804 case GL_READ_BUFFER:
805 params[0] = ENUM_TO_BOOLEAN(ctx->ReadBuffer->ColorReadBuffer);
806 break;
807 case GL_RED_BIAS:
808 params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.RedBias);
809 break;
810 case GL_RED_BITS:
811 if (ctx->NewState & _NEW_BUFFERS)
812 _mesa_update_state(ctx);
813 params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.redBits);
814 break;
815 case GL_RED_SCALE:
816 params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.RedScale);
817 break;
818 case GL_RENDER_MODE:
819 params[0] = ENUM_TO_BOOLEAN(ctx->RenderMode);
820 break;
821 case GL_RESCALE_NORMAL:
822 params[0] = ctx->Transform.RescaleNormals;
823 break;
824 case GL_RGBA_MODE:
825 params[0] = GL_TRUE;
826 break;
827 case GL_SCISSOR_BOX:
828 params[0] = INT_TO_BOOLEAN(ctx->Scissor.X);
829 params[1] = INT_TO_BOOLEAN(ctx->Scissor.Y);
830 params[2] = INT_TO_BOOLEAN(ctx->Scissor.Width);
831 params[3] = INT_TO_BOOLEAN(ctx->Scissor.Height);
832 break;
833 case GL_SCISSOR_TEST:
834 params[0] = ctx->Scissor.Enabled;
835 break;
836 case GL_SELECTION_BUFFER_SIZE:
837 params[0] = INT_TO_BOOLEAN(ctx->Select.BufferSize);
838 break;
839 case GL_SHADE_MODEL:
840 params[0] = ENUM_TO_BOOLEAN(ctx->Light.ShadeModel);
841 break;
842 case GL_SHARED_TEXTURE_PALETTE_EXT:
843 params[0] = ctx->Texture.SharedPalette;
844 break;
845 case GL_STENCIL_BITS:
846 params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.stencilBits);
847 break;
848 case GL_STENCIL_CLEAR_VALUE:
849 params[0] = INT_TO_BOOLEAN(ctx->Stencil.Clear);
850 break;
851 case GL_STENCIL_FAIL:
852 params[0] = ENUM_TO_BOOLEAN(ctx->Stencil.FailFunc[ctx->Stencil.ActiveFace]);
853 break;
854 case GL_STENCIL_FUNC:
855 params[0] = ENUM_TO_BOOLEAN(ctx->Stencil.Function[ctx->Stencil.ActiveFace]);
856 break;
857 case GL_STENCIL_PASS_DEPTH_FAIL:
858 params[0] = ENUM_TO_BOOLEAN(ctx->Stencil.ZFailFunc[ctx->Stencil.ActiveFace]);
859 break;
860 case GL_STENCIL_PASS_DEPTH_PASS:
861 params[0] = ENUM_TO_BOOLEAN(ctx->Stencil.ZPassFunc[ctx->Stencil.ActiveFace]);
862 break;
863 case GL_STENCIL_REF:
864 params[0] = INT_TO_BOOLEAN(ctx->Stencil.Ref[ctx->Stencil.ActiveFace]);
865 break;
866 case GL_STENCIL_TEST:
867 params[0] = ctx->Stencil.Enabled;
868 break;
869 case GL_STENCIL_VALUE_MASK:
870 params[0] = INT_TO_BOOLEAN(ctx->Stencil.ValueMask[ctx->Stencil.ActiveFace]);
871 break;
872 case GL_STENCIL_WRITEMASK:
873 params[0] = INT_TO_BOOLEAN(ctx->Stencil.WriteMask[ctx->Stencil.ActiveFace]);
874 break;
875 case GL_STEREO:
876 params[0] = ctx->DrawBuffer->Visual.stereoMode;
877 break;
878 case GL_SUBPIXEL_BITS:
879 params[0] = INT_TO_BOOLEAN(ctx->Const.SubPixelBits);
880 break;
881 case GL_TEXTURE_1D:
882 params[0] = _mesa_IsEnabled(GL_TEXTURE_1D);
883 break;
884 case GL_TEXTURE_2D:
885 params[0] = _mesa_IsEnabled(GL_TEXTURE_2D);
886 break;
887 case GL_TEXTURE_3D:
888 params[0] = _mesa_IsEnabled(GL_TEXTURE_3D);
889 break;
890 case GL_TEXTURE_1D_ARRAY_EXT:
891 CHECK_EXT1(MESA_texture_array);
892 params[0] = _mesa_IsEnabled(GL_TEXTURE_1D_ARRAY_EXT);
893 break;
894 case GL_TEXTURE_2D_ARRAY_EXT:
895 CHECK_EXT1(MESA_texture_array);
896 params[0] = _mesa_IsEnabled(GL_TEXTURE_2D_ARRAY_EXT);
897 break;
898 case GL_TEXTURE_BINDING_1D:
899 params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_INDEX]->Name);
900 break;
901 case GL_TEXTURE_BINDING_2D:
902 params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_INDEX]->Name);
903 break;
904 case GL_TEXTURE_BINDING_3D:
905 params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_3D_INDEX]->Name);
906 break;
907 case GL_TEXTURE_BINDING_1D_ARRAY_EXT:
908 CHECK_EXT1(MESA_texture_array);
909 params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_ARRAY_INDEX]->Name);
910 break;
911 case GL_TEXTURE_BINDING_2D_ARRAY_EXT:
912 CHECK_EXT1(MESA_texture_array);
913 params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_ARRAY_INDEX]->Name);
914 break;
915 case GL_MAX_ARRAY_TEXTURE_LAYERS_EXT:
916 CHECK_EXT1(MESA_texture_array);
917 params[0] = INT_TO_BOOLEAN(ctx->Const.MaxArrayTextureLayers);
918 break;
919 case GL_TEXTURE_GEN_S:
920 params[0] = ((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & S_BIT) ? 1 : 0);
921 break;
922 case GL_TEXTURE_GEN_T:
923 params[0] = ((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & T_BIT) ? 1 : 0);
924 break;
925 case GL_TEXTURE_GEN_R:
926 params[0] = ((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & R_BIT) ? 1 : 0);
927 break;
928 case GL_TEXTURE_GEN_Q:
929 params[0] = ((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & Q_BIT) ? 1 : 0);
930 break;
931 case GL_TEXTURE_MATRIX:
932 {
933 const GLfloat *matrix;
934 const GLuint unit = ctx->Texture.CurrentUnit;
935 if (unit >= ctx->Const.MaxTextureCoordUnits) {
936 _mesa_error(ctx, GL_INVALID_OPERATION, "glGet(texture matrix %u)",
937 unit);
938 return;
939 }
940 matrix = ctx->TextureMatrixStack[unit].Top->m;
941 params[0] = FLOAT_TO_BOOLEAN(matrix[0]);
942 params[1] = FLOAT_TO_BOOLEAN(matrix[1]);
943 params[2] = FLOAT_TO_BOOLEAN(matrix[2]);
944 params[3] = FLOAT_TO_BOOLEAN(matrix[3]);
945 params[4] = FLOAT_TO_BOOLEAN(matrix[4]);
946 params[5] = FLOAT_TO_BOOLEAN(matrix[5]);
947 params[6] = FLOAT_TO_BOOLEAN(matrix[6]);
948 params[7] = FLOAT_TO_BOOLEAN(matrix[7]);
949 params[8] = FLOAT_TO_BOOLEAN(matrix[8]);
950 params[9] = FLOAT_TO_BOOLEAN(matrix[9]);
951 params[10] = FLOAT_TO_BOOLEAN(matrix[10]);
952 params[11] = FLOAT_TO_BOOLEAN(matrix[11]);
953 params[12] = FLOAT_TO_BOOLEAN(matrix[12]);
954 params[13] = FLOAT_TO_BOOLEAN(matrix[13]);
955 params[14] = FLOAT_TO_BOOLEAN(matrix[14]);
956 params[15] = FLOAT_TO_BOOLEAN(matrix[15]);
957 }
958 break;
959 case GL_TEXTURE_STACK_DEPTH:
960 {
961 const GLuint unit = ctx->Texture.CurrentUnit;
962 if (unit >= ctx->Const.MaxTextureCoordUnits) {
963 _mesa_error(ctx, GL_INVALID_OPERATION,
964 "glGet(texture stack depth, unit %u)", unit);
965 return;
966 }
967 params[0] = INT_TO_BOOLEAN(ctx->TextureMatrixStack[unit].Depth + 1);
968 }
969 break;
970 case GL_UNPACK_ALIGNMENT:
971 params[0] = INT_TO_BOOLEAN(ctx->Unpack.Alignment);
972 break;
973 case GL_UNPACK_LSB_FIRST:
974 params[0] = ctx->Unpack.LsbFirst;
975 break;
976 case GL_UNPACK_ROW_LENGTH:
977 params[0] = INT_TO_BOOLEAN(ctx->Unpack.RowLength);
978 break;
979 case GL_UNPACK_SKIP_PIXELS:
980 params[0] = INT_TO_BOOLEAN(ctx->Unpack.SkipPixels);
981 break;
982 case GL_UNPACK_SKIP_ROWS:
983 params[0] = INT_TO_BOOLEAN(ctx->Unpack.SkipRows);
984 break;
985 case GL_UNPACK_SWAP_BYTES:
986 params[0] = ctx->Unpack.SwapBytes;
987 break;
988 case GL_UNPACK_SKIP_IMAGES_EXT:
989 params[0] = INT_TO_BOOLEAN(ctx->Unpack.SkipImages);
990 break;
991 case GL_UNPACK_IMAGE_HEIGHT_EXT:
992 params[0] = INT_TO_BOOLEAN(ctx->Unpack.ImageHeight);
993 break;
994 case GL_UNPACK_CLIENT_STORAGE_APPLE:
995 params[0] = ctx->Unpack.ClientStorage;
996 break;
997 case GL_VIEWPORT:
998 params[0] = INT_TO_BOOLEAN(ctx->Viewport.X);
999 params[1] = INT_TO_BOOLEAN(ctx->Viewport.Y);
1000 params[2] = INT_TO_BOOLEAN(ctx->Viewport.Width);
1001 params[3] = INT_TO_BOOLEAN(ctx->Viewport.Height);
1002 break;
1003 case GL_ZOOM_X:
1004 params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.ZoomX);
1005 break;
1006 case GL_ZOOM_Y:
1007 params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.ZoomY);
1008 break;
1009 case GL_VERTEX_ARRAY:
1010 params[0] = ctx->Array.ArrayObj->Vertex.Enabled;
1011 break;
1012 case GL_VERTEX_ARRAY_SIZE:
1013 params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Vertex.Size);
1014 break;
1015 case GL_VERTEX_ARRAY_TYPE:
1016 params[0] = ENUM_TO_BOOLEAN(ctx->Array.ArrayObj->Vertex.Type);
1017 break;
1018 case GL_VERTEX_ARRAY_STRIDE:
1019 params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Vertex.Stride);
1020 break;
1021 case GL_VERTEX_ARRAY_COUNT_EXT:
1022 params[0] = INT_TO_BOOLEAN(0);
1023 break;
1024 case GL_NORMAL_ARRAY:
1025 params[0] = ENUM_TO_BOOLEAN(ctx->Array.ArrayObj->Normal.Enabled);
1026 break;
1027 case GL_NORMAL_ARRAY_TYPE:
1028 params[0] = ENUM_TO_BOOLEAN(ctx->Array.ArrayObj->Normal.Type);
1029 break;
1030 case GL_NORMAL_ARRAY_STRIDE:
1031 params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Normal.Stride);
1032 break;
1033 case GL_NORMAL_ARRAY_COUNT_EXT:
1034 params[0] = INT_TO_BOOLEAN(0);
1035 break;
1036 case GL_COLOR_ARRAY:
1037 params[0] = ctx->Array.ArrayObj->Color.Enabled;
1038 break;
1039 case GL_COLOR_ARRAY_SIZE:
1040 params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Color.Size);
1041 break;
1042 case GL_COLOR_ARRAY_TYPE:
1043 params[0] = ENUM_TO_BOOLEAN(ctx->Array.ArrayObj->Color.Type);
1044 break;
1045 case GL_COLOR_ARRAY_STRIDE:
1046 params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Color.Stride);
1047 break;
1048 case GL_COLOR_ARRAY_COUNT_EXT:
1049 params[0] = INT_TO_BOOLEAN(0);
1050 break;
1051 case GL_INDEX_ARRAY:
1052 params[0] = ctx->Array.ArrayObj->Index.Enabled;
1053 break;
1054 case GL_INDEX_ARRAY_TYPE:
1055 params[0] = ENUM_TO_BOOLEAN(ctx->Array.ArrayObj->Index.Type);
1056 break;
1057 case GL_INDEX_ARRAY_STRIDE:
1058 params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Index.Stride);
1059 break;
1060 case GL_INDEX_ARRAY_COUNT_EXT:
1061 params[0] = INT_TO_BOOLEAN(0);
1062 break;
1063 case GL_TEXTURE_COORD_ARRAY:
1064 params[0] = ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Enabled;
1065 break;
1066 case GL_TEXTURE_COORD_ARRAY_SIZE:
1067 params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Size);
1068 break;
1069 case GL_TEXTURE_COORD_ARRAY_TYPE:
1070 params[0] = ENUM_TO_BOOLEAN(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Type);
1071 break;
1072 case GL_TEXTURE_COORD_ARRAY_STRIDE:
1073 params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Stride);
1074 break;
1075 case GL_TEXTURE_COORD_ARRAY_COUNT_EXT:
1076 params[0] = INT_TO_BOOLEAN(0);
1077 break;
1078 case GL_EDGE_FLAG_ARRAY:
1079 params[0] = ctx->Array.ArrayObj->EdgeFlag.Enabled;
1080 break;
1081 case GL_EDGE_FLAG_ARRAY_STRIDE:
1082 params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->EdgeFlag.Stride);
1083 break;
1084 case GL_EDGE_FLAG_ARRAY_COUNT_EXT:
1085 params[0] = INT_TO_BOOLEAN(0);
1086 break;
1087 case GL_MAX_TEXTURE_UNITS_ARB:
1088 CHECK_EXT1(ARB_multitexture);
1089 params[0] = INT_TO_BOOLEAN(ctx->Const.MaxTextureUnits);
1090 break;
1091 case GL_ACTIVE_TEXTURE_ARB:
1092 CHECK_EXT1(ARB_multitexture);
1093 params[0] = INT_TO_BOOLEAN(GL_TEXTURE0_ARB + ctx->Texture.CurrentUnit);
1094 break;
1095 case GL_CLIENT_ACTIVE_TEXTURE_ARB:
1096 CHECK_EXT1(ARB_multitexture);
1097 params[0] = INT_TO_BOOLEAN(GL_TEXTURE0_ARB + ctx->Array.ActiveTexture);
1098 break;
1099 case GL_TEXTURE_CUBE_MAP_ARB:
1100 CHECK_EXT1(ARB_texture_cube_map);
1101 params[0] = _mesa_IsEnabled(GL_TEXTURE_CUBE_MAP_ARB);
1102 break;
1103 case GL_TEXTURE_BINDING_CUBE_MAP_ARB:
1104 CHECK_EXT1(ARB_texture_cube_map);
1105 params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_CUBE_INDEX]->Name);
1106 break;
1107 case GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB:
1108 CHECK_EXT1(ARB_texture_cube_map);
1109 params[0] = INT_TO_BOOLEAN((1 << (ctx->Const.MaxCubeTextureLevels - 1)));
1110 break;
1111 case GL_TEXTURE_COMPRESSION_HINT_ARB:
1112 params[0] = INT_TO_BOOLEAN(ctx->Hint.TextureCompression);
1113 break;
1114 case GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB:
1115 params[0] = INT_TO_BOOLEAN(_mesa_get_compressed_formats(ctx, NULL, GL_FALSE));
1116 break;
1117 case GL_COMPRESSED_TEXTURE_FORMATS_ARB:
1118 {
1119 GLint formats[100];
1120 GLuint i, n = _mesa_get_compressed_formats(ctx, formats, GL_FALSE);
1121 ASSERT(n <= 100);
1122 for (i = 0; i < n; i++)
1123 params[i] = ENUM_TO_BOOLEAN(formats[i]);
1124 }
1125 break;
1126 case GL_ARRAY_ELEMENT_LOCK_FIRST_EXT:
1127 CHECK_EXT1(EXT_compiled_vertex_array);
1128 params[0] = INT_TO_BOOLEAN(ctx->Array.LockFirst);
1129 break;
1130 case GL_ARRAY_ELEMENT_LOCK_COUNT_EXT:
1131 CHECK_EXT1(EXT_compiled_vertex_array);
1132 params[0] = INT_TO_BOOLEAN(ctx->Array.LockCount);
1133 break;
1134 case GL_TRANSPOSE_COLOR_MATRIX_ARB:
1135 {
1136 const GLfloat *matrix = ctx->ColorMatrixStack.Top->m;
1137 params[0] = FLOAT_TO_BOOLEAN(matrix[0]);
1138 params[1] = FLOAT_TO_BOOLEAN(matrix[4]);
1139 params[2] = FLOAT_TO_BOOLEAN(matrix[8]);
1140 params[3] = FLOAT_TO_BOOLEAN(matrix[12]);
1141 params[4] = FLOAT_TO_BOOLEAN(matrix[1]);
1142 params[5] = FLOAT_TO_BOOLEAN(matrix[5]);
1143 params[6] = FLOAT_TO_BOOLEAN(matrix[9]);
1144 params[7] = FLOAT_TO_BOOLEAN(matrix[13]);
1145 params[8] = FLOAT_TO_BOOLEAN(matrix[2]);
1146 params[9] = FLOAT_TO_BOOLEAN(matrix[6]);
1147 params[10] = FLOAT_TO_BOOLEAN(matrix[10]);
1148 params[11] = FLOAT_TO_BOOLEAN(matrix[14]);
1149 params[12] = FLOAT_TO_BOOLEAN(matrix[3]);
1150 params[13] = FLOAT_TO_BOOLEAN(matrix[7]);
1151 params[14] = FLOAT_TO_BOOLEAN(matrix[11]);
1152 params[15] = FLOAT_TO_BOOLEAN(matrix[15]);
1153 }
1154 break;
1155 case GL_TRANSPOSE_MODELVIEW_MATRIX_ARB:
1156 {
1157 const GLfloat *matrix = ctx->ModelviewMatrixStack.Top->m;
1158 params[0] = FLOAT_TO_BOOLEAN(matrix[0]);
1159 params[1] = FLOAT_TO_BOOLEAN(matrix[4]);
1160 params[2] = FLOAT_TO_BOOLEAN(matrix[8]);
1161 params[3] = FLOAT_TO_BOOLEAN(matrix[12]);
1162 params[4] = FLOAT_TO_BOOLEAN(matrix[1]);
1163 params[5] = FLOAT_TO_BOOLEAN(matrix[5]);
1164 params[6] = FLOAT_TO_BOOLEAN(matrix[9]);
1165 params[7] = FLOAT_TO_BOOLEAN(matrix[13]);
1166 params[8] = FLOAT_TO_BOOLEAN(matrix[2]);
1167 params[9] = FLOAT_TO_BOOLEAN(matrix[6]);
1168 params[10] = FLOAT_TO_BOOLEAN(matrix[10]);
1169 params[11] = FLOAT_TO_BOOLEAN(matrix[14]);
1170 params[12] = FLOAT_TO_BOOLEAN(matrix[3]);
1171 params[13] = FLOAT_TO_BOOLEAN(matrix[7]);
1172 params[14] = FLOAT_TO_BOOLEAN(matrix[11]);
1173 params[15] = FLOAT_TO_BOOLEAN(matrix[15]);
1174 }
1175 break;
1176 case GL_TRANSPOSE_PROJECTION_MATRIX_ARB:
1177 {
1178 const GLfloat *matrix = ctx->ProjectionMatrixStack.Top->m;
1179 params[0] = FLOAT_TO_BOOLEAN(matrix[0]);
1180 params[1] = FLOAT_TO_BOOLEAN(matrix[4]);
1181 params[2] = FLOAT_TO_BOOLEAN(matrix[8]);
1182 params[3] = FLOAT_TO_BOOLEAN(matrix[12]);
1183 params[4] = FLOAT_TO_BOOLEAN(matrix[1]);
1184 params[5] = FLOAT_TO_BOOLEAN(matrix[5]);
1185 params[6] = FLOAT_TO_BOOLEAN(matrix[9]);
1186 params[7] = FLOAT_TO_BOOLEAN(matrix[13]);
1187 params[8] = FLOAT_TO_BOOLEAN(matrix[2]);
1188 params[9] = FLOAT_TO_BOOLEAN(matrix[6]);
1189 params[10] = FLOAT_TO_BOOLEAN(matrix[10]);
1190 params[11] = FLOAT_TO_BOOLEAN(matrix[14]);
1191 params[12] = FLOAT_TO_BOOLEAN(matrix[3]);
1192 params[13] = FLOAT_TO_BOOLEAN(matrix[7]);
1193 params[14] = FLOAT_TO_BOOLEAN(matrix[11]);
1194 params[15] = FLOAT_TO_BOOLEAN(matrix[15]);
1195 }
1196 break;
1197 case GL_TRANSPOSE_TEXTURE_MATRIX_ARB:
1198 {
1199 const GLfloat *matrix = ctx->TextureMatrixStack[ctx->Texture.CurrentUnit].Top->m;
1200 params[0] = FLOAT_TO_BOOLEAN(matrix[0]);
1201 params[1] = FLOAT_TO_BOOLEAN(matrix[4]);
1202 params[2] = FLOAT_TO_BOOLEAN(matrix[8]);
1203 params[3] = FLOAT_TO_BOOLEAN(matrix[12]);
1204 params[4] = FLOAT_TO_BOOLEAN(matrix[1]);
1205 params[5] = FLOAT_TO_BOOLEAN(matrix[5]);
1206 params[6] = FLOAT_TO_BOOLEAN(matrix[9]);
1207 params[7] = FLOAT_TO_BOOLEAN(matrix[13]);
1208 params[8] = FLOAT_TO_BOOLEAN(matrix[2]);
1209 params[9] = FLOAT_TO_BOOLEAN(matrix[6]);
1210 params[10] = FLOAT_TO_BOOLEAN(matrix[10]);
1211 params[11] = FLOAT_TO_BOOLEAN(matrix[14]);
1212 params[12] = FLOAT_TO_BOOLEAN(matrix[3]);
1213 params[13] = FLOAT_TO_BOOLEAN(matrix[7]);
1214 params[14] = FLOAT_TO_BOOLEAN(matrix[11]);
1215 params[15] = FLOAT_TO_BOOLEAN(matrix[15]);
1216 }
1217 break;
1218 case GL_COLOR_MATRIX_SGI:
1219 {
1220 const GLfloat *matrix = ctx->ColorMatrixStack.Top->m;
1221 params[0] = FLOAT_TO_BOOLEAN(matrix[0]);
1222 params[1] = FLOAT_TO_BOOLEAN(matrix[1]);
1223 params[2] = FLOAT_TO_BOOLEAN(matrix[2]);
1224 params[3] = FLOAT_TO_BOOLEAN(matrix[3]);
1225 params[4] = FLOAT_TO_BOOLEAN(matrix[4]);
1226 params[5] = FLOAT_TO_BOOLEAN(matrix[5]);
1227 params[6] = FLOAT_TO_BOOLEAN(matrix[6]);
1228 params[7] = FLOAT_TO_BOOLEAN(matrix[7]);
1229 params[8] = FLOAT_TO_BOOLEAN(matrix[8]);
1230 params[9] = FLOAT_TO_BOOLEAN(matrix[9]);
1231 params[10] = FLOAT_TO_BOOLEAN(matrix[10]);
1232 params[11] = FLOAT_TO_BOOLEAN(matrix[11]);
1233 params[12] = FLOAT_TO_BOOLEAN(matrix[12]);
1234 params[13] = FLOAT_TO_BOOLEAN(matrix[13]);
1235 params[14] = FLOAT_TO_BOOLEAN(matrix[14]);
1236 params[15] = FLOAT_TO_BOOLEAN(matrix[15]);
1237 }
1238 break;
1239 case GL_COLOR_MATRIX_STACK_DEPTH_SGI:
1240 params[0] = INT_TO_BOOLEAN(ctx->ColorMatrixStack.Depth + 1);
1241 break;
1242 case GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI:
1243 params[0] = INT_TO_BOOLEAN(MAX_COLOR_STACK_DEPTH);
1244 break;
1245 case GL_POST_COLOR_MATRIX_RED_SCALE_SGI:
1246 params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostColorMatrixScale[0]);
1247 break;
1248 case GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI:
1249 params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostColorMatrixScale[1]);
1250 break;
1251 case GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI:
1252 params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostColorMatrixScale[2]);
1253 break;
1254 case GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI:
1255 params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostColorMatrixScale[3]);
1256 break;
1257 case GL_POST_COLOR_MATRIX_RED_BIAS_SGI:
1258 params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostColorMatrixBias[0]);
1259 break;
1260 case GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI:
1261 params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostColorMatrixBias[1]);
1262 break;
1263 case GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI:
1264 params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostColorMatrixBias[2]);
1265 break;
1266 case GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI:
1267 params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostColorMatrixBias[3]);
1268 break;
1269 case GL_CONVOLUTION_1D_EXT:
1270 CHECK_EXT1(EXT_convolution);
1271 params[0] = ctx->Pixel.Convolution1DEnabled;
1272 break;
1273 case GL_CONVOLUTION_2D_EXT:
1274 CHECK_EXT1(EXT_convolution);
1275 params[0] = ctx->Pixel.Convolution2DEnabled;
1276 break;
1277 case GL_SEPARABLE_2D_EXT:
1278 CHECK_EXT1(EXT_convolution);
1279 params[0] = ctx->Pixel.Separable2DEnabled;
1280 break;
1281 case GL_POST_CONVOLUTION_RED_SCALE_EXT:
1282 CHECK_EXT1(EXT_convolution);
1283 params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostConvolutionScale[0]);
1284 break;
1285 case GL_POST_CONVOLUTION_GREEN_SCALE_EXT:
1286 CHECK_EXT1(EXT_convolution);
1287 params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostConvolutionScale[1]);
1288 break;
1289 case GL_POST_CONVOLUTION_BLUE_SCALE_EXT:
1290 CHECK_EXT1(EXT_convolution);
1291 params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostConvolutionScale[2]);
1292 break;
1293 case GL_POST_CONVOLUTION_ALPHA_SCALE_EXT:
1294 CHECK_EXT1(EXT_convolution);
1295 params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostConvolutionScale[3]);
1296 break;
1297 case GL_POST_CONVOLUTION_RED_BIAS_EXT:
1298 CHECK_EXT1(EXT_convolution);
1299 params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostConvolutionBias[0]);
1300 break;
1301 case GL_POST_CONVOLUTION_GREEN_BIAS_EXT:
1302 CHECK_EXT1(EXT_convolution);
1303 params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostConvolutionBias[1]);
1304 break;
1305 case GL_POST_CONVOLUTION_BLUE_BIAS_EXT:
1306 CHECK_EXT1(EXT_convolution);
1307 params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostConvolutionBias[2]);
1308 break;
1309 case GL_POST_CONVOLUTION_ALPHA_BIAS_EXT:
1310 CHECK_EXT1(EXT_convolution);
1311 params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostConvolutionBias[3]);
1312 break;
1313 case GL_HISTOGRAM:
1314 CHECK_EXT1(EXT_histogram);
1315 params[0] = ctx->Pixel.HistogramEnabled;
1316 break;
1317 case GL_MINMAX:
1318 CHECK_EXT1(EXT_histogram);
1319 params[0] = ctx->Pixel.MinMaxEnabled;
1320 break;
1321 case GL_COLOR_TABLE_SGI:
1322 CHECK_EXT1(SGI_color_table);
1323 params[0] = ctx->Pixel.ColorTableEnabled[COLORTABLE_PRECONVOLUTION];
1324 break;
1325 case GL_POST_CONVOLUTION_COLOR_TABLE_SGI:
1326 CHECK_EXT1(SGI_color_table);
1327 params[0] = ctx->Pixel.ColorTableEnabled[COLORTABLE_POSTCONVOLUTION];
1328 break;
1329 case GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI:
1330 CHECK_EXT1(SGI_color_table);
1331 params[0] = ctx->Pixel.ColorTableEnabled[COLORTABLE_POSTCOLORMATRIX];
1332 break;
1333 case GL_TEXTURE_COLOR_TABLE_SGI:
1334 CHECK_EXT1(SGI_texture_color_table);
1335 params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].ColorTableEnabled;
1336 break;
1337 case GL_COLOR_SUM_EXT:
1338 CHECK_EXT2(EXT_secondary_color, ARB_vertex_program);
1339 params[0] = ctx->Fog.ColorSumEnabled;
1340 break;
1341 case GL_CURRENT_SECONDARY_COLOR_EXT:
1342 CHECK_EXT1(EXT_secondary_color);
1343 FLUSH_CURRENT(ctx, 0);
1344 params[0] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][0]);
1345 params[1] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][1]);
1346 params[2] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][2]);
1347 params[3] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][3]);
1348 break;
1349 case GL_SECONDARY_COLOR_ARRAY_EXT:
1350 CHECK_EXT1(EXT_secondary_color);
1351 params[0] = ctx->Array.ArrayObj->SecondaryColor.Enabled;
1352 break;
1353 case GL_SECONDARY_COLOR_ARRAY_TYPE_EXT:
1354 CHECK_EXT1(EXT_secondary_color);
1355 params[0] = ENUM_TO_BOOLEAN(ctx->Array.ArrayObj->SecondaryColor.Type);
1356 break;
1357 case GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT:
1358 CHECK_EXT1(EXT_secondary_color);
1359 params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->SecondaryColor.Stride);
1360 break;
1361 case GL_SECONDARY_COLOR_ARRAY_SIZE_EXT:
1362 CHECK_EXT1(EXT_secondary_color);
1363 params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->SecondaryColor.Size);
1364 break;
1365 case GL_CURRENT_FOG_COORDINATE_EXT:
1366 CHECK_EXT1(EXT_fog_coord);
1367 FLUSH_CURRENT(ctx, 0);
1368 params[0] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_FOG][0]);
1369 break;
1370 case GL_FOG_COORDINATE_ARRAY_EXT:
1371 CHECK_EXT1(EXT_fog_coord);
1372 params[0] = ctx->Array.ArrayObj->FogCoord.Enabled;
1373 break;
1374 case GL_FOG_COORDINATE_ARRAY_TYPE_EXT:
1375 CHECK_EXT1(EXT_fog_coord);
1376 params[0] = ENUM_TO_BOOLEAN(ctx->Array.ArrayObj->FogCoord.Type);
1377 break;
1378 case GL_FOG_COORDINATE_ARRAY_STRIDE_EXT:
1379 CHECK_EXT1(EXT_fog_coord);
1380 params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->FogCoord.Stride);
1381 break;
1382 case GL_FOG_COORDINATE_SOURCE_EXT:
1383 CHECK_EXT1(EXT_fog_coord);
1384 params[0] = ENUM_TO_BOOLEAN(ctx->Fog.FogCoordinateSource);
1385 break;
1386 case GL_MAX_TEXTURE_LOD_BIAS_EXT:
1387 CHECK_EXT1(EXT_texture_lod_bias);
1388 params[0] = FLOAT_TO_BOOLEAN(ctx->Const.MaxTextureLodBias);
1389 break;
1390 case GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT:
1391 CHECK_EXT1(EXT_texture_filter_anisotropic);
1392 params[0] = FLOAT_TO_BOOLEAN(ctx->Const.MaxTextureMaxAnisotropy);
1393 break;
1394 case GL_MULTISAMPLE_ARB:
1395 params[0] = ctx->Multisample.Enabled;
1396 break;
1397 case GL_SAMPLE_ALPHA_TO_COVERAGE_ARB:
1398 params[0] = ctx->Multisample.SampleAlphaToCoverage;
1399 break;
1400 case GL_SAMPLE_ALPHA_TO_ONE_ARB:
1401 params[0] = ctx->Multisample.SampleAlphaToOne;
1402 break;
1403 case GL_SAMPLE_COVERAGE_ARB:
1404 params[0] = ctx->Multisample.SampleCoverage;
1405 break;
1406 case GL_SAMPLE_COVERAGE_VALUE_ARB:
1407 params[0] = FLOAT_TO_BOOLEAN(ctx->Multisample.SampleCoverageValue);
1408 break;
1409 case GL_SAMPLE_COVERAGE_INVERT_ARB:
1410 params[0] = ctx->Multisample.SampleCoverageInvert;
1411 break;
1412 case GL_SAMPLE_BUFFERS_ARB:
1413 params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.sampleBuffers);
1414 break;
1415 case GL_SAMPLES_ARB:
1416 params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.samples);
1417 break;
1418 case GL_RASTER_POSITION_UNCLIPPED_IBM:
1419 CHECK_EXT1(IBM_rasterpos_clip);
1420 params[0] = ctx->Transform.RasterPositionUnclipped;
1421 break;
1422 case GL_POINT_SPRITE_NV:
1423 CHECK_EXT2(NV_point_sprite, ARB_point_sprite);
1424 params[0] = ctx->Point.PointSprite;
1425 break;
1426 case GL_POINT_SPRITE_R_MODE_NV:
1427 CHECK_EXT1(NV_point_sprite);
1428 params[0] = ENUM_TO_BOOLEAN(ctx->Point.SpriteRMode);
1429 break;
1430 case GL_POINT_SPRITE_COORD_ORIGIN:
1431 CHECK_EXT2(NV_point_sprite, ARB_point_sprite);
1432 params[0] = ENUM_TO_BOOLEAN(ctx->Point.SpriteOrigin);
1433 break;
1434 case GL_GENERATE_MIPMAP_HINT_SGIS:
1435 CHECK_EXT1(SGIS_generate_mipmap);
1436 params[0] = ENUM_TO_BOOLEAN(ctx->Hint.GenerateMipmap);
1437 break;
1438 case GL_VERTEX_PROGRAM_BINDING_NV:
1439 CHECK_EXT1(NV_vertex_program);
1440 params[0] = INT_TO_BOOLEAN((ctx->VertexProgram.Current ? ctx->VertexProgram.Current->Base.Id : 0));
1441 break;
1442 case GL_VERTEX_ATTRIB_ARRAY0_NV:
1443 CHECK_EXT1(NV_vertex_program);
1444 params[0] = ctx->Array.ArrayObj->VertexAttrib[0].Enabled;
1445 break;
1446 case GL_VERTEX_ATTRIB_ARRAY1_NV:
1447 CHECK_EXT1(NV_vertex_program);
1448 params[0] = ctx->Array.ArrayObj->VertexAttrib[1].Enabled;
1449 break;
1450 case GL_VERTEX_ATTRIB_ARRAY2_NV:
1451 CHECK_EXT1(NV_vertex_program);
1452 params[0] = ctx->Array.ArrayObj->VertexAttrib[2].Enabled;
1453 break;
1454 case GL_VERTEX_ATTRIB_ARRAY3_NV:
1455 CHECK_EXT1(NV_vertex_program);
1456 params[0] = ctx->Array.ArrayObj->VertexAttrib[3].Enabled;
1457 break;
1458 case GL_VERTEX_ATTRIB_ARRAY4_NV:
1459 CHECK_EXT1(NV_vertex_program);
1460 params[0] = ctx->Array.ArrayObj->VertexAttrib[4].Enabled;
1461 break;
1462 case GL_VERTEX_ATTRIB_ARRAY5_NV:
1463 CHECK_EXT1(NV_vertex_program);
1464 params[0] = ctx->Array.ArrayObj->VertexAttrib[5].Enabled;
1465 break;
1466 case GL_VERTEX_ATTRIB_ARRAY6_NV:
1467 CHECK_EXT1(NV_vertex_program);
1468 params[0] = ctx->Array.ArrayObj->VertexAttrib[6].Enabled;
1469 break;
1470 case GL_VERTEX_ATTRIB_ARRAY7_NV:
1471 CHECK_EXT1(NV_vertex_program);
1472 params[0] = ctx->Array.ArrayObj->VertexAttrib[7].Enabled;
1473 break;
1474 case GL_VERTEX_ATTRIB_ARRAY8_NV:
1475 CHECK_EXT1(NV_vertex_program);
1476 params[0] = ctx->Array.ArrayObj->VertexAttrib[8].Enabled;
1477 break;
1478 case GL_VERTEX_ATTRIB_ARRAY9_NV:
1479 CHECK_EXT1(NV_vertex_program);
1480 params[0] = ctx->Array.ArrayObj->VertexAttrib[9].Enabled;
1481 break;
1482 case GL_VERTEX_ATTRIB_ARRAY10_NV:
1483 CHECK_EXT1(NV_vertex_program);
1484 params[0] = ctx->Array.ArrayObj->VertexAttrib[10].Enabled;
1485 break;
1486 case GL_VERTEX_ATTRIB_ARRAY11_NV:
1487 CHECK_EXT1(NV_vertex_program);
1488 params[0] = ctx->Array.ArrayObj->VertexAttrib[11].Enabled;
1489 break;
1490 case GL_VERTEX_ATTRIB_ARRAY12_NV:
1491 CHECK_EXT1(NV_vertex_program);
1492 params[0] = ctx->Array.ArrayObj->VertexAttrib[12].Enabled;
1493 break;
1494 case GL_VERTEX_ATTRIB_ARRAY13_NV:
1495 CHECK_EXT1(NV_vertex_program);
1496 params[0] = ctx->Array.ArrayObj->VertexAttrib[13].Enabled;
1497 break;
1498 case GL_VERTEX_ATTRIB_ARRAY14_NV:
1499 CHECK_EXT1(NV_vertex_program);
1500 params[0] = ctx->Array.ArrayObj->VertexAttrib[14].Enabled;
1501 break;
1502 case GL_VERTEX_ATTRIB_ARRAY15_NV:
1503 CHECK_EXT1(NV_vertex_program);
1504 params[0] = ctx->Array.ArrayObj->VertexAttrib[15].Enabled;
1505 break;
1506 case GL_MAP1_VERTEX_ATTRIB0_4_NV:
1507 CHECK_EXT1(NV_vertex_program);
1508 params[0] = ctx->Eval.Map1Attrib[0];
1509 break;
1510 case GL_MAP1_VERTEX_ATTRIB1_4_NV:
1511 CHECK_EXT1(NV_vertex_program);
1512 params[0] = ctx->Eval.Map1Attrib[1];
1513 break;
1514 case GL_MAP1_VERTEX_ATTRIB2_4_NV:
1515 CHECK_EXT1(NV_vertex_program);
1516 params[0] = ctx->Eval.Map1Attrib[2];
1517 break;
1518 case GL_MAP1_VERTEX_ATTRIB3_4_NV:
1519 CHECK_EXT1(NV_vertex_program);
1520 params[0] = ctx->Eval.Map1Attrib[3];
1521 break;
1522 case GL_MAP1_VERTEX_ATTRIB4_4_NV:
1523 CHECK_EXT1(NV_vertex_program);
1524 params[0] = ctx->Eval.Map1Attrib[4];
1525 break;
1526 case GL_MAP1_VERTEX_ATTRIB5_4_NV:
1527 CHECK_EXT1(NV_vertex_program);
1528 params[0] = ctx->Eval.Map1Attrib[5];
1529 break;
1530 case GL_MAP1_VERTEX_ATTRIB6_4_NV:
1531 CHECK_EXT1(NV_vertex_program);
1532 params[0] = ctx->Eval.Map1Attrib[6];
1533 break;
1534 case GL_MAP1_VERTEX_ATTRIB7_4_NV:
1535 CHECK_EXT1(NV_vertex_program);
1536 params[0] = ctx->Eval.Map1Attrib[7];
1537 break;
1538 case GL_MAP1_VERTEX_ATTRIB8_4_NV:
1539 CHECK_EXT1(NV_vertex_program);
1540 params[0] = ctx->Eval.Map1Attrib[8];
1541 break;
1542 case GL_MAP1_VERTEX_ATTRIB9_4_NV:
1543 CHECK_EXT1(NV_vertex_program);
1544 params[0] = ctx->Eval.Map1Attrib[9];
1545 break;
1546 case GL_MAP1_VERTEX_ATTRIB10_4_NV:
1547 CHECK_EXT1(NV_vertex_program);
1548 params[0] = ctx->Eval.Map1Attrib[10];
1549 break;
1550 case GL_MAP1_VERTEX_ATTRIB11_4_NV:
1551 CHECK_EXT1(NV_vertex_program);
1552 params[0] = ctx->Eval.Map1Attrib[11];
1553 break;
1554 case GL_MAP1_VERTEX_ATTRIB12_4_NV:
1555 CHECK_EXT1(NV_vertex_program);
1556 params[0] = ctx->Eval.Map1Attrib[12];
1557 break;
1558 case GL_MAP1_VERTEX_ATTRIB13_4_NV:
1559 CHECK_EXT1(NV_vertex_program);
1560 params[0] = ctx->Eval.Map1Attrib[13];
1561 break;
1562 case GL_MAP1_VERTEX_ATTRIB14_4_NV:
1563 CHECK_EXT1(NV_vertex_program);
1564 params[0] = ctx->Eval.Map1Attrib[14];
1565 break;
1566 case GL_MAP1_VERTEX_ATTRIB15_4_NV:
1567 CHECK_EXT1(NV_vertex_program);
1568 params[0] = ctx->Eval.Map1Attrib[15];
1569 break;
1570 case GL_FRAGMENT_PROGRAM_NV:
1571 CHECK_EXT1(NV_fragment_program);
1572 params[0] = ctx->FragmentProgram.Enabled;
1573 break;
1574 case GL_FRAGMENT_PROGRAM_BINDING_NV:
1575 CHECK_EXT1(NV_fragment_program);
1576 params[0] = INT_TO_BOOLEAN(ctx->FragmentProgram.Current ? ctx->FragmentProgram.Current->Base.Id : 0);
1577 break;
1578 case GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV:
1579 CHECK_EXT1(NV_fragment_program);
1580 params[0] = INT_TO_BOOLEAN(MAX_NV_FRAGMENT_PROGRAM_PARAMS);
1581 break;
1582 case GL_TEXTURE_RECTANGLE_NV:
1583 CHECK_EXT1(NV_texture_rectangle);
1584 params[0] = _mesa_IsEnabled(GL_TEXTURE_RECTANGLE_NV);
1585 break;
1586 case GL_TEXTURE_BINDING_RECTANGLE_NV:
1587 CHECK_EXT1(NV_texture_rectangle);
1588 params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_RECT_INDEX]->Name);
1589 break;
1590 case GL_MAX_RECTANGLE_TEXTURE_SIZE_NV:
1591 CHECK_EXT1(NV_texture_rectangle);
1592 params[0] = INT_TO_BOOLEAN(ctx->Const.MaxTextureRectSize);
1593 break;
1594 case GL_STENCIL_TEST_TWO_SIDE_EXT:
1595 CHECK_EXT1(EXT_stencil_two_side);
1596 params[0] = ctx->Stencil.TestTwoSide;
1597 break;
1598 case GL_ACTIVE_STENCIL_FACE_EXT:
1599 CHECK_EXT1(EXT_stencil_two_side);
1600 params[0] = ENUM_TO_BOOLEAN(ctx->Stencil.ActiveFace ? GL_BACK : GL_FRONT);
1601 break;
1602 case GL_MAX_SHININESS_NV:
1603 CHECK_EXT1(NV_light_max_exponent);
1604 params[0] = FLOAT_TO_BOOLEAN(ctx->Const.MaxShininess);
1605 break;
1606 case GL_MAX_SPOT_EXPONENT_NV:
1607 CHECK_EXT1(NV_light_max_exponent);
1608 params[0] = FLOAT_TO_BOOLEAN(ctx->Const.MaxSpotExponent);
1609 break;
1610 case GL_ARRAY_BUFFER_BINDING_ARB:
1611 params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayBufferObj->Name);
1612 break;
1613 case GL_VERTEX_ARRAY_BUFFER_BINDING_ARB:
1614 params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Vertex.BufferObj->Name);
1615 break;
1616 case GL_NORMAL_ARRAY_BUFFER_BINDING_ARB:
1617 params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Normal.BufferObj->Name);
1618 break;
1619 case GL_COLOR_ARRAY_BUFFER_BINDING_ARB:
1620 params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Color.BufferObj->Name);
1621 break;
1622 case GL_INDEX_ARRAY_BUFFER_BINDING_ARB:
1623 params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Index.BufferObj->Name);
1624 break;
1625 case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB:
1626 params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].BufferObj->Name);
1627 break;
1628 case GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB:
1629 params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->EdgeFlag.BufferObj->Name);
1630 break;
1631 case GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB:
1632 params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->SecondaryColor.BufferObj->Name);
1633 break;
1634 case GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB:
1635 params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->FogCoord.BufferObj->Name);
1636 break;
1637 case GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB:
1638 params[0] = INT_TO_BOOLEAN(ctx->Array.ElementArrayBufferObj->Name);
1639 break;
1640 case GL_PIXEL_PACK_BUFFER_BINDING_EXT:
1641 CHECK_EXT1(EXT_pixel_buffer_object);
1642 params[0] = INT_TO_BOOLEAN(ctx->Pack.BufferObj->Name);
1643 break;
1644 case GL_PIXEL_UNPACK_BUFFER_BINDING_EXT:
1645 CHECK_EXT1(EXT_pixel_buffer_object);
1646 params[0] = INT_TO_BOOLEAN(ctx->Unpack.BufferObj->Name);
1647 break;
1648 case GL_VERTEX_PROGRAM_ARB:
1649 CHECK_EXT2(ARB_vertex_program, NV_vertex_program);
1650 params[0] = ctx->VertexProgram.Enabled;
1651 break;
1652 case GL_VERTEX_PROGRAM_POINT_SIZE_ARB:
1653 CHECK_EXT2(ARB_vertex_program, NV_vertex_program);
1654 params[0] = ctx->VertexProgram.PointSizeEnabled;
1655 break;
1656 case GL_VERTEX_PROGRAM_TWO_SIDE_ARB:
1657 CHECK_EXT2(ARB_vertex_program, NV_vertex_program);
1658 params[0] = ctx->VertexProgram.TwoSideEnabled;
1659 break;
1660 case GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB:
1661 CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_vertex_program);
1662 params[0] = INT_TO_BOOLEAN(ctx->Const.MaxProgramMatrixStackDepth);
1663 break;
1664 case GL_MAX_PROGRAM_MATRICES_ARB:
1665 CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_vertex_program);
1666 params[0] = INT_TO_BOOLEAN(ctx->Const.MaxProgramMatrices);
1667 break;
1668 case GL_CURRENT_MATRIX_STACK_DEPTH_ARB:
1669 CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_vertex_program);
1670 params[0] = ctx->CurrentStack->Depth + 1;
1671 break;
1672 case GL_CURRENT_MATRIX_ARB:
1673 CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_fragment_program);
1674 {
1675 const GLfloat *matrix = ctx->CurrentStack->Top->m;
1676 params[0] = FLOAT_TO_BOOLEAN(matrix[0]);
1677 params[1] = FLOAT_TO_BOOLEAN(matrix[1]);
1678 params[2] = FLOAT_TO_BOOLEAN(matrix[2]);
1679 params[3] = FLOAT_TO_BOOLEAN(matrix[3]);
1680 params[4] = FLOAT_TO_BOOLEAN(matrix[4]);
1681 params[5] = FLOAT_TO_BOOLEAN(matrix[5]);
1682 params[6] = FLOAT_TO_BOOLEAN(matrix[6]);
1683 params[7] = FLOAT_TO_BOOLEAN(matrix[7]);
1684 params[8] = FLOAT_TO_BOOLEAN(matrix[8]);
1685 params[9] = FLOAT_TO_BOOLEAN(matrix[9]);
1686 params[10] = FLOAT_TO_BOOLEAN(matrix[10]);
1687 params[11] = FLOAT_TO_BOOLEAN(matrix[11]);
1688 params[12] = FLOAT_TO_BOOLEAN(matrix[12]);
1689 params[13] = FLOAT_TO_BOOLEAN(matrix[13]);
1690 params[14] = FLOAT_TO_BOOLEAN(matrix[14]);
1691 params[15] = FLOAT_TO_BOOLEAN(matrix[15]);
1692 }
1693 break;
1694 case GL_TRANSPOSE_CURRENT_MATRIX_ARB:
1695 CHECK_EXT2(ARB_vertex_program, ARB_fragment_program);
1696 {
1697 const GLfloat *matrix = ctx->CurrentStack->Top->m;
1698 params[0] = FLOAT_TO_BOOLEAN(matrix[0]);
1699 params[1] = FLOAT_TO_BOOLEAN(matrix[4]);
1700 params[2] = FLOAT_TO_BOOLEAN(matrix[8]);
1701 params[3] = FLOAT_TO_BOOLEAN(matrix[12]);
1702 params[4] = FLOAT_TO_BOOLEAN(matrix[1]);
1703 params[5] = FLOAT_TO_BOOLEAN(matrix[5]);
1704 params[6] = FLOAT_TO_BOOLEAN(matrix[9]);
1705 params[7] = FLOAT_TO_BOOLEAN(matrix[13]);
1706 params[8] = FLOAT_TO_BOOLEAN(matrix[2]);
1707 params[9] = FLOAT_TO_BOOLEAN(matrix[6]);
1708 params[10] = FLOAT_TO_BOOLEAN(matrix[10]);
1709 params[11] = FLOAT_TO_BOOLEAN(matrix[14]);
1710 params[12] = FLOAT_TO_BOOLEAN(matrix[3]);
1711 params[13] = FLOAT_TO_BOOLEAN(matrix[7]);
1712 params[14] = FLOAT_TO_BOOLEAN(matrix[11]);
1713 params[15] = FLOAT_TO_BOOLEAN(matrix[15]);
1714 }
1715 break;
1716 case GL_MAX_VERTEX_ATTRIBS_ARB:
1717 CHECK_EXT1(ARB_vertex_program);
1718 params[0] = INT_TO_BOOLEAN(ctx->Const.VertexProgram.MaxAttribs);
1719 break;
1720 case GL_PROGRAM_ERROR_POSITION_ARB:
1721 CHECK_EXT4(NV_vertex_program, ARB_vertex_program, NV_fragment_program, ARB_fragment_program);
1722 params[0] = INT_TO_BOOLEAN(ctx->Program.ErrorPos);
1723 break;
1724 case GL_FRAGMENT_PROGRAM_ARB:
1725 CHECK_EXT1(ARB_fragment_program);
1726 params[0] = ctx->FragmentProgram.Enabled;
1727 break;
1728 case GL_MAX_TEXTURE_COORDS_ARB:
1729 CHECK_EXT2(ARB_fragment_program, NV_fragment_program);
1730 params[0] = INT_TO_BOOLEAN(ctx->Const.MaxTextureCoordUnits);
1731 break;
1732 case GL_MAX_TEXTURE_IMAGE_UNITS_ARB:
1733 CHECK_EXT2(ARB_fragment_program, NV_fragment_program);
1734 params[0] = INT_TO_BOOLEAN(ctx->Const.MaxTextureImageUnits);
1735 break;
1736 case GL_DEPTH_BOUNDS_TEST_EXT:
1737 CHECK_EXT1(EXT_depth_bounds_test);
1738 params[0] = ctx->Depth.BoundsTest;
1739 break;
1740 case GL_DEPTH_BOUNDS_EXT:
1741 CHECK_EXT1(EXT_depth_bounds_test);
1742 params[0] = FLOAT_TO_BOOLEAN(ctx->Depth.BoundsMin);
1743 params[1] = FLOAT_TO_BOOLEAN(ctx->Depth.BoundsMax);
1744 break;
1745 case GL_DEPTH_CLAMP:
1746 CHECK_EXT1(ARB_depth_clamp);
1747 params[0] = ctx->Transform.DepthClamp;
1748 break;
1749 case GL_MAX_DRAW_BUFFERS_ARB:
1750 params[0] = INT_TO_BOOLEAN(ctx->Const.MaxDrawBuffers);
1751 break;
1752 case GL_DRAW_BUFFER0_ARB:
1753 params[0] = ENUM_TO_BOOLEAN(ctx->DrawBuffer->ColorDrawBuffer[0]);
1754 break;
1755 case GL_DRAW_BUFFER1_ARB:
1756 {
1757 GLenum buffer;
1758 if (pname - GL_DRAW_BUFFER0_ARB >= ctx->Const.MaxDrawBuffers) {
1759 _mesa_error(ctx, GL_INVALID_ENUM, "glGet(GL_DRAW_BUFFERx_ARB)");
1760 return;
1761 }
1762 buffer = ctx->DrawBuffer->ColorDrawBuffer[1];
1763 params[0] = ENUM_TO_BOOLEAN(buffer);
1764 }
1765 break;
1766 case GL_DRAW_BUFFER2_ARB:
1767 {
1768 GLenum buffer;
1769 if (pname - GL_DRAW_BUFFER0_ARB >= ctx->Const.MaxDrawBuffers) {
1770 _mesa_error(ctx, GL_INVALID_ENUM, "glGet(GL_DRAW_BUFFERx_ARB)");
1771 return;
1772 }
1773 buffer = ctx->DrawBuffer->ColorDrawBuffer[2];
1774 params[0] = ENUM_TO_BOOLEAN(buffer);
1775 }
1776 break;
1777 case GL_DRAW_BUFFER3_ARB:
1778 {
1779 GLenum buffer;
1780 if (pname - GL_DRAW_BUFFER0_ARB >= ctx->Const.MaxDrawBuffers) {
1781 _mesa_error(ctx, GL_INVALID_ENUM, "glGet(GL_DRAW_BUFFERx_ARB)");
1782 return;
1783 }
1784 buffer = ctx->DrawBuffer->ColorDrawBuffer[3];
1785 params[0] = ENUM_TO_BOOLEAN(buffer);
1786 }
1787 break;
1788 case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES:
1789 CHECK_EXT1(OES_read_format);
1790 if (ctx->NewState & _NEW_BUFFERS)
1791 _mesa_update_state(ctx);
1792 params[0] = INT_TO_BOOLEAN(_mesa_get_color_read_type(ctx));
1793 break;
1794 case GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES:
1795 CHECK_EXT1(OES_read_format);
1796 if (ctx->NewState & _NEW_BUFFERS)
1797 _mesa_update_state(ctx);
1798 params[0] = INT_TO_BOOLEAN(_mesa_get_color_read_format(ctx));
1799 break;
1800 case GL_NUM_FRAGMENT_REGISTERS_ATI:
1801 CHECK_EXT1(ATI_fragment_shader);
1802 params[0] = INT_TO_BOOLEAN(6);
1803 break;
1804 case GL_NUM_FRAGMENT_CONSTANTS_ATI:
1805 CHECK_EXT1(ATI_fragment_shader);
1806 params[0] = INT_TO_BOOLEAN(8);
1807 break;
1808 case GL_NUM_PASSES_ATI:
1809 CHECK_EXT1(ATI_fragment_shader);
1810 params[0] = INT_TO_BOOLEAN(2);
1811 break;
1812 case GL_NUM_INSTRUCTIONS_PER_PASS_ATI:
1813 CHECK_EXT1(ATI_fragment_shader);
1814 params[0] = INT_TO_BOOLEAN(8);
1815 break;
1816 case GL_NUM_INSTRUCTIONS_TOTAL_ATI:
1817 CHECK_EXT1(ATI_fragment_shader);
1818 params[0] = INT_TO_BOOLEAN(16);
1819 break;
1820 case GL_COLOR_ALPHA_PAIRING_ATI:
1821 CHECK_EXT1(ATI_fragment_shader);
1822 params[0] = GL_TRUE;
1823 break;
1824 case GL_NUM_LOOPBACK_COMPONENTS_ATI:
1825 CHECK_EXT1(ATI_fragment_shader);
1826 params[0] = INT_TO_BOOLEAN(3);
1827 break;
1828 case GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI:
1829 CHECK_EXT1(ATI_fragment_shader);
1830 params[0] = INT_TO_BOOLEAN(3);
1831 break;
1832 case GL_STENCIL_BACK_FUNC:
1833 params[0] = ENUM_TO_BOOLEAN(ctx->Stencil.Function[1]);
1834 break;
1835 case GL_STENCIL_BACK_VALUE_MASK:
1836 params[0] = INT_TO_BOOLEAN(ctx->Stencil.ValueMask[1]);
1837 break;
1838 case GL_STENCIL_BACK_WRITEMASK:
1839 params[0] = INT_TO_BOOLEAN(ctx->Stencil.WriteMask[1]);
1840 break;
1841 case GL_STENCIL_BACK_REF:
1842 params[0] = INT_TO_BOOLEAN(ctx->Stencil.Ref[1]);
1843 break;
1844 case GL_STENCIL_BACK_FAIL:
1845 params[0] = ENUM_TO_BOOLEAN(ctx->Stencil.FailFunc[1]);
1846 break;
1847 case GL_STENCIL_BACK_PASS_DEPTH_FAIL:
1848 params[0] = ENUM_TO_BOOLEAN(ctx->Stencil.ZFailFunc[1]);
1849 break;
1850 case GL_STENCIL_BACK_PASS_DEPTH_PASS:
1851 params[0] = ENUM_TO_BOOLEAN(ctx->Stencil.ZPassFunc[1]);
1852 break;
1853 case GL_FRAMEBUFFER_BINDING_EXT:
1854 CHECK_EXT1(EXT_framebuffer_object);
1855 params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Name);
1856 break;
1857 case GL_RENDERBUFFER_BINDING_EXT:
1858 CHECK_EXT1(EXT_framebuffer_object);
1859 params[0] = INT_TO_BOOLEAN(ctx->CurrentRenderbuffer ? ctx->CurrentRenderbuffer->Name : 0);
1860 break;
1861 case GL_MAX_COLOR_ATTACHMENTS_EXT:
1862 CHECK_EXT1(EXT_framebuffer_object);
1863 params[0] = INT_TO_BOOLEAN(ctx->Const.MaxColorAttachments);
1864 break;
1865 case GL_MAX_RENDERBUFFER_SIZE_EXT:
1866 CHECK_EXT1(EXT_framebuffer_object);
1867 params[0] = INT_TO_BOOLEAN(ctx->Const.MaxRenderbufferSize);
1868 break;
1869 case GL_READ_FRAMEBUFFER_BINDING_EXT:
1870 CHECK_EXT1(EXT_framebuffer_blit);
1871 params[0] = INT_TO_BOOLEAN(ctx->ReadBuffer->Name);
1872 break;
1873 case GL_PROVOKING_VERTEX_EXT:
1874 CHECK_EXT1(EXT_provoking_vertex);
1875 params[0] = ctx->Light.ProvokingVertex;
1876 break;
1877 case GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT:
1878 CHECK_EXT1(EXT_provoking_vertex);
1879 params[0] = ctx->Const.QuadsFollowProvokingVertexConvention;
1880 break;
1881 case GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB:
1882 CHECK_EXT1(ARB_fragment_shader);
1883 params[0] = INT_TO_BOOLEAN(ctx->Const.FragmentProgram.MaxUniformComponents);
1884 break;
1885 case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB:
1886 CHECK_EXT1(ARB_fragment_shader);
1887 params[0] = ENUM_TO_BOOLEAN(ctx->Hint.FragmentShaderDerivative);
1888 break;
1889 case GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB:
1890 CHECK_EXT1(ARB_vertex_shader);
1891 params[0] = INT_TO_BOOLEAN(ctx->Const.VertexProgram.MaxUniformComponents);
1892 break;
1893 case GL_MAX_VARYING_FLOATS_ARB:
1894 CHECK_EXT1(ARB_vertex_shader);
1895 params[0] = INT_TO_BOOLEAN(ctx->Const.MaxVarying * 4);
1896 break;
1897 case GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB:
1898 CHECK_EXT1(ARB_vertex_shader);
1899 params[0] = INT_TO_BOOLEAN(ctx->Const.MaxVertexTextureImageUnits);
1900 break;
1901 case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB:
1902 CHECK_EXT1(ARB_vertex_shader);
1903 params[0] = INT_TO_BOOLEAN(ctx->Const.MaxCombinedTextureImageUnits);
1904 break;
1905 case GL_CURRENT_PROGRAM:
1906 CHECK_EXT1(ARB_shader_objects);
1907 params[0] = INT_TO_BOOLEAN(ctx->Shader.CurrentProgram ? ctx->Shader.CurrentProgram->Name : 0);
1908 break;
1909 case GL_MAX_SAMPLES:
1910 CHECK_EXT1(ARB_framebuffer_object);
1911 params[0] = INT_TO_BOOLEAN(ctx->Const.MaxSamples);
1912 break;
1913 case GL_VERTEX_ARRAY_BINDING_APPLE:
1914 CHECK_EXT1(APPLE_vertex_array_object);
1915 params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Name);
1916 break;
1917 case GL_TEXTURE_CUBE_MAP_SEAMLESS:
1918 CHECK_EXT1(ARB_seamless_cube_map);
1919 params[0] = ctx->Texture.CubeMapSeamless;
1920 break;
1921 case GL_MAX_SERVER_WAIT_TIMEOUT:
1922 CHECK_EXT1(ARB_sync);
1923 params[0] = INT64_TO_BOOLEAN(ctx->Const.MaxServerWaitTimeout);
1924 break;
1925 case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING:
1926 CHECK_EXT1(EXT_transform_feedback);
1927 params[0] = INT_TO_BOOLEAN(ctx->TransformFeedback.CurrentBuffer->Name);
1928 break;
1929 case GL_RASTERIZER_DISCARD:
1930 CHECK_EXT1(EXT_transform_feedback);
1931 params[0] = ctx->TransformFeedback.RasterDiscard;
1932 break;
1933 case GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS:
1934 CHECK_EXT1(EXT_transform_feedback);
1935 params[0] = INT_TO_BOOLEAN(ctx->Const.MaxTransformFeedbackInterleavedComponents);
1936 break;
1937 case GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS:
1938 CHECK_EXT1(EXT_transform_feedback);
1939 params[0] = INT_TO_BOOLEAN(ctx->Const.MaxTransformFeedbackSeparateAttribs);
1940 break;
1941 case GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS:
1942 CHECK_EXT1(EXT_transform_feedback);
1943 params[0] = INT_TO_BOOLEAN(ctx->Const.MaxTransformFeedbackSeparateComponents);
1944 break;
1945 case GL_NUM_EXTENSIONS:
1946 params[0] = INT_TO_BOOLEAN(_mesa_get_extension_count(ctx));
1947 break;
1948 case GL_MAJOR_VERSION:
1949 params[0] = INT_TO_BOOLEAN(ctx->VersionMajor);
1950 break;
1951 case GL_MINOR_VERSION:
1952 params[0] = INT_TO_BOOLEAN(ctx->VersionMinor);
1953 break;
1954 case GL_CONTEXT_FLAGS:
1955 params[0] = INT_TO_BOOLEAN(ctx->Const.ContextFlags);
1956 break;
1957 default:
1958 goto invalid_enum_error;
1959 }
1960 return;
1961
1962 invalid_enum_error:
1963 _mesa_error(ctx, GL_INVALID_ENUM, "glGetBooleanv(pname=0x%x)", pname);
1964 }
1965
1966 void GLAPIENTRY
1967 _mesa_GetFloatv( GLenum pname, GLfloat *params )
1968 {
1969 GET_CURRENT_CONTEXT(ctx);
1970 ASSERT_OUTSIDE_BEGIN_END(ctx);
1971
1972 if (!params)
1973 return;
1974
1975 if (ctx->Driver.GetFloatv &&
1976 ctx->Driver.GetFloatv(ctx, pname, params))
1977 return;
1978
1979 switch (pname) {
1980 case GL_ACCUM_RED_BITS:
1981 params[0] = (GLfloat)(ctx->DrawBuffer->Visual.accumRedBits);
1982 break;
1983 case GL_ACCUM_GREEN_BITS:
1984 params[0] = (GLfloat)(ctx->DrawBuffer->Visual.accumGreenBits);
1985 break;
1986 case GL_ACCUM_BLUE_BITS:
1987 params[0] = (GLfloat)(ctx->DrawBuffer->Visual.accumBlueBits);
1988 break;
1989 case GL_ACCUM_ALPHA_BITS:
1990 params[0] = (GLfloat)(ctx->DrawBuffer->Visual.accumAlphaBits);
1991 break;
1992 case GL_ACCUM_CLEAR_VALUE:
1993 params[0] = ctx->Accum.ClearColor[0];
1994 params[1] = ctx->Accum.ClearColor[1];
1995 params[2] = ctx->Accum.ClearColor[2];
1996 params[3] = ctx->Accum.ClearColor[3];
1997 break;
1998 case GL_ALPHA_BIAS:
1999 params[0] = ctx->Pixel.AlphaBias;
2000 break;
2001 case GL_ALPHA_BITS:
2002 if (ctx->NewState & _NEW_BUFFERS)
2003 _mesa_update_state(ctx);
2004 params[0] = (GLfloat)(ctx->DrawBuffer->Visual.alphaBits);
2005 break;
2006 case GL_ALPHA_SCALE:
2007 params[0] = ctx->Pixel.AlphaScale;
2008 break;
2009 case GL_ALPHA_TEST:
2010 params[0] = BOOLEAN_TO_FLOAT(ctx->Color.AlphaEnabled);
2011 break;
2012 case GL_ALPHA_TEST_FUNC:
2013 params[0] = ENUM_TO_FLOAT(ctx->Color.AlphaFunc);
2014 break;
2015 case GL_ALPHA_TEST_REF:
2016 params[0] = ctx->Color.AlphaRef;
2017 break;
2018 case GL_ATTRIB_STACK_DEPTH:
2019 params[0] = (GLfloat)(ctx->AttribStackDepth);
2020 break;
2021 case GL_AUTO_NORMAL:
2022 params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.AutoNormal);
2023 break;
2024 case GL_AUX_BUFFERS:
2025 params[0] = (GLfloat)(ctx->DrawBuffer->Visual.numAuxBuffers);
2026 break;
2027 case GL_BLEND:
2028 params[0] = BOOLEAN_TO_FLOAT((ctx->Color.BlendEnabled & 1));
2029 break;
2030 case GL_BLEND_DST:
2031 params[0] = ENUM_TO_FLOAT(ctx->Color.BlendDstRGB);
2032 break;
2033 case GL_BLEND_SRC:
2034 params[0] = ENUM_TO_FLOAT(ctx->Color.BlendSrcRGB);
2035 break;
2036 case GL_BLEND_SRC_RGB_EXT:
2037 params[0] = ENUM_TO_FLOAT(ctx->Color.BlendSrcRGB);
2038 break;
2039 case GL_BLEND_DST_RGB_EXT:
2040 params[0] = ENUM_TO_FLOAT(ctx->Color.BlendDstRGB);
2041 break;
2042 case GL_BLEND_SRC_ALPHA_EXT:
2043 params[0] = ENUM_TO_FLOAT(ctx->Color.BlendSrcA);
2044 break;
2045 case GL_BLEND_DST_ALPHA_EXT:
2046 params[0] = ENUM_TO_FLOAT(ctx->Color.BlendDstA);
2047 break;
2048 case GL_BLEND_EQUATION:
2049 params[0] = ENUM_TO_FLOAT(ctx->Color.BlendEquationRGB );
2050 break;
2051 case GL_BLEND_EQUATION_ALPHA_EXT:
2052 params[0] = ENUM_TO_FLOAT(ctx->Color.BlendEquationA );
2053 break;
2054 case GL_BLEND_COLOR_EXT:
2055 params[0] = ctx->Color.BlendColor[0];
2056 params[1] = ctx->Color.BlendColor[1];
2057 params[2] = ctx->Color.BlendColor[2];
2058 params[3] = ctx->Color.BlendColor[3];
2059 break;
2060 case GL_BLUE_BIAS:
2061 params[0] = ctx->Pixel.BlueBias;
2062 break;
2063 case GL_BLUE_BITS:
2064 if (ctx->NewState & _NEW_BUFFERS)
2065 _mesa_update_state(ctx);
2066 params[0] = (GLfloat)(ctx->DrawBuffer->Visual.blueBits);
2067 break;
2068 case GL_BLUE_SCALE:
2069 params[0] = ctx->Pixel.BlueScale;
2070 break;
2071 case GL_CLIENT_ATTRIB_STACK_DEPTH:
2072 params[0] = (GLfloat)(ctx->ClientAttribStackDepth);
2073 break;
2074 case GL_CLIP_PLANE0:
2075 params[0] = BOOLEAN_TO_FLOAT((ctx->Transform.ClipPlanesEnabled >> 0) & 1);
2076 break;
2077 case GL_CLIP_PLANE1:
2078 params[0] = BOOLEAN_TO_FLOAT((ctx->Transform.ClipPlanesEnabled >> 1) & 1);
2079 break;
2080 case GL_CLIP_PLANE2:
2081 params[0] = BOOLEAN_TO_FLOAT((ctx->Transform.ClipPlanesEnabled >> 2) & 1);
2082 break;
2083 case GL_CLIP_PLANE3:
2084 params[0] = BOOLEAN_TO_FLOAT((ctx->Transform.ClipPlanesEnabled >> 3) & 1);
2085 break;
2086 case GL_CLIP_PLANE4:
2087 params[0] = BOOLEAN_TO_FLOAT((ctx->Transform.ClipPlanesEnabled >> 4) & 1);
2088 break;
2089 case GL_CLIP_PLANE5:
2090 params[0] = BOOLEAN_TO_FLOAT((ctx->Transform.ClipPlanesEnabled >> 5) & 1);
2091 break;
2092 case GL_COLOR_CLEAR_VALUE:
2093 params[0] = ctx->Color.ClearColor[0];
2094 params[1] = ctx->Color.ClearColor[1];
2095 params[2] = ctx->Color.ClearColor[2];
2096 params[3] = ctx->Color.ClearColor[3];
2097 break;
2098 case GL_COLOR_MATERIAL:
2099 params[0] = BOOLEAN_TO_FLOAT(ctx->Light.ColorMaterialEnabled);
2100 break;
2101 case GL_COLOR_MATERIAL_FACE:
2102 params[0] = ENUM_TO_FLOAT(ctx->Light.ColorMaterialFace);
2103 break;
2104 case GL_COLOR_MATERIAL_PARAMETER:
2105 params[0] = ENUM_TO_FLOAT(ctx->Light.ColorMaterialMode);
2106 break;
2107 case GL_COLOR_WRITEMASK:
2108 params[0] = (GLfloat)(ctx->Color.ColorMask[0][RCOMP] ? 1 : 0);
2109 params[1] = (GLfloat)(ctx->Color.ColorMask[0][GCOMP] ? 1 : 0);
2110 params[2] = (GLfloat)(ctx->Color.ColorMask[0][BCOMP] ? 1 : 0);
2111 params[3] = (GLfloat)(ctx->Color.ColorMask[0][ACOMP] ? 1 : 0);
2112 break;
2113 case GL_CULL_FACE:
2114 params[0] = BOOLEAN_TO_FLOAT(ctx->Polygon.CullFlag);
2115 break;
2116 case GL_CULL_FACE_MODE:
2117 params[0] = ENUM_TO_FLOAT(ctx->Polygon.CullFaceMode);
2118 break;
2119 case GL_CURRENT_COLOR:
2120 FLUSH_CURRENT(ctx, 0);
2121 params[0] = ctx->Current.Attrib[VERT_ATTRIB_COLOR0][0];
2122 params[1] = ctx->Current.Attrib[VERT_ATTRIB_COLOR0][1];
2123 params[2] = ctx->Current.Attrib[VERT_ATTRIB_COLOR0][2];
2124 params[3] = ctx->Current.Attrib[VERT_ATTRIB_COLOR0][3];
2125 break;
2126 case GL_CURRENT_INDEX:
2127 FLUSH_CURRENT(ctx, 0);
2128 params[0] = ctx->Current.Attrib[VERT_ATTRIB_COLOR_INDEX][0];
2129 break;
2130 case GL_CURRENT_NORMAL:
2131 FLUSH_CURRENT(ctx, 0);
2132 params[0] = ctx->Current.Attrib[VERT_ATTRIB_NORMAL][0];
2133 params[1] = ctx->Current.Attrib[VERT_ATTRIB_NORMAL][1];
2134 params[2] = ctx->Current.Attrib[VERT_ATTRIB_NORMAL][2];
2135 break;
2136 case GL_CURRENT_RASTER_COLOR:
2137 params[0] = ctx->Current.RasterColor[0];
2138 params[1] = ctx->Current.RasterColor[1];
2139 params[2] = ctx->Current.RasterColor[2];
2140 params[3] = ctx->Current.RasterColor[3];
2141 break;
2142 case GL_CURRENT_RASTER_DISTANCE:
2143 params[0] = ctx->Current.RasterDistance;
2144 break;
2145 case GL_CURRENT_RASTER_INDEX:
2146 params[0] = 1.0;
2147 break;
2148 case GL_CURRENT_RASTER_POSITION:
2149 params[0] = ctx->Current.RasterPos[0];
2150 params[1] = ctx->Current.RasterPos[1];
2151 params[2] = ctx->Current.RasterPos[2];
2152 params[3] = ctx->Current.RasterPos[3];
2153 break;
2154 case GL_CURRENT_RASTER_SECONDARY_COLOR:
2155 params[0] = ctx->Current.RasterSecondaryColor[0];
2156 params[1] = ctx->Current.RasterSecondaryColor[1];
2157 params[2] = ctx->Current.RasterSecondaryColor[2];
2158 params[3] = ctx->Current.RasterSecondaryColor[3];
2159 break;
2160 case GL_CURRENT_RASTER_TEXTURE_COORDS:
2161 {
2162 const GLuint unit = ctx->Texture.CurrentUnit;
2163 if (unit >= ctx->Const.MaxTextureCoordUnits) {
2164 _mesa_error(ctx, GL_INVALID_OPERATION,
2165 "glGet(raster tex coords, unit %u)", unit);
2166 return;
2167 }
2168 params[0] = ctx->Current.RasterTexCoords[unit][0];
2169 params[1] = ctx->Current.RasterTexCoords[unit][1];
2170 params[2] = ctx->Current.RasterTexCoords[unit][2];
2171 params[3] = ctx->Current.RasterTexCoords[unit][3];
2172 }
2173 break;
2174 case GL_CURRENT_RASTER_POSITION_VALID:
2175 params[0] = BOOLEAN_TO_FLOAT(ctx->Current.RasterPosValid);
2176 break;
2177 case GL_CURRENT_TEXTURE_COORDS:
2178 {
2179 const GLuint unit = ctx->Texture.CurrentUnit;
2180 if (unit >= ctx->Const.MaxTextureCoordUnits) {
2181 _mesa_error(ctx, GL_INVALID_OPERATION,
2182 "glGet(current tex coords, unit %u)", unit);
2183 return;
2184 }
2185 FLUSH_CURRENT(ctx, 0);
2186 params[0] = ctx->Current.Attrib[VERT_ATTRIB_TEX0 + unit][0];
2187 params[1] = ctx->Current.Attrib[VERT_ATTRIB_TEX0 + unit][1];
2188 params[2] = ctx->Current.Attrib[VERT_ATTRIB_TEX0 + unit][2];
2189 params[3] = ctx->Current.Attrib[VERT_ATTRIB_TEX0 + unit][3];
2190 }
2191 break;
2192 case GL_DEPTH_BIAS:
2193 params[0] = ctx->Pixel.DepthBias;
2194 break;
2195 case GL_DEPTH_BITS:
2196 params[0] = (GLfloat)(ctx->DrawBuffer->Visual.depthBits);
2197 break;
2198 case GL_DEPTH_CLEAR_VALUE:
2199 params[0] = ((GLfloat) ctx->Depth.Clear);
2200 break;
2201 case GL_DEPTH_FUNC:
2202 params[0] = ENUM_TO_FLOAT(ctx->Depth.Func);
2203 break;
2204 case GL_DEPTH_RANGE:
2205 params[0] = ctx->Viewport.Near;
2206 params[1] = ctx->Viewport.Far;
2207 break;
2208 case GL_DEPTH_SCALE:
2209 params[0] = ctx->Pixel.DepthScale;
2210 break;
2211 case GL_DEPTH_TEST:
2212 params[0] = BOOLEAN_TO_FLOAT(ctx->Depth.Test);
2213 break;
2214 case GL_DEPTH_WRITEMASK:
2215 params[0] = BOOLEAN_TO_FLOAT(ctx->Depth.Mask);
2216 break;
2217 case GL_DITHER:
2218 params[0] = BOOLEAN_TO_FLOAT(ctx->Color.DitherFlag);
2219 break;
2220 case GL_DOUBLEBUFFER:
2221 params[0] = BOOLEAN_TO_FLOAT(ctx->DrawBuffer->Visual.doubleBufferMode);
2222 break;
2223 case GL_DRAW_BUFFER:
2224 params[0] = ENUM_TO_FLOAT(ctx->DrawBuffer->ColorDrawBuffer[0]);
2225 break;
2226 case GL_EDGE_FLAG:
2227 FLUSH_CURRENT(ctx, 0);
2228 params[0] = BOOLEAN_TO_FLOAT((ctx->Current.Attrib[VERT_ATTRIB_EDGEFLAG][0] == 1.0));
2229 break;
2230 case GL_FEEDBACK_BUFFER_SIZE:
2231 params[0] = (GLfloat)(ctx->Feedback.BufferSize);
2232 break;
2233 case GL_FEEDBACK_BUFFER_TYPE:
2234 params[0] = ENUM_TO_FLOAT(ctx->Feedback.Type);
2235 break;
2236 case GL_FOG:
2237 params[0] = BOOLEAN_TO_FLOAT(ctx->Fog.Enabled);
2238 break;
2239 case GL_FOG_COLOR:
2240 params[0] = ctx->Fog.Color[0];
2241 params[1] = ctx->Fog.Color[1];
2242 params[2] = ctx->Fog.Color[2];
2243 params[3] = ctx->Fog.Color[3];
2244 break;
2245 case GL_FOG_DENSITY:
2246 params[0] = ctx->Fog.Density;
2247 break;
2248 case GL_FOG_END:
2249 params[0] = ctx->Fog.End;
2250 break;
2251 case GL_FOG_HINT:
2252 params[0] = ENUM_TO_FLOAT(ctx->Hint.Fog);
2253 break;
2254 case GL_FOG_INDEX:
2255 params[0] = ctx->Fog.Index;
2256 break;
2257 case GL_FOG_MODE:
2258 params[0] = ENUM_TO_FLOAT(ctx->Fog.Mode);
2259 break;
2260 case GL_FOG_START:
2261 params[0] = ctx->Fog.Start;
2262 break;
2263 case GL_FRONT_FACE:
2264 params[0] = ENUM_TO_FLOAT(ctx->Polygon.FrontFace);
2265 break;
2266 case GL_GREEN_BIAS:
2267 params[0] = ctx->Pixel.GreenBias;
2268 break;
2269 case GL_GREEN_BITS:
2270 if (ctx->NewState & _NEW_BUFFERS)
2271 _mesa_update_state(ctx);
2272 params[0] = (GLfloat)(ctx->DrawBuffer->Visual.greenBits);
2273 break;
2274 case GL_GREEN_SCALE:
2275 params[0] = ctx->Pixel.GreenScale;
2276 break;
2277 case GL_INDEX_BITS:
2278 if (ctx->NewState & _NEW_BUFFERS)
2279 _mesa_update_state(ctx);
2280 params[0] = (GLfloat)(ctx->DrawBuffer->Visual.indexBits);
2281 break;
2282 case GL_INDEX_CLEAR_VALUE:
2283 params[0] = (GLfloat)(ctx->Color.ClearIndex);
2284 break;
2285 case GL_INDEX_MODE:
2286 params[0] = BOOLEAN_TO_FLOAT(GL_FALSE);
2287 break;
2288 case GL_INDEX_OFFSET:
2289 params[0] = (GLfloat)(ctx->Pixel.IndexOffset);
2290 break;
2291 case GL_INDEX_SHIFT:
2292 params[0] = (GLfloat)(ctx->Pixel.IndexShift);
2293 break;
2294 case GL_INDEX_WRITEMASK:
2295 params[0] = (GLfloat)(ctx->Color.IndexMask);
2296 break;
2297 case GL_LIGHT0:
2298 params[0] = BOOLEAN_TO_FLOAT(ctx->Light.Light[0].Enabled);
2299 break;
2300 case GL_LIGHT1:
2301 params[0] = BOOLEAN_TO_FLOAT(ctx->Light.Light[1].Enabled);
2302 break;
2303 case GL_LIGHT2:
2304 params[0] = BOOLEAN_TO_FLOAT(ctx->Light.Light[2].Enabled);
2305 break;
2306 case GL_LIGHT3:
2307 params[0] = BOOLEAN_TO_FLOAT(ctx->Light.Light[3].Enabled);
2308 break;
2309 case GL_LIGHT4:
2310 params[0] = BOOLEAN_TO_FLOAT(ctx->Light.Light[4].Enabled);
2311 break;
2312 case GL_LIGHT5:
2313 params[0] = BOOLEAN_TO_FLOAT(ctx->Light.Light[5].Enabled);
2314 break;
2315 case GL_LIGHT6:
2316 params[0] = BOOLEAN_TO_FLOAT(ctx->Light.Light[6].Enabled);
2317 break;
2318 case GL_LIGHT7:
2319 params[0] = BOOLEAN_TO_FLOAT(ctx->Light.Light[7].Enabled);
2320 break;
2321 case GL_LIGHTING:
2322 params[0] = BOOLEAN_TO_FLOAT(ctx->Light.Enabled);
2323 break;
2324 case GL_LIGHT_MODEL_AMBIENT:
2325 params[0] = ctx->Light.Model.Ambient[0];
2326 params[1] = ctx->Light.Model.Ambient[1];
2327 params[2] = ctx->Light.Model.Ambient[2];
2328 params[3] = ctx->Light.Model.Ambient[3];
2329 break;
2330 case GL_LIGHT_MODEL_COLOR_CONTROL:
2331 params[0] = ENUM_TO_FLOAT(ctx->Light.Model.ColorControl);
2332 break;
2333 case GL_LIGHT_MODEL_LOCAL_VIEWER:
2334 params[0] = BOOLEAN_TO_FLOAT(ctx->Light.Model.LocalViewer);
2335 break;
2336 case GL_LIGHT_MODEL_TWO_SIDE:
2337 params[0] = BOOLEAN_TO_FLOAT(ctx->Light.Model.TwoSide);
2338 break;
2339 case GL_LINE_SMOOTH:
2340 params[0] = BOOLEAN_TO_FLOAT(ctx->Line.SmoothFlag);
2341 break;
2342 case GL_LINE_SMOOTH_HINT:
2343 params[0] = ENUM_TO_FLOAT(ctx->Hint.LineSmooth);
2344 break;
2345 case GL_LINE_STIPPLE:
2346 params[0] = BOOLEAN_TO_FLOAT(ctx->Line.StippleFlag);
2347 break;
2348 case GL_LINE_STIPPLE_PATTERN:
2349 params[0] = (GLfloat)(ctx->Line.StipplePattern);
2350 break;
2351 case GL_LINE_STIPPLE_REPEAT:
2352 params[0] = (GLfloat)(ctx->Line.StippleFactor);
2353 break;
2354 case GL_LINE_WIDTH:
2355 params[0] = ctx->Line.Width;
2356 break;
2357 case GL_LINE_WIDTH_GRANULARITY:
2358 params[0] = ctx->Const.LineWidthGranularity;
2359 break;
2360 case GL_LINE_WIDTH_RANGE:
2361 params[0] = ctx->Const.MinLineWidthAA;
2362 params[1] = ctx->Const.MaxLineWidthAA;
2363 break;
2364 case GL_ALIASED_LINE_WIDTH_RANGE:
2365 params[0] = ctx->Const.MinLineWidth;
2366 params[1] = ctx->Const.MaxLineWidth;
2367 break;
2368 case GL_LIST_BASE:
2369 params[0] = (GLfloat)(ctx->List.ListBase);
2370 break;
2371 case GL_LIST_INDEX:
2372 params[0] = (GLfloat)((ctx->ListState.CurrentList ? ctx->ListState.CurrentList->Name : 0));
2373 break;
2374 case GL_LIST_MODE:
2375 {
2376 GLenum mode;
2377 if (!ctx->CompileFlag)
2378 mode = 0;
2379 else if (ctx->ExecuteFlag)
2380 mode = GL_COMPILE_AND_EXECUTE;
2381 else
2382 mode = GL_COMPILE;
2383 params[0] = ENUM_TO_FLOAT(mode);
2384 }
2385 break;
2386 case GL_INDEX_LOGIC_OP:
2387 params[0] = BOOLEAN_TO_FLOAT(ctx->Color.IndexLogicOpEnabled);
2388 break;
2389 case GL_COLOR_LOGIC_OP:
2390 params[0] = BOOLEAN_TO_FLOAT(ctx->Color.ColorLogicOpEnabled);
2391 break;
2392 case GL_LOGIC_OP_MODE:
2393 params[0] = ENUM_TO_FLOAT(ctx->Color.LogicOp);
2394 break;
2395 case GL_MAP1_COLOR_4:
2396 params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Color4);
2397 break;
2398 case GL_MAP1_GRID_DOMAIN:
2399 params[0] = ctx->Eval.MapGrid1u1;
2400 params[1] = ctx->Eval.MapGrid1u2;
2401 break;
2402 case GL_MAP1_GRID_SEGMENTS:
2403 params[0] = (GLfloat)(ctx->Eval.MapGrid1un);
2404 break;
2405 case GL_MAP1_INDEX:
2406 params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Index);
2407 break;
2408 case GL_MAP1_NORMAL:
2409 params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Normal);
2410 break;
2411 case GL_MAP1_TEXTURE_COORD_1:
2412 params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1TextureCoord1);
2413 break;
2414 case GL_MAP1_TEXTURE_COORD_2:
2415 params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1TextureCoord2);
2416 break;
2417 case GL_MAP1_TEXTURE_COORD_3:
2418 params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1TextureCoord3);
2419 break;
2420 case GL_MAP1_TEXTURE_COORD_4:
2421 params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1TextureCoord4);
2422 break;
2423 case GL_MAP1_VERTEX_3:
2424 params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Vertex3);
2425 break;
2426 case GL_MAP1_VERTEX_4:
2427 params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Vertex4);
2428 break;
2429 case GL_MAP2_COLOR_4:
2430 params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map2Color4);
2431 break;
2432 case GL_MAP2_GRID_DOMAIN:
2433 params[0] = ctx->Eval.MapGrid2u1;
2434 params[1] = ctx->Eval.MapGrid2u2;
2435 params[2] = ctx->Eval.MapGrid2v1;
2436 params[3] = ctx->Eval.MapGrid2v2;
2437 break;
2438 case GL_MAP2_GRID_SEGMENTS:
2439 params[0] = (GLfloat)(ctx->Eval.MapGrid2un);
2440 params[1] = (GLfloat)(ctx->Eval.MapGrid2vn);
2441 break;
2442 case GL_MAP2_INDEX:
2443 params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map2Index);
2444 break;
2445 case GL_MAP2_NORMAL:
2446 params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map2Normal);
2447 break;
2448 case GL_MAP2_TEXTURE_COORD_1:
2449 params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map2TextureCoord1);
2450 break;
2451 case GL_MAP2_TEXTURE_COORD_2:
2452 params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map2TextureCoord2);
2453 break;
2454 case GL_MAP2_TEXTURE_COORD_3:
2455 params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map2TextureCoord3);
2456 break;
2457 case GL_MAP2_TEXTURE_COORD_4:
2458 params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map2TextureCoord4);
2459 break;
2460 case GL_MAP2_VERTEX_3:
2461 params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map2Vertex3);
2462 break;
2463 case GL_MAP2_VERTEX_4:
2464 params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map2Vertex4);
2465 break;
2466 case GL_MAP_COLOR:
2467 params[0] = BOOLEAN_TO_FLOAT(ctx->Pixel.MapColorFlag);
2468 break;
2469 case GL_MAP_STENCIL:
2470 params[0] = BOOLEAN_TO_FLOAT(ctx->Pixel.MapStencilFlag);
2471 break;
2472 case GL_MATRIX_MODE:
2473 params[0] = ENUM_TO_FLOAT(ctx->Transform.MatrixMode);
2474 break;
2475 case GL_MAX_ATTRIB_STACK_DEPTH:
2476 params[0] = (GLfloat)(MAX_ATTRIB_STACK_DEPTH);
2477 break;
2478 case GL_MAX_CLIENT_ATTRIB_STACK_DEPTH:
2479 params[0] = (GLfloat)(MAX_CLIENT_ATTRIB_STACK_DEPTH);
2480 break;
2481 case GL_MAX_CLIP_PLANES:
2482 params[0] = (GLfloat)(ctx->Const.MaxClipPlanes);
2483 break;
2484 case GL_MAX_ELEMENTS_VERTICES:
2485 params[0] = (GLfloat)(ctx->Const.MaxArrayLockSize);
2486 break;
2487 case GL_MAX_ELEMENTS_INDICES:
2488 params[0] = (GLfloat)(ctx->Const.MaxArrayLockSize);
2489 break;
2490 case GL_MAX_EVAL_ORDER:
2491 params[0] = (GLfloat)(MAX_EVAL_ORDER);
2492 break;
2493 case GL_MAX_LIGHTS:
2494 params[0] = (GLfloat)(ctx->Const.MaxLights);
2495 break;
2496 case GL_MAX_LIST_NESTING:
2497 params[0] = (GLfloat)(MAX_LIST_NESTING);
2498 break;
2499 case GL_MAX_MODELVIEW_STACK_DEPTH:
2500 params[0] = (GLfloat)(MAX_MODELVIEW_STACK_DEPTH);
2501 break;
2502 case GL_MAX_NAME_STACK_DEPTH:
2503 params[0] = (GLfloat)(MAX_NAME_STACK_DEPTH);
2504 break;
2505 case GL_MAX_PIXEL_MAP_TABLE:
2506 params[0] = (GLfloat)(MAX_PIXEL_MAP_TABLE);
2507 break;
2508 case GL_MAX_PROJECTION_STACK_DEPTH:
2509 params[0] = (GLfloat)(MAX_PROJECTION_STACK_DEPTH);
2510 break;
2511 case GL_MAX_TEXTURE_SIZE:
2512 params[0] = (GLfloat)(1 << (ctx->Const.MaxTextureLevels - 1));
2513 break;
2514 case GL_MAX_3D_TEXTURE_SIZE:
2515 params[0] = (GLfloat)(1 << (ctx->Const.Max3DTextureLevels - 1));
2516 break;
2517 case GL_MAX_TEXTURE_STACK_DEPTH:
2518 params[0] = (GLfloat)(MAX_TEXTURE_STACK_DEPTH);
2519 break;
2520 case GL_MAX_VIEWPORT_DIMS:
2521 params[0] = (GLfloat)(ctx->Const.MaxViewportWidth);
2522 params[1] = (GLfloat)(ctx->Const.MaxViewportHeight);
2523 break;
2524 case GL_MODELVIEW_MATRIX:
2525 {
2526 const GLfloat *matrix = ctx->ModelviewMatrixStack.Top->m;
2527 params[0] = matrix[0];
2528 params[1] = matrix[1];
2529 params[2] = matrix[2];
2530 params[3] = matrix[3];
2531 params[4] = matrix[4];
2532 params[5] = matrix[5];
2533 params[6] = matrix[6];
2534 params[7] = matrix[7];
2535 params[8] = matrix[8];
2536 params[9] = matrix[9];
2537 params[10] = matrix[10];
2538 params[11] = matrix[11];
2539 params[12] = matrix[12];
2540 params[13] = matrix[13];
2541 params[14] = matrix[14];
2542 params[15] = matrix[15];
2543 }
2544 break;
2545 case GL_MODELVIEW_STACK_DEPTH:
2546 params[0] = (GLfloat)(ctx->ModelviewMatrixStack.Depth + 1);
2547 break;
2548 case GL_NAME_STACK_DEPTH:
2549 params[0] = (GLfloat)(ctx->Select.NameStackDepth);
2550 break;
2551 case GL_NORMALIZE:
2552 params[0] = BOOLEAN_TO_FLOAT(ctx->Transform.Normalize);
2553 break;
2554 case GL_PACK_ALIGNMENT:
2555 params[0] = (GLfloat)(ctx->Pack.Alignment);
2556 break;
2557 case GL_PACK_LSB_FIRST:
2558 params[0] = BOOLEAN_TO_FLOAT(ctx->Pack.LsbFirst);
2559 break;
2560 case GL_PACK_ROW_LENGTH:
2561 params[0] = (GLfloat)(ctx->Pack.RowLength);
2562 break;
2563 case GL_PACK_SKIP_PIXELS:
2564 params[0] = (GLfloat)(ctx->Pack.SkipPixels);
2565 break;
2566 case GL_PACK_SKIP_ROWS:
2567 params[0] = (GLfloat)(ctx->Pack.SkipRows);
2568 break;
2569 case GL_PACK_SWAP_BYTES:
2570 params[0] = BOOLEAN_TO_FLOAT(ctx->Pack.SwapBytes);
2571 break;
2572 case GL_PACK_SKIP_IMAGES_EXT:
2573 params[0] = (GLfloat)(ctx->Pack.SkipImages);
2574 break;
2575 case GL_PACK_IMAGE_HEIGHT_EXT:
2576 params[0] = (GLfloat)(ctx->Pack.ImageHeight);
2577 break;
2578 case GL_PACK_INVERT_MESA:
2579 params[0] = BOOLEAN_TO_FLOAT(ctx->Pack.Invert);
2580 break;
2581 case GL_PERSPECTIVE_CORRECTION_HINT:
2582 params[0] = ENUM_TO_FLOAT(ctx->Hint.PerspectiveCorrection);
2583 break;
2584 case GL_PIXEL_MAP_A_TO_A_SIZE:
2585 params[0] = (GLfloat)(ctx->PixelMaps.AtoA.Size);
2586 break;
2587 case GL_PIXEL_MAP_B_TO_B_SIZE:
2588 params[0] = (GLfloat)(ctx->PixelMaps.BtoB.Size);
2589 break;
2590 case GL_PIXEL_MAP_G_TO_G_SIZE:
2591 params[0] = (GLfloat)(ctx->PixelMaps.GtoG.Size);
2592 break;
2593 case GL_PIXEL_MAP_I_TO_A_SIZE:
2594 params[0] = (GLfloat)(ctx->PixelMaps.ItoA.Size);
2595 break;
2596 case GL_PIXEL_MAP_I_TO_B_SIZE:
2597 params[0] = (GLfloat)(ctx->PixelMaps.ItoB.Size);
2598 break;
2599 case GL_PIXEL_MAP_I_TO_G_SIZE:
2600 params[0] = (GLfloat)(ctx->PixelMaps.ItoG.Size);
2601 break;
2602 case GL_PIXEL_MAP_I_TO_I_SIZE:
2603 params[0] = (GLfloat)(ctx->PixelMaps.ItoI.Size);
2604 break;
2605 case GL_PIXEL_MAP_I_TO_R_SIZE:
2606 params[0] = (GLfloat)(ctx->PixelMaps.ItoR.Size);
2607 break;
2608 case GL_PIXEL_MAP_R_TO_R_SIZE:
2609 params[0] = (GLfloat)(ctx->PixelMaps.RtoR.Size);
2610 break;
2611 case GL_PIXEL_MAP_S_TO_S_SIZE:
2612 params[0] = (GLfloat)(ctx->PixelMaps.StoS.Size);
2613 break;
2614 case GL_POINT_SIZE:
2615 params[0] = ctx->Point.Size;
2616 break;
2617 case GL_POINT_SIZE_GRANULARITY:
2618 params[0] = ctx->Const.PointSizeGranularity;
2619 break;
2620 case GL_POINT_SIZE_RANGE:
2621 params[0] = ctx->Const.MinPointSizeAA;
2622 params[1] = ctx->Const.MaxPointSizeAA;
2623 break;
2624 case GL_ALIASED_POINT_SIZE_RANGE:
2625 params[0] = ctx->Const.MinPointSize;
2626 params[1] = ctx->Const.MaxPointSize;
2627 break;
2628 case GL_POINT_SMOOTH:
2629 params[0] = BOOLEAN_TO_FLOAT(ctx->Point.SmoothFlag);
2630 break;
2631 case GL_POINT_SMOOTH_HINT:
2632 params[0] = ENUM_TO_FLOAT(ctx->Hint.PointSmooth);
2633 break;
2634 case GL_POINT_SIZE_MIN_EXT:
2635 params[0] = ctx->Point.MinSize;
2636 break;
2637 case GL_POINT_SIZE_MAX_EXT:
2638 params[0] = ctx->Point.MaxSize;
2639 break;
2640 case GL_POINT_FADE_THRESHOLD_SIZE_EXT:
2641 params[0] = ctx->Point.Threshold;
2642 break;
2643 case GL_DISTANCE_ATTENUATION_EXT:
2644 params[0] = ctx->Point.Params[0];
2645 params[1] = ctx->Point.Params[1];
2646 params[2] = ctx->Point.Params[2];
2647 break;
2648 case GL_POLYGON_MODE:
2649 params[0] = ENUM_TO_FLOAT(ctx->Polygon.FrontMode);
2650 params[1] = ENUM_TO_FLOAT(ctx->Polygon.BackMode);
2651 break;
2652 case GL_POLYGON_OFFSET_BIAS_EXT:
2653 params[0] = ctx->Polygon.OffsetUnits;
2654 break;
2655 case GL_POLYGON_OFFSET_FACTOR:
2656 params[0] = ctx->Polygon.OffsetFactor ;
2657 break;
2658 case GL_POLYGON_OFFSET_UNITS:
2659 params[0] = ctx->Polygon.OffsetUnits ;
2660 break;
2661 case GL_POLYGON_OFFSET_POINT:
2662 params[0] = BOOLEAN_TO_FLOAT(ctx->Polygon.OffsetPoint);
2663 break;
2664 case GL_POLYGON_OFFSET_LINE:
2665 params[0] = BOOLEAN_TO_FLOAT(ctx->Polygon.OffsetLine);
2666 break;
2667 case GL_POLYGON_OFFSET_FILL:
2668 params[0] = BOOLEAN_TO_FLOAT(ctx->Polygon.OffsetFill);
2669 break;
2670 case GL_POLYGON_SMOOTH:
2671 params[0] = BOOLEAN_TO_FLOAT(ctx->Polygon.SmoothFlag);
2672 break;
2673 case GL_POLYGON_SMOOTH_HINT:
2674 params[0] = ENUM_TO_FLOAT(ctx->Hint.PolygonSmooth);
2675 break;
2676 case GL_POLYGON_STIPPLE:
2677 params[0] = BOOLEAN_TO_FLOAT(ctx->Polygon.StippleFlag);
2678 break;
2679 case GL_PROJECTION_MATRIX:
2680 {
2681 const GLfloat *matrix = ctx->ProjectionMatrixStack.Top->m;
2682 params[0] = matrix[0];
2683 params[1] = matrix[1];
2684 params[2] = matrix[2];
2685 params[3] = matrix[3];
2686 params[4] = matrix[4];
2687 params[5] = matrix[5];
2688 params[6] = matrix[6];
2689 params[7] = matrix[7];
2690 params[8] = matrix[8];
2691 params[9] = matrix[9];
2692 params[10] = matrix[10];
2693 params[11] = matrix[11];
2694 params[12] = matrix[12];
2695 params[13] = matrix[13];
2696 params[14] = matrix[14];
2697 params[15] = matrix[15];
2698 }
2699 break;
2700 case GL_PROJECTION_STACK_DEPTH:
2701 params[0] = (GLfloat)(ctx->ProjectionMatrixStack.Depth + 1);
2702 break;
2703 case GL_READ_BUFFER:
2704 params[0] = ENUM_TO_FLOAT(ctx->ReadBuffer->ColorReadBuffer);
2705 break;
2706 case GL_RED_BIAS:
2707 params[0] = ctx->Pixel.RedBias;
2708 break;
2709 case GL_RED_BITS:
2710 if (ctx->NewState & _NEW_BUFFERS)
2711 _mesa_update_state(ctx);
2712 params[0] = (GLfloat)(ctx->DrawBuffer->Visual.redBits);
2713 break;
2714 case GL_RED_SCALE:
2715 params[0] = ctx->Pixel.RedScale;
2716 break;
2717 case GL_RENDER_MODE:
2718 params[0] = ENUM_TO_FLOAT(ctx->RenderMode);
2719 break;
2720 case GL_RESCALE_NORMAL:
2721 params[0] = BOOLEAN_TO_FLOAT(ctx->Transform.RescaleNormals);
2722 break;
2723 case GL_RGBA_MODE:
2724 params[0] = BOOLEAN_TO_FLOAT(GL_TRUE);
2725 break;
2726 case GL_SCISSOR_BOX:
2727 params[0] = (GLfloat)(ctx->Scissor.X);
2728 params[1] = (GLfloat)(ctx->Scissor.Y);
2729 params[2] = (GLfloat)(ctx->Scissor.Width);
2730 params[3] = (GLfloat)(ctx->Scissor.Height);
2731 break;
2732 case GL_SCISSOR_TEST:
2733 params[0] = BOOLEAN_TO_FLOAT(ctx->Scissor.Enabled);
2734 break;
2735 case GL_SELECTION_BUFFER_SIZE:
2736 params[0] = (GLfloat)(ctx->Select.BufferSize);
2737 break;
2738 case GL_SHADE_MODEL:
2739 params[0] = ENUM_TO_FLOAT(ctx->Light.ShadeModel);
2740 break;
2741 case GL_SHARED_TEXTURE_PALETTE_EXT:
2742 params[0] = BOOLEAN_TO_FLOAT(ctx->Texture.SharedPalette);
2743 break;
2744 case GL_STENCIL_BITS:
2745 params[0] = (GLfloat)(ctx->DrawBuffer->Visual.stencilBits);
2746 break;
2747 case GL_STENCIL_CLEAR_VALUE:
2748 params[0] = (GLfloat)(ctx->Stencil.Clear);
2749 break;
2750 case GL_STENCIL_FAIL:
2751 params[0] = ENUM_TO_FLOAT(ctx->Stencil.FailFunc[ctx->Stencil.ActiveFace]);
2752 break;
2753 case GL_STENCIL_FUNC:
2754 params[0] = ENUM_TO_FLOAT(ctx->Stencil.Function[ctx->Stencil.ActiveFace]);
2755 break;
2756 case GL_STENCIL_PASS_DEPTH_FAIL:
2757 params[0] = ENUM_TO_FLOAT(ctx->Stencil.ZFailFunc[ctx->Stencil.ActiveFace]);
2758 break;
2759 case GL_STENCIL_PASS_DEPTH_PASS:
2760 params[0] = ENUM_TO_FLOAT(ctx->Stencil.ZPassFunc[ctx->Stencil.ActiveFace]);
2761 break;
2762 case GL_STENCIL_REF:
2763 params[0] = (GLfloat)(ctx->Stencil.Ref[ctx->Stencil.ActiveFace]);
2764 break;
2765 case GL_STENCIL_TEST:
2766 params[0] = BOOLEAN_TO_FLOAT(ctx->Stencil.Enabled);
2767 break;
2768 case GL_STENCIL_VALUE_MASK:
2769 params[0] = (GLfloat)(ctx->Stencil.ValueMask[ctx->Stencil.ActiveFace]);
2770 break;
2771 case GL_STENCIL_WRITEMASK:
2772 params[0] = (GLfloat)(ctx->Stencil.WriteMask[ctx->Stencil.ActiveFace]);
2773 break;
2774 case GL_STEREO:
2775 params[0] = BOOLEAN_TO_FLOAT(ctx->DrawBuffer->Visual.stereoMode);
2776 break;
2777 case GL_SUBPIXEL_BITS:
2778 params[0] = (GLfloat)(ctx->Const.SubPixelBits);
2779 break;
2780 case GL_TEXTURE_1D:
2781 params[0] = BOOLEAN_TO_FLOAT(_mesa_IsEnabled(GL_TEXTURE_1D));
2782 break;
2783 case GL_TEXTURE_2D:
2784 params[0] = BOOLEAN_TO_FLOAT(_mesa_IsEnabled(GL_TEXTURE_2D));
2785 break;
2786 case GL_TEXTURE_3D:
2787 params[0] = BOOLEAN_TO_FLOAT(_mesa_IsEnabled(GL_TEXTURE_3D));
2788 break;
2789 case GL_TEXTURE_1D_ARRAY_EXT:
2790 CHECK_EXT1(MESA_texture_array);
2791 params[0] = BOOLEAN_TO_FLOAT(_mesa_IsEnabled(GL_TEXTURE_1D_ARRAY_EXT));
2792 break;
2793 case GL_TEXTURE_2D_ARRAY_EXT:
2794 CHECK_EXT1(MESA_texture_array);
2795 params[0] = BOOLEAN_TO_FLOAT(_mesa_IsEnabled(GL_TEXTURE_2D_ARRAY_EXT));
2796 break;
2797 case GL_TEXTURE_BINDING_1D:
2798 params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_INDEX]->Name);
2799 break;
2800 case GL_TEXTURE_BINDING_2D:
2801 params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_INDEX]->Name);
2802 break;
2803 case GL_TEXTURE_BINDING_3D:
2804 params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_3D_INDEX]->Name);
2805 break;
2806 case GL_TEXTURE_BINDING_1D_ARRAY_EXT:
2807 CHECK_EXT1(MESA_texture_array);
2808 params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_ARRAY_INDEX]->Name);
2809 break;
2810 case GL_TEXTURE_BINDING_2D_ARRAY_EXT:
2811 CHECK_EXT1(MESA_texture_array);
2812 params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_ARRAY_INDEX]->Name);
2813 break;
2814 case GL_MAX_ARRAY_TEXTURE_LAYERS_EXT:
2815 CHECK_EXT1(MESA_texture_array);
2816 params[0] = (GLfloat)(ctx->Const.MaxArrayTextureLayers);
2817 break;
2818 case GL_TEXTURE_GEN_S:
2819 params[0] = BOOLEAN_TO_FLOAT(((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & S_BIT) ? 1 : 0));
2820 break;
2821 case GL_TEXTURE_GEN_T:
2822 params[0] = BOOLEAN_TO_FLOAT(((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & T_BIT) ? 1 : 0));
2823 break;
2824 case GL_TEXTURE_GEN_R:
2825 params[0] = BOOLEAN_TO_FLOAT(((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & R_BIT) ? 1 : 0));
2826 break;
2827 case GL_TEXTURE_GEN_Q:
2828 params[0] = BOOLEAN_TO_FLOAT(((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & Q_BIT) ? 1 : 0));
2829 break;
2830 case GL_TEXTURE_MATRIX:
2831 {
2832 const GLfloat *matrix;
2833 const GLuint unit = ctx->Texture.CurrentUnit;
2834 if (unit >= ctx->Const.MaxTextureCoordUnits) {
2835 _mesa_error(ctx, GL_INVALID_OPERATION, "glGet(texture matrix %u)",
2836 unit);
2837 return;
2838 }
2839 matrix = ctx->TextureMatrixStack[unit].Top->m;
2840 params[0] = matrix[0];
2841 params[1] = matrix[1];
2842 params[2] = matrix[2];
2843 params[3] = matrix[3];
2844 params[4] = matrix[4];
2845 params[5] = matrix[5];
2846 params[6] = matrix[6];
2847 params[7] = matrix[7];
2848 params[8] = matrix[8];
2849 params[9] = matrix[9];
2850 params[10] = matrix[10];
2851 params[11] = matrix[11];
2852 params[12] = matrix[12];
2853 params[13] = matrix[13];
2854 params[14] = matrix[14];
2855 params[15] = matrix[15];
2856 }
2857 break;
2858 case GL_TEXTURE_STACK_DEPTH:
2859 {
2860 const GLuint unit = ctx->Texture.CurrentUnit;
2861 if (unit >= ctx->Const.MaxTextureCoordUnits) {
2862 _mesa_error(ctx, GL_INVALID_OPERATION,
2863 "glGet(texture stack depth, unit %u)", unit);
2864 return;
2865 }
2866 params[0] = (GLfloat)(ctx->TextureMatrixStack[unit].Depth + 1);
2867 }
2868 break;
2869 case GL_UNPACK_ALIGNMENT:
2870 params[0] = (GLfloat)(ctx->Unpack.Alignment);
2871 break;
2872 case GL_UNPACK_LSB_FIRST:
2873 params[0] = BOOLEAN_TO_FLOAT(ctx->Unpack.LsbFirst);
2874 break;
2875 case GL_UNPACK_ROW_LENGTH:
2876 params[0] = (GLfloat)(ctx->Unpack.RowLength);
2877 break;
2878 case GL_UNPACK_SKIP_PIXELS:
2879 params[0] = (GLfloat)(ctx->Unpack.SkipPixels);
2880 break;
2881 case GL_UNPACK_SKIP_ROWS:
2882 params[0] = (GLfloat)(ctx->Unpack.SkipRows);
2883 break;
2884 case GL_UNPACK_SWAP_BYTES:
2885 params[0] = BOOLEAN_TO_FLOAT(ctx->Unpack.SwapBytes);
2886 break;
2887 case GL_UNPACK_SKIP_IMAGES_EXT:
2888 params[0] = (GLfloat)(ctx->Unpack.SkipImages);
2889 break;
2890 case GL_UNPACK_IMAGE_HEIGHT_EXT:
2891 params[0] = (GLfloat)(ctx->Unpack.ImageHeight);
2892 break;
2893 case GL_UNPACK_CLIENT_STORAGE_APPLE:
2894 params[0] = BOOLEAN_TO_FLOAT(ctx->Unpack.ClientStorage);
2895 break;
2896 case GL_VIEWPORT:
2897 params[0] = (GLfloat)(ctx->Viewport.X);
2898 params[1] = (GLfloat)(ctx->Viewport.Y);
2899 params[2] = (GLfloat)(ctx->Viewport.Width);
2900 params[3] = (GLfloat)(ctx->Viewport.Height);
2901 break;
2902 case GL_ZOOM_X:
2903 params[0] = ctx->Pixel.ZoomX;
2904 break;
2905 case GL_ZOOM_Y:
2906 params[0] = ctx->Pixel.ZoomY;
2907 break;
2908 case GL_VERTEX_ARRAY:
2909 params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->Vertex.Enabled);
2910 break;
2911 case GL_VERTEX_ARRAY_SIZE:
2912 params[0] = (GLfloat)(ctx->Array.ArrayObj->Vertex.Size);
2913 break;
2914 case GL_VERTEX_ARRAY_TYPE:
2915 params[0] = ENUM_TO_FLOAT(ctx->Array.ArrayObj->Vertex.Type);
2916 break;
2917 case GL_VERTEX_ARRAY_STRIDE:
2918 params[0] = (GLfloat)(ctx->Array.ArrayObj->Vertex.Stride);
2919 break;
2920 case GL_VERTEX_ARRAY_COUNT_EXT:
2921 params[0] = (GLfloat)(0);
2922 break;
2923 case GL_NORMAL_ARRAY:
2924 params[0] = ENUM_TO_FLOAT(ctx->Array.ArrayObj->Normal.Enabled);
2925 break;
2926 case GL_NORMAL_ARRAY_TYPE:
2927 params[0] = ENUM_TO_FLOAT(ctx->Array.ArrayObj->Normal.Type);
2928 break;
2929 case GL_NORMAL_ARRAY_STRIDE:
2930 params[0] = (GLfloat)(ctx->Array.ArrayObj->Normal.Stride);
2931 break;
2932 case GL_NORMAL_ARRAY_COUNT_EXT:
2933 params[0] = (GLfloat)(0);
2934 break;
2935 case GL_COLOR_ARRAY:
2936 params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->Color.Enabled);
2937 break;
2938 case GL_COLOR_ARRAY_SIZE:
2939 params[0] = (GLfloat)(ctx->Array.ArrayObj->Color.Size);
2940 break;
2941 case GL_COLOR_ARRAY_TYPE:
2942 params[0] = ENUM_TO_FLOAT(ctx->Array.ArrayObj->Color.Type);
2943 break;
2944 case GL_COLOR_ARRAY_STRIDE:
2945 params[0] = (GLfloat)(ctx->Array.ArrayObj->Color.Stride);
2946 break;
2947 case GL_COLOR_ARRAY_COUNT_EXT:
2948 params[0] = (GLfloat)(0);
2949 break;
2950 case GL_INDEX_ARRAY:
2951 params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->Index.Enabled);
2952 break;
2953 case GL_INDEX_ARRAY_TYPE:
2954 params[0] = ENUM_TO_FLOAT(ctx->Array.ArrayObj->Index.Type);
2955 break;
2956 case GL_INDEX_ARRAY_STRIDE:
2957 params[0] = (GLfloat)(ctx->Array.ArrayObj->Index.Stride);
2958 break;
2959 case GL_INDEX_ARRAY_COUNT_EXT:
2960 params[0] = (GLfloat)(0);
2961 break;
2962 case GL_TEXTURE_COORD_ARRAY:
2963 params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Enabled);
2964 break;
2965 case GL_TEXTURE_COORD_ARRAY_SIZE:
2966 params[0] = (GLfloat)(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Size);
2967 break;
2968 case GL_TEXTURE_COORD_ARRAY_TYPE:
2969 params[0] = ENUM_TO_FLOAT(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Type);
2970 break;
2971 case GL_TEXTURE_COORD_ARRAY_STRIDE:
2972 params[0] = (GLfloat)(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Stride);
2973 break;
2974 case GL_TEXTURE_COORD_ARRAY_COUNT_EXT:
2975 params[0] = (GLfloat)(0);
2976 break;
2977 case GL_EDGE_FLAG_ARRAY:
2978 params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->EdgeFlag.Enabled);
2979 break;
2980 case GL_EDGE_FLAG_ARRAY_STRIDE:
2981 params[0] = (GLfloat)(ctx->Array.ArrayObj->EdgeFlag.Stride);
2982 break;
2983 case GL_EDGE_FLAG_ARRAY_COUNT_EXT:
2984 params[0] = (GLfloat)(0);
2985 break;
2986 case GL_MAX_TEXTURE_UNITS_ARB:
2987 CHECK_EXT1(ARB_multitexture);
2988 params[0] = (GLfloat)(ctx->Const.MaxTextureUnits);
2989 break;
2990 case GL_ACTIVE_TEXTURE_ARB:
2991 CHECK_EXT1(ARB_multitexture);
2992 params[0] = (GLfloat)(GL_TEXTURE0_ARB + ctx->Texture.CurrentUnit);
2993 break;
2994 case GL_CLIENT_ACTIVE_TEXTURE_ARB:
2995 CHECK_EXT1(ARB_multitexture);
2996 params[0] = (GLfloat)(GL_TEXTURE0_ARB + ctx->Array.ActiveTexture);
2997 break;
2998 case GL_TEXTURE_CUBE_MAP_ARB:
2999 CHECK_EXT1(ARB_texture_cube_map);
3000 params[0] = BOOLEAN_TO_FLOAT(_mesa_IsEnabled(GL_TEXTURE_CUBE_MAP_ARB));
3001 break;
3002 case GL_TEXTURE_BINDING_CUBE_MAP_ARB:
3003 CHECK_EXT1(ARB_texture_cube_map);
3004 params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_CUBE_INDEX]->Name);
3005 break;
3006 case GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB:
3007 CHECK_EXT1(ARB_texture_cube_map);
3008 params[0] = (GLfloat)((1 << (ctx->Const.MaxCubeTextureLevels - 1)));
3009 break;
3010 case GL_TEXTURE_COMPRESSION_HINT_ARB:
3011 params[0] = (GLfloat)(ctx->Hint.TextureCompression);
3012 break;
3013 case GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB:
3014 params[0] = (GLfloat)(_mesa_get_compressed_formats(ctx, NULL, GL_FALSE));
3015 break;
3016 case GL_COMPRESSED_TEXTURE_FORMATS_ARB:
3017 {
3018 GLint formats[100];
3019 GLuint i, n = _mesa_get_compressed_formats(ctx, formats, GL_FALSE);
3020 ASSERT(n <= 100);
3021 for (i = 0; i < n; i++)
3022 params[i] = ENUM_TO_FLOAT(formats[i]);
3023 }
3024 break;
3025 case GL_ARRAY_ELEMENT_LOCK_FIRST_EXT:
3026 CHECK_EXT1(EXT_compiled_vertex_array);
3027 params[0] = (GLfloat)(ctx->Array.LockFirst);
3028 break;
3029 case GL_ARRAY_ELEMENT_LOCK_COUNT_EXT:
3030 CHECK_EXT1(EXT_compiled_vertex_array);
3031 params[0] = (GLfloat)(ctx->Array.LockCount);
3032 break;
3033 case GL_TRANSPOSE_COLOR_MATRIX_ARB:
3034 {
3035 const GLfloat *matrix = ctx->ColorMatrixStack.Top->m;
3036 params[0] = matrix[0];
3037 params[1] = matrix[4];
3038 params[2] = matrix[8];
3039 params[3] = matrix[12];
3040 params[4] = matrix[1];
3041 params[5] = matrix[5];
3042 params[6] = matrix[9];
3043 params[7] = matrix[13];
3044 params[8] = matrix[2];
3045 params[9] = matrix[6];
3046 params[10] = matrix[10];
3047 params[11] = matrix[14];
3048 params[12] = matrix[3];
3049 params[13] = matrix[7];
3050 params[14] = matrix[11];
3051 params[15] = matrix[15];
3052 }
3053 break;
3054 case GL_TRANSPOSE_MODELVIEW_MATRIX_ARB:
3055 {
3056 const GLfloat *matrix = ctx->ModelviewMatrixStack.Top->m;
3057 params[0] = matrix[0];
3058 params[1] = matrix[4];
3059 params[2] = matrix[8];
3060 params[3] = matrix[12];
3061 params[4] = matrix[1];
3062 params[5] = matrix[5];
3063 params[6] = matrix[9];
3064 params[7] = matrix[13];
3065 params[8] = matrix[2];
3066 params[9] = matrix[6];
3067 params[10] = matrix[10];
3068 params[11] = matrix[14];
3069 params[12] = matrix[3];
3070 params[13] = matrix[7];
3071 params[14] = matrix[11];
3072 params[15] = matrix[15];
3073 }
3074 break;
3075 case GL_TRANSPOSE_PROJECTION_MATRIX_ARB:
3076 {
3077 const GLfloat *matrix = ctx->ProjectionMatrixStack.Top->m;
3078 params[0] = matrix[0];
3079 params[1] = matrix[4];
3080 params[2] = matrix[8];
3081 params[3] = matrix[12];
3082 params[4] = matrix[1];
3083 params[5] = matrix[5];
3084 params[6] = matrix[9];
3085 params[7] = matrix[13];
3086 params[8] = matrix[2];
3087 params[9] = matrix[6];
3088 params[10] = matrix[10];
3089 params[11] = matrix[14];
3090 params[12] = matrix[3];
3091 params[13] = matrix[7];
3092 params[14] = matrix[11];
3093 params[15] = matrix[15];
3094 }
3095 break;
3096 case GL_TRANSPOSE_TEXTURE_MATRIX_ARB:
3097 {
3098 const GLfloat *matrix = ctx->TextureMatrixStack[ctx->Texture.CurrentUnit].Top->m;
3099 params[0] = matrix[0];
3100 params[1] = matrix[4];
3101 params[2] = matrix[8];
3102 params[3] = matrix[12];
3103 params[4] = matrix[1];
3104 params[5] = matrix[5];
3105 params[6] = matrix[9];
3106 params[7] = matrix[13];
3107 params[8] = matrix[2];
3108 params[9] = matrix[6];
3109 params[10] = matrix[10];
3110 params[11] = matrix[14];
3111 params[12] = matrix[3];
3112 params[13] = matrix[7];
3113 params[14] = matrix[11];
3114 params[15] = matrix[15];
3115 }
3116 break;
3117 case GL_COLOR_MATRIX_SGI:
3118 {
3119 const GLfloat *matrix = ctx->ColorMatrixStack.Top->m;
3120 params[0] = matrix[0];
3121 params[1] = matrix[1];
3122 params[2] = matrix[2];
3123 params[3] = matrix[3];
3124 params[4] = matrix[4];
3125 params[5] = matrix[5];
3126 params[6] = matrix[6];
3127 params[7] = matrix[7];
3128 params[8] = matrix[8];
3129 params[9] = matrix[9];
3130 params[10] = matrix[10];
3131 params[11] = matrix[11];
3132 params[12] = matrix[12];
3133 params[13] = matrix[13];
3134 params[14] = matrix[14];
3135 params[15] = matrix[15];
3136 }
3137 break;
3138 case GL_COLOR_MATRIX_STACK_DEPTH_SGI:
3139 params[0] = (GLfloat)(ctx->ColorMatrixStack.Depth + 1);
3140 break;
3141 case GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI:
3142 params[0] = (GLfloat)(MAX_COLOR_STACK_DEPTH);
3143 break;
3144 case GL_POST_COLOR_MATRIX_RED_SCALE_SGI:
3145 params[0] = ctx->Pixel.PostColorMatrixScale[0];
3146 break;
3147 case GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI:
3148 params[0] = ctx->Pixel.PostColorMatrixScale[1];
3149 break;
3150 case GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI:
3151 params[0] = ctx->Pixel.PostColorMatrixScale[2];
3152 break;
3153 case GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI:
3154 params[0] = ctx->Pixel.PostColorMatrixScale[3];
3155 break;
3156 case GL_POST_COLOR_MATRIX_RED_BIAS_SGI:
3157 params[0] = ctx->Pixel.PostColorMatrixBias[0];
3158 break;
3159 case GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI:
3160 params[0] = ctx->Pixel.PostColorMatrixBias[1];
3161 break;
3162 case GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI:
3163 params[0] = ctx->Pixel.PostColorMatrixBias[2];
3164 break;
3165 case GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI:
3166 params[0] = ctx->Pixel.PostColorMatrixBias[3];
3167 break;
3168 case GL_CONVOLUTION_1D_EXT:
3169 CHECK_EXT1(EXT_convolution);
3170 params[0] = BOOLEAN_TO_FLOAT(ctx->Pixel.Convolution1DEnabled);
3171 break;
3172 case GL_CONVOLUTION_2D_EXT:
3173 CHECK_EXT1(EXT_convolution);
3174 params[0] = BOOLEAN_TO_FLOAT(ctx->Pixel.Convolution2DEnabled);
3175 break;
3176 case GL_SEPARABLE_2D_EXT:
3177 CHECK_EXT1(EXT_convolution);
3178 params[0] = BOOLEAN_TO_FLOAT(ctx->Pixel.Separable2DEnabled);
3179 break;
3180 case GL_POST_CONVOLUTION_RED_SCALE_EXT:
3181 CHECK_EXT1(EXT_convolution);
3182 params[0] = ctx->Pixel.PostConvolutionScale[0];
3183 break;
3184 case GL_POST_CONVOLUTION_GREEN_SCALE_EXT:
3185 CHECK_EXT1(EXT_convolution);
3186 params[0] = ctx->Pixel.PostConvolutionScale[1];
3187 break;
3188 case GL_POST_CONVOLUTION_BLUE_SCALE_EXT:
3189 CHECK_EXT1(EXT_convolution);
3190 params[0] = ctx->Pixel.PostConvolutionScale[2];
3191 break;
3192 case GL_POST_CONVOLUTION_ALPHA_SCALE_EXT:
3193 CHECK_EXT1(EXT_convolution);
3194 params[0] = ctx->Pixel.PostConvolutionScale[3];
3195 break;
3196 case GL_POST_CONVOLUTION_RED_BIAS_EXT:
3197 CHECK_EXT1(EXT_convolution);
3198 params[0] = ctx->Pixel.PostConvolutionBias[0];
3199 break;
3200 case GL_POST_CONVOLUTION_GREEN_BIAS_EXT:
3201 CHECK_EXT1(EXT_convolution);
3202 params[0] = ctx->Pixel.PostConvolutionBias[1];
3203 break;
3204 case GL_POST_CONVOLUTION_BLUE_BIAS_EXT:
3205 CHECK_EXT1(EXT_convolution);
3206 params[0] = ctx->Pixel.PostConvolutionBias[2];
3207 break;
3208 case GL_POST_CONVOLUTION_ALPHA_BIAS_EXT:
3209 CHECK_EXT1(EXT_convolution);
3210 params[0] = ctx->Pixel.PostConvolutionBias[3];
3211 break;
3212 case GL_HISTOGRAM:
3213 CHECK_EXT1(EXT_histogram);
3214 params[0] = BOOLEAN_TO_FLOAT(ctx->Pixel.HistogramEnabled);
3215 break;
3216 case GL_MINMAX:
3217 CHECK_EXT1(EXT_histogram);
3218 params[0] = BOOLEAN_TO_FLOAT(ctx->Pixel.MinMaxEnabled);
3219 break;
3220 case GL_COLOR_TABLE_SGI:
3221 CHECK_EXT1(SGI_color_table);
3222 params[0] = BOOLEAN_TO_FLOAT(ctx->Pixel.ColorTableEnabled[COLORTABLE_PRECONVOLUTION]);
3223 break;
3224 case GL_POST_CONVOLUTION_COLOR_TABLE_SGI:
3225 CHECK_EXT1(SGI_color_table);
3226 params[0] = BOOLEAN_TO_FLOAT(ctx->Pixel.ColorTableEnabled[COLORTABLE_POSTCONVOLUTION]);
3227 break;
3228 case GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI:
3229 CHECK_EXT1(SGI_color_table);
3230 params[0] = BOOLEAN_TO_FLOAT(ctx->Pixel.ColorTableEnabled[COLORTABLE_POSTCOLORMATRIX]);
3231 break;
3232 case GL_TEXTURE_COLOR_TABLE_SGI:
3233 CHECK_EXT1(SGI_texture_color_table);
3234 params[0] = BOOLEAN_TO_FLOAT(ctx->Texture.Unit[ctx->Texture.CurrentUnit].ColorTableEnabled);
3235 break;
3236 case GL_COLOR_SUM_EXT:
3237 CHECK_EXT2(EXT_secondary_color, ARB_vertex_program);
3238 params[0] = BOOLEAN_TO_FLOAT(ctx->Fog.ColorSumEnabled);
3239 break;
3240 case GL_CURRENT_SECONDARY_COLOR_EXT:
3241 CHECK_EXT1(EXT_secondary_color);
3242 FLUSH_CURRENT(ctx, 0);
3243 params[0] = ctx->Current.Attrib[VERT_ATTRIB_COLOR1][0];
3244 params[1] = ctx->Current.Attrib[VERT_ATTRIB_COLOR1][1];
3245 params[2] = ctx->Current.Attrib[VERT_ATTRIB_COLOR1][2];
3246 params[3] = ctx->Current.Attrib[VERT_ATTRIB_COLOR1][3];
3247 break;
3248 case GL_SECONDARY_COLOR_ARRAY_EXT:
3249 CHECK_EXT1(EXT_secondary_color);
3250 params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->SecondaryColor.Enabled);
3251 break;
3252 case GL_SECONDARY_COLOR_ARRAY_TYPE_EXT:
3253 CHECK_EXT1(EXT_secondary_color);
3254 params[0] = ENUM_TO_FLOAT(ctx->Array.ArrayObj->SecondaryColor.Type);
3255 break;
3256 case GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT:
3257 CHECK_EXT1(EXT_secondary_color);
3258 params[0] = (GLfloat)(ctx->Array.ArrayObj->SecondaryColor.Stride);
3259 break;
3260 case GL_SECONDARY_COLOR_ARRAY_SIZE_EXT:
3261 CHECK_EXT1(EXT_secondary_color);
3262 params[0] = (GLfloat)(ctx->Array.ArrayObj->SecondaryColor.Size);
3263 break;
3264 case GL_CURRENT_FOG_COORDINATE_EXT:
3265 CHECK_EXT1(EXT_fog_coord);
3266 FLUSH_CURRENT(ctx, 0);
3267 params[0] = ctx->Current.Attrib[VERT_ATTRIB_FOG][0];
3268 break;
3269 case GL_FOG_COORDINATE_ARRAY_EXT:
3270 CHECK_EXT1(EXT_fog_coord);
3271 params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->FogCoord.Enabled);
3272 break;
3273 case GL_FOG_COORDINATE_ARRAY_TYPE_EXT:
3274 CHECK_EXT1(EXT_fog_coord);
3275 params[0] = ENUM_TO_FLOAT(ctx->Array.ArrayObj->FogCoord.Type);
3276 break;
3277 case GL_FOG_COORDINATE_ARRAY_STRIDE_EXT:
3278 CHECK_EXT1(EXT_fog_coord);
3279 params[0] = (GLfloat)(ctx->Array.ArrayObj->FogCoord.Stride);
3280 break;
3281 case GL_FOG_COORDINATE_SOURCE_EXT:
3282 CHECK_EXT1(EXT_fog_coord);
3283 params[0] = ENUM_TO_FLOAT(ctx->Fog.FogCoordinateSource);
3284 break;
3285 case GL_MAX_TEXTURE_LOD_BIAS_EXT:
3286 CHECK_EXT1(EXT_texture_lod_bias);
3287 params[0] = ctx->Const.MaxTextureLodBias;
3288 break;
3289 case GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT:
3290 CHECK_EXT1(EXT_texture_filter_anisotropic);
3291 params[0] = ctx->Const.MaxTextureMaxAnisotropy;
3292 break;
3293 case GL_MULTISAMPLE_ARB:
3294 params[0] = BOOLEAN_TO_FLOAT(ctx->Multisample.Enabled);
3295 break;
3296 case GL_SAMPLE_ALPHA_TO_COVERAGE_ARB:
3297 params[0] = BOOLEAN_TO_FLOAT(ctx->Multisample.SampleAlphaToCoverage);
3298 break;
3299 case GL_SAMPLE_ALPHA_TO_ONE_ARB:
3300 params[0] = BOOLEAN_TO_FLOAT(ctx->Multisample.SampleAlphaToOne);
3301 break;
3302 case GL_SAMPLE_COVERAGE_ARB:
3303 params[0] = BOOLEAN_TO_FLOAT(ctx->Multisample.SampleCoverage);
3304 break;
3305 case GL_SAMPLE_COVERAGE_VALUE_ARB:
3306 params[0] = ctx->Multisample.SampleCoverageValue;
3307 break;
3308 case GL_SAMPLE_COVERAGE_INVERT_ARB:
3309 params[0] = BOOLEAN_TO_FLOAT(ctx->Multisample.SampleCoverageInvert);
3310 break;
3311 case GL_SAMPLE_BUFFERS_ARB:
3312 params[0] = (GLfloat)(ctx->DrawBuffer->Visual.sampleBuffers);
3313 break;
3314 case GL_SAMPLES_ARB:
3315 params[0] = (GLfloat)(ctx->DrawBuffer->Visual.samples);
3316 break;
3317 case GL_RASTER_POSITION_UNCLIPPED_IBM:
3318 CHECK_EXT1(IBM_rasterpos_clip);
3319 params[0] = BOOLEAN_TO_FLOAT(ctx->Transform.RasterPositionUnclipped);
3320 break;
3321 case GL_POINT_SPRITE_NV:
3322 CHECK_EXT2(NV_point_sprite, ARB_point_sprite);
3323 params[0] = BOOLEAN_TO_FLOAT(ctx->Point.PointSprite);
3324 break;
3325 case GL_POINT_SPRITE_R_MODE_NV:
3326 CHECK_EXT1(NV_point_sprite);
3327 params[0] = ENUM_TO_FLOAT(ctx->Point.SpriteRMode);
3328 break;
3329 case GL_POINT_SPRITE_COORD_ORIGIN:
3330 CHECK_EXT2(NV_point_sprite, ARB_point_sprite);
3331 params[0] = ENUM_TO_FLOAT(ctx->Point.SpriteOrigin);
3332 break;
3333 case GL_GENERATE_MIPMAP_HINT_SGIS:
3334 CHECK_EXT1(SGIS_generate_mipmap);
3335 params[0] = ENUM_TO_FLOAT(ctx->Hint.GenerateMipmap);
3336 break;
3337 case GL_VERTEX_PROGRAM_BINDING_NV:
3338 CHECK_EXT1(NV_vertex_program);
3339 params[0] = (GLfloat)((ctx->VertexProgram.Current ? ctx->VertexProgram.Current->Base.Id : 0));
3340 break;
3341 case GL_VERTEX_ATTRIB_ARRAY0_NV:
3342 CHECK_EXT1(NV_vertex_program);
3343 params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[0].Enabled);
3344 break;
3345 case GL_VERTEX_ATTRIB_ARRAY1_NV:
3346 CHECK_EXT1(NV_vertex_program);
3347 params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[1].Enabled);
3348 break;
3349 case GL_VERTEX_ATTRIB_ARRAY2_NV:
3350 CHECK_EXT1(NV_vertex_program);
3351 params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[2].Enabled);
3352 break;
3353 case GL_VERTEX_ATTRIB_ARRAY3_NV:
3354 CHECK_EXT1(NV_vertex_program);
3355 params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[3].Enabled);
3356 break;
3357 case GL_VERTEX_ATTRIB_ARRAY4_NV:
3358 CHECK_EXT1(NV_vertex_program);
3359 params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[4].Enabled);
3360 break;
3361 case GL_VERTEX_ATTRIB_ARRAY5_NV:
3362 CHECK_EXT1(NV_vertex_program);
3363 params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[5].Enabled);
3364 break;
3365 case GL_VERTEX_ATTRIB_ARRAY6_NV:
3366 CHECK_EXT1(NV_vertex_program);
3367 params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[6].Enabled);
3368 break;
3369 case GL_VERTEX_ATTRIB_ARRAY7_NV:
3370 CHECK_EXT1(NV_vertex_program);
3371 params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[7].Enabled);
3372 break;
3373 case GL_VERTEX_ATTRIB_ARRAY8_NV:
3374 CHECK_EXT1(NV_vertex_program);
3375 params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[8].Enabled);
3376 break;
3377 case GL_VERTEX_ATTRIB_ARRAY9_NV:
3378 CHECK_EXT1(NV_vertex_program);
3379 params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[9].Enabled);
3380 break;
3381 case GL_VERTEX_ATTRIB_ARRAY10_NV:
3382 CHECK_EXT1(NV_vertex_program);
3383 params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[10].Enabled);
3384 break;
3385 case GL_VERTEX_ATTRIB_ARRAY11_NV:
3386 CHECK_EXT1(NV_vertex_program);
3387 params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[11].Enabled);
3388 break;
3389 case GL_VERTEX_ATTRIB_ARRAY12_NV:
3390 CHECK_EXT1(NV_vertex_program);
3391 params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[12].Enabled);
3392 break;
3393 case GL_VERTEX_ATTRIB_ARRAY13_NV:
3394 CHECK_EXT1(NV_vertex_program);
3395 params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[13].Enabled);
3396 break;
3397 case GL_VERTEX_ATTRIB_ARRAY14_NV:
3398 CHECK_EXT1(NV_vertex_program);
3399 params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[14].Enabled);
3400 break;
3401 case GL_VERTEX_ATTRIB_ARRAY15_NV:
3402 CHECK_EXT1(NV_vertex_program);
3403 params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[15].Enabled);
3404 break;
3405 case GL_MAP1_VERTEX_ATTRIB0_4_NV:
3406 CHECK_EXT1(NV_vertex_program);
3407 params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[0]);
3408 break;
3409 case GL_MAP1_VERTEX_ATTRIB1_4_NV:
3410 CHECK_EXT1(NV_vertex_program);
3411 params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[1]);
3412 break;
3413 case GL_MAP1_VERTEX_ATTRIB2_4_NV:
3414 CHECK_EXT1(NV_vertex_program);
3415 params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[2]);
3416 break;
3417 case GL_MAP1_VERTEX_ATTRIB3_4_NV:
3418 CHECK_EXT1(NV_vertex_program);
3419 params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[3]);
3420 break;
3421 case GL_MAP1_VERTEX_ATTRIB4_4_NV:
3422 CHECK_EXT1(NV_vertex_program);
3423 params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[4]);
3424 break;
3425 case GL_MAP1_VERTEX_ATTRIB5_4_NV:
3426 CHECK_EXT1(NV_vertex_program);
3427 params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[5]);
3428 break;
3429 case GL_MAP1_VERTEX_ATTRIB6_4_NV:
3430 CHECK_EXT1(NV_vertex_program);
3431 params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[6]);
3432 break;
3433 case GL_MAP1_VERTEX_ATTRIB7_4_NV:
3434 CHECK_EXT1(NV_vertex_program);
3435 params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[7]);
3436 break;
3437 case GL_MAP1_VERTEX_ATTRIB8_4_NV:
3438 CHECK_EXT1(NV_vertex_program);
3439 params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[8]);
3440 break;
3441 case GL_MAP1_VERTEX_ATTRIB9_4_NV:
3442 CHECK_EXT1(NV_vertex_program);
3443 params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[9]);
3444 break;
3445 case GL_MAP1_VERTEX_ATTRIB10_4_NV:
3446 CHECK_EXT1(NV_vertex_program);
3447 params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[10]);
3448 break;
3449 case GL_MAP1_VERTEX_ATTRIB11_4_NV:
3450 CHECK_EXT1(NV_vertex_program);
3451 params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[11]);
3452 break;
3453 case GL_MAP1_VERTEX_ATTRIB12_4_NV:
3454 CHECK_EXT1(NV_vertex_program);
3455 params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[12]);
3456 break;
3457 case GL_MAP1_VERTEX_ATTRIB13_4_NV:
3458 CHECK_EXT1(NV_vertex_program);
3459 params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[13]);
3460 break;
3461 case GL_MAP1_VERTEX_ATTRIB14_4_NV:
3462 CHECK_EXT1(NV_vertex_program);
3463 params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[14]);
3464 break;
3465 case GL_MAP1_VERTEX_ATTRIB15_4_NV:
3466 CHECK_EXT1(NV_vertex_program);
3467 params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[15]);
3468 break;
3469 case GL_FRAGMENT_PROGRAM_NV:
3470 CHECK_EXT1(NV_fragment_program);
3471 params[0] = BOOLEAN_TO_FLOAT(ctx->FragmentProgram.Enabled);
3472 break;
3473 case GL_FRAGMENT_PROGRAM_BINDING_NV:
3474 CHECK_EXT1(NV_fragment_program);
3475 params[0] = (GLfloat)(ctx->FragmentProgram.Current ? ctx->FragmentProgram.Current->Base.Id : 0);
3476 break;
3477 case GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV:
3478 CHECK_EXT1(NV_fragment_program);
3479 params[0] = (GLfloat)(MAX_NV_FRAGMENT_PROGRAM_PARAMS);
3480 break;
3481 case GL_TEXTURE_RECTANGLE_NV:
3482 CHECK_EXT1(NV_texture_rectangle);
3483 params[0] = BOOLEAN_TO_FLOAT(_mesa_IsEnabled(GL_TEXTURE_RECTANGLE_NV));
3484 break;
3485 case GL_TEXTURE_BINDING_RECTANGLE_NV:
3486 CHECK_EXT1(NV_texture_rectangle);
3487 params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_RECT_INDEX]->Name);
3488 break;
3489 case GL_MAX_RECTANGLE_TEXTURE_SIZE_NV:
3490 CHECK_EXT1(NV_texture_rectangle);
3491 params[0] = (GLfloat)(ctx->Const.MaxTextureRectSize);
3492 break;
3493 case GL_STENCIL_TEST_TWO_SIDE_EXT:
3494 CHECK_EXT1(EXT_stencil_two_side);
3495 params[0] = BOOLEAN_TO_FLOAT(ctx->Stencil.TestTwoSide);
3496 break;
3497 case GL_ACTIVE_STENCIL_FACE_EXT:
3498 CHECK_EXT1(EXT_stencil_two_side);
3499 params[0] = ENUM_TO_FLOAT(ctx->Stencil.ActiveFace ? GL_BACK : GL_FRONT);
3500 break;
3501 case GL_MAX_SHININESS_NV:
3502 CHECK_EXT1(NV_light_max_exponent);
3503 params[0] = ctx->Const.MaxShininess;
3504 break;
3505 case GL_MAX_SPOT_EXPONENT_NV:
3506 CHECK_EXT1(NV_light_max_exponent);
3507 params[0] = ctx->Const.MaxSpotExponent;
3508 break;
3509 case GL_ARRAY_BUFFER_BINDING_ARB:
3510 params[0] = (GLfloat)(ctx->Array.ArrayBufferObj->Name);
3511 break;
3512 case GL_VERTEX_ARRAY_BUFFER_BINDING_ARB:
3513 params[0] = (GLfloat)(ctx->Array.ArrayObj->Vertex.BufferObj->Name);
3514 break;
3515 case GL_NORMAL_ARRAY_BUFFER_BINDING_ARB:
3516 params[0] = (GLfloat)(ctx->Array.ArrayObj->Normal.BufferObj->Name);
3517 break;
3518 case GL_COLOR_ARRAY_BUFFER_BINDING_ARB:
3519 params[0] = (GLfloat)(ctx->Array.ArrayObj->Color.BufferObj->Name);
3520 break;
3521 case GL_INDEX_ARRAY_BUFFER_BINDING_ARB:
3522 params[0] = (GLfloat)(ctx->Array.ArrayObj->Index.BufferObj->Name);
3523 break;
3524 case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB:
3525 params[0] = (GLfloat)(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].BufferObj->Name);
3526 break;
3527 case GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB:
3528 params[0] = (GLfloat)(ctx->Array.ArrayObj->EdgeFlag.BufferObj->Name);
3529 break;
3530 case GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB:
3531 params[0] = (GLfloat)(ctx->Array.ArrayObj->SecondaryColor.BufferObj->Name);
3532 break;
3533 case GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB:
3534 params[0] = (GLfloat)(ctx->Array.ArrayObj->FogCoord.BufferObj->Name);
3535 break;
3536 case GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB:
3537 params[0] = (GLfloat)(ctx->Array.ElementArrayBufferObj->Name);
3538 break;
3539 case GL_PIXEL_PACK_BUFFER_BINDING_EXT:
3540 CHECK_EXT1(EXT_pixel_buffer_object);
3541 params[0] = (GLfloat)(ctx->Pack.BufferObj->Name);
3542 break;
3543 case GL_PIXEL_UNPACK_BUFFER_BINDING_EXT:
3544 CHECK_EXT1(EXT_pixel_buffer_object);
3545 params[0] = (GLfloat)(ctx->Unpack.BufferObj->Name);
3546 break;
3547 case GL_VERTEX_PROGRAM_ARB:
3548 CHECK_EXT2(ARB_vertex_program, NV_vertex_program);
3549 params[0] = BOOLEAN_TO_FLOAT(ctx->VertexProgram.Enabled);
3550 break;
3551 case GL_VERTEX_PROGRAM_POINT_SIZE_ARB:
3552 CHECK_EXT2(ARB_vertex_program, NV_vertex_program);
3553 params[0] = BOOLEAN_TO_FLOAT(ctx->VertexProgram.PointSizeEnabled);
3554 break;
3555 case GL_VERTEX_PROGRAM_TWO_SIDE_ARB:
3556 CHECK_EXT2(ARB_vertex_program, NV_vertex_program);
3557 params[0] = BOOLEAN_TO_FLOAT(ctx->VertexProgram.TwoSideEnabled);
3558 break;
3559 case GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB:
3560 CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_vertex_program);
3561 params[0] = (GLfloat)(ctx->Const.MaxProgramMatrixStackDepth);
3562 break;
3563 case GL_MAX_PROGRAM_MATRICES_ARB:
3564 CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_vertex_program);
3565 params[0] = (GLfloat)(ctx->Const.MaxProgramMatrices);
3566 break;
3567 case GL_CURRENT_MATRIX_STACK_DEPTH_ARB:
3568 CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_vertex_program);
3569 params[0] = BOOLEAN_TO_FLOAT(ctx->CurrentStack->Depth + 1);
3570 break;
3571 case GL_CURRENT_MATRIX_ARB:
3572 CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_fragment_program);
3573 {
3574 const GLfloat *matrix = ctx->CurrentStack->Top->m;
3575 params[0] = matrix[0];
3576 params[1] = matrix[1];
3577 params[2] = matrix[2];
3578 params[3] = matrix[3];
3579 params[4] = matrix[4];
3580 params[5] = matrix[5];
3581 params[6] = matrix[6];
3582 params[7] = matrix[7];
3583 params[8] = matrix[8];
3584 params[9] = matrix[9];
3585 params[10] = matrix[10];
3586 params[11] = matrix[11];
3587 params[12] = matrix[12];
3588 params[13] = matrix[13];
3589 params[14] = matrix[14];
3590 params[15] = matrix[15];
3591 }
3592 break;
3593 case GL_TRANSPOSE_CURRENT_MATRIX_ARB:
3594 CHECK_EXT2(ARB_vertex_program, ARB_fragment_program);
3595 {
3596 const GLfloat *matrix = ctx->CurrentStack->Top->m;
3597 params[0] = matrix[0];
3598 params[1] = matrix[4];
3599 params[2] = matrix[8];
3600 params[3] = matrix[12];
3601 params[4] = matrix[1];
3602 params[5] = matrix[5];
3603 params[6] = matrix[9];
3604 params[7] = matrix[13];
3605 params[8] = matrix[2];
3606 params[9] = matrix[6];
3607 params[10] = matrix[10];
3608 params[11] = matrix[14];
3609 params[12] = matrix[3];
3610 params[13] = matrix[7];
3611 params[14] = matrix[11];
3612 params[15] = matrix[15];
3613 }
3614 break;
3615 case GL_MAX_VERTEX_ATTRIBS_ARB:
3616 CHECK_EXT1(ARB_vertex_program);
3617 params[0] = (GLfloat)(ctx->Const.VertexProgram.MaxAttribs);
3618 break;
3619 case GL_PROGRAM_ERROR_POSITION_ARB:
3620 CHECK_EXT4(NV_vertex_program, ARB_vertex_program, NV_fragment_program, ARB_fragment_program);
3621 params[0] = (GLfloat)(ctx->Program.ErrorPos);
3622 break;
3623 case GL_FRAGMENT_PROGRAM_ARB:
3624 CHECK_EXT1(ARB_fragment_program);
3625 params[0] = BOOLEAN_TO_FLOAT(ctx->FragmentProgram.Enabled);
3626 break;
3627 case GL_MAX_TEXTURE_COORDS_ARB:
3628 CHECK_EXT2(ARB_fragment_program, NV_fragment_program);
3629 params[0] = (GLfloat)(ctx->Const.MaxTextureCoordUnits);
3630 break;
3631 case GL_MAX_TEXTURE_IMAGE_UNITS_ARB:
3632 CHECK_EXT2(ARB_fragment_program, NV_fragment_program);
3633 params[0] = (GLfloat)(ctx->Const.MaxTextureImageUnits);
3634 break;
3635 case GL_DEPTH_BOUNDS_TEST_EXT:
3636 CHECK_EXT1(EXT_depth_bounds_test);
3637 params[0] = BOOLEAN_TO_FLOAT(ctx->Depth.BoundsTest);
3638 break;
3639 case GL_DEPTH_BOUNDS_EXT:
3640 CHECK_EXT1(EXT_depth_bounds_test);
3641 params[0] = ctx->Depth.BoundsMin;
3642 params[1] = ctx->Depth.BoundsMax;
3643 break;
3644 case GL_DEPTH_CLAMP:
3645 CHECK_EXT1(ARB_depth_clamp);
3646 params[0] = BOOLEAN_TO_FLOAT(ctx->Transform.DepthClamp);
3647 break;
3648 case GL_MAX_DRAW_BUFFERS_ARB:
3649 params[0] = (GLfloat)(ctx->Const.MaxDrawBuffers);
3650 break;
3651 case GL_DRAW_BUFFER0_ARB:
3652 params[0] = ENUM_TO_FLOAT(ctx->DrawBuffer->ColorDrawBuffer[0]);
3653 break;
3654 case GL_DRAW_BUFFER1_ARB:
3655 {
3656 GLenum buffer;
3657 if (pname - GL_DRAW_BUFFER0_ARB >= ctx->Const.MaxDrawBuffers) {
3658 _mesa_error(ctx, GL_INVALID_ENUM, "glGet(GL_DRAW_BUFFERx_ARB)");
3659 return;
3660 }
3661 buffer = ctx->DrawBuffer->ColorDrawBuffer[1];
3662 params[0] = ENUM_TO_FLOAT(buffer);
3663 }
3664 break;
3665 case GL_DRAW_BUFFER2_ARB:
3666 {
3667 GLenum buffer;
3668 if (pname - GL_DRAW_BUFFER0_ARB >= ctx->Const.MaxDrawBuffers) {
3669 _mesa_error(ctx, GL_INVALID_ENUM, "glGet(GL_DRAW_BUFFERx_ARB)");
3670 return;
3671 }
3672 buffer = ctx->DrawBuffer->ColorDrawBuffer[2];
3673 params[0] = ENUM_TO_FLOAT(buffer);
3674 }
3675 break;
3676 case GL_DRAW_BUFFER3_ARB:
3677 {
3678 GLenum buffer;
3679 if (pname - GL_DRAW_BUFFER0_ARB >= ctx->Const.MaxDrawBuffers) {
3680 _mesa_error(ctx, GL_INVALID_ENUM, "glGet(GL_DRAW_BUFFERx_ARB)");
3681 return;
3682 }
3683 buffer = ctx->DrawBuffer->ColorDrawBuffer[3];
3684 params[0] = ENUM_TO_FLOAT(buffer);
3685 }
3686 break;
3687 case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES:
3688 CHECK_EXT1(OES_read_format);
3689 if (ctx->NewState & _NEW_BUFFERS)
3690 _mesa_update_state(ctx);
3691 params[0] = (GLfloat)(_mesa_get_color_read_type(ctx));
3692 break;
3693 case GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES:
3694 CHECK_EXT1(OES_read_format);
3695 if (ctx->NewState & _NEW_BUFFERS)
3696 _mesa_update_state(ctx);
3697 params[0] = (GLfloat)(_mesa_get_color_read_format(ctx));
3698 break;
3699 case GL_NUM_FRAGMENT_REGISTERS_ATI:
3700 CHECK_EXT1(ATI_fragment_shader);
3701 params[0] = (GLfloat)(6);
3702 break;
3703 case GL_NUM_FRAGMENT_CONSTANTS_ATI:
3704 CHECK_EXT1(ATI_fragment_shader);
3705 params[0] = (GLfloat)(8);
3706 break;
3707 case GL_NUM_PASSES_ATI:
3708 CHECK_EXT1(ATI_fragment_shader);
3709 params[0] = (GLfloat)(2);
3710 break;
3711 case GL_NUM_INSTRUCTIONS_PER_PASS_ATI:
3712 CHECK_EXT1(ATI_fragment_shader);
3713 params[0] = (GLfloat)(8);
3714 break;
3715 case GL_NUM_INSTRUCTIONS_TOTAL_ATI:
3716 CHECK_EXT1(ATI_fragment_shader);
3717 params[0] = (GLfloat)(16);
3718 break;
3719 case GL_COLOR_ALPHA_PAIRING_ATI:
3720 CHECK_EXT1(ATI_fragment_shader);
3721 params[0] = BOOLEAN_TO_FLOAT(GL_TRUE);
3722 break;
3723 case GL_NUM_LOOPBACK_COMPONENTS_ATI:
3724 CHECK_EXT1(ATI_fragment_shader);
3725 params[0] = (GLfloat)(3);
3726 break;
3727 case GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI:
3728 CHECK_EXT1(ATI_fragment_shader);
3729 params[0] = (GLfloat)(3);
3730 break;
3731 case GL_STENCIL_BACK_FUNC:
3732 params[0] = ENUM_TO_FLOAT(ctx->Stencil.Function[1]);
3733 break;
3734 case GL_STENCIL_BACK_VALUE_MASK:
3735 params[0] = (GLfloat)(ctx->Stencil.ValueMask[1]);
3736 break;
3737 case GL_STENCIL_BACK_WRITEMASK:
3738 params[0] = (GLfloat)(ctx->Stencil.WriteMask[1]);
3739 break;
3740 case GL_STENCIL_BACK_REF:
3741 params[0] = (GLfloat)(ctx->Stencil.Ref[1]);
3742 break;
3743 case GL_STENCIL_BACK_FAIL:
3744 params[0] = ENUM_TO_FLOAT(ctx->Stencil.FailFunc[1]);
3745 break;
3746 case GL_STENCIL_BACK_PASS_DEPTH_FAIL:
3747 params[0] = ENUM_TO_FLOAT(ctx->Stencil.ZFailFunc[1]);
3748 break;
3749 case GL_STENCIL_BACK_PASS_DEPTH_PASS:
3750 params[0] = ENUM_TO_FLOAT(ctx->Stencil.ZPassFunc[1]);
3751 break;
3752 case GL_FRAMEBUFFER_BINDING_EXT:
3753 CHECK_EXT1(EXT_framebuffer_object);
3754 params[0] = (GLfloat)(ctx->DrawBuffer->Name);
3755 break;
3756 case GL_RENDERBUFFER_BINDING_EXT:
3757 CHECK_EXT1(EXT_framebuffer_object);
3758 params[0] = (GLfloat)(ctx->CurrentRenderbuffer ? ctx->CurrentRenderbuffer->Name : 0);
3759 break;
3760 case GL_MAX_COLOR_ATTACHMENTS_EXT:
3761 CHECK_EXT1(EXT_framebuffer_object);
3762 params[0] = (GLfloat)(ctx->Const.MaxColorAttachments);
3763 break;
3764 case GL_MAX_RENDERBUFFER_SIZE_EXT:
3765 CHECK_EXT1(EXT_framebuffer_object);
3766 params[0] = (GLfloat)(ctx->Const.MaxRenderbufferSize);
3767 break;
3768 case GL_READ_FRAMEBUFFER_BINDING_EXT:
3769 CHECK_EXT1(EXT_framebuffer_blit);
3770 params[0] = (GLfloat)(ctx->ReadBuffer->Name);
3771 break;
3772 case GL_PROVOKING_VERTEX_EXT:
3773 CHECK_EXT1(EXT_provoking_vertex);
3774 params[0] = BOOLEAN_TO_FLOAT(ctx->Light.ProvokingVertex);
3775 break;
3776 case GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT:
3777 CHECK_EXT1(EXT_provoking_vertex);
3778 params[0] = BOOLEAN_TO_FLOAT(ctx->Const.QuadsFollowProvokingVertexConvention);
3779 break;
3780 case GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB:
3781 CHECK_EXT1(ARB_fragment_shader);
3782 params[0] = (GLfloat)(ctx->Const.FragmentProgram.MaxUniformComponents);
3783 break;
3784 case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB:
3785 CHECK_EXT1(ARB_fragment_shader);
3786 params[0] = ENUM_TO_FLOAT(ctx->Hint.FragmentShaderDerivative);
3787 break;
3788 case GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB:
3789 CHECK_EXT1(ARB_vertex_shader);
3790 params[0] = (GLfloat)(ctx->Const.VertexProgram.MaxUniformComponents);
3791 break;
3792 case GL_MAX_VARYING_FLOATS_ARB:
3793 CHECK_EXT1(ARB_vertex_shader);
3794 params[0] = (GLfloat)(ctx->Const.MaxVarying * 4);
3795 break;
3796 case GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB:
3797 CHECK_EXT1(ARB_vertex_shader);
3798 params[0] = (GLfloat)(ctx->Const.MaxVertexTextureImageUnits);
3799 break;
3800 case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB:
3801 CHECK_EXT1(ARB_vertex_shader);
3802 params[0] = (GLfloat)(ctx->Const.MaxCombinedTextureImageUnits);
3803 break;
3804 case GL_CURRENT_PROGRAM:
3805 CHECK_EXT1(ARB_shader_objects);
3806 params[0] = (GLfloat)(ctx->Shader.CurrentProgram ? ctx->Shader.CurrentProgram->Name : 0);
3807 break;
3808 case GL_MAX_SAMPLES:
3809 CHECK_EXT1(ARB_framebuffer_object);
3810 params[0] = (GLfloat)(ctx->Const.MaxSamples);
3811 break;
3812 case GL_VERTEX_ARRAY_BINDING_APPLE:
3813 CHECK_EXT1(APPLE_vertex_array_object);
3814 params[0] = (GLfloat)(ctx->Array.ArrayObj->Name);
3815 break;
3816 case GL_TEXTURE_CUBE_MAP_SEAMLESS:
3817 CHECK_EXT1(ARB_seamless_cube_map);
3818 params[0] = BOOLEAN_TO_FLOAT(ctx->Texture.CubeMapSeamless);
3819 break;
3820 case GL_MAX_SERVER_WAIT_TIMEOUT:
3821 CHECK_EXT1(ARB_sync);
3822 params[0] = (GLfloat)(ctx->Const.MaxServerWaitTimeout);
3823 break;
3824 case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING:
3825 CHECK_EXT1(EXT_transform_feedback);
3826 params[0] = (GLfloat)(ctx->TransformFeedback.CurrentBuffer->Name);
3827 break;
3828 case GL_RASTERIZER_DISCARD:
3829 CHECK_EXT1(EXT_transform_feedback);
3830 params[0] = BOOLEAN_TO_FLOAT(ctx->TransformFeedback.RasterDiscard);
3831 break;
3832 case GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS:
3833 CHECK_EXT1(EXT_transform_feedback);
3834 params[0] = (GLfloat)(ctx->Const.MaxTransformFeedbackInterleavedComponents);
3835 break;
3836 case GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS:
3837 CHECK_EXT1(EXT_transform_feedback);
3838 params[0] = (GLfloat)(ctx->Const.MaxTransformFeedbackSeparateAttribs);
3839 break;
3840 case GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS:
3841 CHECK_EXT1(EXT_transform_feedback);
3842 params[0] = (GLfloat)(ctx->Const.MaxTransformFeedbackSeparateComponents);
3843 break;
3844 case GL_NUM_EXTENSIONS:
3845 params[0] = (GLfloat)(_mesa_get_extension_count(ctx));
3846 break;
3847 case GL_MAJOR_VERSION:
3848 params[0] = (GLfloat)(ctx->VersionMajor);
3849 break;
3850 case GL_MINOR_VERSION:
3851 params[0] = (GLfloat)(ctx->VersionMinor);
3852 break;
3853 case GL_CONTEXT_FLAGS:
3854 params[0] = (GLfloat)(ctx->Const.ContextFlags);
3855 break;
3856 default:
3857 goto invalid_enum_error;
3858 }
3859 return;
3860
3861 invalid_enum_error:
3862 _mesa_error(ctx, GL_INVALID_ENUM, "glGetFloatv(pname=0x%x)", pname);
3863 }
3864
3865 void GLAPIENTRY
3866 _mesa_GetIntegerv( GLenum pname, GLint *params )
3867 {
3868 GET_CURRENT_CONTEXT(ctx);
3869 ASSERT_OUTSIDE_BEGIN_END(ctx);
3870
3871 if (!params)
3872 return;
3873
3874 if (ctx->Driver.GetIntegerv &&
3875 ctx->Driver.GetIntegerv(ctx, pname, params))
3876 return;
3877
3878 switch (pname) {
3879 case GL_ACCUM_RED_BITS:
3880 params[0] = ctx->DrawBuffer->Visual.accumRedBits;
3881 break;
3882 case GL_ACCUM_GREEN_BITS:
3883 params[0] = ctx->DrawBuffer->Visual.accumGreenBits;
3884 break;
3885 case GL_ACCUM_BLUE_BITS:
3886 params[0] = ctx->DrawBuffer->Visual.accumBlueBits;
3887 break;
3888 case GL_ACCUM_ALPHA_BITS:
3889 params[0] = ctx->DrawBuffer->Visual.accumAlphaBits;
3890 break;
3891 case GL_ACCUM_CLEAR_VALUE:
3892 params[0] = FLOAT_TO_INT(ctx->Accum.ClearColor[0]);
3893 params[1] = FLOAT_TO_INT(ctx->Accum.ClearColor[1]);
3894 params[2] = FLOAT_TO_INT(ctx->Accum.ClearColor[2]);
3895 params[3] = FLOAT_TO_INT(ctx->Accum.ClearColor[3]);
3896 break;
3897 case GL_ALPHA_BIAS:
3898 params[0] = IROUND(ctx->Pixel.AlphaBias);
3899 break;
3900 case GL_ALPHA_BITS:
3901 if (ctx->NewState & _NEW_BUFFERS)
3902 _mesa_update_state(ctx);
3903 params[0] = ctx->DrawBuffer->Visual.alphaBits;
3904 break;
3905 case GL_ALPHA_SCALE:
3906 params[0] = IROUND(ctx->Pixel.AlphaScale);
3907 break;
3908 case GL_ALPHA_TEST:
3909 params[0] = BOOLEAN_TO_INT(ctx->Color.AlphaEnabled);
3910 break;
3911 case GL_ALPHA_TEST_FUNC:
3912 params[0] = ENUM_TO_INT(ctx->Color.AlphaFunc);
3913 break;
3914 case GL_ALPHA_TEST_REF:
3915 params[0] = FLOAT_TO_INT(ctx->Color.AlphaRef);
3916 break;
3917 case GL_ATTRIB_STACK_DEPTH:
3918 params[0] = ctx->AttribStackDepth;
3919 break;
3920 case GL_AUTO_NORMAL:
3921 params[0] = BOOLEAN_TO_INT(ctx->Eval.AutoNormal);
3922 break;
3923 case GL_AUX_BUFFERS:
3924 params[0] = ctx->DrawBuffer->Visual.numAuxBuffers;
3925 break;
3926 case GL_BLEND:
3927 params[0] = BOOLEAN_TO_INT((ctx->Color.BlendEnabled & 1));
3928 break;
3929 case GL_BLEND_DST:
3930 params[0] = ENUM_TO_INT(ctx->Color.BlendDstRGB);
3931 break;
3932 case GL_BLEND_SRC:
3933 params[0] = ENUM_TO_INT(ctx->Color.BlendSrcRGB);
3934 break;
3935 case GL_BLEND_SRC_RGB_EXT:
3936 params[0] = ENUM_TO_INT(ctx->Color.BlendSrcRGB);
3937 break;
3938 case GL_BLEND_DST_RGB_EXT:
3939 params[0] = ENUM_TO_INT(ctx->Color.BlendDstRGB);
3940 break;
3941 case GL_BLEND_SRC_ALPHA_EXT:
3942 params[0] = ENUM_TO_INT(ctx->Color.BlendSrcA);
3943 break;
3944 case GL_BLEND_DST_ALPHA_EXT:
3945 params[0] = ENUM_TO_INT(ctx->Color.BlendDstA);
3946 break;
3947 case GL_BLEND_EQUATION:
3948 params[0] = ENUM_TO_INT(ctx->Color.BlendEquationRGB );
3949 break;
3950 case GL_BLEND_EQUATION_ALPHA_EXT:
3951 params[0] = ENUM_TO_INT(ctx->Color.BlendEquationA );
3952 break;
3953 case GL_BLEND_COLOR_EXT:
3954 params[0] = FLOAT_TO_INT(ctx->Color.BlendColor[0]);
3955 params[1] = FLOAT_TO_INT(ctx->Color.BlendColor[1]);
3956 params[2] = FLOAT_TO_INT(ctx->Color.BlendColor[2]);
3957 params[3] = FLOAT_TO_INT(ctx->Color.BlendColor[3]);
3958 break;
3959 case GL_BLUE_BIAS:
3960 params[0] = IROUND(ctx->Pixel.BlueBias);
3961 break;
3962 case GL_BLUE_BITS:
3963 if (ctx->NewState & _NEW_BUFFERS)
3964 _mesa_update_state(ctx);
3965 params[0] = ctx->DrawBuffer->Visual.blueBits;
3966 break;
3967 case GL_BLUE_SCALE:
3968 params[0] = IROUND(ctx->Pixel.BlueScale);
3969 break;
3970 case GL_CLIENT_ATTRIB_STACK_DEPTH:
3971 params[0] = ctx->ClientAttribStackDepth;
3972 break;
3973 case GL_CLIP_PLANE0:
3974 params[0] = BOOLEAN_TO_INT((ctx->Transform.ClipPlanesEnabled >> 0) & 1);
3975 break;
3976 case GL_CLIP_PLANE1:
3977 params[0] = BOOLEAN_TO_INT((ctx->Transform.ClipPlanesEnabled >> 1) & 1);
3978 break;
3979 case GL_CLIP_PLANE2:
3980 params[0] = BOOLEAN_TO_INT((ctx->Transform.ClipPlanesEnabled >> 2) & 1);
3981 break;
3982 case GL_CLIP_PLANE3:
3983 params[0] = BOOLEAN_TO_INT((ctx->Transform.ClipPlanesEnabled >> 3) & 1);
3984 break;
3985 case GL_CLIP_PLANE4:
3986 params[0] = BOOLEAN_TO_INT((ctx->Transform.ClipPlanesEnabled >> 4) & 1);
3987 break;
3988 case GL_CLIP_PLANE5:
3989 params[0] = BOOLEAN_TO_INT((ctx->Transform.ClipPlanesEnabled >> 5) & 1);
3990 break;
3991 case GL_COLOR_CLEAR_VALUE:
3992 params[0] = FLOAT_TO_INT(ctx->Color.ClearColor[0]);
3993 params[1] = FLOAT_TO_INT(ctx->Color.ClearColor[1]);
3994 params[2] = FLOAT_TO_INT(ctx->Color.ClearColor[2]);
3995 params[3] = FLOAT_TO_INT(ctx->Color.ClearColor[3]);
3996 break;
3997 case GL_COLOR_MATERIAL:
3998 params[0] = BOOLEAN_TO_INT(ctx->Light.ColorMaterialEnabled);
3999 break;
4000 case GL_COLOR_MATERIAL_FACE:
4001 params[0] = ENUM_TO_INT(ctx->Light.ColorMaterialFace);
4002 break;
4003 case GL_COLOR_MATERIAL_PARAMETER:
4004 params[0] = ENUM_TO_INT(ctx->Light.ColorMaterialMode);
4005 break;
4006 case GL_COLOR_WRITEMASK:
4007 params[0] = ctx->Color.ColorMask[0][RCOMP] ? 1 : 0;
4008 params[1] = ctx->Color.ColorMask[0][GCOMP] ? 1 : 0;
4009 params[2] = ctx->Color.ColorMask[0][BCOMP] ? 1 : 0;
4010 params[3] = ctx->Color.ColorMask[0][ACOMP] ? 1 : 0;
4011 break;
4012 case GL_CULL_FACE:
4013 params[0] = BOOLEAN_TO_INT(ctx->Polygon.CullFlag);
4014 break;
4015 case GL_CULL_FACE_MODE:
4016 params[0] = ENUM_TO_INT(ctx->Polygon.CullFaceMode);
4017 break;
4018 case GL_CURRENT_COLOR:
4019 FLUSH_CURRENT(ctx, 0);
4020 params[0] = FLOAT_TO_INT(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][0]);
4021 params[1] = FLOAT_TO_INT(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][1]);
4022 params[2] = FLOAT_TO_INT(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][2]);
4023 params[3] = FLOAT_TO_INT(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][3]);
4024 break;
4025 case GL_CURRENT_INDEX:
4026 FLUSH_CURRENT(ctx, 0);
4027 params[0] = IROUND(ctx->Current.Attrib[VERT_ATTRIB_COLOR_INDEX][0]);
4028 break;
4029 case GL_CURRENT_NORMAL:
4030 FLUSH_CURRENT(ctx, 0);
4031 params[0] = FLOAT_TO_INT(ctx->Current.Attrib[VERT_ATTRIB_NORMAL][0]);
4032 params[1] = FLOAT_TO_INT(ctx->Current.Attrib[VERT_ATTRIB_NORMAL][1]);
4033 params[2] = FLOAT_TO_INT(ctx->Current.Attrib[VERT_ATTRIB_NORMAL][2]);
4034 break;
4035 case GL_CURRENT_RASTER_COLOR:
4036 params[0] = FLOAT_TO_INT(ctx->Current.RasterColor[0]);
4037 params[1] = FLOAT_TO_INT(ctx->Current.RasterColor[1]);
4038 params[2] = FLOAT_TO_INT(ctx->Current.RasterColor[2]);
4039 params[3] = FLOAT_TO_INT(ctx->Current.RasterColor[3]);
4040 break;
4041 case GL_CURRENT_RASTER_DISTANCE:
4042 params[0] = IROUND(ctx->Current.RasterDistance);
4043 break;
4044 case GL_CURRENT_RASTER_INDEX:
4045 params[0] = IROUND(1.0);
4046 break;
4047 case GL_CURRENT_RASTER_POSITION:
4048 params[0] = IROUND(ctx->Current.RasterPos[0]);
4049 params[1] = IROUND(ctx->Current.RasterPos[1]);
4050 params[2] = IROUND(ctx->Current.RasterPos[2]);
4051 params[3] = IROUND(ctx->Current.RasterPos[3]);
4052 break;
4053 case GL_CURRENT_RASTER_SECONDARY_COLOR:
4054 params[0] = FLOAT_TO_INT(ctx->Current.RasterSecondaryColor[0]);
4055 params[1] = FLOAT_TO_INT(ctx->Current.RasterSecondaryColor[1]);
4056 params[2] = FLOAT_TO_INT(ctx->Current.RasterSecondaryColor[2]);
4057 params[3] = FLOAT_TO_INT(ctx->Current.RasterSecondaryColor[3]);
4058 break;
4059 case GL_CURRENT_RASTER_TEXTURE_COORDS:
4060 {
4061 const GLuint unit = ctx->Texture.CurrentUnit;
4062 if (unit >= ctx->Const.MaxTextureCoordUnits) {
4063 _mesa_error(ctx, GL_INVALID_OPERATION,
4064 "glGet(raster tex coords, unit %u)", unit);
4065 return;
4066 }
4067 params[0] = IROUND(ctx->Current.RasterTexCoords[unit][0]);
4068 params[1] = IROUND(ctx->Current.RasterTexCoords[unit][1]);
4069 params[2] = IROUND(ctx->Current.RasterTexCoords[unit][2]);
4070 params[3] = IROUND(ctx->Current.RasterTexCoords[unit][3]);
4071 }
4072 break;
4073 case GL_CURRENT_RASTER_POSITION_VALID:
4074 params[0] = BOOLEAN_TO_INT(ctx->Current.RasterPosValid);
4075 break;
4076 case GL_CURRENT_TEXTURE_COORDS:
4077 {
4078 const GLuint unit = ctx->Texture.CurrentUnit;
4079 if (unit >= ctx->Const.MaxTextureCoordUnits) {
4080 _mesa_error(ctx, GL_INVALID_OPERATION,
4081 "glGet(current tex coords, unit %u)", unit);
4082 return;
4083 }
4084 FLUSH_CURRENT(ctx, 0);
4085 params[0] = IROUND(ctx->Current.Attrib[VERT_ATTRIB_TEX0 + unit][0]);
4086 params[1] = IROUND(ctx->Current.Attrib[VERT_ATTRIB_TEX0 + unit][1]);
4087 params[2] = IROUND(ctx->Current.Attrib[VERT_ATTRIB_TEX0 + unit][2]);
4088 params[3] = IROUND(ctx->Current.Attrib[VERT_ATTRIB_TEX0 + unit][3]);
4089 }
4090 break;
4091 case GL_DEPTH_BIAS:
4092 params[0] = IROUND(ctx->Pixel.DepthBias);
4093 break;
4094 case GL_DEPTH_BITS:
4095 params[0] = ctx->DrawBuffer->Visual.depthBits;
4096 break;
4097 case GL_DEPTH_CLEAR_VALUE:
4098 params[0] = FLOAT_TO_INT(((GLfloat) ctx->Depth.Clear));
4099 break;
4100 case GL_DEPTH_FUNC:
4101 params[0] = ENUM_TO_INT(ctx->Depth.Func);
4102 break;
4103 case GL_DEPTH_RANGE:
4104 params[0] = FLOAT_TO_INT(ctx->Viewport.Near);
4105 params[1] = FLOAT_TO_INT(ctx->Viewport.Far);
4106 break;
4107 case GL_DEPTH_SCALE:
4108 params[0] = IROUND(ctx->Pixel.DepthScale);
4109 break;
4110 case GL_DEPTH_TEST:
4111 params[0] = BOOLEAN_TO_INT(ctx->Depth.Test);
4112 break;
4113 case GL_DEPTH_WRITEMASK:
4114 params[0] = BOOLEAN_TO_INT(ctx->Depth.Mask);
4115 break;
4116 case GL_DITHER:
4117 params[0] = BOOLEAN_TO_INT(ctx->Color.DitherFlag);
4118 break;
4119 case GL_DOUBLEBUFFER:
4120 params[0] = BOOLEAN_TO_INT(ctx->DrawBuffer->Visual.doubleBufferMode);
4121 break;
4122 case GL_DRAW_BUFFER:
4123 params[0] = ENUM_TO_INT(ctx->DrawBuffer->ColorDrawBuffer[0]);
4124 break;
4125 case GL_EDGE_FLAG:
4126 FLUSH_CURRENT(ctx, 0);
4127 params[0] = BOOLEAN_TO_INT((ctx->Current.Attrib[VERT_ATTRIB_EDGEFLAG][0] == 1.0));
4128 break;
4129 case GL_FEEDBACK_BUFFER_SIZE:
4130 params[0] = ctx->Feedback.BufferSize;
4131 break;
4132 case GL_FEEDBACK_BUFFER_TYPE:
4133 params[0] = ENUM_TO_INT(ctx->Feedback.Type);
4134 break;
4135 case GL_FOG:
4136 params[0] = BOOLEAN_TO_INT(ctx->Fog.Enabled);
4137 break;
4138 case GL_FOG_COLOR:
4139 params[0] = FLOAT_TO_INT(ctx->Fog.Color[0]);
4140 params[1] = FLOAT_TO_INT(ctx->Fog.Color[1]);
4141 params[2] = FLOAT_TO_INT(ctx->Fog.Color[2]);
4142 params[3] = FLOAT_TO_INT(ctx->Fog.Color[3]);
4143 break;
4144 case GL_FOG_DENSITY:
4145 params[0] = IROUND(ctx->Fog.Density);
4146 break;
4147 case GL_FOG_END:
4148 params[0] = IROUND(ctx->Fog.End);
4149 break;
4150 case GL_FOG_HINT:
4151 params[0] = ENUM_TO_INT(ctx->Hint.Fog);
4152 break;
4153 case GL_FOG_INDEX:
4154 params[0] = IROUND(ctx->Fog.Index);
4155 break;
4156 case GL_FOG_MODE:
4157 params[0] = ENUM_TO_INT(ctx->Fog.Mode);
4158 break;
4159 case GL_FOG_START:
4160 params[0] = IROUND(ctx->Fog.Start);
4161 break;
4162 case GL_FRONT_FACE:
4163 params[0] = ENUM_TO_INT(ctx->Polygon.FrontFace);
4164 break;
4165 case GL_GREEN_BIAS:
4166 params[0] = IROUND(ctx->Pixel.GreenBias);
4167 break;
4168 case GL_GREEN_BITS:
4169 if (ctx->NewState & _NEW_BUFFERS)
4170 _mesa_update_state(ctx);
4171 params[0] = ctx->DrawBuffer->Visual.greenBits;
4172 break;
4173 case GL_GREEN_SCALE:
4174 params[0] = IROUND(ctx->Pixel.GreenScale);
4175 break;
4176 case GL_INDEX_BITS:
4177 if (ctx->NewState & _NEW_BUFFERS)
4178 _mesa_update_state(ctx);
4179 params[0] = ctx->DrawBuffer->Visual.indexBits;
4180 break;
4181 case GL_INDEX_CLEAR_VALUE:
4182 params[0] = ctx->Color.ClearIndex;
4183 break;
4184 case GL_INDEX_MODE:
4185 params[0] = BOOLEAN_TO_INT(GL_FALSE);
4186 break;
4187 case GL_INDEX_OFFSET:
4188 params[0] = ctx->Pixel.IndexOffset;
4189 break;
4190 case GL_INDEX_SHIFT:
4191 params[0] = ctx->Pixel.IndexShift;
4192 break;
4193 case GL_INDEX_WRITEMASK:
4194 params[0] = ctx->Color.IndexMask;
4195 break;
4196 case GL_LIGHT0:
4197 params[0] = BOOLEAN_TO_INT(ctx->Light.Light[0].Enabled);
4198 break;
4199 case GL_LIGHT1:
4200 params[0] = BOOLEAN_TO_INT(ctx->Light.Light[1].Enabled);
4201 break;
4202 case GL_LIGHT2:
4203 params[0] = BOOLEAN_TO_INT(ctx->Light.Light[2].Enabled);
4204 break;
4205 case GL_LIGHT3:
4206 params[0] = BOOLEAN_TO_INT(ctx->Light.Light[3].Enabled);
4207 break;
4208 case GL_LIGHT4:
4209 params[0] = BOOLEAN_TO_INT(ctx->Light.Light[4].Enabled);
4210 break;
4211 case GL_LIGHT5:
4212 params[0] = BOOLEAN_TO_INT(ctx->Light.Light[5].Enabled);
4213 break;
4214 case GL_LIGHT6:
4215 params[0] = BOOLEAN_TO_INT(ctx->Light.Light[6].Enabled);
4216 break;
4217 case GL_LIGHT7:
4218 params[0] = BOOLEAN_TO_INT(ctx->Light.Light[7].Enabled);
4219 break;
4220 case GL_LIGHTING:
4221 params[0] = BOOLEAN_TO_INT(ctx->Light.Enabled);
4222 break;
4223 case GL_LIGHT_MODEL_AMBIENT:
4224 params[0] = FLOAT_TO_INT(ctx->Light.Model.Ambient[0]);
4225 params[1] = FLOAT_TO_INT(ctx->Light.Model.Ambient[1]);
4226 params[2] = FLOAT_TO_INT(ctx->Light.Model.Ambient[2]);
4227 params[3] = FLOAT_TO_INT(ctx->Light.Model.Ambient[3]);
4228 break;
4229 case GL_LIGHT_MODEL_COLOR_CONTROL:
4230 params[0] = ENUM_TO_INT(ctx->Light.Model.ColorControl);
4231 break;
4232 case GL_LIGHT_MODEL_LOCAL_VIEWER:
4233 params[0] = BOOLEAN_TO_INT(ctx->Light.Model.LocalViewer);
4234 break;
4235 case GL_LIGHT_MODEL_TWO_SIDE:
4236 params[0] = BOOLEAN_TO_INT(ctx->Light.Model.TwoSide);
4237 break;
4238 case GL_LINE_SMOOTH:
4239 params[0] = BOOLEAN_TO_INT(ctx->Line.SmoothFlag);
4240 break;
4241 case GL_LINE_SMOOTH_HINT:
4242 params[0] = ENUM_TO_INT(ctx->Hint.LineSmooth);
4243 break;
4244 case GL_LINE_STIPPLE:
4245 params[0] = BOOLEAN_TO_INT(ctx->Line.StippleFlag);
4246 break;
4247 case GL_LINE_STIPPLE_PATTERN:
4248 params[0] = ctx->Line.StipplePattern;
4249 break;
4250 case GL_LINE_STIPPLE_REPEAT:
4251 params[0] = ctx->Line.StippleFactor;
4252 break;
4253 case GL_LINE_WIDTH:
4254 params[0] = IROUND(ctx->Line.Width);
4255 break;
4256 case GL_LINE_WIDTH_GRANULARITY:
4257 params[0] = IROUND(ctx->Const.LineWidthGranularity);
4258 break;
4259 case GL_LINE_WIDTH_RANGE:
4260 params[0] = IROUND(ctx->Const.MinLineWidthAA);
4261 params[1] = IROUND(ctx->Const.MaxLineWidthAA);
4262 break;
4263 case GL_ALIASED_LINE_WIDTH_RANGE:
4264 params[0] = IROUND(ctx->Const.MinLineWidth);
4265 params[1] = IROUND(ctx->Const.MaxLineWidth);
4266 break;
4267 case GL_LIST_BASE:
4268 params[0] = ctx->List.ListBase;
4269 break;
4270 case GL_LIST_INDEX:
4271 params[0] = (ctx->ListState.CurrentList ? ctx->ListState.CurrentList->Name : 0);
4272 break;
4273 case GL_LIST_MODE:
4274 {
4275 GLenum mode;
4276 if (!ctx->CompileFlag)
4277 mode = 0;
4278 else if (ctx->ExecuteFlag)
4279 mode = GL_COMPILE_AND_EXECUTE;
4280 else
4281 mode = GL_COMPILE;
4282 params[0] = ENUM_TO_INT(mode);
4283 }
4284 break;
4285 case GL_INDEX_LOGIC_OP:
4286 params[0] = BOOLEAN_TO_INT(ctx->Color.IndexLogicOpEnabled);
4287 break;
4288 case GL_COLOR_LOGIC_OP:
4289 params[0] = BOOLEAN_TO_INT(ctx->Color.ColorLogicOpEnabled);
4290 break;
4291 case GL_LOGIC_OP_MODE:
4292 params[0] = ENUM_TO_INT(ctx->Color.LogicOp);
4293 break;
4294 case GL_MAP1_COLOR_4:
4295 params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Color4);
4296 break;
4297 case GL_MAP1_GRID_DOMAIN:
4298 params[0] = IROUND(ctx->Eval.MapGrid1u1);
4299 params[1] = IROUND(ctx->Eval.MapGrid1u2);
4300 break;
4301 case GL_MAP1_GRID_SEGMENTS:
4302 params[0] = ctx->Eval.MapGrid1un;
4303 break;
4304 case GL_MAP1_INDEX:
4305 params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Index);
4306 break;
4307 case GL_MAP1_NORMAL:
4308 params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Normal);
4309 break;
4310 case GL_MAP1_TEXTURE_COORD_1:
4311 params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1TextureCoord1);
4312 break;
4313 case GL_MAP1_TEXTURE_COORD_2:
4314 params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1TextureCoord2);
4315 break;
4316 case GL_MAP1_TEXTURE_COORD_3:
4317 params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1TextureCoord3);
4318 break;
4319 case GL_MAP1_TEXTURE_COORD_4:
4320 params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1TextureCoord4);
4321 break;
4322 case GL_MAP1_VERTEX_3:
4323 params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Vertex3);
4324 break;
4325 case GL_MAP1_VERTEX_4:
4326 params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Vertex4);
4327 break;
4328 case GL_MAP2_COLOR_4:
4329 params[0] = BOOLEAN_TO_INT(ctx->Eval.Map2Color4);
4330 break;
4331 case GL_MAP2_GRID_DOMAIN:
4332 params[0] = IROUND(ctx->Eval.MapGrid2u1);
4333 params[1] = IROUND(ctx->Eval.MapGrid2u2);
4334 params[2] = IROUND(ctx->Eval.MapGrid2v1);
4335 params[3] = IROUND(ctx->Eval.MapGrid2v2);
4336 break;
4337 case GL_MAP2_GRID_SEGMENTS:
4338 params[0] = ctx->Eval.MapGrid2un;
4339 params[1] = ctx->Eval.MapGrid2vn;
4340 break;
4341 case GL_MAP2_INDEX:
4342 params[0] = BOOLEAN_TO_INT(ctx->Eval.Map2Index);
4343 break;
4344 case GL_MAP2_NORMAL:
4345 params[0] = BOOLEAN_TO_INT(ctx->Eval.Map2Normal);
4346 break;
4347 case GL_MAP2_TEXTURE_COORD_1:
4348 params[0] = BOOLEAN_TO_INT(ctx->Eval.Map2TextureCoord1);
4349 break;
4350 case GL_MAP2_TEXTURE_COORD_2:
4351 params[0] = BOOLEAN_TO_INT(ctx->Eval.Map2TextureCoord2);
4352 break;
4353 case GL_MAP2_TEXTURE_COORD_3:
4354 params[0] = BOOLEAN_TO_INT(ctx->Eval.Map2TextureCoord3);
4355 break;
4356 case GL_MAP2_TEXTURE_COORD_4:
4357 params[0] = BOOLEAN_TO_INT(ctx->Eval.Map2TextureCoord4);
4358 break;
4359 case GL_MAP2_VERTEX_3:
4360 params[0] = BOOLEAN_TO_INT(ctx->Eval.Map2Vertex3);
4361 break;
4362 case GL_MAP2_VERTEX_4:
4363 params[0] = BOOLEAN_TO_INT(ctx->Eval.Map2Vertex4);
4364 break;
4365 case GL_MAP_COLOR:
4366 params[0] = BOOLEAN_TO_INT(ctx->Pixel.MapColorFlag);
4367 break;
4368 case GL_MAP_STENCIL:
4369 params[0] = BOOLEAN_TO_INT(ctx->Pixel.MapStencilFlag);
4370 break;
4371 case GL_MATRIX_MODE:
4372 params[0] = ENUM_TO_INT(ctx->Transform.MatrixMode);
4373 break;
4374 case GL_MAX_ATTRIB_STACK_DEPTH:
4375 params[0] = MAX_ATTRIB_STACK_DEPTH;
4376 break;
4377 case GL_MAX_CLIENT_ATTRIB_STACK_DEPTH:
4378 params[0] = MAX_CLIENT_ATTRIB_STACK_DEPTH;
4379 break;
4380 case GL_MAX_CLIP_PLANES:
4381 params[0] = ctx->Const.MaxClipPlanes;
4382 break;
4383 case GL_MAX_ELEMENTS_VERTICES:
4384 params[0] = ctx->Const.MaxArrayLockSize;
4385 break;
4386 case GL_MAX_ELEMENTS_INDICES:
4387 params[0] = ctx->Const.MaxArrayLockSize;
4388 break;
4389 case GL_MAX_EVAL_ORDER:
4390 params[0] = MAX_EVAL_ORDER;
4391 break;
4392 case GL_MAX_LIGHTS:
4393 params[0] = ctx->Const.MaxLights;
4394 break;
4395 case GL_MAX_LIST_NESTING:
4396 params[0] = MAX_LIST_NESTING;
4397 break;
4398 case GL_MAX_MODELVIEW_STACK_DEPTH:
4399 params[0] = MAX_MODELVIEW_STACK_DEPTH;
4400 break;
4401 case GL_MAX_NAME_STACK_DEPTH:
4402 params[0] = MAX_NAME_STACK_DEPTH;
4403 break;
4404 case GL_MAX_PIXEL_MAP_TABLE:
4405 params[0] = MAX_PIXEL_MAP_TABLE;
4406 break;
4407 case GL_MAX_PROJECTION_STACK_DEPTH:
4408 params[0] = MAX_PROJECTION_STACK_DEPTH;
4409 break;
4410 case GL_MAX_TEXTURE_SIZE:
4411 params[0] = 1 << (ctx->Const.MaxTextureLevels - 1);
4412 break;
4413 case GL_MAX_3D_TEXTURE_SIZE:
4414 params[0] = 1 << (ctx->Const.Max3DTextureLevels - 1);
4415 break;
4416 case GL_MAX_TEXTURE_STACK_DEPTH:
4417 params[0] = MAX_TEXTURE_STACK_DEPTH;
4418 break;
4419 case GL_MAX_VIEWPORT_DIMS:
4420 params[0] = ctx->Const.MaxViewportWidth;
4421 params[1] = ctx->Const.MaxViewportHeight;
4422 break;
4423 case GL_MODELVIEW_MATRIX:
4424 {
4425 const GLfloat *matrix = ctx->ModelviewMatrixStack.Top->m;
4426 params[0] = IROUND(matrix[0]);
4427 params[1] = IROUND(matrix[1]);
4428 params[2] = IROUND(matrix[2]);
4429 params[3] = IROUND(matrix[3]);
4430 params[4] = IROUND(matrix[4]);
4431 params[5] = IROUND(matrix[5]);
4432 params[6] = IROUND(matrix[6]);
4433 params[7] = IROUND(matrix[7]);
4434 params[8] = IROUND(matrix[8]);
4435 params[9] = IROUND(matrix[9]);
4436 params[10] = IROUND(matrix[10]);
4437 params[11] = IROUND(matrix[11]);
4438 params[12] = IROUND(matrix[12]);
4439 params[13] = IROUND(matrix[13]);
4440 params[14] = IROUND(matrix[14]);
4441 params[15] = IROUND(matrix[15]);
4442 }
4443 break;
4444 case GL_MODELVIEW_STACK_DEPTH:
4445 params[0] = ctx->ModelviewMatrixStack.Depth + 1;
4446 break;
4447 case GL_NAME_STACK_DEPTH:
4448 params[0] = ctx->Select.NameStackDepth;
4449 break;
4450 case GL_NORMALIZE:
4451 params[0] = BOOLEAN_TO_INT(ctx->Transform.Normalize);
4452 break;
4453 case GL_PACK_ALIGNMENT:
4454 params[0] = ctx->Pack.Alignment;
4455 break;
4456 case GL_PACK_LSB_FIRST:
4457 params[0] = BOOLEAN_TO_INT(ctx->Pack.LsbFirst);
4458 break;
4459 case GL_PACK_ROW_LENGTH:
4460 params[0] = ctx->Pack.RowLength;
4461 break;
4462 case GL_PACK_SKIP_PIXELS:
4463 params[0] = ctx->Pack.SkipPixels;
4464 break;
4465 case GL_PACK_SKIP_ROWS:
4466 params[0] = ctx->Pack.SkipRows;
4467 break;
4468 case GL_PACK_SWAP_BYTES:
4469 params[0] = BOOLEAN_TO_INT(ctx->Pack.SwapBytes);
4470 break;
4471 case GL_PACK_SKIP_IMAGES_EXT:
4472 params[0] = ctx->Pack.SkipImages;
4473 break;
4474 case GL_PACK_IMAGE_HEIGHT_EXT:
4475 params[0] = ctx->Pack.ImageHeight;
4476 break;
4477 case GL_PACK_INVERT_MESA:
4478 params[0] = BOOLEAN_TO_INT(ctx->Pack.Invert);
4479 break;
4480 case GL_PERSPECTIVE_CORRECTION_HINT:
4481 params[0] = ENUM_TO_INT(ctx->Hint.PerspectiveCorrection);
4482 break;
4483 case GL_PIXEL_MAP_A_TO_A_SIZE:
4484 params[0] = ctx->PixelMaps.AtoA.Size;
4485 break;
4486 case GL_PIXEL_MAP_B_TO_B_SIZE:
4487 params[0] = ctx->PixelMaps.BtoB.Size;
4488 break;
4489 case GL_PIXEL_MAP_G_TO_G_SIZE:
4490 params[0] = ctx->PixelMaps.GtoG.Size;
4491 break;
4492 case GL_PIXEL_MAP_I_TO_A_SIZE:
4493 params[0] = ctx->PixelMaps.ItoA.Size;
4494 break;
4495 case GL_PIXEL_MAP_I_TO_B_SIZE:
4496 params[0] = ctx->PixelMaps.ItoB.Size;
4497 break;
4498 case GL_PIXEL_MAP_I_TO_G_SIZE:
4499 params[0] = ctx->PixelMaps.ItoG.Size;
4500 break;
4501 case GL_PIXEL_MAP_I_TO_I_SIZE:
4502 params[0] = ctx->PixelMaps.ItoI.Size;
4503 break;
4504 case GL_PIXEL_MAP_I_TO_R_SIZE:
4505 params[0] = ctx->PixelMaps.ItoR.Size;
4506 break;
4507 case GL_PIXEL_MAP_R_TO_R_SIZE:
4508 params[0] = ctx->PixelMaps.RtoR.Size;
4509 break;
4510 case GL_PIXEL_MAP_S_TO_S_SIZE:
4511 params[0] = ctx->PixelMaps.StoS.Size;
4512 break;
4513 case GL_POINT_SIZE:
4514 params[0] = IROUND(ctx->Point.Size);
4515 break;
4516 case GL_POINT_SIZE_GRANULARITY:
4517 params[0] = IROUND(ctx->Const.PointSizeGranularity);
4518 break;
4519 case GL_POINT_SIZE_RANGE:
4520 params[0] = IROUND(ctx->Const.MinPointSizeAA);
4521 params[1] = IROUND(ctx->Const.MaxPointSizeAA);
4522 break;
4523 case GL_ALIASED_POINT_SIZE_RANGE:
4524 params[0] = IROUND(ctx->Const.MinPointSize);
4525 params[1] = IROUND(ctx->Const.MaxPointSize);
4526 break;
4527 case GL_POINT_SMOOTH:
4528 params[0] = BOOLEAN_TO_INT(ctx->Point.SmoothFlag);
4529 break;
4530 case GL_POINT_SMOOTH_HINT:
4531 params[0] = ENUM_TO_INT(ctx->Hint.PointSmooth);
4532 break;
4533 case GL_POINT_SIZE_MIN_EXT:
4534 params[0] = IROUND(ctx->Point.MinSize);
4535 break;
4536 case GL_POINT_SIZE_MAX_EXT:
4537 params[0] = IROUND(ctx->Point.MaxSize);
4538 break;
4539 case GL_POINT_FADE_THRESHOLD_SIZE_EXT:
4540 params[0] = IROUND(ctx->Point.Threshold);
4541 break;
4542 case GL_DISTANCE_ATTENUATION_EXT:
4543 params[0] = IROUND(ctx->Point.Params[0]);
4544 params[1] = IROUND(ctx->Point.Params[1]);
4545 params[2] = IROUND(ctx->Point.Params[2]);
4546 break;
4547 case GL_POLYGON_MODE:
4548 params[0] = ENUM_TO_INT(ctx->Polygon.FrontMode);
4549 params[1] = ENUM_TO_INT(ctx->Polygon.BackMode);
4550 break;
4551 case GL_POLYGON_OFFSET_BIAS_EXT:
4552 params[0] = IROUND(ctx->Polygon.OffsetUnits);
4553 break;
4554 case GL_POLYGON_OFFSET_FACTOR:
4555 params[0] = IROUND(ctx->Polygon.OffsetFactor );
4556 break;
4557 case GL_POLYGON_OFFSET_UNITS:
4558 params[0] = IROUND(ctx->Polygon.OffsetUnits );
4559 break;
4560 case GL_POLYGON_OFFSET_POINT:
4561 params[0] = BOOLEAN_TO_INT(ctx->Polygon.OffsetPoint);
4562 break;
4563 case GL_POLYGON_OFFSET_LINE:
4564 params[0] = BOOLEAN_TO_INT(ctx->Polygon.OffsetLine);
4565 break;
4566 case GL_POLYGON_OFFSET_FILL:
4567 params[0] = BOOLEAN_TO_INT(ctx->Polygon.OffsetFill);
4568 break;
4569 case GL_POLYGON_SMOOTH:
4570 params[0] = BOOLEAN_TO_INT(ctx->Polygon.SmoothFlag);
4571 break;
4572 case GL_POLYGON_SMOOTH_HINT:
4573 params[0] = ENUM_TO_INT(ctx->Hint.PolygonSmooth);
4574 break;
4575 case GL_POLYGON_STIPPLE:
4576 params[0] = BOOLEAN_TO_INT(ctx->Polygon.StippleFlag);
4577 break;
4578 case GL_PROJECTION_MATRIX:
4579 {
4580 const GLfloat *matrix = ctx->ProjectionMatrixStack.Top->m;
4581 params[0] = IROUND(matrix[0]);
4582 params[1] = IROUND(matrix[1]);
4583 params[2] = IROUND(matrix[2]);
4584 params[3] = IROUND(matrix[3]);
4585 params[4] = IROUND(matrix[4]);
4586 params[5] = IROUND(matrix[5]);
4587 params[6] = IROUND(matrix[6]);
4588 params[7] = IROUND(matrix[7]);
4589 params[8] = IROUND(matrix[8]);
4590 params[9] = IROUND(matrix[9]);
4591 params[10] = IROUND(matrix[10]);
4592 params[11] = IROUND(matrix[11]);
4593 params[12] = IROUND(matrix[12]);
4594 params[13] = IROUND(matrix[13]);
4595 params[14] = IROUND(matrix[14]);
4596 params[15] = IROUND(matrix[15]);
4597 }
4598 break;
4599 case GL_PROJECTION_STACK_DEPTH:
4600 params[0] = ctx->ProjectionMatrixStack.Depth + 1;
4601 break;
4602 case GL_READ_BUFFER:
4603 params[0] = ENUM_TO_INT(ctx->ReadBuffer->ColorReadBuffer);
4604 break;
4605 case GL_RED_BIAS:
4606 params[0] = IROUND(ctx->Pixel.RedBias);
4607 break;
4608 case GL_RED_BITS:
4609 if (ctx->NewState & _NEW_BUFFERS)
4610 _mesa_update_state(ctx);
4611 params[0] = ctx->DrawBuffer->Visual.redBits;
4612 break;
4613 case GL_RED_SCALE:
4614 params[0] = IROUND(ctx->Pixel.RedScale);
4615 break;
4616 case GL_RENDER_MODE:
4617 params[0] = ENUM_TO_INT(ctx->RenderMode);
4618 break;
4619 case GL_RESCALE_NORMAL:
4620 params[0] = BOOLEAN_TO_INT(ctx->Transform.RescaleNormals);
4621 break;
4622 case GL_RGBA_MODE:
4623 params[0] = BOOLEAN_TO_INT(GL_TRUE);
4624 break;
4625 case GL_SCISSOR_BOX:
4626 params[0] = ctx->Scissor.X;
4627 params[1] = ctx->Scissor.Y;
4628 params[2] = ctx->Scissor.Width;
4629 params[3] = ctx->Scissor.Height;
4630 break;
4631 case GL_SCISSOR_TEST:
4632 params[0] = BOOLEAN_TO_INT(ctx->Scissor.Enabled);
4633 break;
4634 case GL_SELECTION_BUFFER_SIZE:
4635 params[0] = ctx->Select.BufferSize;
4636 break;
4637 case GL_SHADE_MODEL:
4638 params[0] = ENUM_TO_INT(ctx->Light.ShadeModel);
4639 break;
4640 case GL_SHARED_TEXTURE_PALETTE_EXT:
4641 params[0] = BOOLEAN_TO_INT(ctx->Texture.SharedPalette);
4642 break;
4643 case GL_STENCIL_BITS:
4644 params[0] = ctx->DrawBuffer->Visual.stencilBits;
4645 break;
4646 case GL_STENCIL_CLEAR_VALUE:
4647 params[0] = ctx->Stencil.Clear;
4648 break;
4649 case GL_STENCIL_FAIL:
4650 params[0] = ENUM_TO_INT(ctx->Stencil.FailFunc[ctx->Stencil.ActiveFace]);
4651 break;
4652 case GL_STENCIL_FUNC:
4653 params[0] = ENUM_TO_INT(ctx->Stencil.Function[ctx->Stencil.ActiveFace]);
4654 break;
4655 case GL_STENCIL_PASS_DEPTH_FAIL:
4656 params[0] = ENUM_TO_INT(ctx->Stencil.ZFailFunc[ctx->Stencil.ActiveFace]);
4657 break;
4658 case GL_STENCIL_PASS_DEPTH_PASS:
4659 params[0] = ENUM_TO_INT(ctx->Stencil.ZPassFunc[ctx->Stencil.ActiveFace]);
4660 break;
4661 case GL_STENCIL_REF:
4662 params[0] = ctx->Stencil.Ref[ctx->Stencil.ActiveFace];
4663 break;
4664 case GL_STENCIL_TEST:
4665 params[0] = BOOLEAN_TO_INT(ctx->Stencil.Enabled);
4666 break;
4667 case GL_STENCIL_VALUE_MASK:
4668 params[0] = ctx->Stencil.ValueMask[ctx->Stencil.ActiveFace];
4669 break;
4670 case GL_STENCIL_WRITEMASK:
4671 params[0] = ctx->Stencil.WriteMask[ctx->Stencil.ActiveFace];
4672 break;
4673 case GL_STEREO:
4674 params[0] = BOOLEAN_TO_INT(ctx->DrawBuffer->Visual.stereoMode);
4675 break;
4676 case GL_SUBPIXEL_BITS:
4677 params[0] = ctx->Const.SubPixelBits;
4678 break;
4679 case GL_TEXTURE_1D:
4680 params[0] = BOOLEAN_TO_INT(_mesa_IsEnabled(GL_TEXTURE_1D));
4681 break;
4682 case GL_TEXTURE_2D:
4683 params[0] = BOOLEAN_TO_INT(_mesa_IsEnabled(GL_TEXTURE_2D));
4684 break;
4685 case GL_TEXTURE_3D:
4686 params[0] = BOOLEAN_TO_INT(_mesa_IsEnabled(GL_TEXTURE_3D));
4687 break;
4688 case GL_TEXTURE_1D_ARRAY_EXT:
4689 CHECK_EXT1(MESA_texture_array);
4690 params[0] = BOOLEAN_TO_INT(_mesa_IsEnabled(GL_TEXTURE_1D_ARRAY_EXT));
4691 break;
4692 case GL_TEXTURE_2D_ARRAY_EXT:
4693 CHECK_EXT1(MESA_texture_array);
4694 params[0] = BOOLEAN_TO_INT(_mesa_IsEnabled(GL_TEXTURE_2D_ARRAY_EXT));
4695 break;
4696 case GL_TEXTURE_BINDING_1D:
4697 params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_INDEX]->Name;
4698 break;
4699 case GL_TEXTURE_BINDING_2D:
4700 params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_INDEX]->Name;
4701 break;
4702 case GL_TEXTURE_BINDING_3D:
4703 params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_3D_INDEX]->Name;
4704 break;
4705 case GL_TEXTURE_BINDING_1D_ARRAY_EXT:
4706 CHECK_EXT1(MESA_texture_array);
4707 params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_ARRAY_INDEX]->Name;
4708 break;
4709 case GL_TEXTURE_BINDING_2D_ARRAY_EXT:
4710 CHECK_EXT1(MESA_texture_array);
4711 params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_ARRAY_INDEX]->Name;
4712 break;
4713 case GL_MAX_ARRAY_TEXTURE_LAYERS_EXT:
4714 CHECK_EXT1(MESA_texture_array);
4715 params[0] = ctx->Const.MaxArrayTextureLayers;
4716 break;
4717 case GL_TEXTURE_GEN_S:
4718 params[0] = BOOLEAN_TO_INT(((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & S_BIT) ? 1 : 0));
4719 break;
4720 case GL_TEXTURE_GEN_T:
4721 params[0] = BOOLEAN_TO_INT(((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & T_BIT) ? 1 : 0));
4722 break;
4723 case GL_TEXTURE_GEN_R:
4724 params[0] = BOOLEAN_TO_INT(((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & R_BIT) ? 1 : 0));
4725 break;
4726 case GL_TEXTURE_GEN_Q:
4727 params[0] = BOOLEAN_TO_INT(((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & Q_BIT) ? 1 : 0));
4728 break;
4729 case GL_TEXTURE_MATRIX:
4730 {
4731 const GLfloat *matrix;
4732 const GLuint unit = ctx->Texture.CurrentUnit;
4733 if (unit >= ctx->Const.MaxTextureCoordUnits) {
4734 _mesa_error(ctx, GL_INVALID_OPERATION, "glGet(texture matrix %u)",
4735 unit);
4736 return;
4737 }
4738 matrix = ctx->TextureMatrixStack[unit].Top->m;
4739 params[0] = IROUND(matrix[0]);
4740 params[1] = IROUND(matrix[1]);
4741 params[2] = IROUND(matrix[2]);
4742 params[3] = IROUND(matrix[3]);
4743 params[4] = IROUND(matrix[4]);
4744 params[5] = IROUND(matrix[5]);
4745 params[6] = IROUND(matrix[6]);
4746 params[7] = IROUND(matrix[7]);
4747 params[8] = IROUND(matrix[8]);
4748 params[9] = IROUND(matrix[9]);
4749 params[10] = IROUND(matrix[10]);
4750 params[11] = IROUND(matrix[11]);
4751 params[12] = IROUND(matrix[12]);
4752 params[13] = IROUND(matrix[13]);
4753 params[14] = IROUND(matrix[14]);
4754 params[15] = IROUND(matrix[15]);
4755 }
4756 break;
4757 case GL_TEXTURE_STACK_DEPTH:
4758 {
4759 const GLuint unit = ctx->Texture.CurrentUnit;
4760 if (unit >= ctx->Const.MaxTextureCoordUnits) {
4761 _mesa_error(ctx, GL_INVALID_OPERATION,
4762 "glGet(texture stack depth, unit %u)", unit);
4763 return;
4764 }
4765 params[0] = ctx->TextureMatrixStack[unit].Depth + 1;
4766 }
4767 break;
4768 case GL_UNPACK_ALIGNMENT:
4769 params[0] = ctx->Unpack.Alignment;
4770 break;
4771 case GL_UNPACK_LSB_FIRST:
4772 params[0] = BOOLEAN_TO_INT(ctx->Unpack.LsbFirst);
4773 break;
4774 case GL_UNPACK_ROW_LENGTH:
4775 params[0] = ctx->Unpack.RowLength;
4776 break;
4777 case GL_UNPACK_SKIP_PIXELS:
4778 params[0] = ctx->Unpack.SkipPixels;
4779 break;
4780 case GL_UNPACK_SKIP_ROWS:
4781 params[0] = ctx->Unpack.SkipRows;
4782 break;
4783 case GL_UNPACK_SWAP_BYTES:
4784 params[0] = BOOLEAN_TO_INT(ctx->Unpack.SwapBytes);
4785 break;
4786 case GL_UNPACK_SKIP_IMAGES_EXT:
4787 params[0] = ctx->Unpack.SkipImages;
4788 break;
4789 case GL_UNPACK_IMAGE_HEIGHT_EXT:
4790 params[0] = ctx->Unpack.ImageHeight;
4791 break;
4792 case GL_UNPACK_CLIENT_STORAGE_APPLE:
4793 params[0] = BOOLEAN_TO_INT(ctx->Unpack.ClientStorage);
4794 break;
4795 case GL_VIEWPORT:
4796 params[0] = ctx->Viewport.X;
4797 params[1] = ctx->Viewport.Y;
4798 params[2] = ctx->Viewport.Width;
4799 params[3] = ctx->Viewport.Height;
4800 break;
4801 case GL_ZOOM_X:
4802 params[0] = IROUND(ctx->Pixel.ZoomX);
4803 break;
4804 case GL_ZOOM_Y:
4805 params[0] = IROUND(ctx->Pixel.ZoomY);
4806 break;
4807 case GL_VERTEX_ARRAY:
4808 params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->Vertex.Enabled);
4809 break;
4810 case GL_VERTEX_ARRAY_SIZE:
4811 params[0] = ctx->Array.ArrayObj->Vertex.Size;
4812 break;
4813 case GL_VERTEX_ARRAY_TYPE:
4814 params[0] = ENUM_TO_INT(ctx->Array.ArrayObj->Vertex.Type);
4815 break;
4816 case GL_VERTEX_ARRAY_STRIDE:
4817 params[0] = ctx->Array.ArrayObj->Vertex.Stride;
4818 break;
4819 case GL_VERTEX_ARRAY_COUNT_EXT:
4820 params[0] = 0;
4821 break;
4822 case GL_NORMAL_ARRAY:
4823 params[0] = ENUM_TO_INT(ctx->Array.ArrayObj->Normal.Enabled);
4824 break;
4825 case GL_NORMAL_ARRAY_TYPE:
4826 params[0] = ENUM_TO_INT(ctx->Array.ArrayObj->Normal.Type);
4827 break;
4828 case GL_NORMAL_ARRAY_STRIDE:
4829 params[0] = ctx->Array.ArrayObj->Normal.Stride;
4830 break;
4831 case GL_NORMAL_ARRAY_COUNT_EXT:
4832 params[0] = 0;
4833 break;
4834 case GL_COLOR_ARRAY:
4835 params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->Color.Enabled);
4836 break;
4837 case GL_COLOR_ARRAY_SIZE:
4838 params[0] = ctx->Array.ArrayObj->Color.Size;
4839 break;
4840 case GL_COLOR_ARRAY_TYPE:
4841 params[0] = ENUM_TO_INT(ctx->Array.ArrayObj->Color.Type);
4842 break;
4843 case GL_COLOR_ARRAY_STRIDE:
4844 params[0] = ctx->Array.ArrayObj->Color.Stride;
4845 break;
4846 case GL_COLOR_ARRAY_COUNT_EXT:
4847 params[0] = 0;
4848 break;
4849 case GL_INDEX_ARRAY:
4850 params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->Index.Enabled);
4851 break;
4852 case GL_INDEX_ARRAY_TYPE:
4853 params[0] = ENUM_TO_INT(ctx->Array.ArrayObj->Index.Type);
4854 break;
4855 case GL_INDEX_ARRAY_STRIDE:
4856 params[0] = ctx->Array.ArrayObj->Index.Stride;
4857 break;
4858 case GL_INDEX_ARRAY_COUNT_EXT:
4859 params[0] = 0;
4860 break;
4861 case GL_TEXTURE_COORD_ARRAY:
4862 params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Enabled);
4863 break;
4864 case GL_TEXTURE_COORD_ARRAY_SIZE:
4865 params[0] = ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Size;
4866 break;
4867 case GL_TEXTURE_COORD_ARRAY_TYPE:
4868 params[0] = ENUM_TO_INT(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Type);
4869 break;
4870 case GL_TEXTURE_COORD_ARRAY_STRIDE:
4871 params[0] = ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Stride;
4872 break;
4873 case GL_TEXTURE_COORD_ARRAY_COUNT_EXT:
4874 params[0] = 0;
4875 break;
4876 case GL_EDGE_FLAG_ARRAY:
4877 params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->EdgeFlag.Enabled);
4878 break;
4879 case GL_EDGE_FLAG_ARRAY_STRIDE:
4880 params[0] = ctx->Array.ArrayObj->EdgeFlag.Stride;
4881 break;
4882 case GL_EDGE_FLAG_ARRAY_COUNT_EXT:
4883 params[0] = 0;
4884 break;
4885 case GL_MAX_TEXTURE_UNITS_ARB:
4886 CHECK_EXT1(ARB_multitexture);
4887 params[0] = ctx->Const.MaxTextureUnits;
4888 break;
4889 case GL_ACTIVE_TEXTURE_ARB:
4890 CHECK_EXT1(ARB_multitexture);
4891 params[0] = GL_TEXTURE0_ARB + ctx->Texture.CurrentUnit;
4892 break;
4893 case GL_CLIENT_ACTIVE_TEXTURE_ARB:
4894 CHECK_EXT1(ARB_multitexture);
4895 params[0] = GL_TEXTURE0_ARB + ctx->Array.ActiveTexture;
4896 break;
4897 case GL_TEXTURE_CUBE_MAP_ARB:
4898 CHECK_EXT1(ARB_texture_cube_map);
4899 params[0] = BOOLEAN_TO_INT(_mesa_IsEnabled(GL_TEXTURE_CUBE_MAP_ARB));
4900 break;
4901 case GL_TEXTURE_BINDING_CUBE_MAP_ARB:
4902 CHECK_EXT1(ARB_texture_cube_map);
4903 params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_CUBE_INDEX]->Name;
4904 break;
4905 case GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB:
4906 CHECK_EXT1(ARB_texture_cube_map);
4907 params[0] = (1 << (ctx->Const.MaxCubeTextureLevels - 1));
4908 break;
4909 case GL_TEXTURE_COMPRESSION_HINT_ARB:
4910 params[0] = ctx->Hint.TextureCompression;
4911 break;
4912 case GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB:
4913 params[0] = _mesa_get_compressed_formats(ctx, NULL, GL_FALSE);
4914 break;
4915 case GL_COMPRESSED_TEXTURE_FORMATS_ARB:
4916 {
4917 GLint formats[100];
4918 GLuint i, n = _mesa_get_compressed_formats(ctx, formats, GL_FALSE);
4919 ASSERT(n <= 100);
4920 for (i = 0; i < n; i++)
4921 params[i] = ENUM_TO_INT(formats[i]);
4922 }
4923 break;
4924 case GL_ARRAY_ELEMENT_LOCK_FIRST_EXT:
4925 CHECK_EXT1(EXT_compiled_vertex_array);
4926 params[0] = ctx->Array.LockFirst;
4927 break;
4928 case GL_ARRAY_ELEMENT_LOCK_COUNT_EXT:
4929 CHECK_EXT1(EXT_compiled_vertex_array);
4930 params[0] = ctx->Array.LockCount;
4931 break;
4932 case GL_TRANSPOSE_COLOR_MATRIX_ARB:
4933 {
4934 const GLfloat *matrix = ctx->ColorMatrixStack.Top->m;
4935 params[0] = IROUND(matrix[0]);
4936 params[1] = IROUND(matrix[4]);
4937 params[2] = IROUND(matrix[8]);
4938 params[3] = IROUND(matrix[12]);
4939 params[4] = IROUND(matrix[1]);
4940 params[5] = IROUND(matrix[5]);
4941 params[6] = IROUND(matrix[9]);
4942 params[7] = IROUND(matrix[13]);
4943 params[8] = IROUND(matrix[2]);
4944 params[9] = IROUND(matrix[6]);
4945 params[10] = IROUND(matrix[10]);
4946 params[11] = IROUND(matrix[14]);
4947 params[12] = IROUND(matrix[3]);
4948 params[13] = IROUND(matrix[7]);
4949 params[14] = IROUND(matrix[11]);
4950 params[15] = IROUND(matrix[15]);
4951 }
4952 break;
4953 case GL_TRANSPOSE_MODELVIEW_MATRIX_ARB:
4954 {
4955 const GLfloat *matrix = ctx->ModelviewMatrixStack.Top->m;
4956 params[0] = IROUND(matrix[0]);
4957 params[1] = IROUND(matrix[4]);
4958 params[2] = IROUND(matrix[8]);
4959 params[3] = IROUND(matrix[12]);
4960 params[4] = IROUND(matrix[1]);
4961 params[5] = IROUND(matrix[5]);
4962 params[6] = IROUND(matrix[9]);
4963 params[7] = IROUND(matrix[13]);
4964 params[8] = IROUND(matrix[2]);
4965 params[9] = IROUND(matrix[6]);
4966 params[10] = IROUND(matrix[10]);
4967 params[11] = IROUND(matrix[14]);
4968 params[12] = IROUND(matrix[3]);
4969 params[13] = IROUND(matrix[7]);
4970 params[14] = IROUND(matrix[11]);
4971 params[15] = IROUND(matrix[15]);
4972 }
4973 break;
4974 case GL_TRANSPOSE_PROJECTION_MATRIX_ARB:
4975 {
4976 const GLfloat *matrix = ctx->ProjectionMatrixStack.Top->m;
4977 params[0] = IROUND(matrix[0]);
4978 params[1] = IROUND(matrix[4]);
4979 params[2] = IROUND(matrix[8]);
4980 params[3] = IROUND(matrix[12]);
4981 params[4] = IROUND(matrix[1]);
4982 params[5] = IROUND(matrix[5]);
4983 params[6] = IROUND(matrix[9]);
4984 params[7] = IROUND(matrix[13]);
4985 params[8] = IROUND(matrix[2]);
4986 params[9] = IROUND(matrix[6]);
4987 params[10] = IROUND(matrix[10]);
4988 params[11] = IROUND(matrix[14]);
4989 params[12] = IROUND(matrix[3]);
4990 params[13] = IROUND(matrix[7]);
4991 params[14] = IROUND(matrix[11]);
4992 params[15] = IROUND(matrix[15]);
4993 }
4994 break;
4995 case GL_TRANSPOSE_TEXTURE_MATRIX_ARB:
4996 {
4997 const GLfloat *matrix = ctx->TextureMatrixStack[ctx->Texture.CurrentUnit].Top->m;
4998 params[0] = IROUND(matrix[0]);
4999 params[1] = IROUND(matrix[4]);
5000 params[2] = IROUND(matrix[8]);
5001 params[3] = IROUND(matrix[12]);
5002 params[4] = IROUND(matrix[1]);
5003 params[5] = IROUND(matrix[5]);
5004 params[6] = IROUND(matrix[9]);
5005 params[7] = IROUND(matrix[13]);
5006 params[8] = IROUND(matrix[2]);
5007 params[9] = IROUND(matrix[6]);
5008 params[10] = IROUND(matrix[10]);
5009 params[11] = IROUND(matrix[14]);
5010 params[12] = IROUND(matrix[3]);
5011 params[13] = IROUND(matrix[7]);
5012 params[14] = IROUND(matrix[11]);
5013 params[15] = IROUND(matrix[15]);
5014 }
5015 break;
5016 case GL_COLOR_MATRIX_SGI:
5017 {
5018 const GLfloat *matrix = ctx->ColorMatrixStack.Top->m;
5019 params[0] = IROUND(matrix[0]);
5020 params[1] = IROUND(matrix[1]);
5021 params[2] = IROUND(matrix[2]);
5022 params[3] = IROUND(matrix[3]);
5023 params[4] = IROUND(matrix[4]);
5024 params[5] = IROUND(matrix[5]);
5025 params[6] = IROUND(matrix[6]);
5026 params[7] = IROUND(matrix[7]);
5027 params[8] = IROUND(matrix[8]);
5028 params[9] = IROUND(matrix[9]);
5029 params[10] = IROUND(matrix[10]);
5030 params[11] = IROUND(matrix[11]);
5031 params[12] = IROUND(matrix[12]);
5032 params[13] = IROUND(matrix[13]);
5033 params[14] = IROUND(matrix[14]);
5034 params[15] = IROUND(matrix[15]);
5035 }
5036 break;
5037 case GL_COLOR_MATRIX_STACK_DEPTH_SGI:
5038 params[0] = ctx->ColorMatrixStack.Depth + 1;
5039 break;
5040 case GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI:
5041 params[0] = MAX_COLOR_STACK_DEPTH;
5042 break;
5043 case GL_POST_COLOR_MATRIX_RED_SCALE_SGI:
5044 params[0] = IROUND(ctx->Pixel.PostColorMatrixScale[0]);
5045 break;
5046 case GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI:
5047 params[0] = IROUND(ctx->Pixel.PostColorMatrixScale[1]);
5048 break;
5049 case GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI:
5050 params[0] = IROUND(ctx->Pixel.PostColorMatrixScale[2]);
5051 break;
5052 case GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI:
5053 params[0] = IROUND(ctx->Pixel.PostColorMatrixScale[3]);
5054 break;
5055 case GL_POST_COLOR_MATRIX_RED_BIAS_SGI:
5056 params[0] = IROUND(ctx->Pixel.PostColorMatrixBias[0]);
5057 break;
5058 case GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI:
5059 params[0] = IROUND(ctx->Pixel.PostColorMatrixBias[1]);
5060 break;
5061 case GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI:
5062 params[0] = IROUND(ctx->Pixel.PostColorMatrixBias[2]);
5063 break;
5064 case GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI:
5065 params[0] = IROUND(ctx->Pixel.PostColorMatrixBias[3]);
5066 break;
5067 case GL_CONVOLUTION_1D_EXT:
5068 CHECK_EXT1(EXT_convolution);
5069 params[0] = BOOLEAN_TO_INT(ctx->Pixel.Convolution1DEnabled);
5070 break;
5071 case GL_CONVOLUTION_2D_EXT:
5072 CHECK_EXT1(EXT_convolution);
5073 params[0] = BOOLEAN_TO_INT(ctx->Pixel.Convolution2DEnabled);
5074 break;
5075 case GL_SEPARABLE_2D_EXT:
5076 CHECK_EXT1(EXT_convolution);
5077 params[0] = BOOLEAN_TO_INT(ctx->Pixel.Separable2DEnabled);
5078 break;
5079 case GL_POST_CONVOLUTION_RED_SCALE_EXT:
5080 CHECK_EXT1(EXT_convolution);
5081 params[0] = IROUND(ctx->Pixel.PostConvolutionScale[0]);
5082 break;
5083 case GL_POST_CONVOLUTION_GREEN_SCALE_EXT:
5084 CHECK_EXT1(EXT_convolution);
5085 params[0] = IROUND(ctx->Pixel.PostConvolutionScale[1]);
5086 break;
5087 case GL_POST_CONVOLUTION_BLUE_SCALE_EXT:
5088 CHECK_EXT1(EXT_convolution);
5089 params[0] = IROUND(ctx->Pixel.PostConvolutionScale[2]);
5090 break;
5091 case GL_POST_CONVOLUTION_ALPHA_SCALE_EXT:
5092 CHECK_EXT1(EXT_convolution);
5093 params[0] = IROUND(ctx->Pixel.PostConvolutionScale[3]);
5094 break;
5095 case GL_POST_CONVOLUTION_RED_BIAS_EXT:
5096 CHECK_EXT1(EXT_convolution);
5097 params[0] = IROUND(ctx->Pixel.PostConvolutionBias[0]);
5098 break;
5099 case GL_POST_CONVOLUTION_GREEN_BIAS_EXT:
5100 CHECK_EXT1(EXT_convolution);
5101 params[0] = IROUND(ctx->Pixel.PostConvolutionBias[1]);
5102 break;
5103 case GL_POST_CONVOLUTION_BLUE_BIAS_EXT:
5104 CHECK_EXT1(EXT_convolution);
5105 params[0] = IROUND(ctx->Pixel.PostConvolutionBias[2]);
5106 break;
5107 case GL_POST_CONVOLUTION_ALPHA_BIAS_EXT:
5108 CHECK_EXT1(EXT_convolution);
5109 params[0] = IROUND(ctx->Pixel.PostConvolutionBias[3]);
5110 break;
5111 case GL_HISTOGRAM:
5112 CHECK_EXT1(EXT_histogram);
5113 params[0] = BOOLEAN_TO_INT(ctx->Pixel.HistogramEnabled);
5114 break;
5115 case GL_MINMAX:
5116 CHECK_EXT1(EXT_histogram);
5117 params[0] = BOOLEAN_TO_INT(ctx->Pixel.MinMaxEnabled);
5118 break;
5119 case GL_COLOR_TABLE_SGI:
5120 CHECK_EXT1(SGI_color_table);
5121 params[0] = BOOLEAN_TO_INT(ctx->Pixel.ColorTableEnabled[COLORTABLE_PRECONVOLUTION]);
5122 break;
5123 case GL_POST_CONVOLUTION_COLOR_TABLE_SGI:
5124 CHECK_EXT1(SGI_color_table);
5125 params[0] = BOOLEAN_TO_INT(ctx->Pixel.ColorTableEnabled[COLORTABLE_POSTCONVOLUTION]);
5126 break;
5127 case GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI:
5128 CHECK_EXT1(SGI_color_table);
5129 params[0] = BOOLEAN_TO_INT(ctx->Pixel.ColorTableEnabled[COLORTABLE_POSTCOLORMATRIX]);
5130 break;
5131 case GL_TEXTURE_COLOR_TABLE_SGI:
5132 CHECK_EXT1(SGI_texture_color_table);
5133 params[0] = BOOLEAN_TO_INT(ctx->Texture.Unit[ctx->Texture.CurrentUnit].ColorTableEnabled);
5134 break;
5135 case GL_COLOR_SUM_EXT:
5136 CHECK_EXT2(EXT_secondary_color, ARB_vertex_program);
5137 params[0] = BOOLEAN_TO_INT(ctx->Fog.ColorSumEnabled);
5138 break;
5139 case GL_CURRENT_SECONDARY_COLOR_EXT:
5140 CHECK_EXT1(EXT_secondary_color);
5141 FLUSH_CURRENT(ctx, 0);
5142 params[0] = FLOAT_TO_INT(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][0]);
5143 params[1] = FLOAT_TO_INT(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][1]);
5144 params[2] = FLOAT_TO_INT(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][2]);
5145 params[3] = FLOAT_TO_INT(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][3]);
5146 break;
5147 case GL_SECONDARY_COLOR_ARRAY_EXT:
5148 CHECK_EXT1(EXT_secondary_color);
5149 params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->SecondaryColor.Enabled);
5150 break;
5151 case GL_SECONDARY_COLOR_ARRAY_TYPE_EXT:
5152 CHECK_EXT1(EXT_secondary_color);
5153 params[0] = ENUM_TO_INT(ctx->Array.ArrayObj->SecondaryColor.Type);
5154 break;
5155 case GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT:
5156 CHECK_EXT1(EXT_secondary_color);
5157 params[0] = ctx->Array.ArrayObj->SecondaryColor.Stride;
5158 break;
5159 case GL_SECONDARY_COLOR_ARRAY_SIZE_EXT:
5160 CHECK_EXT1(EXT_secondary_color);
5161 params[0] = ctx->Array.ArrayObj->SecondaryColor.Size;
5162 break;
5163 case GL_CURRENT_FOG_COORDINATE_EXT:
5164 CHECK_EXT1(EXT_fog_coord);
5165 FLUSH_CURRENT(ctx, 0);
5166 params[0] = IROUND(ctx->Current.Attrib[VERT_ATTRIB_FOG][0]);
5167 break;
5168 case GL_FOG_COORDINATE_ARRAY_EXT:
5169 CHECK_EXT1(EXT_fog_coord);
5170 params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->FogCoord.Enabled);
5171 break;
5172 case GL_FOG_COORDINATE_ARRAY_TYPE_EXT:
5173 CHECK_EXT1(EXT_fog_coord);
5174 params[0] = ENUM_TO_INT(ctx->Array.ArrayObj->FogCoord.Type);
5175 break;
5176 case GL_FOG_COORDINATE_ARRAY_STRIDE_EXT:
5177 CHECK_EXT1(EXT_fog_coord);
5178 params[0] = ctx->Array.ArrayObj->FogCoord.Stride;
5179 break;
5180 case GL_FOG_COORDINATE_SOURCE_EXT:
5181 CHECK_EXT1(EXT_fog_coord);
5182 params[0] = ENUM_TO_INT(ctx->Fog.FogCoordinateSource);
5183 break;
5184 case GL_MAX_TEXTURE_LOD_BIAS_EXT:
5185 CHECK_EXT1(EXT_texture_lod_bias);
5186 params[0] = IROUND(ctx->Const.MaxTextureLodBias);
5187 break;
5188 case GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT:
5189 CHECK_EXT1(EXT_texture_filter_anisotropic);
5190 params[0] = IROUND(ctx->Const.MaxTextureMaxAnisotropy);
5191 break;
5192 case GL_MULTISAMPLE_ARB:
5193 params[0] = BOOLEAN_TO_INT(ctx->Multisample.Enabled);
5194 break;
5195 case GL_SAMPLE_ALPHA_TO_COVERAGE_ARB:
5196 params[0] = BOOLEAN_TO_INT(ctx->Multisample.SampleAlphaToCoverage);
5197 break;
5198 case GL_SAMPLE_ALPHA_TO_ONE_ARB:
5199 params[0] = BOOLEAN_TO_INT(ctx->Multisample.SampleAlphaToOne);
5200 break;
5201 case GL_SAMPLE_COVERAGE_ARB:
5202 params[0] = BOOLEAN_TO_INT(ctx->Multisample.SampleCoverage);
5203 break;
5204 case GL_SAMPLE_COVERAGE_VALUE_ARB:
5205 params[0] = IROUND(ctx->Multisample.SampleCoverageValue);
5206 break;
5207 case GL_SAMPLE_COVERAGE_INVERT_ARB:
5208 params[0] = BOOLEAN_TO_INT(ctx->Multisample.SampleCoverageInvert);
5209 break;
5210 case GL_SAMPLE_BUFFERS_ARB:
5211 params[0] = ctx->DrawBuffer->Visual.sampleBuffers;
5212 break;
5213 case GL_SAMPLES_ARB:
5214 params[0] = ctx->DrawBuffer->Visual.samples;
5215 break;
5216 case GL_RASTER_POSITION_UNCLIPPED_IBM:
5217 CHECK_EXT1(IBM_rasterpos_clip);
5218 params[0] = BOOLEAN_TO_INT(ctx->Transform.RasterPositionUnclipped);
5219 break;
5220 case GL_POINT_SPRITE_NV:
5221 CHECK_EXT2(NV_point_sprite, ARB_point_sprite);
5222 params[0] = BOOLEAN_TO_INT(ctx->Point.PointSprite);
5223 break;
5224 case GL_POINT_SPRITE_R_MODE_NV:
5225 CHECK_EXT1(NV_point_sprite);
5226 params[0] = ENUM_TO_INT(ctx->Point.SpriteRMode);
5227 break;
5228 case GL_POINT_SPRITE_COORD_ORIGIN:
5229 CHECK_EXT2(NV_point_sprite, ARB_point_sprite);
5230 params[0] = ENUM_TO_INT(ctx->Point.SpriteOrigin);
5231 break;
5232 case GL_GENERATE_MIPMAP_HINT_SGIS:
5233 CHECK_EXT1(SGIS_generate_mipmap);
5234 params[0] = ENUM_TO_INT(ctx->Hint.GenerateMipmap);
5235 break;
5236 case GL_VERTEX_PROGRAM_BINDING_NV:
5237 CHECK_EXT1(NV_vertex_program);
5238 params[0] = (ctx->VertexProgram.Current ? ctx->VertexProgram.Current->Base.Id : 0);
5239 break;
5240 case GL_VERTEX_ATTRIB_ARRAY0_NV:
5241 CHECK_EXT1(NV_vertex_program);
5242 params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[0].Enabled);
5243 break;
5244 case GL_VERTEX_ATTRIB_ARRAY1_NV:
5245 CHECK_EXT1(NV_vertex_program);
5246 params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[1].Enabled);
5247 break;
5248 case GL_VERTEX_ATTRIB_ARRAY2_NV:
5249 CHECK_EXT1(NV_vertex_program);
5250 params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[2].Enabled);
5251 break;
5252 case GL_VERTEX_ATTRIB_ARRAY3_NV:
5253 CHECK_EXT1(NV_vertex_program);
5254 params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[3].Enabled);
5255 break;
5256 case GL_VERTEX_ATTRIB_ARRAY4_NV:
5257 CHECK_EXT1(NV_vertex_program);
5258 params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[4].Enabled);
5259 break;
5260 case GL_VERTEX_ATTRIB_ARRAY5_NV:
5261 CHECK_EXT1(NV_vertex_program);
5262 params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[5].Enabled);
5263 break;
5264 case GL_VERTEX_ATTRIB_ARRAY6_NV:
5265 CHECK_EXT1(NV_vertex_program);
5266 params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[6].Enabled);
5267 break;
5268 case GL_VERTEX_ATTRIB_ARRAY7_NV:
5269 CHECK_EXT1(NV_vertex_program);
5270 params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[7].Enabled);
5271 break;
5272 case GL_VERTEX_ATTRIB_ARRAY8_NV:
5273 CHECK_EXT1(NV_vertex_program);
5274 params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[8].Enabled);
5275 break;
5276 case GL_VERTEX_ATTRIB_ARRAY9_NV:
5277 CHECK_EXT1(NV_vertex_program);
5278 params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[9].Enabled);
5279 break;
5280 case GL_VERTEX_ATTRIB_ARRAY10_NV:
5281 CHECK_EXT1(NV_vertex_program);
5282 params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[10].Enabled);
5283 break;
5284 case GL_VERTEX_ATTRIB_ARRAY11_NV:
5285 CHECK_EXT1(NV_vertex_program);
5286 params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[11].Enabled);
5287 break;
5288 case GL_VERTEX_ATTRIB_ARRAY12_NV:
5289 CHECK_EXT1(NV_vertex_program);
5290 params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[12].Enabled);
5291 break;
5292 case GL_VERTEX_ATTRIB_ARRAY13_NV:
5293 CHECK_EXT1(NV_vertex_program);
5294 params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[13].Enabled);
5295 break;
5296 case GL_VERTEX_ATTRIB_ARRAY14_NV:
5297 CHECK_EXT1(NV_vertex_program);
5298 params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[14].Enabled);
5299 break;
5300 case GL_VERTEX_ATTRIB_ARRAY15_NV:
5301 CHECK_EXT1(NV_vertex_program);
5302 params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[15].Enabled);
5303 break;
5304 case GL_MAP1_VERTEX_ATTRIB0_4_NV:
5305 CHECK_EXT1(NV_vertex_program);
5306 params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[0]);
5307 break;
5308 case GL_MAP1_VERTEX_ATTRIB1_4_NV:
5309 CHECK_EXT1(NV_vertex_program);
5310 params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[1]);
5311 break;
5312 case GL_MAP1_VERTEX_ATTRIB2_4_NV:
5313 CHECK_EXT1(NV_vertex_program);
5314 params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[2]);
5315 break;
5316 case GL_MAP1_VERTEX_ATTRIB3_4_NV:
5317 CHECK_EXT1(NV_vertex_program);
5318 params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[3]);
5319 break;
5320 case GL_MAP1_VERTEX_ATTRIB4_4_NV:
5321 CHECK_EXT1(NV_vertex_program);
5322 params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[4]);
5323 break;
5324 case GL_MAP1_VERTEX_ATTRIB5_4_NV:
5325 CHECK_EXT1(NV_vertex_program);
5326 params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[5]);
5327 break;
5328 case GL_MAP1_VERTEX_ATTRIB6_4_NV:
5329 CHECK_EXT1(NV_vertex_program);
5330 params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[6]);
5331 break;
5332 case GL_MAP1_VERTEX_ATTRIB7_4_NV:
5333 CHECK_EXT1(NV_vertex_program);
5334 params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[7]);
5335 break;
5336 case GL_MAP1_VERTEX_ATTRIB8_4_NV:
5337 CHECK_EXT1(NV_vertex_program);
5338 params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[8]);
5339 break;
5340 case GL_MAP1_VERTEX_ATTRIB9_4_NV:
5341 CHECK_EXT1(NV_vertex_program);
5342 params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[9]);
5343 break;
5344 case GL_MAP1_VERTEX_ATTRIB10_4_NV:
5345 CHECK_EXT1(NV_vertex_program);
5346 params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[10]);
5347 break;
5348 case GL_MAP1_VERTEX_ATTRIB11_4_NV:
5349 CHECK_EXT1(NV_vertex_program);
5350 params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[11]);
5351 break;
5352 case GL_MAP1_VERTEX_ATTRIB12_4_NV:
5353 CHECK_EXT1(NV_vertex_program);
5354 params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[12]);
5355 break;
5356 case GL_MAP1_VERTEX_ATTRIB13_4_NV:
5357 CHECK_EXT1(NV_vertex_program);
5358 params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[13]);
5359 break;
5360 case GL_MAP1_VERTEX_ATTRIB14_4_NV:
5361 CHECK_EXT1(NV_vertex_program);
5362 params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[14]);
5363 break;
5364 case GL_MAP1_VERTEX_ATTRIB15_4_NV:
5365 CHECK_EXT1(NV_vertex_program);
5366 params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[15]);
5367 break;
5368 case GL_FRAGMENT_PROGRAM_NV:
5369 CHECK_EXT1(NV_fragment_program);
5370 params[0] = BOOLEAN_TO_INT(ctx->FragmentProgram.Enabled);
5371 break;
5372 case GL_FRAGMENT_PROGRAM_BINDING_NV:
5373 CHECK_EXT1(NV_fragment_program);
5374 params[0] = ctx->FragmentProgram.Current ? ctx->FragmentProgram.Current->Base.Id : 0;
5375 break;
5376 case GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV:
5377 CHECK_EXT1(NV_fragment_program);
5378 params[0] = MAX_NV_FRAGMENT_PROGRAM_PARAMS;
5379 break;
5380 case GL_TEXTURE_RECTANGLE_NV:
5381 CHECK_EXT1(NV_texture_rectangle);
5382 params[0] = BOOLEAN_TO_INT(_mesa_IsEnabled(GL_TEXTURE_RECTANGLE_NV));
5383 break;
5384 case GL_TEXTURE_BINDING_RECTANGLE_NV:
5385 CHECK_EXT1(NV_texture_rectangle);
5386 params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_RECT_INDEX]->Name;
5387 break;
5388 case GL_MAX_RECTANGLE_TEXTURE_SIZE_NV:
5389 CHECK_EXT1(NV_texture_rectangle);
5390 params[0] = ctx->Const.MaxTextureRectSize;
5391 break;
5392 case GL_STENCIL_TEST_TWO_SIDE_EXT:
5393 CHECK_EXT1(EXT_stencil_two_side);
5394 params[0] = BOOLEAN_TO_INT(ctx->Stencil.TestTwoSide);
5395 break;
5396 case GL_ACTIVE_STENCIL_FACE_EXT:
5397 CHECK_EXT1(EXT_stencil_two_side);
5398 params[0] = ENUM_TO_INT(ctx->Stencil.ActiveFace ? GL_BACK : GL_FRONT);
5399 break;
5400 case GL_MAX_SHININESS_NV:
5401 CHECK_EXT1(NV_light_max_exponent);
5402 params[0] = IROUND(ctx->Const.MaxShininess);
5403 break;
5404 case GL_MAX_SPOT_EXPONENT_NV:
5405 CHECK_EXT1(NV_light_max_exponent);
5406 params[0] = IROUND(ctx->Const.MaxSpotExponent);
5407 break;
5408 case GL_ARRAY_BUFFER_BINDING_ARB:
5409 params[0] = ctx->Array.ArrayBufferObj->Name;
5410 break;
5411 case GL_VERTEX_ARRAY_BUFFER_BINDING_ARB:
5412 params[0] = ctx->Array.ArrayObj->Vertex.BufferObj->Name;
5413 break;
5414 case GL_NORMAL_ARRAY_BUFFER_BINDING_ARB:
5415 params[0] = ctx->Array.ArrayObj->Normal.BufferObj->Name;
5416 break;
5417 case GL_COLOR_ARRAY_BUFFER_BINDING_ARB:
5418 params[0] = ctx->Array.ArrayObj->Color.BufferObj->Name;
5419 break;
5420 case GL_INDEX_ARRAY_BUFFER_BINDING_ARB:
5421 params[0] = ctx->Array.ArrayObj->Index.BufferObj->Name;
5422 break;
5423 case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB:
5424 params[0] = ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].BufferObj->Name;
5425 break;
5426 case GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB:
5427 params[0] = ctx->Array.ArrayObj->EdgeFlag.BufferObj->Name;
5428 break;
5429 case GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB:
5430 params[0] = ctx->Array.ArrayObj->SecondaryColor.BufferObj->Name;
5431 break;
5432 case GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB:
5433 params[0] = ctx->Array.ArrayObj->FogCoord.BufferObj->Name;
5434 break;
5435 case GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB:
5436 params[0] = ctx->Array.ElementArrayBufferObj->Name;
5437 break;
5438 case GL_PIXEL_PACK_BUFFER_BINDING_EXT:
5439 CHECK_EXT1(EXT_pixel_buffer_object);
5440 params[0] = ctx->Pack.BufferObj->Name;
5441 break;
5442 case GL_PIXEL_UNPACK_BUFFER_BINDING_EXT:
5443 CHECK_EXT1(EXT_pixel_buffer_object);
5444 params[0] = ctx->Unpack.BufferObj->Name;
5445 break;
5446 case GL_VERTEX_PROGRAM_ARB:
5447 CHECK_EXT2(ARB_vertex_program, NV_vertex_program);
5448 params[0] = BOOLEAN_TO_INT(ctx->VertexProgram.Enabled);
5449 break;
5450 case GL_VERTEX_PROGRAM_POINT_SIZE_ARB:
5451 CHECK_EXT2(ARB_vertex_program, NV_vertex_program);
5452 params[0] = BOOLEAN_TO_INT(ctx->VertexProgram.PointSizeEnabled);
5453 break;
5454 case GL_VERTEX_PROGRAM_TWO_SIDE_ARB:
5455 CHECK_EXT2(ARB_vertex_program, NV_vertex_program);
5456 params[0] = BOOLEAN_TO_INT(ctx->VertexProgram.TwoSideEnabled);
5457 break;
5458 case GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB:
5459 CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_vertex_program);
5460 params[0] = ctx->Const.MaxProgramMatrixStackDepth;
5461 break;
5462 case GL_MAX_PROGRAM_MATRICES_ARB:
5463 CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_vertex_program);
5464 params[0] = ctx->Const.MaxProgramMatrices;
5465 break;
5466 case GL_CURRENT_MATRIX_STACK_DEPTH_ARB:
5467 CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_vertex_program);
5468 params[0] = BOOLEAN_TO_INT(ctx->CurrentStack->Depth + 1);
5469 break;
5470 case GL_CURRENT_MATRIX_ARB:
5471 CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_fragment_program);
5472 {
5473 const GLfloat *matrix = ctx->CurrentStack->Top->m;
5474 params[0] = IROUND(matrix[0]);
5475 params[1] = IROUND(matrix[1]);
5476 params[2] = IROUND(matrix[2]);
5477 params[3] = IROUND(matrix[3]);
5478 params[4] = IROUND(matrix[4]);
5479 params[5] = IROUND(matrix[5]);
5480 params[6] = IROUND(matrix[6]);
5481 params[7] = IROUND(matrix[7]);
5482 params[8] = IROUND(matrix[8]);
5483 params[9] = IROUND(matrix[9]);
5484 params[10] = IROUND(matrix[10]);
5485 params[11] = IROUND(matrix[11]);
5486 params[12] = IROUND(matrix[12]);
5487 params[13] = IROUND(matrix[13]);
5488 params[14] = IROUND(matrix[14]);
5489 params[15] = IROUND(matrix[15]);
5490 }
5491 break;
5492 case GL_TRANSPOSE_CURRENT_MATRIX_ARB:
5493 CHECK_EXT2(ARB_vertex_program, ARB_fragment_program);
5494 {
5495 const GLfloat *matrix = ctx->CurrentStack->Top->m;
5496 params[0] = IROUND(matrix[0]);
5497 params[1] = IROUND(matrix[4]);
5498 params[2] = IROUND(matrix[8]);
5499 params[3] = IROUND(matrix[12]);
5500 params[4] = IROUND(matrix[1]);
5501 params[5] = IROUND(matrix[5]);
5502 params[6] = IROUND(matrix[9]);
5503 params[7] = IROUND(matrix[13]);
5504 params[8] = IROUND(matrix[2]);
5505 params[9] = IROUND(matrix[6]);
5506 params[10] = IROUND(matrix[10]);
5507 params[11] = IROUND(matrix[14]);
5508 params[12] = IROUND(matrix[3]);
5509 params[13] = IROUND(matrix[7]);
5510 params[14] = IROUND(matrix[11]);
5511 params[15] = IROUND(matrix[15]);
5512 }
5513 break;
5514 case GL_MAX_VERTEX_ATTRIBS_ARB:
5515 CHECK_EXT1(ARB_vertex_program);
5516 params[0] = ctx->Const.VertexProgram.MaxAttribs;
5517 break;
5518 case GL_PROGRAM_ERROR_POSITION_ARB:
5519 CHECK_EXT4(NV_vertex_program, ARB_vertex_program, NV_fragment_program, ARB_fragment_program);
5520 params[0] = ctx->Program.ErrorPos;
5521 break;
5522 case GL_FRAGMENT_PROGRAM_ARB:
5523 CHECK_EXT1(ARB_fragment_program);
5524 params[0] = BOOLEAN_TO_INT(ctx->FragmentProgram.Enabled);
5525 break;
5526 case GL_MAX_TEXTURE_COORDS_ARB:
5527 CHECK_EXT2(ARB_fragment_program, NV_fragment_program);
5528 params[0] = ctx->Const.MaxTextureCoordUnits;
5529 break;
5530 case GL_MAX_TEXTURE_IMAGE_UNITS_ARB:
5531 CHECK_EXT2(ARB_fragment_program, NV_fragment_program);
5532 params[0] = ctx->Const.MaxTextureImageUnits;
5533 break;
5534 case GL_DEPTH_BOUNDS_TEST_EXT:
5535 CHECK_EXT1(EXT_depth_bounds_test);
5536 params[0] = BOOLEAN_TO_INT(ctx->Depth.BoundsTest);
5537 break;
5538 case GL_DEPTH_BOUNDS_EXT:
5539 CHECK_EXT1(EXT_depth_bounds_test);
5540 params[0] = IROUND(ctx->Depth.BoundsMin);
5541 params[1] = IROUND(ctx->Depth.BoundsMax);
5542 break;
5543 case GL_DEPTH_CLAMP:
5544 CHECK_EXT1(ARB_depth_clamp);
5545 params[0] = BOOLEAN_TO_INT(ctx->Transform.DepthClamp);
5546 break;
5547 case GL_MAX_DRAW_BUFFERS_ARB:
5548 params[0] = ctx->Const.MaxDrawBuffers;
5549 break;
5550 case GL_DRAW_BUFFER0_ARB:
5551 params[0] = ENUM_TO_INT(ctx->DrawBuffer->ColorDrawBuffer[0]);
5552 break;
5553 case GL_DRAW_BUFFER1_ARB:
5554 {
5555 GLenum buffer;
5556 if (pname - GL_DRAW_BUFFER0_ARB >= ctx->Const.MaxDrawBuffers) {
5557 _mesa_error(ctx, GL_INVALID_ENUM, "glGet(GL_DRAW_BUFFERx_ARB)");
5558 return;
5559 }
5560 buffer = ctx->DrawBuffer->ColorDrawBuffer[1];
5561 params[0] = ENUM_TO_INT(buffer);
5562 }
5563 break;
5564 case GL_DRAW_BUFFER2_ARB:
5565 {
5566 GLenum buffer;
5567 if (pname - GL_DRAW_BUFFER0_ARB >= ctx->Const.MaxDrawBuffers) {
5568 _mesa_error(ctx, GL_INVALID_ENUM, "glGet(GL_DRAW_BUFFERx_ARB)");
5569 return;
5570 }
5571 buffer = ctx->DrawBuffer->ColorDrawBuffer[2];
5572 params[0] = ENUM_TO_INT(buffer);
5573 }
5574 break;
5575 case GL_DRAW_BUFFER3_ARB:
5576 {
5577 GLenum buffer;
5578 if (pname - GL_DRAW_BUFFER0_ARB >= ctx->Const.MaxDrawBuffers) {
5579 _mesa_error(ctx, GL_INVALID_ENUM, "glGet(GL_DRAW_BUFFERx_ARB)");
5580 return;
5581 }
5582 buffer = ctx->DrawBuffer->ColorDrawBuffer[3];
5583 params[0] = ENUM_TO_INT(buffer);
5584 }
5585 break;
5586 case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES:
5587 CHECK_EXT1(OES_read_format);
5588 if (ctx->NewState & _NEW_BUFFERS)
5589 _mesa_update_state(ctx);
5590 params[0] = _mesa_get_color_read_type(ctx);
5591 break;
5592 case GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES:
5593 CHECK_EXT1(OES_read_format);
5594 if (ctx->NewState & _NEW_BUFFERS)
5595 _mesa_update_state(ctx);
5596 params[0] = _mesa_get_color_read_format(ctx);
5597 break;
5598 case GL_NUM_FRAGMENT_REGISTERS_ATI:
5599 CHECK_EXT1(ATI_fragment_shader);
5600 params[0] = 6;
5601 break;
5602 case GL_NUM_FRAGMENT_CONSTANTS_ATI:
5603 CHECK_EXT1(ATI_fragment_shader);
5604 params[0] = 8;
5605 break;
5606 case GL_NUM_PASSES_ATI:
5607 CHECK_EXT1(ATI_fragment_shader);
5608 params[0] = 2;
5609 break;
5610 case GL_NUM_INSTRUCTIONS_PER_PASS_ATI:
5611 CHECK_EXT1(ATI_fragment_shader);
5612 params[0] = 8;
5613 break;
5614 case GL_NUM_INSTRUCTIONS_TOTAL_ATI:
5615 CHECK_EXT1(ATI_fragment_shader);
5616 params[0] = 16;
5617 break;
5618 case GL_COLOR_ALPHA_PAIRING_ATI:
5619 CHECK_EXT1(ATI_fragment_shader);
5620 params[0] = BOOLEAN_TO_INT(GL_TRUE);
5621 break;
5622 case GL_NUM_LOOPBACK_COMPONENTS_ATI:
5623 CHECK_EXT1(ATI_fragment_shader);
5624 params[0] = 3;
5625 break;
5626 case GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI:
5627 CHECK_EXT1(ATI_fragment_shader);
5628 params[0] = 3;
5629 break;
5630 case GL_STENCIL_BACK_FUNC:
5631 params[0] = ENUM_TO_INT(ctx->Stencil.Function[1]);
5632 break;
5633 case GL_STENCIL_BACK_VALUE_MASK:
5634 params[0] = ctx->Stencil.ValueMask[1];
5635 break;
5636 case GL_STENCIL_BACK_WRITEMASK:
5637 params[0] = ctx->Stencil.WriteMask[1];
5638 break;
5639 case GL_STENCIL_BACK_REF:
5640 params[0] = ctx->Stencil.Ref[1];
5641 break;
5642 case GL_STENCIL_BACK_FAIL:
5643 params[0] = ENUM_TO_INT(ctx->Stencil.FailFunc[1]);
5644 break;
5645 case GL_STENCIL_BACK_PASS_DEPTH_FAIL:
5646 params[0] = ENUM_TO_INT(ctx->Stencil.ZFailFunc[1]);
5647 break;
5648 case GL_STENCIL_BACK_PASS_DEPTH_PASS:
5649 params[0] = ENUM_TO_INT(ctx->Stencil.ZPassFunc[1]);
5650 break;
5651 case GL_FRAMEBUFFER_BINDING_EXT:
5652 CHECK_EXT1(EXT_framebuffer_object);
5653 params[0] = ctx->DrawBuffer->Name;
5654 break;
5655 case GL_RENDERBUFFER_BINDING_EXT:
5656 CHECK_EXT1(EXT_framebuffer_object);
5657 params[0] = ctx->CurrentRenderbuffer ? ctx->CurrentRenderbuffer->Name : 0;
5658 break;
5659 case GL_MAX_COLOR_ATTACHMENTS_EXT:
5660 CHECK_EXT1(EXT_framebuffer_object);
5661 params[0] = ctx->Const.MaxColorAttachments;
5662 break;
5663 case GL_MAX_RENDERBUFFER_SIZE_EXT:
5664 CHECK_EXT1(EXT_framebuffer_object);
5665 params[0] = ctx->Const.MaxRenderbufferSize;
5666 break;
5667 case GL_READ_FRAMEBUFFER_BINDING_EXT:
5668 CHECK_EXT1(EXT_framebuffer_blit);
5669 params[0] = ctx->ReadBuffer->Name;
5670 break;
5671 case GL_PROVOKING_VERTEX_EXT:
5672 CHECK_EXT1(EXT_provoking_vertex);
5673 params[0] = BOOLEAN_TO_INT(ctx->Light.ProvokingVertex);
5674 break;
5675 case GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT:
5676 CHECK_EXT1(EXT_provoking_vertex);
5677 params[0] = BOOLEAN_TO_INT(ctx->Const.QuadsFollowProvokingVertexConvention);
5678 break;
5679 case GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB:
5680 CHECK_EXT1(ARB_fragment_shader);
5681 params[0] = ctx->Const.FragmentProgram.MaxUniformComponents;
5682 break;
5683 case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB:
5684 CHECK_EXT1(ARB_fragment_shader);
5685 params[0] = ENUM_TO_INT(ctx->Hint.FragmentShaderDerivative);
5686 break;
5687 case GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB:
5688 CHECK_EXT1(ARB_vertex_shader);
5689 params[0] = ctx->Const.VertexProgram.MaxUniformComponents;
5690 break;
5691 case GL_MAX_VARYING_FLOATS_ARB:
5692 CHECK_EXT1(ARB_vertex_shader);
5693 params[0] = ctx->Const.MaxVarying * 4;
5694 break;
5695 case GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB:
5696 CHECK_EXT1(ARB_vertex_shader);
5697 params[0] = ctx->Const.MaxVertexTextureImageUnits;
5698 break;
5699 case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB:
5700 CHECK_EXT1(ARB_vertex_shader);
5701 params[0] = ctx->Const.MaxCombinedTextureImageUnits;
5702 break;
5703 case GL_CURRENT_PROGRAM:
5704 CHECK_EXT1(ARB_shader_objects);
5705 params[0] = ctx->Shader.CurrentProgram ? ctx->Shader.CurrentProgram->Name : 0;
5706 break;
5707 case GL_MAX_SAMPLES:
5708 CHECK_EXT1(ARB_framebuffer_object);
5709 params[0] = ctx->Const.MaxSamples;
5710 break;
5711 case GL_VERTEX_ARRAY_BINDING_APPLE:
5712 CHECK_EXT1(APPLE_vertex_array_object);
5713 params[0] = ctx->Array.ArrayObj->Name;
5714 break;
5715 case GL_TEXTURE_CUBE_MAP_SEAMLESS:
5716 CHECK_EXT1(ARB_seamless_cube_map);
5717 params[0] = BOOLEAN_TO_INT(ctx->Texture.CubeMapSeamless);
5718 break;
5719 case GL_MAX_SERVER_WAIT_TIMEOUT:
5720 CHECK_EXT1(ARB_sync);
5721 params[0] = INT64_TO_INT(ctx->Const.MaxServerWaitTimeout);
5722 break;
5723 case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING:
5724 CHECK_EXT1(EXT_transform_feedback);
5725 params[0] = ctx->TransformFeedback.CurrentBuffer->Name;
5726 break;
5727 case GL_RASTERIZER_DISCARD:
5728 CHECK_EXT1(EXT_transform_feedback);
5729 params[0] = BOOLEAN_TO_INT(ctx->TransformFeedback.RasterDiscard);
5730 break;
5731 case GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS:
5732 CHECK_EXT1(EXT_transform_feedback);
5733 params[0] = ctx->Const.MaxTransformFeedbackInterleavedComponents;
5734 break;
5735 case GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS:
5736 CHECK_EXT1(EXT_transform_feedback);
5737 params[0] = ctx->Const.MaxTransformFeedbackSeparateAttribs;
5738 break;
5739 case GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS:
5740 CHECK_EXT1(EXT_transform_feedback);
5741 params[0] = ctx->Const.MaxTransformFeedbackSeparateComponents;
5742 break;
5743 case GL_NUM_EXTENSIONS:
5744 params[0] = _mesa_get_extension_count(ctx);
5745 break;
5746 case GL_MAJOR_VERSION:
5747 params[0] = ctx->VersionMajor;
5748 break;
5749 case GL_MINOR_VERSION:
5750 params[0] = ctx->VersionMinor;
5751 break;
5752 case GL_CONTEXT_FLAGS:
5753 params[0] = ctx->Const.ContextFlags;
5754 break;
5755 default:
5756 goto invalid_enum_error;
5757 }
5758 return;
5759
5760 invalid_enum_error:
5761 _mesa_error(ctx, GL_INVALID_ENUM, "glGetIntegerv(pname=0x%x)", pname);
5762 }
5763
5764 #if FEATURE_ARB_sync
5765 void GLAPIENTRY
5766 _mesa_GetInteger64v( GLenum pname, GLint64 *params )
5767 {
5768 GET_CURRENT_CONTEXT(ctx);
5769 ASSERT_OUTSIDE_BEGIN_END(ctx);
5770
5771 if (!params)
5772 return;
5773
5774 if (ctx->Driver.GetInteger64v &&
5775 ctx->Driver.GetInteger64v(ctx, pname, params))
5776 return;
5777
5778 switch (pname) {
5779 case GL_ACCUM_RED_BITS:
5780 params[0] = (GLint64)(ctx->DrawBuffer->Visual.accumRedBits);
5781 break;
5782 case GL_ACCUM_GREEN_BITS:
5783 params[0] = (GLint64)(ctx->DrawBuffer->Visual.accumGreenBits);
5784 break;
5785 case GL_ACCUM_BLUE_BITS:
5786 params[0] = (GLint64)(ctx->DrawBuffer->Visual.accumBlueBits);
5787 break;
5788 case GL_ACCUM_ALPHA_BITS:
5789 params[0] = (GLint64)(ctx->DrawBuffer->Visual.accumAlphaBits);
5790 break;
5791 case GL_ACCUM_CLEAR_VALUE:
5792 params[0] = FLOAT_TO_INT64(ctx->Accum.ClearColor[0]);
5793 params[1] = FLOAT_TO_INT64(ctx->Accum.ClearColor[1]);
5794 params[2] = FLOAT_TO_INT64(ctx->Accum.ClearColor[2]);
5795 params[3] = FLOAT_TO_INT64(ctx->Accum.ClearColor[3]);
5796 break;
5797 case GL_ALPHA_BIAS:
5798 params[0] = IROUND64(ctx->Pixel.AlphaBias);
5799 break;
5800 case GL_ALPHA_BITS:
5801 if (ctx->NewState & _NEW_BUFFERS)
5802 _mesa_update_state(ctx);
5803 params[0] = (GLint64)(ctx->DrawBuffer->Visual.alphaBits);
5804 break;
5805 case GL_ALPHA_SCALE:
5806 params[0] = IROUND64(ctx->Pixel.AlphaScale);
5807 break;
5808 case GL_ALPHA_TEST:
5809 params[0] = BOOLEAN_TO_INT64(ctx->Color.AlphaEnabled);
5810 break;
5811 case GL_ALPHA_TEST_FUNC:
5812 params[0] = ENUM_TO_INT64(ctx->Color.AlphaFunc);
5813 break;
5814 case GL_ALPHA_TEST_REF:
5815 params[0] = FLOAT_TO_INT64(ctx->Color.AlphaRef);
5816 break;
5817 case GL_ATTRIB_STACK_DEPTH:
5818 params[0] = (GLint64)(ctx->AttribStackDepth);
5819 break;
5820 case GL_AUTO_NORMAL:
5821 params[0] = BOOLEAN_TO_INT64(ctx->Eval.AutoNormal);
5822 break;
5823 case GL_AUX_BUFFERS:
5824 params[0] = (GLint64)(ctx->DrawBuffer->Visual.numAuxBuffers);
5825 break;
5826 case GL_BLEND:
5827 params[0] = BOOLEAN_TO_INT64((ctx->Color.BlendEnabled & 1));
5828 break;
5829 case GL_BLEND_DST:
5830 params[0] = ENUM_TO_INT64(ctx->Color.BlendDstRGB);
5831 break;
5832 case GL_BLEND_SRC:
5833 params[0] = ENUM_TO_INT64(ctx->Color.BlendSrcRGB);
5834 break;
5835 case GL_BLEND_SRC_RGB_EXT:
5836 params[0] = ENUM_TO_INT64(ctx->Color.BlendSrcRGB);
5837 break;
5838 case GL_BLEND_DST_RGB_EXT:
5839 params[0] = ENUM_TO_INT64(ctx->Color.BlendDstRGB);
5840 break;
5841 case GL_BLEND_SRC_ALPHA_EXT:
5842 params[0] = ENUM_TO_INT64(ctx->Color.BlendSrcA);
5843 break;
5844 case GL_BLEND_DST_ALPHA_EXT:
5845 params[0] = ENUM_TO_INT64(ctx->Color.BlendDstA);
5846 break;
5847 case GL_BLEND_EQUATION:
5848 params[0] = ENUM_TO_INT64(ctx->Color.BlendEquationRGB );
5849 break;
5850 case GL_BLEND_EQUATION_ALPHA_EXT:
5851 params[0] = ENUM_TO_INT64(ctx->Color.BlendEquationA );
5852 break;
5853 case GL_BLEND_COLOR_EXT:
5854 params[0] = FLOAT_TO_INT64(ctx->Color.BlendColor[0]);
5855 params[1] = FLOAT_TO_INT64(ctx->Color.BlendColor[1]);
5856 params[2] = FLOAT_TO_INT64(ctx->Color.BlendColor[2]);
5857 params[3] = FLOAT_TO_INT64(ctx->Color.BlendColor[3]);
5858 break;
5859 case GL_BLUE_BIAS:
5860 params[0] = IROUND64(ctx->Pixel.BlueBias);
5861 break;
5862 case GL_BLUE_BITS:
5863 if (ctx->NewState & _NEW_BUFFERS)
5864 _mesa_update_state(ctx);
5865 params[0] = (GLint64)(ctx->DrawBuffer->Visual.blueBits);
5866 break;
5867 case GL_BLUE_SCALE:
5868 params[0] = IROUND64(ctx->Pixel.BlueScale);
5869 break;
5870 case GL_CLIENT_ATTRIB_STACK_DEPTH:
5871 params[0] = (GLint64)(ctx->ClientAttribStackDepth);
5872 break;
5873 case GL_CLIP_PLANE0:
5874 params[0] = BOOLEAN_TO_INT64((ctx->Transform.ClipPlanesEnabled >> 0) & 1);
5875 break;
5876 case GL_CLIP_PLANE1:
5877 params[0] = BOOLEAN_TO_INT64((ctx->Transform.ClipPlanesEnabled >> 1) & 1);
5878 break;
5879 case GL_CLIP_PLANE2:
5880 params[0] = BOOLEAN_TO_INT64((ctx->Transform.ClipPlanesEnabled >> 2) & 1);
5881 break;
5882 case GL_CLIP_PLANE3:
5883 params[0] = BOOLEAN_TO_INT64((ctx->Transform.ClipPlanesEnabled >> 3) & 1);
5884 break;
5885 case GL_CLIP_PLANE4:
5886 params[0] = BOOLEAN_TO_INT64((ctx->Transform.ClipPlanesEnabled >> 4) & 1);
5887 break;
5888 case GL_CLIP_PLANE5:
5889 params[0] = BOOLEAN_TO_INT64((ctx->Transform.ClipPlanesEnabled >> 5) & 1);
5890 break;
5891 case GL_COLOR_CLEAR_VALUE:
5892 params[0] = FLOAT_TO_INT64(ctx->Color.ClearColor[0]);
5893 params[1] = FLOAT_TO_INT64(ctx->Color.ClearColor[1]);
5894 params[2] = FLOAT_TO_INT64(ctx->Color.ClearColor[2]);
5895 params[3] = FLOAT_TO_INT64(ctx->Color.ClearColor[3]);
5896 break;
5897 case GL_COLOR_MATERIAL:
5898 params[0] = BOOLEAN_TO_INT64(ctx->Light.ColorMaterialEnabled);
5899 break;
5900 case GL_COLOR_MATERIAL_FACE:
5901 params[0] = ENUM_TO_INT64(ctx->Light.ColorMaterialFace);
5902 break;
5903 case GL_COLOR_MATERIAL_PARAMETER:
5904 params[0] = ENUM_TO_INT64(ctx->Light.ColorMaterialMode);
5905 break;
5906 case GL_COLOR_WRITEMASK:
5907 params[0] = (GLint64)(ctx->Color.ColorMask[0][RCOMP] ? 1 : 0);
5908 params[1] = (GLint64)(ctx->Color.ColorMask[0][GCOMP] ? 1 : 0);
5909 params[2] = (GLint64)(ctx->Color.ColorMask[0][BCOMP] ? 1 : 0);
5910 params[3] = (GLint64)(ctx->Color.ColorMask[0][ACOMP] ? 1 : 0);
5911 break;
5912 case GL_CULL_FACE:
5913 params[0] = BOOLEAN_TO_INT64(ctx->Polygon.CullFlag);
5914 break;
5915 case GL_CULL_FACE_MODE:
5916 params[0] = ENUM_TO_INT64(ctx->Polygon.CullFaceMode);
5917 break;
5918 case GL_CURRENT_COLOR:
5919 FLUSH_CURRENT(ctx, 0);
5920 params[0] = FLOAT_TO_INT64(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][0]);
5921 params[1] = FLOAT_TO_INT64(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][1]);
5922 params[2] = FLOAT_TO_INT64(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][2]);
5923 params[3] = FLOAT_TO_INT64(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][3]);
5924 break;
5925 case GL_CURRENT_INDEX:
5926 FLUSH_CURRENT(ctx, 0);
5927 params[0] = IROUND64(ctx->Current.Attrib[VERT_ATTRIB_COLOR_INDEX][0]);
5928 break;
5929 case GL_CURRENT_NORMAL:
5930 FLUSH_CURRENT(ctx, 0);
5931 params[0] = FLOAT_TO_INT64(ctx->Current.Attrib[VERT_ATTRIB_NORMAL][0]);
5932 params[1] = FLOAT_TO_INT64(ctx->Current.Attrib[VERT_ATTRIB_NORMAL][1]);
5933 params[2] = FLOAT_TO_INT64(ctx->Current.Attrib[VERT_ATTRIB_NORMAL][2]);
5934 break;
5935 case GL_CURRENT_RASTER_COLOR:
5936 params[0] = FLOAT_TO_INT64(ctx->Current.RasterColor[0]);
5937 params[1] = FLOAT_TO_INT64(ctx->Current.RasterColor[1]);
5938 params[2] = FLOAT_TO_INT64(ctx->Current.RasterColor[2]);
5939 params[3] = FLOAT_TO_INT64(ctx->Current.RasterColor[3]);
5940 break;
5941 case GL_CURRENT_RASTER_DISTANCE:
5942 params[0] = IROUND64(ctx->Current.RasterDistance);
5943 break;
5944 case GL_CURRENT_RASTER_INDEX:
5945 params[0] = IROUND64(1.0);
5946 break;
5947 case GL_CURRENT_RASTER_POSITION:
5948 params[0] = IROUND64(ctx->Current.RasterPos[0]);
5949 params[1] = IROUND64(ctx->Current.RasterPos[1]);
5950 params[2] = IROUND64(ctx->Current.RasterPos[2]);
5951 params[3] = IROUND64(ctx->Current.RasterPos[3]);
5952 break;
5953 case GL_CURRENT_RASTER_SECONDARY_COLOR:
5954 params[0] = FLOAT_TO_INT64(ctx->Current.RasterSecondaryColor[0]);
5955 params[1] = FLOAT_TO_INT64(ctx->Current.RasterSecondaryColor[1]);
5956 params[2] = FLOAT_TO_INT64(ctx->Current.RasterSecondaryColor[2]);
5957 params[3] = FLOAT_TO_INT64(ctx->Current.RasterSecondaryColor[3]);
5958 break;
5959 case GL_CURRENT_RASTER_TEXTURE_COORDS:
5960 {
5961 const GLuint unit = ctx->Texture.CurrentUnit;
5962 if (unit >= ctx->Const.MaxTextureCoordUnits) {
5963 _mesa_error(ctx, GL_INVALID_OPERATION,
5964 "glGet(raster tex coords, unit %u)", unit);
5965 return;
5966 }
5967 params[0] = IROUND64(ctx->Current.RasterTexCoords[unit][0]);
5968 params[1] = IROUND64(ctx->Current.RasterTexCoords[unit][1]);
5969 params[2] = IROUND64(ctx->Current.RasterTexCoords[unit][2]);
5970 params[3] = IROUND64(ctx->Current.RasterTexCoords[unit][3]);
5971 }
5972 break;
5973 case GL_CURRENT_RASTER_POSITION_VALID:
5974 params[0] = BOOLEAN_TO_INT64(ctx->Current.RasterPosValid);
5975 break;
5976 case GL_CURRENT_TEXTURE_COORDS:
5977 {
5978 const GLuint unit = ctx->Texture.CurrentUnit;
5979 if (unit >= ctx->Const.MaxTextureCoordUnits) {
5980 _mesa_error(ctx, GL_INVALID_OPERATION,
5981 "glGet(current tex coords, unit %u)", unit);
5982 return;
5983 }
5984 FLUSH_CURRENT(ctx, 0);
5985 params[0] = IROUND64(ctx->Current.Attrib[VERT_ATTRIB_TEX0 + unit][0]);
5986 params[1] = IROUND64(ctx->Current.Attrib[VERT_ATTRIB_TEX0 + unit][1]);
5987 params[2] = IROUND64(ctx->Current.Attrib[VERT_ATTRIB_TEX0 + unit][2]);
5988 params[3] = IROUND64(ctx->Current.Attrib[VERT_ATTRIB_TEX0 + unit][3]);
5989 }
5990 break;
5991 case GL_DEPTH_BIAS:
5992 params[0] = IROUND64(ctx->Pixel.DepthBias);
5993 break;
5994 case GL_DEPTH_BITS:
5995 params[0] = (GLint64)(ctx->DrawBuffer->Visual.depthBits);
5996 break;
5997 case GL_DEPTH_CLEAR_VALUE:
5998 params[0] = FLOAT_TO_INT64(((GLfloat) ctx->Depth.Clear));
5999 break;
6000 case GL_DEPTH_FUNC:
6001 params[0] = ENUM_TO_INT64(ctx->Depth.Func);
6002 break;
6003 case GL_DEPTH_RANGE:
6004 params[0] = FLOAT_TO_INT64(ctx->Viewport.Near);
6005 params[1] = FLOAT_TO_INT64(ctx->Viewport.Far);
6006 break;
6007 case GL_DEPTH_SCALE:
6008 params[0] = IROUND64(ctx->Pixel.DepthScale);
6009 break;
6010 case GL_DEPTH_TEST:
6011 params[0] = BOOLEAN_TO_INT64(ctx->Depth.Test);
6012 break;
6013 case GL_DEPTH_WRITEMASK:
6014 params[0] = BOOLEAN_TO_INT64(ctx->Depth.Mask);
6015 break;
6016 case GL_DITHER:
6017 params[0] = BOOLEAN_TO_INT64(ctx->Color.DitherFlag);
6018 break;
6019 case GL_DOUBLEBUFFER:
6020 params[0] = BOOLEAN_TO_INT64(ctx->DrawBuffer->Visual.doubleBufferMode);
6021 break;
6022 case GL_DRAW_BUFFER:
6023 params[0] = ENUM_TO_INT64(ctx->DrawBuffer->ColorDrawBuffer[0]);
6024 break;
6025 case GL_EDGE_FLAG:
6026 FLUSH_CURRENT(ctx, 0);
6027 params[0] = BOOLEAN_TO_INT64((ctx->Current.Attrib[VERT_ATTRIB_EDGEFLAG][0] == 1.0));
6028 break;
6029 case GL_FEEDBACK_BUFFER_SIZE:
6030 params[0] = (GLint64)(ctx->Feedback.BufferSize);
6031 break;
6032 case GL_FEEDBACK_BUFFER_TYPE:
6033 params[0] = ENUM_TO_INT64(ctx->Feedback.Type);
6034 break;
6035 case GL_FOG:
6036 params[0] = BOOLEAN_TO_INT64(ctx->Fog.Enabled);
6037 break;
6038 case GL_FOG_COLOR:
6039 params[0] = FLOAT_TO_INT64(ctx->Fog.Color[0]);
6040 params[1] = FLOAT_TO_INT64(ctx->Fog.Color[1]);
6041 params[2] = FLOAT_TO_INT64(ctx->Fog.Color[2]);
6042 params[3] = FLOAT_TO_INT64(ctx->Fog.Color[3]);
6043 break;
6044 case GL_FOG_DENSITY:
6045 params[0] = IROUND64(ctx->Fog.Density);
6046 break;
6047 case GL_FOG_END:
6048 params[0] = IROUND64(ctx->Fog.End);
6049 break;
6050 case GL_FOG_HINT:
6051 params[0] = ENUM_TO_INT64(ctx->Hint.Fog);
6052 break;
6053 case GL_FOG_INDEX:
6054 params[0] = IROUND64(ctx->Fog.Index);
6055 break;
6056 case GL_FOG_MODE:
6057 params[0] = ENUM_TO_INT64(ctx->Fog.Mode);
6058 break;
6059 case GL_FOG_START:
6060 params[0] = IROUND64(ctx->Fog.Start);
6061 break;
6062 case GL_FRONT_FACE:
6063 params[0] = ENUM_TO_INT64(ctx->Polygon.FrontFace);
6064 break;
6065 case GL_GREEN_BIAS:
6066 params[0] = IROUND64(ctx->Pixel.GreenBias);
6067 break;
6068 case GL_GREEN_BITS:
6069 if (ctx->NewState & _NEW_BUFFERS)
6070 _mesa_update_state(ctx);
6071 params[0] = (GLint64)(ctx->DrawBuffer->Visual.greenBits);
6072 break;
6073 case GL_GREEN_SCALE:
6074 params[0] = IROUND64(ctx->Pixel.GreenScale);
6075 break;
6076 case GL_INDEX_BITS:
6077 if (ctx->NewState & _NEW_BUFFERS)
6078 _mesa_update_state(ctx);
6079 params[0] = (GLint64)(ctx->DrawBuffer->Visual.indexBits);
6080 break;
6081 case GL_INDEX_CLEAR_VALUE:
6082 params[0] = (GLint64)(ctx->Color.ClearIndex);
6083 break;
6084 case GL_INDEX_MODE:
6085 params[0] = BOOLEAN_TO_INT64(GL_FALSE);
6086 break;
6087 case GL_INDEX_OFFSET:
6088 params[0] = (GLint64)(ctx->Pixel.IndexOffset);
6089 break;
6090 case GL_INDEX_SHIFT:
6091 params[0] = (GLint64)(ctx->Pixel.IndexShift);
6092 break;
6093 case GL_INDEX_WRITEMASK:
6094 params[0] = (GLint64)(ctx->Color.IndexMask);
6095 break;
6096 case GL_LIGHT0:
6097 params[0] = BOOLEAN_TO_INT64(ctx->Light.Light[0].Enabled);
6098 break;
6099 case GL_LIGHT1:
6100 params[0] = BOOLEAN_TO_INT64(ctx->Light.Light[1].Enabled);
6101 break;
6102 case GL_LIGHT2:
6103 params[0] = BOOLEAN_TO_INT64(ctx->Light.Light[2].Enabled);
6104 break;
6105 case GL_LIGHT3:
6106 params[0] = BOOLEAN_TO_INT64(ctx->Light.Light[3].Enabled);
6107 break;
6108 case GL_LIGHT4:
6109 params[0] = BOOLEAN_TO_INT64(ctx->Light.Light[4].Enabled);
6110 break;
6111 case GL_LIGHT5:
6112 params[0] = BOOLEAN_TO_INT64(ctx->Light.Light[5].Enabled);
6113 break;
6114 case GL_LIGHT6:
6115 params[0] = BOOLEAN_TO_INT64(ctx->Light.Light[6].Enabled);
6116 break;
6117 case GL_LIGHT7:
6118 params[0] = BOOLEAN_TO_INT64(ctx->Light.Light[7].Enabled);
6119 break;
6120 case GL_LIGHTING:
6121 params[0] = BOOLEAN_TO_INT64(ctx->Light.Enabled);
6122 break;
6123 case GL_LIGHT_MODEL_AMBIENT:
6124 params[0] = FLOAT_TO_INT64(ctx->Light.Model.Ambient[0]);
6125 params[1] = FLOAT_TO_INT64(ctx->Light.Model.Ambient[1]);
6126 params[2] = FLOAT_TO_INT64(ctx->Light.Model.Ambient[2]);
6127 params[3] = FLOAT_TO_INT64(ctx->Light.Model.Ambient[3]);
6128 break;
6129 case GL_LIGHT_MODEL_COLOR_CONTROL:
6130 params[0] = ENUM_TO_INT64(ctx->Light.Model.ColorControl);
6131 break;
6132 case GL_LIGHT_MODEL_LOCAL_VIEWER:
6133 params[0] = BOOLEAN_TO_INT64(ctx->Light.Model.LocalViewer);
6134 break;
6135 case GL_LIGHT_MODEL_TWO_SIDE:
6136 params[0] = BOOLEAN_TO_INT64(ctx->Light.Model.TwoSide);
6137 break;
6138 case GL_LINE_SMOOTH:
6139 params[0] = BOOLEAN_TO_INT64(ctx->Line.SmoothFlag);
6140 break;
6141 case GL_LINE_SMOOTH_HINT:
6142 params[0] = ENUM_TO_INT64(ctx->Hint.LineSmooth);
6143 break;
6144 case GL_LINE_STIPPLE:
6145 params[0] = BOOLEAN_TO_INT64(ctx->Line.StippleFlag);
6146 break;
6147 case GL_LINE_STIPPLE_PATTERN:
6148 params[0] = (GLint64)(ctx->Line.StipplePattern);
6149 break;
6150 case GL_LINE_STIPPLE_REPEAT:
6151 params[0] = (GLint64)(ctx->Line.StippleFactor);
6152 break;
6153 case GL_LINE_WIDTH:
6154 params[0] = IROUND64(ctx->Line.Width);
6155 break;
6156 case GL_LINE_WIDTH_GRANULARITY:
6157 params[0] = IROUND64(ctx->Const.LineWidthGranularity);
6158 break;
6159 case GL_LINE_WIDTH_RANGE:
6160 params[0] = IROUND64(ctx->Const.MinLineWidthAA);
6161 params[1] = IROUND64(ctx->Const.MaxLineWidthAA);
6162 break;
6163 case GL_ALIASED_LINE_WIDTH_RANGE:
6164 params[0] = IROUND64(ctx->Const.MinLineWidth);
6165 params[1] = IROUND64(ctx->Const.MaxLineWidth);
6166 break;
6167 case GL_LIST_BASE:
6168 params[0] = (GLint64)(ctx->List.ListBase);
6169 break;
6170 case GL_LIST_INDEX:
6171 params[0] = (GLint64)((ctx->ListState.CurrentList ? ctx->ListState.CurrentList->Name : 0));
6172 break;
6173 case GL_LIST_MODE:
6174 {
6175 GLenum mode;
6176 if (!ctx->CompileFlag)
6177 mode = 0;
6178 else if (ctx->ExecuteFlag)
6179 mode = GL_COMPILE_AND_EXECUTE;
6180 else
6181 mode = GL_COMPILE;
6182 params[0] = ENUM_TO_INT64(mode);
6183 }
6184 break;
6185 case GL_INDEX_LOGIC_OP:
6186 params[0] = BOOLEAN_TO_INT64(ctx->Color.IndexLogicOpEnabled);
6187 break;
6188 case GL_COLOR_LOGIC_OP:
6189 params[0] = BOOLEAN_TO_INT64(ctx->Color.ColorLogicOpEnabled);
6190 break;
6191 case GL_LOGIC_OP_MODE:
6192 params[0] = ENUM_TO_INT64(ctx->Color.LogicOp);
6193 break;
6194 case GL_MAP1_COLOR_4:
6195 params[0] = BOOLEAN_TO_INT64(ctx->Eval.Map1Color4);
6196 break;
6197 case GL_MAP1_GRID_DOMAIN:
6198 params[0] = IROUND64(ctx->Eval.MapGrid1u1);
6199 params[1] = IROUND64(ctx->Eval.MapGrid1u2);
6200 break;
6201 case GL_MAP1_GRID_SEGMENTS:
6202 params[0] = (GLint64)(ctx->Eval.MapGrid1un);
6203 break;
6204 case GL_MAP1_INDEX:
6205 params[0] = BOOLEAN_TO_INT64(ctx->Eval.Map1Index);
6206 break;
6207 case GL_MAP1_NORMAL:
6208 params[0] = BOOLEAN_TO_INT64(ctx->Eval.Map1Normal);
6209 break;
6210 case GL_MAP1_TEXTURE_COORD_1:
6211 params[0] = BOOLEAN_TO_INT64(ctx->Eval.Map1TextureCoord1);
6212 break;
6213 case GL_MAP1_TEXTURE_COORD_2:
6214 params[0] = BOOLEAN_TO_INT64(ctx->Eval.Map1TextureCoord2);
6215 break;
6216 case GL_MAP1_TEXTURE_COORD_3:
6217 params[0] = BOOLEAN_TO_INT64(ctx->Eval.Map1TextureCoord3);
6218 break;
6219 case GL_MAP1_TEXTURE_COORD_4:
6220 params[0] = BOOLEAN_TO_INT64(ctx->Eval.Map1TextureCoord4);
6221 break;
6222 case GL_MAP1_VERTEX_3:
6223 params[0] = BOOLEAN_TO_INT64(ctx->Eval.Map1Vertex3);
6224 break;
6225 case GL_MAP1_VERTEX_4:
6226 params[0] = BOOLEAN_TO_INT64(ctx->Eval.Map1Vertex4);
6227 break;
6228 case GL_MAP2_COLOR_4:
6229 params[0] = BOOLEAN_TO_INT64(ctx->Eval.Map2Color4);
6230 break;
6231 case GL_MAP2_GRID_DOMAIN:
6232 params[0] = IROUND64(ctx->Eval.MapGrid2u1);
6233 params[1] = IROUND64(ctx->Eval.MapGrid2u2);
6234 params[2] = IROUND64(ctx->Eval.MapGrid2v1);
6235 params[3] = IROUND64(ctx->Eval.MapGrid2v2);
6236 break;
6237 case GL_MAP2_GRID_SEGMENTS:
6238 params[0] = (GLint64)(ctx->Eval.MapGrid2un);
6239 params[1] = (GLint64)(ctx->Eval.MapGrid2vn);
6240 break;
6241 case GL_MAP2_INDEX:
6242 params[0] = BOOLEAN_TO_INT64(ctx->Eval.Map2Index);
6243 break;
6244 case GL_MAP2_NORMAL:
6245 params[0] = BOOLEAN_TO_INT64(ctx->Eval.Map2Normal);
6246 break;
6247 case GL_MAP2_TEXTURE_COORD_1:
6248 params[0] = BOOLEAN_TO_INT64(ctx->Eval.Map2TextureCoord1);
6249 break;
6250 case GL_MAP2_TEXTURE_COORD_2:
6251 params[0] = BOOLEAN_TO_INT64(ctx->Eval.Map2TextureCoord2);
6252 break;
6253 case GL_MAP2_TEXTURE_COORD_3:
6254 params[0] = BOOLEAN_TO_INT64(ctx->Eval.Map2TextureCoord3);
6255 break;
6256 case GL_MAP2_TEXTURE_COORD_4:
6257 params[0] = BOOLEAN_TO_INT64(ctx->Eval.Map2TextureCoord4);
6258 break;
6259 case GL_MAP2_VERTEX_3:
6260 params[0] = BOOLEAN_TO_INT64(ctx->Eval.Map2Vertex3);
6261 break;
6262 case GL_MAP2_VERTEX_4:
6263 params[0] = BOOLEAN_TO_INT64(ctx->Eval.Map2Vertex4);
6264 break;
6265 case GL_MAP_COLOR:
6266 params[0] = BOOLEAN_TO_INT64(ctx->Pixel.MapColorFlag);
6267 break;
6268 case GL_MAP_STENCIL:
6269 params[0] = BOOLEAN_TO_INT64(ctx->Pixel.MapStencilFlag);
6270 break;
6271 case GL_MATRIX_MODE:
6272 params[0] = ENUM_TO_INT64(ctx->Transform.MatrixMode);
6273 break;
6274 case GL_MAX_ATTRIB_STACK_DEPTH:
6275 params[0] = (GLint64)(MAX_ATTRIB_STACK_DEPTH);
6276 break;
6277 case GL_MAX_CLIENT_ATTRIB_STACK_DEPTH:
6278 params[0] = (GLint64)(MAX_CLIENT_ATTRIB_STACK_DEPTH);
6279 break;
6280 case GL_MAX_CLIP_PLANES:
6281 params[0] = (GLint64)(ctx->Const.MaxClipPlanes);
6282 break;
6283 case GL_MAX_ELEMENTS_VERTICES:
6284 params[0] = (GLint64)(ctx->Const.MaxArrayLockSize);
6285 break;
6286 case GL_MAX_ELEMENTS_INDICES:
6287 params[0] = (GLint64)(ctx->Const.MaxArrayLockSize);
6288 break;
6289 case GL_MAX_EVAL_ORDER:
6290 params[0] = (GLint64)(MAX_EVAL_ORDER);
6291 break;
6292 case GL_MAX_LIGHTS:
6293 params[0] = (GLint64)(ctx->Const.MaxLights);
6294 break;
6295 case GL_MAX_LIST_NESTING:
6296 params[0] = (GLint64)(MAX_LIST_NESTING);
6297 break;
6298 case GL_MAX_MODELVIEW_STACK_DEPTH:
6299 params[0] = (GLint64)(MAX_MODELVIEW_STACK_DEPTH);
6300 break;
6301 case GL_MAX_NAME_STACK_DEPTH:
6302 params[0] = (GLint64)(MAX_NAME_STACK_DEPTH);
6303 break;
6304 case GL_MAX_PIXEL_MAP_TABLE:
6305 params[0] = (GLint64)(MAX_PIXEL_MAP_TABLE);
6306 break;
6307 case GL_MAX_PROJECTION_STACK_DEPTH:
6308 params[0] = (GLint64)(MAX_PROJECTION_STACK_DEPTH);
6309 break;
6310 case GL_MAX_TEXTURE_SIZE:
6311 params[0] = (GLint64)(1 << (ctx->Const.MaxTextureLevels - 1));
6312 break;
6313 case GL_MAX_3D_TEXTURE_SIZE:
6314 params[0] = (GLint64)(1 << (ctx->Const.Max3DTextureLevels - 1));
6315 break;
6316 case GL_MAX_TEXTURE_STACK_DEPTH:
6317 params[0] = (GLint64)(MAX_TEXTURE_STACK_DEPTH);
6318 break;
6319 case GL_MAX_VIEWPORT_DIMS:
6320 params[0] = (GLint64)(ctx->Const.MaxViewportWidth);
6321 params[1] = (GLint64)(ctx->Const.MaxViewportHeight);
6322 break;
6323 case GL_MODELVIEW_MATRIX:
6324 {
6325 const GLfloat *matrix = ctx->ModelviewMatrixStack.Top->m;
6326 params[0] = IROUND64(matrix[0]);
6327 params[1] = IROUND64(matrix[1]);
6328 params[2] = IROUND64(matrix[2]);
6329 params[3] = IROUND64(matrix[3]);
6330 params[4] = IROUND64(matrix[4]);
6331 params[5] = IROUND64(matrix[5]);
6332 params[6] = IROUND64(matrix[6]);
6333 params[7] = IROUND64(matrix[7]);
6334 params[8] = IROUND64(matrix[8]);
6335 params[9] = IROUND64(matrix[9]);
6336 params[10] = IROUND64(matrix[10]);
6337 params[11] = IROUND64(matrix[11]);
6338 params[12] = IROUND64(matrix[12]);
6339 params[13] = IROUND64(matrix[13]);
6340 params[14] = IROUND64(matrix[14]);
6341 params[15] = IROUND64(matrix[15]);
6342 }
6343 break;
6344 case GL_MODELVIEW_STACK_DEPTH:
6345 params[0] = (GLint64)(ctx->ModelviewMatrixStack.Depth + 1);
6346 break;
6347 case GL_NAME_STACK_DEPTH:
6348 params[0] = (GLint64)(ctx->Select.NameStackDepth);
6349 break;
6350 case GL_NORMALIZE:
6351 params[0] = BOOLEAN_TO_INT64(ctx->Transform.Normalize);
6352 break;
6353 case GL_PACK_ALIGNMENT:
6354 params[0] = (GLint64)(ctx->Pack.Alignment);
6355 break;
6356 case GL_PACK_LSB_FIRST:
6357 params[0] = BOOLEAN_TO_INT64(ctx->Pack.LsbFirst);
6358 break;
6359 case GL_PACK_ROW_LENGTH:
6360 params[0] = (GLint64)(ctx->Pack.RowLength);
6361 break;
6362 case GL_PACK_SKIP_PIXELS:
6363 params[0] = (GLint64)(ctx->Pack.SkipPixels);
6364 break;
6365 case GL_PACK_SKIP_ROWS:
6366 params[0] = (GLint64)(ctx->Pack.SkipRows);
6367 break;
6368 case GL_PACK_SWAP_BYTES:
6369 params[0] = BOOLEAN_TO_INT64(ctx->Pack.SwapBytes);
6370 break;
6371 case GL_PACK_SKIP_IMAGES_EXT:
6372 params[0] = (GLint64)(ctx->Pack.SkipImages);
6373 break;
6374 case GL_PACK_IMAGE_HEIGHT_EXT:
6375 params[0] = (GLint64)(ctx->Pack.ImageHeight);
6376 break;
6377 case GL_PACK_INVERT_MESA:
6378 params[0] = BOOLEAN_TO_INT64(ctx->Pack.Invert);
6379 break;
6380 case GL_PERSPECTIVE_CORRECTION_HINT:
6381 params[0] = ENUM_TO_INT64(ctx->Hint.PerspectiveCorrection);
6382 break;
6383 case GL_PIXEL_MAP_A_TO_A_SIZE:
6384 params[0] = (GLint64)(ctx->PixelMaps.AtoA.Size);
6385 break;
6386 case GL_PIXEL_MAP_B_TO_B_SIZE:
6387 params[0] = (GLint64)(ctx->PixelMaps.BtoB.Size);
6388 break;
6389 case GL_PIXEL_MAP_G_TO_G_SIZE:
6390 params[0] = (GLint64)(ctx->PixelMaps.GtoG.Size);
6391 break;
6392 case GL_PIXEL_MAP_I_TO_A_SIZE:
6393 params[0] = (GLint64)(ctx->PixelMaps.ItoA.Size);
6394 break;
6395 case GL_PIXEL_MAP_I_TO_B_SIZE:
6396 params[0] = (GLint64)(ctx->PixelMaps.ItoB.Size);
6397 break;
6398 case GL_PIXEL_MAP_I_TO_G_SIZE:
6399 params[0] = (GLint64)(ctx->PixelMaps.ItoG.Size);
6400 break;
6401 case GL_PIXEL_MAP_I_TO_I_SIZE:
6402 params[0] = (GLint64)(ctx->PixelMaps.ItoI.Size);
6403 break;
6404 case GL_PIXEL_MAP_I_TO_R_SIZE:
6405 params[0] = (GLint64)(ctx->PixelMaps.ItoR.Size);
6406 break;
6407 case GL_PIXEL_MAP_R_TO_R_SIZE:
6408 params[0] = (GLint64)(ctx->PixelMaps.RtoR.Size);
6409 break;
6410 case GL_PIXEL_MAP_S_TO_S_SIZE:
6411 params[0] = (GLint64)(ctx->PixelMaps.StoS.Size);
6412 break;
6413 case GL_POINT_SIZE:
6414 params[0] = IROUND64(ctx->Point.Size);
6415 break;
6416 case GL_POINT_SIZE_GRANULARITY:
6417 params[0] = IROUND64(ctx->Const.PointSizeGranularity);
6418 break;
6419 case GL_POINT_SIZE_RANGE:
6420 params[0] = IROUND64(ctx->Const.MinPointSizeAA);
6421 params[1] = IROUND64(ctx->Const.MaxPointSizeAA);
6422 break;
6423 case GL_ALIASED_POINT_SIZE_RANGE:
6424 params[0] = IROUND64(ctx->Const.MinPointSize);
6425 params[1] = IROUND64(ctx->Const.MaxPointSize);
6426 break;
6427 case GL_POINT_SMOOTH:
6428 params[0] = BOOLEAN_TO_INT64(ctx->Point.SmoothFlag);
6429 break;
6430 case GL_POINT_SMOOTH_HINT:
6431 params[0] = ENUM_TO_INT64(ctx->Hint.PointSmooth);
6432 break;
6433 case GL_POINT_SIZE_MIN_EXT:
6434 params[0] = IROUND64(ctx->Point.MinSize);
6435 break;
6436 case GL_POINT_SIZE_MAX_EXT:
6437 params[0] = IROUND64(ctx->Point.MaxSize);
6438 break;
6439 case GL_POINT_FADE_THRESHOLD_SIZE_EXT:
6440 params[0] = IROUND64(ctx->Point.Threshold);
6441 break;
6442 case GL_DISTANCE_ATTENUATION_EXT:
6443 params[0] = IROUND64(ctx->Point.Params[0]);
6444 params[1] = IROUND64(ctx->Point.Params[1]);
6445 params[2] = IROUND64(ctx->Point.Params[2]);
6446 break;
6447 case GL_POLYGON_MODE:
6448 params[0] = ENUM_TO_INT64(ctx->Polygon.FrontMode);
6449 params[1] = ENUM_TO_INT64(ctx->Polygon.BackMode);
6450 break;
6451 case GL_POLYGON_OFFSET_BIAS_EXT:
6452 params[0] = IROUND64(ctx->Polygon.OffsetUnits);
6453 break;
6454 case GL_POLYGON_OFFSET_FACTOR:
6455 params[0] = IROUND64(ctx->Polygon.OffsetFactor );
6456 break;
6457 case GL_POLYGON_OFFSET_UNITS:
6458 params[0] = IROUND64(ctx->Polygon.OffsetUnits );
6459 break;
6460 case GL_POLYGON_OFFSET_POINT:
6461 params[0] = BOOLEAN_TO_INT64(ctx->Polygon.OffsetPoint);
6462 break;
6463 case GL_POLYGON_OFFSET_LINE:
6464 params[0] = BOOLEAN_TO_INT64(ctx->Polygon.OffsetLine);
6465 break;
6466 case GL_POLYGON_OFFSET_FILL:
6467 params[0] = BOOLEAN_TO_INT64(ctx->Polygon.OffsetFill);
6468 break;
6469 case GL_POLYGON_SMOOTH:
6470 params[0] = BOOLEAN_TO_INT64(ctx->Polygon.SmoothFlag);
6471 break;
6472 case GL_POLYGON_SMOOTH_HINT:
6473 params[0] = ENUM_TO_INT64(ctx->Hint.PolygonSmooth);
6474 break;
6475 case GL_POLYGON_STIPPLE:
6476 params[0] = BOOLEAN_TO_INT64(ctx->Polygon.StippleFlag);
6477 break;
6478 case GL_PROJECTION_MATRIX:
6479 {
6480 const GLfloat *matrix = ctx->ProjectionMatrixStack.Top->m;
6481 params[0] = IROUND64(matrix[0]);
6482 params[1] = IROUND64(matrix[1]);
6483 params[2] = IROUND64(matrix[2]);
6484 params[3] = IROUND64(matrix[3]);
6485 params[4] = IROUND64(matrix[4]);
6486 params[5] = IROUND64(matrix[5]);
6487 params[6] = IROUND64(matrix[6]);
6488 params[7] = IROUND64(matrix[7]);
6489 params[8] = IROUND64(matrix[8]);
6490 params[9] = IROUND64(matrix[9]);
6491 params[10] = IROUND64(matrix[10]);
6492 params[11] = IROUND64(matrix[11]);
6493 params[12] = IROUND64(matrix[12]);
6494 params[13] = IROUND64(matrix[13]);
6495 params[14] = IROUND64(matrix[14]);
6496 params[15] = IROUND64(matrix[15]);
6497 }
6498 break;
6499 case GL_PROJECTION_STACK_DEPTH:
6500 params[0] = (GLint64)(ctx->ProjectionMatrixStack.Depth + 1);
6501 break;
6502 case GL_READ_BUFFER:
6503 params[0] = ENUM_TO_INT64(ctx->ReadBuffer->ColorReadBuffer);
6504 break;
6505 case GL_RED_BIAS:
6506 params[0] = IROUND64(ctx->Pixel.RedBias);
6507 break;
6508 case GL_RED_BITS:
6509 if (ctx->NewState & _NEW_BUFFERS)
6510 _mesa_update_state(ctx);
6511 params[0] = (GLint64)(ctx->DrawBuffer->Visual.redBits);
6512 break;
6513 case GL_RED_SCALE:
6514 params[0] = IROUND64(ctx->Pixel.RedScale);
6515 break;
6516 case GL_RENDER_MODE:
6517 params[0] = ENUM_TO_INT64(ctx->RenderMode);
6518 break;
6519 case GL_RESCALE_NORMAL:
6520 params[0] = BOOLEAN_TO_INT64(ctx->Transform.RescaleNormals);
6521 break;
6522 case GL_RGBA_MODE:
6523 params[0] = BOOLEAN_TO_INT64(GL_TRUE);
6524 break;
6525 case GL_SCISSOR_BOX:
6526 params[0] = (GLint64)(ctx->Scissor.X);
6527 params[1] = (GLint64)(ctx->Scissor.Y);
6528 params[2] = (GLint64)(ctx->Scissor.Width);
6529 params[3] = (GLint64)(ctx->Scissor.Height);
6530 break;
6531 case GL_SCISSOR_TEST:
6532 params[0] = BOOLEAN_TO_INT64(ctx->Scissor.Enabled);
6533 break;
6534 case GL_SELECTION_BUFFER_SIZE:
6535 params[0] = (GLint64)(ctx->Select.BufferSize);
6536 break;
6537 case GL_SHADE_MODEL:
6538 params[0] = ENUM_TO_INT64(ctx->Light.ShadeModel);
6539 break;
6540 case GL_SHARED_TEXTURE_PALETTE_EXT:
6541 params[0] = BOOLEAN_TO_INT64(ctx->Texture.SharedPalette);
6542 break;
6543 case GL_STENCIL_BITS:
6544 params[0] = (GLint64)(ctx->DrawBuffer->Visual.stencilBits);
6545 break;
6546 case GL_STENCIL_CLEAR_VALUE:
6547 params[0] = (GLint64)(ctx->Stencil.Clear);
6548 break;
6549 case GL_STENCIL_FAIL:
6550 params[0] = ENUM_TO_INT64(ctx->Stencil.FailFunc[ctx->Stencil.ActiveFace]);
6551 break;
6552 case GL_STENCIL_FUNC:
6553 params[0] = ENUM_TO_INT64(ctx->Stencil.Function[ctx->Stencil.ActiveFace]);
6554 break;
6555 case GL_STENCIL_PASS_DEPTH_FAIL:
6556 params[0] = ENUM_TO_INT64(ctx->Stencil.ZFailFunc[ctx->Stencil.ActiveFace]);
6557 break;
6558 case GL_STENCIL_PASS_DEPTH_PASS:
6559 params[0] = ENUM_TO_INT64(ctx->Stencil.ZPassFunc[ctx->Stencil.ActiveFace]);
6560 break;
6561 case GL_STENCIL_REF:
6562 params[0] = (GLint64)(ctx->Stencil.Ref[ctx->Stencil.ActiveFace]);
6563 break;
6564 case GL_STENCIL_TEST:
6565 params[0] = BOOLEAN_TO_INT64(ctx->Stencil.Enabled);
6566 break;
6567 case GL_STENCIL_VALUE_MASK:
6568 params[0] = (GLint64)(ctx->Stencil.ValueMask[ctx->Stencil.ActiveFace]);
6569 break;
6570 case GL_STENCIL_WRITEMASK:
6571 params[0] = (GLint64)(ctx->Stencil.WriteMask[ctx->Stencil.ActiveFace]);
6572 break;
6573 case GL_STEREO:
6574 params[0] = BOOLEAN_TO_INT64(ctx->DrawBuffer->Visual.stereoMode);
6575 break;
6576 case GL_SUBPIXEL_BITS:
6577 params[0] = (GLint64)(ctx->Const.SubPixelBits);
6578 break;
6579 case GL_TEXTURE_1D:
6580 params[0] = BOOLEAN_TO_INT64(_mesa_IsEnabled(GL_TEXTURE_1D));
6581 break;
6582 case GL_TEXTURE_2D:
6583 params[0] = BOOLEAN_TO_INT64(_mesa_IsEnabled(GL_TEXTURE_2D));
6584 break;
6585 case GL_TEXTURE_3D:
6586 params[0] = BOOLEAN_TO_INT64(_mesa_IsEnabled(GL_TEXTURE_3D));
6587 break;
6588 case GL_TEXTURE_1D_ARRAY_EXT:
6589 CHECK_EXT1(MESA_texture_array);
6590 params[0] = BOOLEAN_TO_INT64(_mesa_IsEnabled(GL_TEXTURE_1D_ARRAY_EXT));
6591 break;
6592 case GL_TEXTURE_2D_ARRAY_EXT:
6593 CHECK_EXT1(MESA_texture_array);
6594 params[0] = BOOLEAN_TO_INT64(_mesa_IsEnabled(GL_TEXTURE_2D_ARRAY_EXT));
6595 break;
6596 case GL_TEXTURE_BINDING_1D:
6597 params[0] = (GLint64)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_INDEX]->Name);
6598 break;
6599 case GL_TEXTURE_BINDING_2D:
6600 params[0] = (GLint64)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_INDEX]->Name);
6601 break;
6602 case GL_TEXTURE_BINDING_3D:
6603 params[0] = (GLint64)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_3D_INDEX]->Name);
6604 break;
6605 case GL_TEXTURE_BINDING_1D_ARRAY_EXT:
6606 CHECK_EXT1(MESA_texture_array);
6607 params[0] = (GLint64)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_ARRAY_INDEX]->Name);
6608 break;
6609 case GL_TEXTURE_BINDING_2D_ARRAY_EXT:
6610 CHECK_EXT1(MESA_texture_array);
6611 params[0] = (GLint64)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_ARRAY_INDEX]->Name);
6612 break;
6613 case GL_MAX_ARRAY_TEXTURE_LAYERS_EXT:
6614 CHECK_EXT1(MESA_texture_array);
6615 params[0] = (GLint64)(ctx->Const.MaxArrayTextureLayers);
6616 break;
6617 case GL_TEXTURE_GEN_S:
6618 params[0] = BOOLEAN_TO_INT64(((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & S_BIT) ? 1 : 0));
6619 break;
6620 case GL_TEXTURE_GEN_T:
6621 params[0] = BOOLEAN_TO_INT64(((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & T_BIT) ? 1 : 0));
6622 break;
6623 case GL_TEXTURE_GEN_R:
6624 params[0] = BOOLEAN_TO_INT64(((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & R_BIT) ? 1 : 0));
6625 break;
6626 case GL_TEXTURE_GEN_Q:
6627 params[0] = BOOLEAN_TO_INT64(((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & Q_BIT) ? 1 : 0));
6628 break;
6629 case GL_TEXTURE_MATRIX:
6630 {
6631 const GLfloat *matrix;
6632 const GLuint unit = ctx->Texture.CurrentUnit;
6633 if (unit >= ctx->Const.MaxTextureCoordUnits) {
6634 _mesa_error(ctx, GL_INVALID_OPERATION, "glGet(texture matrix %u)",
6635 unit);
6636 return;
6637 }
6638 matrix = ctx->TextureMatrixStack[unit].Top->m;
6639 params[0] = IROUND64(matrix[0]);
6640 params[1] = IROUND64(matrix[1]);
6641 params[2] = IROUND64(matrix[2]);
6642 params[3] = IROUND64(matrix[3]);
6643 params[4] = IROUND64(matrix[4]);
6644 params[5] = IROUND64(matrix[5]);
6645 params[6] = IROUND64(matrix[6]);
6646 params[7] = IROUND64(matrix[7]);
6647 params[8] = IROUND64(matrix[8]);
6648 params[9] = IROUND64(matrix[9]);
6649 params[10] = IROUND64(matrix[10]);
6650 params[11] = IROUND64(matrix[11]);
6651 params[12] = IROUND64(matrix[12]);
6652 params[13] = IROUND64(matrix[13]);
6653 params[14] = IROUND64(matrix[14]);
6654 params[15] = IROUND64(matrix[15]);
6655 }
6656 break;
6657 case GL_TEXTURE_STACK_DEPTH:
6658 {
6659 const GLuint unit = ctx->Texture.CurrentUnit;
6660 if (unit >= ctx->Const.MaxTextureCoordUnits) {
6661 _mesa_error(ctx, GL_INVALID_OPERATION,
6662 "glGet(texture stack depth, unit %u)", unit);
6663 return;
6664 }
6665 params[0] = (GLint64)(ctx->TextureMatrixStack[unit].Depth + 1);
6666 }
6667 break;
6668 case GL_UNPACK_ALIGNMENT:
6669 params[0] = (GLint64)(ctx->Unpack.Alignment);
6670 break;
6671 case GL_UNPACK_LSB_FIRST:
6672 params[0] = BOOLEAN_TO_INT64(ctx->Unpack.LsbFirst);
6673 break;
6674 case GL_UNPACK_ROW_LENGTH:
6675 params[0] = (GLint64)(ctx->Unpack.RowLength);
6676 break;
6677 case GL_UNPACK_SKIP_PIXELS:
6678 params[0] = (GLint64)(ctx->Unpack.SkipPixels);
6679 break;
6680 case GL_UNPACK_SKIP_ROWS:
6681 params[0] = (GLint64)(ctx->Unpack.SkipRows);
6682 break;
6683 case GL_UNPACK_SWAP_BYTES:
6684 params[0] = BOOLEAN_TO_INT64(ctx->Unpack.SwapBytes);
6685 break;
6686 case GL_UNPACK_SKIP_IMAGES_EXT:
6687 params[0] = (GLint64)(ctx->Unpack.SkipImages);
6688 break;
6689 case GL_UNPACK_IMAGE_HEIGHT_EXT:
6690 params[0] = (GLint64)(ctx->Unpack.ImageHeight);
6691 break;
6692 case GL_UNPACK_CLIENT_STORAGE_APPLE:
6693 params[0] = BOOLEAN_TO_INT64(ctx->Unpack.ClientStorage);
6694 break;
6695 case GL_VIEWPORT:
6696 params[0] = (GLint64)(ctx->Viewport.X);
6697 params[1] = (GLint64)(ctx->Viewport.Y);
6698 params[2] = (GLint64)(ctx->Viewport.Width);
6699 params[3] = (GLint64)(ctx->Viewport.Height);
6700 break;
6701 case GL_ZOOM_X:
6702 params[0] = IROUND64(ctx->Pixel.ZoomX);
6703 break;
6704 case GL_ZOOM_Y:
6705 params[0] = IROUND64(ctx->Pixel.ZoomY);
6706 break;
6707 case GL_VERTEX_ARRAY:
6708 params[0] = BOOLEAN_TO_INT64(ctx->Array.ArrayObj->Vertex.Enabled);
6709 break;
6710 case GL_VERTEX_ARRAY_SIZE:
6711 params[0] = (GLint64)(ctx->Array.ArrayObj->Vertex.Size);
6712 break;
6713 case GL_VERTEX_ARRAY_TYPE:
6714 params[0] = ENUM_TO_INT64(ctx->Array.ArrayObj->Vertex.Type);
6715 break;
6716 case GL_VERTEX_ARRAY_STRIDE:
6717 params[0] = (GLint64)(ctx->Array.ArrayObj->Vertex.Stride);
6718 break;
6719 case GL_VERTEX_ARRAY_COUNT_EXT:
6720 params[0] = (GLint64)(0);
6721 break;
6722 case GL_NORMAL_ARRAY:
6723 params[0] = ENUM_TO_INT64(ctx->Array.ArrayObj->Normal.Enabled);
6724 break;
6725 case GL_NORMAL_ARRAY_TYPE:
6726 params[0] = ENUM_TO_INT64(ctx->Array.ArrayObj->Normal.Type);
6727 break;
6728 case GL_NORMAL_ARRAY_STRIDE:
6729 params[0] = (GLint64)(ctx->Array.ArrayObj->Normal.Stride);
6730 break;
6731 case GL_NORMAL_ARRAY_COUNT_EXT:
6732 params[0] = (GLint64)(0);
6733 break;
6734 case GL_COLOR_ARRAY:
6735 params[0] = BOOLEAN_TO_INT64(ctx->Array.ArrayObj->Color.Enabled);
6736 break;
6737 case GL_COLOR_ARRAY_SIZE:
6738 params[0] = (GLint64)(ctx->Array.ArrayObj->Color.Size);
6739 break;
6740 case GL_COLOR_ARRAY_TYPE:
6741 params[0] = ENUM_TO_INT64(ctx->Array.ArrayObj->Color.Type);
6742 break;
6743 case GL_COLOR_ARRAY_STRIDE:
6744 params[0] = (GLint64)(ctx->Array.ArrayObj->Color.Stride);
6745 break;
6746 case GL_COLOR_ARRAY_COUNT_EXT:
6747 params[0] = (GLint64)(0);
6748 break;
6749 case GL_INDEX_ARRAY:
6750 params[0] = BOOLEAN_TO_INT64(ctx->Array.ArrayObj->Index.Enabled);
6751 break;
6752 case GL_INDEX_ARRAY_TYPE:
6753 params[0] = ENUM_TO_INT64(ctx->Array.ArrayObj->Index.Type);
6754 break;
6755 case GL_INDEX_ARRAY_STRIDE:
6756 params[0] = (GLint64)(ctx->Array.ArrayObj->Index.Stride);
6757 break;
6758 case GL_INDEX_ARRAY_COUNT_EXT:
6759 params[0] = (GLint64)(0);
6760 break;
6761 case GL_TEXTURE_COORD_ARRAY:
6762 params[0] = BOOLEAN_TO_INT64(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Enabled);
6763 break;
6764 case GL_TEXTURE_COORD_ARRAY_SIZE:
6765 params[0] = (GLint64)(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Size);
6766 break;
6767 case GL_TEXTURE_COORD_ARRAY_TYPE:
6768 params[0] = ENUM_TO_INT64(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Type);
6769 break;
6770 case GL_TEXTURE_COORD_ARRAY_STRIDE:
6771 params[0] = (GLint64)(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Stride);
6772 break;
6773 case GL_TEXTURE_COORD_ARRAY_COUNT_EXT:
6774 params[0] = (GLint64)(0);
6775 break;
6776 case GL_EDGE_FLAG_ARRAY:
6777 params[0] = BOOLEAN_TO_INT64(ctx->Array.ArrayObj->EdgeFlag.Enabled);
6778 break;
6779 case GL_EDGE_FLAG_ARRAY_STRIDE:
6780 params[0] = (GLint64)(ctx->Array.ArrayObj->EdgeFlag.Stride);
6781 break;
6782 case GL_EDGE_FLAG_ARRAY_COUNT_EXT:
6783 params[0] = (GLint64)(0);
6784 break;
6785 case GL_MAX_TEXTURE_UNITS_ARB:
6786 CHECK_EXT1(ARB_multitexture);
6787 params[0] = (GLint64)(ctx->Const.MaxTextureUnits);
6788 break;
6789 case GL_ACTIVE_TEXTURE_ARB:
6790 CHECK_EXT1(ARB_multitexture);
6791 params[0] = (GLint64)(GL_TEXTURE0_ARB + ctx->Texture.CurrentUnit);
6792 break;
6793 case GL_CLIENT_ACTIVE_TEXTURE_ARB:
6794 CHECK_EXT1(ARB_multitexture);
6795 params[0] = (GLint64)(GL_TEXTURE0_ARB + ctx->Array.ActiveTexture);
6796 break;
6797 case GL_TEXTURE_CUBE_MAP_ARB:
6798 CHECK_EXT1(ARB_texture_cube_map);
6799 params[0] = BOOLEAN_TO_INT64(_mesa_IsEnabled(GL_TEXTURE_CUBE_MAP_ARB));
6800 break;
6801 case GL_TEXTURE_BINDING_CUBE_MAP_ARB:
6802 CHECK_EXT1(ARB_texture_cube_map);
6803 params[0] = (GLint64)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_CUBE_INDEX]->Name);
6804 break;
6805 case GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB:
6806 CHECK_EXT1(ARB_texture_cube_map);
6807 params[0] = (GLint64)((1 << (ctx->Const.MaxCubeTextureLevels - 1)));
6808 break;
6809 case GL_TEXTURE_COMPRESSION_HINT_ARB:
6810 params[0] = (GLint64)(ctx->Hint.TextureCompression);
6811 break;
6812 case GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB:
6813 params[0] = (GLint64)(_mesa_get_compressed_formats(ctx, NULL, GL_FALSE));
6814 break;
6815 case GL_COMPRESSED_TEXTURE_FORMATS_ARB:
6816 {
6817 GLint formats[100];
6818 GLuint i, n = _mesa_get_compressed_formats(ctx, formats, GL_FALSE);
6819 ASSERT(n <= 100);
6820 for (i = 0; i < n; i++)
6821 params[i] = ENUM_TO_INT64(formats[i]);
6822 }
6823 break;
6824 case GL_ARRAY_ELEMENT_LOCK_FIRST_EXT:
6825 CHECK_EXT1(EXT_compiled_vertex_array);
6826 params[0] = (GLint64)(ctx->Array.LockFirst);
6827 break;
6828 case GL_ARRAY_ELEMENT_LOCK_COUNT_EXT:
6829 CHECK_EXT1(EXT_compiled_vertex_array);
6830 params[0] = (GLint64)(ctx->Array.LockCount);
6831 break;
6832 case GL_TRANSPOSE_COLOR_MATRIX_ARB:
6833 {
6834 const GLfloat *matrix = ctx->ColorMatrixStack.Top->m;
6835 params[0] = IROUND64(matrix[0]);
6836 params[1] = IROUND64(matrix[4]);
6837 params[2] = IROUND64(matrix[8]);
6838 params[3] = IROUND64(matrix[12]);
6839 params[4] = IROUND64(matrix[1]);
6840 params[5] = IROUND64(matrix[5]);
6841 params[6] = IROUND64(matrix[9]);
6842 params[7] = IROUND64(matrix[13]);
6843 params[8] = IROUND64(matrix[2]);
6844 params[9] = IROUND64(matrix[6]);
6845 params[10] = IROUND64(matrix[10]);
6846 params[11] = IROUND64(matrix[14]);
6847 params[12] = IROUND64(matrix[3]);
6848 params[13] = IROUND64(matrix[7]);
6849 params[14] = IROUND64(matrix[11]);
6850 params[15] = IROUND64(matrix[15]);
6851 }
6852 break;
6853 case GL_TRANSPOSE_MODELVIEW_MATRIX_ARB:
6854 {
6855 const GLfloat *matrix = ctx->ModelviewMatrixStack.Top->m;
6856 params[0] = IROUND64(matrix[0]);
6857 params[1] = IROUND64(matrix[4]);
6858 params[2] = IROUND64(matrix[8]);
6859 params[3] = IROUND64(matrix[12]);
6860 params[4] = IROUND64(matrix[1]);
6861 params[5] = IROUND64(matrix[5]);
6862 params[6] = IROUND64(matrix[9]);
6863 params[7] = IROUND64(matrix[13]);
6864 params[8] = IROUND64(matrix[2]);
6865 params[9] = IROUND64(matrix[6]);
6866 params[10] = IROUND64(matrix[10]);
6867 params[11] = IROUND64(matrix[14]);
6868 params[12] = IROUND64(matrix[3]);
6869 params[13] = IROUND64(matrix[7]);
6870 params[14] = IROUND64(matrix[11]);
6871 params[15] = IROUND64(matrix[15]);
6872 }
6873 break;
6874 case GL_TRANSPOSE_PROJECTION_MATRIX_ARB:
6875 {
6876 const GLfloat *matrix = ctx->ProjectionMatrixStack.Top->m;
6877 params[0] = IROUND64(matrix[0]);
6878 params[1] = IROUND64(matrix[4]);
6879 params[2] = IROUND64(matrix[8]);
6880 params[3] = IROUND64(matrix[12]);
6881 params[4] = IROUND64(matrix[1]);
6882 params[5] = IROUND64(matrix[5]);
6883 params[6] = IROUND64(matrix[9]);
6884 params[7] = IROUND64(matrix[13]);
6885 params[8] = IROUND64(matrix[2]);
6886 params[9] = IROUND64(matrix[6]);
6887 params[10] = IROUND64(matrix[10]);
6888 params[11] = IROUND64(matrix[14]);
6889 params[12] = IROUND64(matrix[3]);
6890 params[13] = IROUND64(matrix[7]);
6891 params[14] = IROUND64(matrix[11]);
6892 params[15] = IROUND64(matrix[15]);
6893 }
6894 break;
6895 case GL_TRANSPOSE_TEXTURE_MATRIX_ARB:
6896 {
6897 const GLfloat *matrix = ctx->TextureMatrixStack[ctx->Texture.CurrentUnit].Top->m;
6898 params[0] = IROUND64(matrix[0]);
6899 params[1] = IROUND64(matrix[4]);
6900 params[2] = IROUND64(matrix[8]);
6901 params[3] = IROUND64(matrix[12]);
6902 params[4] = IROUND64(matrix[1]);
6903 params[5] = IROUND64(matrix[5]);
6904 params[6] = IROUND64(matrix[9]);
6905 params[7] = IROUND64(matrix[13]);
6906 params[8] = IROUND64(matrix[2]);
6907 params[9] = IROUND64(matrix[6]);
6908 params[10] = IROUND64(matrix[10]);
6909 params[11] = IROUND64(matrix[14]);
6910 params[12] = IROUND64(matrix[3]);
6911 params[13] = IROUND64(matrix[7]);
6912 params[14] = IROUND64(matrix[11]);
6913 params[15] = IROUND64(matrix[15]);
6914 }
6915 break;
6916 case GL_COLOR_MATRIX_SGI:
6917 {
6918 const GLfloat *matrix = ctx->ColorMatrixStack.Top->m;
6919 params[0] = IROUND64(matrix[0]);
6920 params[1] = IROUND64(matrix[1]);
6921 params[2] = IROUND64(matrix[2]);
6922 params[3] = IROUND64(matrix[3]);
6923 params[4] = IROUND64(matrix[4]);
6924 params[5] = IROUND64(matrix[5]);
6925 params[6] = IROUND64(matrix[6]);
6926 params[7] = IROUND64(matrix[7]);
6927 params[8] = IROUND64(matrix[8]);
6928 params[9] = IROUND64(matrix[9]);
6929 params[10] = IROUND64(matrix[10]);
6930 params[11] = IROUND64(matrix[11]);
6931 params[12] = IROUND64(matrix[12]);
6932 params[13] = IROUND64(matrix[13]);
6933 params[14] = IROUND64(matrix[14]);
6934 params[15] = IROUND64(matrix[15]);
6935 }
6936 break;
6937 case GL_COLOR_MATRIX_STACK_DEPTH_SGI:
6938 params[0] = (GLint64)(ctx->ColorMatrixStack.Depth + 1);
6939 break;
6940 case GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI:
6941 params[0] = (GLint64)(MAX_COLOR_STACK_DEPTH);
6942 break;
6943 case GL_POST_COLOR_MATRIX_RED_SCALE_SGI:
6944 params[0] = IROUND64(ctx->Pixel.PostColorMatrixScale[0]);
6945 break;
6946 case GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI:
6947 params[0] = IROUND64(ctx->Pixel.PostColorMatrixScale[1]);
6948 break;
6949 case GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI:
6950 params[0] = IROUND64(ctx->Pixel.PostColorMatrixScale[2]);
6951 break;
6952 case GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI:
6953 params[0] = IROUND64(ctx->Pixel.PostColorMatrixScale[3]);
6954 break;
6955 case GL_POST_COLOR_MATRIX_RED_BIAS_SGI:
6956 params[0] = IROUND64(ctx->Pixel.PostColorMatrixBias[0]);
6957 break;
6958 case GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI:
6959 params[0] = IROUND64(ctx->Pixel.PostColorMatrixBias[1]);
6960 break;
6961 case GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI:
6962 params[0] = IROUND64(ctx->Pixel.PostColorMatrixBias[2]);
6963 break;
6964 case GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI:
6965 params[0] = IROUND64(ctx->Pixel.PostColorMatrixBias[3]);
6966 break;
6967 case GL_CONVOLUTION_1D_EXT:
6968 CHECK_EXT1(EXT_convolution);
6969 params[0] = BOOLEAN_TO_INT64(ctx->Pixel.Convolution1DEnabled);
6970 break;
6971 case GL_CONVOLUTION_2D_EXT:
6972 CHECK_EXT1(EXT_convolution);
6973 params[0] = BOOLEAN_TO_INT64(ctx->Pixel.Convolution2DEnabled);
6974 break;
6975 case GL_SEPARABLE_2D_EXT:
6976 CHECK_EXT1(EXT_convolution);
6977 params[0] = BOOLEAN_TO_INT64(ctx->Pixel.Separable2DEnabled);
6978 break;
6979 case GL_POST_CONVOLUTION_RED_SCALE_EXT:
6980 CHECK_EXT1(EXT_convolution);
6981 params[0] = IROUND64(ctx->Pixel.PostConvolutionScale[0]);
6982 break;
6983 case GL_POST_CONVOLUTION_GREEN_SCALE_EXT:
6984 CHECK_EXT1(EXT_convolution);
6985 params[0] = IROUND64(ctx->Pixel.PostConvolutionScale[1]);
6986 break;
6987 case GL_POST_CONVOLUTION_BLUE_SCALE_EXT:
6988 CHECK_EXT1(EXT_convolution);
6989 params[0] = IROUND64(ctx->Pixel.PostConvolutionScale[2]);
6990 break;
6991 case GL_POST_CONVOLUTION_ALPHA_SCALE_EXT:
6992 CHECK_EXT1(EXT_convolution);
6993 params[0] = IROUND64(ctx->Pixel.PostConvolutionScale[3]);
6994 break;
6995 case GL_POST_CONVOLUTION_RED_BIAS_EXT:
6996 CHECK_EXT1(EXT_convolution);
6997 params[0] = IROUND64(ctx->Pixel.PostConvolutionBias[0]);
6998 break;
6999 case GL_POST_CONVOLUTION_GREEN_BIAS_EXT:
7000 CHECK_EXT1(EXT_convolution);
7001 params[0] = IROUND64(ctx->Pixel.PostConvolutionBias[1]);
7002 break;
7003 case GL_POST_CONVOLUTION_BLUE_BIAS_EXT:
7004 CHECK_EXT1(EXT_convolution);
7005 params[0] = IROUND64(ctx->Pixel.PostConvolutionBias[2]);
7006 break;
7007 case GL_POST_CONVOLUTION_ALPHA_BIAS_EXT:
7008 CHECK_EXT1(EXT_convolution);
7009 params[0] = IROUND64(ctx->Pixel.PostConvolutionBias[3]);
7010 break;
7011 case GL_HISTOGRAM:
7012 CHECK_EXT1(EXT_histogram);
7013 params[0] = BOOLEAN_TO_INT64(ctx->Pixel.HistogramEnabled);
7014 break;
7015 case GL_MINMAX:
7016 CHECK_EXT1(EXT_histogram);
7017 params[0] = BOOLEAN_TO_INT64(ctx->Pixel.MinMaxEnabled);
7018 break;
7019 case GL_COLOR_TABLE_SGI:
7020 CHECK_EXT1(SGI_color_table);
7021 params[0] = BOOLEAN_TO_INT64(ctx->Pixel.ColorTableEnabled[COLORTABLE_PRECONVOLUTION]);
7022 break;
7023 case GL_POST_CONVOLUTION_COLOR_TABLE_SGI:
7024 CHECK_EXT1(SGI_color_table);
7025 params[0] = BOOLEAN_TO_INT64(ctx->Pixel.ColorTableEnabled[COLORTABLE_POSTCONVOLUTION]);
7026 break;
7027 case GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI:
7028 CHECK_EXT1(SGI_color_table);
7029 params[0] = BOOLEAN_TO_INT64(ctx->Pixel.ColorTableEnabled[COLORTABLE_POSTCOLORMATRIX]);
7030 break;
7031 case GL_TEXTURE_COLOR_TABLE_SGI:
7032 CHECK_EXT1(SGI_texture_color_table);
7033 params[0] = BOOLEAN_TO_INT64(ctx->Texture.Unit[ctx->Texture.CurrentUnit].ColorTableEnabled);
7034 break;
7035 case GL_COLOR_SUM_EXT:
7036 CHECK_EXT2(EXT_secondary_color, ARB_vertex_program);
7037 params[0] = BOOLEAN_TO_INT64(ctx->Fog.ColorSumEnabled);
7038 break;
7039 case GL_CURRENT_SECONDARY_COLOR_EXT:
7040 CHECK_EXT1(EXT_secondary_color);
7041 FLUSH_CURRENT(ctx, 0);
7042 params[0] = FLOAT_TO_INT64(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][0]);
7043 params[1] = FLOAT_TO_INT64(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][1]);
7044 params[2] = FLOAT_TO_INT64(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][2]);
7045 params[3] = FLOAT_TO_INT64(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][3]);
7046 break;
7047 case GL_SECONDARY_COLOR_ARRAY_EXT:
7048 CHECK_EXT1(EXT_secondary_color);
7049 params[0] = BOOLEAN_TO_INT64(ctx->Array.ArrayObj->SecondaryColor.Enabled);
7050 break;
7051 case GL_SECONDARY_COLOR_ARRAY_TYPE_EXT:
7052 CHECK_EXT1(EXT_secondary_color);
7053 params[0] = ENUM_TO_INT64(ctx->Array.ArrayObj->SecondaryColor.Type);
7054 break;
7055 case GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT:
7056 CHECK_EXT1(EXT_secondary_color);
7057 params[0] = (GLint64)(ctx->Array.ArrayObj->SecondaryColor.Stride);
7058 break;
7059 case GL_SECONDARY_COLOR_ARRAY_SIZE_EXT:
7060 CHECK_EXT1(EXT_secondary_color);
7061 params[0] = (GLint64)(ctx->Array.ArrayObj->SecondaryColor.Size);
7062 break;
7063 case GL_CURRENT_FOG_COORDINATE_EXT:
7064 CHECK_EXT1(EXT_fog_coord);
7065 FLUSH_CURRENT(ctx, 0);
7066 params[0] = IROUND64(ctx->Current.Attrib[VERT_ATTRIB_FOG][0]);
7067 break;
7068 case GL_FOG_COORDINATE_ARRAY_EXT:
7069 CHECK_EXT1(EXT_fog_coord);
7070 params[0] = BOOLEAN_TO_INT64(ctx->Array.ArrayObj->FogCoord.Enabled);
7071 break;
7072 case GL_FOG_COORDINATE_ARRAY_TYPE_EXT:
7073 CHECK_EXT1(EXT_fog_coord);
7074 params[0] = ENUM_TO_INT64(ctx->Array.ArrayObj->FogCoord.Type);
7075 break;
7076 case GL_FOG_COORDINATE_ARRAY_STRIDE_EXT:
7077 CHECK_EXT1(EXT_fog_coord);
7078 params[0] = (GLint64)(ctx->Array.ArrayObj->FogCoord.Stride);
7079 break;
7080 case GL_FOG_COORDINATE_SOURCE_EXT:
7081 CHECK_EXT1(EXT_fog_coord);
7082 params[0] = ENUM_TO_INT64(ctx->Fog.FogCoordinateSource);
7083 break;
7084 case GL_MAX_TEXTURE_LOD_BIAS_EXT:
7085 CHECK_EXT1(EXT_texture_lod_bias);
7086 params[0] = IROUND64(ctx->Const.MaxTextureLodBias);
7087 break;
7088 case GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT:
7089 CHECK_EXT1(EXT_texture_filter_anisotropic);
7090 params[0] = IROUND64(ctx->Const.MaxTextureMaxAnisotropy);
7091 break;
7092 case GL_MULTISAMPLE_ARB:
7093 params[0] = BOOLEAN_TO_INT64(ctx->Multisample.Enabled);
7094 break;
7095 case GL_SAMPLE_ALPHA_TO_COVERAGE_ARB:
7096 params[0] = BOOLEAN_TO_INT64(ctx->Multisample.SampleAlphaToCoverage);
7097 break;
7098 case GL_SAMPLE_ALPHA_TO_ONE_ARB:
7099 params[0] = BOOLEAN_TO_INT64(ctx->Multisample.SampleAlphaToOne);
7100 break;
7101 case GL_SAMPLE_COVERAGE_ARB:
7102 params[0] = BOOLEAN_TO_INT64(ctx->Multisample.SampleCoverage);
7103 break;
7104 case GL_SAMPLE_COVERAGE_VALUE_ARB:
7105 params[0] = IROUND64(ctx->Multisample.SampleCoverageValue);
7106 break;
7107 case GL_SAMPLE_COVERAGE_INVERT_ARB:
7108 params[0] = BOOLEAN_TO_INT64(ctx->Multisample.SampleCoverageInvert);
7109 break;
7110 case GL_SAMPLE_BUFFERS_ARB:
7111 params[0] = (GLint64)(ctx->DrawBuffer->Visual.sampleBuffers);
7112 break;
7113 case GL_SAMPLES_ARB:
7114 params[0] = (GLint64)(ctx->DrawBuffer->Visual.samples);
7115 break;
7116 case GL_RASTER_POSITION_UNCLIPPED_IBM:
7117 CHECK_EXT1(IBM_rasterpos_clip);
7118 params[0] = BOOLEAN_TO_INT64(ctx->Transform.RasterPositionUnclipped);
7119 break;
7120 case GL_POINT_SPRITE_NV:
7121 CHECK_EXT2(NV_point_sprite, ARB_point_sprite);
7122 params[0] = BOOLEAN_TO_INT64(ctx->Point.PointSprite);
7123 break;
7124 case GL_POINT_SPRITE_R_MODE_NV:
7125 CHECK_EXT1(NV_point_sprite);
7126 params[0] = ENUM_TO_INT64(ctx->Point.SpriteRMode);
7127 break;
7128 case GL_POINT_SPRITE_COORD_ORIGIN:
7129 CHECK_EXT2(NV_point_sprite, ARB_point_sprite);
7130 params[0] = ENUM_TO_INT64(ctx->Point.SpriteOrigin);
7131 break;
7132 case GL_GENERATE_MIPMAP_HINT_SGIS:
7133 CHECK_EXT1(SGIS_generate_mipmap);
7134 params[0] = ENUM_TO_INT64(ctx->Hint.GenerateMipmap);
7135 break;
7136 case GL_VERTEX_PROGRAM_BINDING_NV:
7137 CHECK_EXT1(NV_vertex_program);
7138 params[0] = (GLint64)((ctx->VertexProgram.Current ? ctx->VertexProgram.Current->Base.Id : 0));
7139 break;
7140 case GL_VERTEX_ATTRIB_ARRAY0_NV:
7141 CHECK_EXT1(NV_vertex_program);
7142 params[0] = BOOLEAN_TO_INT64(ctx->Array.ArrayObj->VertexAttrib[0].Enabled);
7143 break;
7144 case GL_VERTEX_ATTRIB_ARRAY1_NV:
7145 CHECK_EXT1(NV_vertex_program);
7146 params[0] = BOOLEAN_TO_INT64(ctx->Array.ArrayObj->VertexAttrib[1].Enabled);
7147 break;
7148 case GL_VERTEX_ATTRIB_ARRAY2_NV:
7149 CHECK_EXT1(NV_vertex_program);
7150 params[0] = BOOLEAN_TO_INT64(ctx->Array.ArrayObj->VertexAttrib[2].Enabled);
7151 break;
7152 case GL_VERTEX_ATTRIB_ARRAY3_NV:
7153 CHECK_EXT1(NV_vertex_program);
7154 params[0] = BOOLEAN_TO_INT64(ctx->Array.ArrayObj->VertexAttrib[3].Enabled);
7155 break;
7156 case GL_VERTEX_ATTRIB_ARRAY4_NV:
7157 CHECK_EXT1(NV_vertex_program);
7158 params[0] = BOOLEAN_TO_INT64(ctx->Array.ArrayObj->VertexAttrib[4].Enabled);
7159 break;
7160 case GL_VERTEX_ATTRIB_ARRAY5_NV:
7161 CHECK_EXT1(NV_vertex_program);
7162 params[0] = BOOLEAN_TO_INT64(ctx->Array.ArrayObj->VertexAttrib[5].Enabled);
7163 break;
7164 case GL_VERTEX_ATTRIB_ARRAY6_NV:
7165 CHECK_EXT1(NV_vertex_program);
7166 params[0] = BOOLEAN_TO_INT64(ctx->Array.ArrayObj->VertexAttrib[6].Enabled);
7167 break;
7168 case GL_VERTEX_ATTRIB_ARRAY7_NV:
7169 CHECK_EXT1(NV_vertex_program);
7170 params[0] = BOOLEAN_TO_INT64(ctx->Array.ArrayObj->VertexAttrib[7].Enabled);
7171 break;
7172 case GL_VERTEX_ATTRIB_ARRAY8_NV:
7173 CHECK_EXT1(NV_vertex_program);
7174 params[0] = BOOLEAN_TO_INT64(ctx->Array.ArrayObj->VertexAttrib[8].Enabled);
7175 break;
7176 case GL_VERTEX_ATTRIB_ARRAY9_NV:
7177 CHECK_EXT1(NV_vertex_program);
7178 params[0] = BOOLEAN_TO_INT64(ctx->Array.ArrayObj->VertexAttrib[9].Enabled);
7179 break;
7180 case GL_VERTEX_ATTRIB_ARRAY10_NV:
7181 CHECK_EXT1(NV_vertex_program);
7182 params[0] = BOOLEAN_TO_INT64(ctx->Array.ArrayObj->VertexAttrib[10].Enabled);
7183 break;
7184 case GL_VERTEX_ATTRIB_ARRAY11_NV:
7185 CHECK_EXT1(NV_vertex_program);
7186 params[0] = BOOLEAN_TO_INT64(ctx->Array.ArrayObj->VertexAttrib[11].Enabled);
7187 break;
7188 case GL_VERTEX_ATTRIB_ARRAY12_NV:
7189 CHECK_EXT1(NV_vertex_program);
7190 params[0] = BOOLEAN_TO_INT64(ctx->Array.ArrayObj->VertexAttrib[12].Enabled);
7191 break;
7192 case GL_VERTEX_ATTRIB_ARRAY13_NV:
7193 CHECK_EXT1(NV_vertex_program);
7194 params[0] = BOOLEAN_TO_INT64(ctx->Array.ArrayObj->VertexAttrib[13].Enabled);
7195 break;
7196 case GL_VERTEX_ATTRIB_ARRAY14_NV:
7197 CHECK_EXT1(NV_vertex_program);
7198 params[0] = BOOLEAN_TO_INT64(ctx->Array.ArrayObj->VertexAttrib[14].Enabled);
7199 break;
7200 case GL_VERTEX_ATTRIB_ARRAY15_NV:
7201 CHECK_EXT1(NV_vertex_program);
7202 params[0] = BOOLEAN_TO_INT64(ctx->Array.ArrayObj->VertexAttrib[15].Enabled);
7203 break;
7204 case GL_MAP1_VERTEX_ATTRIB0_4_NV:
7205 CHECK_EXT1(NV_vertex_program);
7206 params[0] = BOOLEAN_TO_INT64(ctx->Eval.Map1Attrib[0]);
7207 break;
7208 case GL_MAP1_VERTEX_ATTRIB1_4_NV:
7209 CHECK_EXT1(NV_vertex_program);
7210 params[0] = BOOLEAN_TO_INT64(ctx->Eval.Map1Attrib[1]);
7211 break;
7212 case GL_MAP1_VERTEX_ATTRIB2_4_NV:
7213 CHECK_EXT1(NV_vertex_program);
7214 params[0] = BOOLEAN_TO_INT64(ctx->Eval.Map1Attrib[2]);
7215 break;
7216 case GL_MAP1_VERTEX_ATTRIB3_4_NV:
7217 CHECK_EXT1(NV_vertex_program);
7218 params[0] = BOOLEAN_TO_INT64(ctx->Eval.Map1Attrib[3]);
7219 break;
7220 case GL_MAP1_VERTEX_ATTRIB4_4_NV:
7221 CHECK_EXT1(NV_vertex_program);
7222 params[0] = BOOLEAN_TO_INT64(ctx->Eval.Map1Attrib[4]);
7223 break;
7224 case GL_MAP1_VERTEX_ATTRIB5_4_NV:
7225 CHECK_EXT1(NV_vertex_program);
7226 params[0] = BOOLEAN_TO_INT64(ctx->Eval.Map1Attrib[5]);
7227 break;
7228 case GL_MAP1_VERTEX_ATTRIB6_4_NV:
7229 CHECK_EXT1(NV_vertex_program);
7230 params[0] = BOOLEAN_TO_INT64(ctx->Eval.Map1Attrib[6]);
7231 break;
7232 case GL_MAP1_VERTEX_ATTRIB7_4_NV:
7233 CHECK_EXT1(NV_vertex_program);
7234 params[0] = BOOLEAN_TO_INT64(ctx->Eval.Map1Attrib[7]);
7235 break;
7236 case GL_MAP1_VERTEX_ATTRIB8_4_NV:
7237 CHECK_EXT1(NV_vertex_program);
7238 params[0] = BOOLEAN_TO_INT64(ctx->Eval.Map1Attrib[8]);
7239 break;
7240 case GL_MAP1_VERTEX_ATTRIB9_4_NV:
7241 CHECK_EXT1(NV_vertex_program);
7242 params[0] = BOOLEAN_TO_INT64(ctx->Eval.Map1Attrib[9]);
7243 break;
7244 case GL_MAP1_VERTEX_ATTRIB10_4_NV:
7245 CHECK_EXT1(NV_vertex_program);
7246 params[0] = BOOLEAN_TO_INT64(ctx->Eval.Map1Attrib[10]);
7247 break;
7248 case GL_MAP1_VERTEX_ATTRIB11_4_NV:
7249 CHECK_EXT1(NV_vertex_program);
7250 params[0] = BOOLEAN_TO_INT64(ctx->Eval.Map1Attrib[11]);
7251 break;
7252 case GL_MAP1_VERTEX_ATTRIB12_4_NV:
7253 CHECK_EXT1(NV_vertex_program);
7254 params[0] = BOOLEAN_TO_INT64(ctx->Eval.Map1Attrib[12]);
7255 break;
7256 case GL_MAP1_VERTEX_ATTRIB13_4_NV:
7257 CHECK_EXT1(NV_vertex_program);
7258 params[0] = BOOLEAN_TO_INT64(ctx->Eval.Map1Attrib[13]);
7259 break;
7260 case GL_MAP1_VERTEX_ATTRIB14_4_NV:
7261 CHECK_EXT1(NV_vertex_program);
7262 params[0] = BOOLEAN_TO_INT64(ctx->Eval.Map1Attrib[14]);
7263 break;
7264 case GL_MAP1_VERTEX_ATTRIB15_4_NV:
7265 CHECK_EXT1(NV_vertex_program);
7266 params[0] = BOOLEAN_TO_INT64(ctx->Eval.Map1Attrib[15]);
7267 break;
7268 case GL_FRAGMENT_PROGRAM_NV:
7269 CHECK_EXT1(NV_fragment_program);
7270 params[0] = BOOLEAN_TO_INT64(ctx->FragmentProgram.Enabled);
7271 break;
7272 case GL_FRAGMENT_PROGRAM_BINDING_NV:
7273 CHECK_EXT1(NV_fragment_program);
7274 params[0] = (GLint64)(ctx->FragmentProgram.Current ? ctx->FragmentProgram.Current->Base.Id : 0);
7275 break;
7276 case GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV:
7277 CHECK_EXT1(NV_fragment_program);
7278 params[0] = (GLint64)(MAX_NV_FRAGMENT_PROGRAM_PARAMS);
7279 break;
7280 case GL_TEXTURE_RECTANGLE_NV:
7281 CHECK_EXT1(NV_texture_rectangle);
7282 params[0] = BOOLEAN_TO_INT64(_mesa_IsEnabled(GL_TEXTURE_RECTANGLE_NV));
7283 break;
7284 case GL_TEXTURE_BINDING_RECTANGLE_NV:
7285 CHECK_EXT1(NV_texture_rectangle);
7286 params[0] = (GLint64)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_RECT_INDEX]->Name);
7287 break;
7288 case GL_MAX_RECTANGLE_TEXTURE_SIZE_NV:
7289 CHECK_EXT1(NV_texture_rectangle);
7290 params[0] = (GLint64)(ctx->Const.MaxTextureRectSize);
7291 break;
7292 case GL_STENCIL_TEST_TWO_SIDE_EXT:
7293 CHECK_EXT1(EXT_stencil_two_side);
7294 params[0] = BOOLEAN_TO_INT64(ctx->Stencil.TestTwoSide);
7295 break;
7296 case GL_ACTIVE_STENCIL_FACE_EXT:
7297 CHECK_EXT1(EXT_stencil_two_side);
7298 params[0] = ENUM_TO_INT64(ctx->Stencil.ActiveFace ? GL_BACK : GL_FRONT);
7299 break;
7300 case GL_MAX_SHININESS_NV:
7301 CHECK_EXT1(NV_light_max_exponent);
7302 params[0] = IROUND64(ctx->Const.MaxShininess);
7303 break;
7304 case GL_MAX_SPOT_EXPONENT_NV:
7305 CHECK_EXT1(NV_light_max_exponent);
7306 params[0] = IROUND64(ctx->Const.MaxSpotExponent);
7307 break;
7308 case GL_ARRAY_BUFFER_BINDING_ARB:
7309 params[0] = (GLint64)(ctx->Array.ArrayBufferObj->Name);
7310 break;
7311 case GL_VERTEX_ARRAY_BUFFER_BINDING_ARB:
7312 params[0] = (GLint64)(ctx->Array.ArrayObj->Vertex.BufferObj->Name);
7313 break;
7314 case GL_NORMAL_ARRAY_BUFFER_BINDING_ARB:
7315 params[0] = (GLint64)(ctx->Array.ArrayObj->Normal.BufferObj->Name);
7316 break;
7317 case GL_COLOR_ARRAY_BUFFER_BINDING_ARB:
7318 params[0] = (GLint64)(ctx->Array.ArrayObj->Color.BufferObj->Name);
7319 break;
7320 case GL_INDEX_ARRAY_BUFFER_BINDING_ARB:
7321 params[0] = (GLint64)(ctx->Array.ArrayObj->Index.BufferObj->Name);
7322 break;
7323 case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB:
7324 params[0] = (GLint64)(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].BufferObj->Name);
7325 break;
7326 case GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB:
7327 params[0] = (GLint64)(ctx->Array.ArrayObj->EdgeFlag.BufferObj->Name);
7328 break;
7329 case GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB:
7330 params[0] = (GLint64)(ctx->Array.ArrayObj->SecondaryColor.BufferObj->Name);
7331 break;
7332 case GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB:
7333 params[0] = (GLint64)(ctx->Array.ArrayObj->FogCoord.BufferObj->Name);
7334 break;
7335 case GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB:
7336 params[0] = (GLint64)(ctx->Array.ElementArrayBufferObj->Name);
7337 break;
7338 case GL_PIXEL_PACK_BUFFER_BINDING_EXT:
7339 CHECK_EXT1(EXT_pixel_buffer_object);
7340 params[0] = (GLint64)(ctx->Pack.BufferObj->Name);
7341 break;
7342 case GL_PIXEL_UNPACK_BUFFER_BINDING_EXT:
7343 CHECK_EXT1(EXT_pixel_buffer_object);
7344 params[0] = (GLint64)(ctx->Unpack.BufferObj->Name);
7345 break;
7346 case GL_VERTEX_PROGRAM_ARB:
7347 CHECK_EXT2(ARB_vertex_program, NV_vertex_program);
7348 params[0] = BOOLEAN_TO_INT64(ctx->VertexProgram.Enabled);
7349 break;
7350 case GL_VERTEX_PROGRAM_POINT_SIZE_ARB:
7351 CHECK_EXT2(ARB_vertex_program, NV_vertex_program);
7352 params[0] = BOOLEAN_TO_INT64(ctx->VertexProgram.PointSizeEnabled);
7353 break;
7354 case GL_VERTEX_PROGRAM_TWO_SIDE_ARB:
7355 CHECK_EXT2(ARB_vertex_program, NV_vertex_program);
7356 params[0] = BOOLEAN_TO_INT64(ctx->VertexProgram.TwoSideEnabled);
7357 break;
7358 case GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB:
7359 CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_vertex_program);
7360 params[0] = (GLint64)(ctx->Const.MaxProgramMatrixStackDepth);
7361 break;
7362 case GL_MAX_PROGRAM_MATRICES_ARB:
7363 CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_vertex_program);
7364 params[0] = (GLint64)(ctx->Const.MaxProgramMatrices);
7365 break;
7366 case GL_CURRENT_MATRIX_STACK_DEPTH_ARB:
7367 CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_vertex_program);
7368 params[0] = BOOLEAN_TO_INT64(ctx->CurrentStack->Depth + 1);
7369 break;
7370 case GL_CURRENT_MATRIX_ARB:
7371 CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_fragment_program);
7372 {
7373 const GLfloat *matrix = ctx->CurrentStack->Top->m;
7374 params[0] = IROUND64(matrix[0]);
7375 params[1] = IROUND64(matrix[1]);
7376 params[2] = IROUND64(matrix[2]);
7377 params[3] = IROUND64(matrix[3]);
7378 params[4] = IROUND64(matrix[4]);
7379 params[5] = IROUND64(matrix[5]);
7380 params[6] = IROUND64(matrix[6]);
7381 params[7] = IROUND64(matrix[7]);
7382 params[8] = IROUND64(matrix[8]);
7383 params[9] = IROUND64(matrix[9]);
7384 params[10] = IROUND64(matrix[10]);
7385 params[11] = IROUND64(matrix[11]);
7386 params[12] = IROUND64(matrix[12]);
7387 params[13] = IROUND64(matrix[13]);
7388 params[14] = IROUND64(matrix[14]);
7389 params[15] = IROUND64(matrix[15]);
7390 }
7391 break;
7392 case GL_TRANSPOSE_CURRENT_MATRIX_ARB:
7393 CHECK_EXT2(ARB_vertex_program, ARB_fragment_program);
7394 {
7395 const GLfloat *matrix = ctx->CurrentStack->Top->m;
7396 params[0] = IROUND64(matrix[0]);
7397 params[1] = IROUND64(matrix[4]);
7398 params[2] = IROUND64(matrix[8]);
7399 params[3] = IROUND64(matrix[12]);
7400 params[4] = IROUND64(matrix[1]);
7401 params[5] = IROUND64(matrix[5]);
7402 params[6] = IROUND64(matrix[9]);
7403 params[7] = IROUND64(matrix[13]);
7404 params[8] = IROUND64(matrix[2]);
7405 params[9] = IROUND64(matrix[6]);
7406 params[10] = IROUND64(matrix[10]);
7407 params[11] = IROUND64(matrix[14]);
7408 params[12] = IROUND64(matrix[3]);
7409 params[13] = IROUND64(matrix[7]);
7410 params[14] = IROUND64(matrix[11]);
7411 params[15] = IROUND64(matrix[15]);
7412 }
7413 break;
7414 case GL_MAX_VERTEX_ATTRIBS_ARB:
7415 CHECK_EXT1(ARB_vertex_program);
7416 params[0] = (GLint64)(ctx->Const.VertexProgram.MaxAttribs);
7417 break;
7418 case GL_PROGRAM_ERROR_POSITION_ARB:
7419 CHECK_EXT4(NV_vertex_program, ARB_vertex_program, NV_fragment_program, ARB_fragment_program);
7420 params[0] = (GLint64)(ctx->Program.ErrorPos);
7421 break;
7422 case GL_FRAGMENT_PROGRAM_ARB:
7423 CHECK_EXT1(ARB_fragment_program);
7424 params[0] = BOOLEAN_TO_INT64(ctx->FragmentProgram.Enabled);
7425 break;
7426 case GL_MAX_TEXTURE_COORDS_ARB:
7427 CHECK_EXT2(ARB_fragment_program, NV_fragment_program);
7428 params[0] = (GLint64)(ctx->Const.MaxTextureCoordUnits);
7429 break;
7430 case GL_MAX_TEXTURE_IMAGE_UNITS_ARB:
7431 CHECK_EXT2(ARB_fragment_program, NV_fragment_program);
7432 params[0] = (GLint64)(ctx->Const.MaxTextureImageUnits);
7433 break;
7434 case GL_DEPTH_BOUNDS_TEST_EXT:
7435 CHECK_EXT1(EXT_depth_bounds_test);
7436 params[0] = BOOLEAN_TO_INT64(ctx->Depth.BoundsTest);
7437 break;
7438 case GL_DEPTH_BOUNDS_EXT:
7439 CHECK_EXT1(EXT_depth_bounds_test);
7440 params[0] = IROUND64(ctx->Depth.BoundsMin);
7441 params[1] = IROUND64(ctx->Depth.BoundsMax);
7442 break;
7443 case GL_DEPTH_CLAMP:
7444 CHECK_EXT1(ARB_depth_clamp);
7445 params[0] = BOOLEAN_TO_INT64(ctx->Transform.DepthClamp);
7446 break;
7447 case GL_MAX_DRAW_BUFFERS_ARB:
7448 params[0] = (GLint64)(ctx->Const.MaxDrawBuffers);
7449 break;
7450 case GL_DRAW_BUFFER0_ARB:
7451 params[0] = ENUM_TO_INT64(ctx->DrawBuffer->ColorDrawBuffer[0]);
7452 break;
7453 case GL_DRAW_BUFFER1_ARB:
7454 {
7455 GLenum buffer;
7456 if (pname - GL_DRAW_BUFFER0_ARB >= ctx->Const.MaxDrawBuffers) {
7457 _mesa_error(ctx, GL_INVALID_ENUM, "glGet(GL_DRAW_BUFFERx_ARB)");
7458 return;
7459 }
7460 buffer = ctx->DrawBuffer->ColorDrawBuffer[1];
7461 params[0] = ENUM_TO_INT64(buffer);
7462 }
7463 break;
7464 case GL_DRAW_BUFFER2_ARB:
7465 {
7466 GLenum buffer;
7467 if (pname - GL_DRAW_BUFFER0_ARB >= ctx->Const.MaxDrawBuffers) {
7468 _mesa_error(ctx, GL_INVALID_ENUM, "glGet(GL_DRAW_BUFFERx_ARB)");
7469 return;
7470 }
7471 buffer = ctx->DrawBuffer->ColorDrawBuffer[2];
7472 params[0] = ENUM_TO_INT64(buffer);
7473 }
7474 break;
7475 case GL_DRAW_BUFFER3_ARB:
7476 {
7477 GLenum buffer;
7478 if (pname - GL_DRAW_BUFFER0_ARB >= ctx->Const.MaxDrawBuffers) {
7479 _mesa_error(ctx, GL_INVALID_ENUM, "glGet(GL_DRAW_BUFFERx_ARB)");
7480 return;
7481 }
7482 buffer = ctx->DrawBuffer->ColorDrawBuffer[3];
7483 params[0] = ENUM_TO_INT64(buffer);
7484 }
7485 break;
7486 case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES:
7487 CHECK_EXT1(OES_read_format);
7488 if (ctx->NewState & _NEW_BUFFERS)
7489 _mesa_update_state(ctx);
7490 params[0] = (GLint64)(_mesa_get_color_read_type(ctx));
7491 break;
7492 case GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES:
7493 CHECK_EXT1(OES_read_format);
7494 if (ctx->NewState & _NEW_BUFFERS)
7495 _mesa_update_state(ctx);
7496 params[0] = (GLint64)(_mesa_get_color_read_format(ctx));
7497 break;
7498 case GL_NUM_FRAGMENT_REGISTERS_ATI:
7499 CHECK_EXT1(ATI_fragment_shader);
7500 params[0] = (GLint64)(6);
7501 break;
7502 case GL_NUM_FRAGMENT_CONSTANTS_ATI:
7503 CHECK_EXT1(ATI_fragment_shader);
7504 params[0] = (GLint64)(8);
7505 break;
7506 case GL_NUM_PASSES_ATI:
7507 CHECK_EXT1(ATI_fragment_shader);
7508 params[0] = (GLint64)(2);
7509 break;
7510 case GL_NUM_INSTRUCTIONS_PER_PASS_ATI:
7511 CHECK_EXT1(ATI_fragment_shader);
7512 params[0] = (GLint64)(8);
7513 break;
7514 case GL_NUM_INSTRUCTIONS_TOTAL_ATI:
7515 CHECK_EXT1(ATI_fragment_shader);
7516 params[0] = (GLint64)(16);
7517 break;
7518 case GL_COLOR_ALPHA_PAIRING_ATI:
7519 CHECK_EXT1(ATI_fragment_shader);
7520 params[0] = BOOLEAN_TO_INT64(GL_TRUE);
7521 break;
7522 case GL_NUM_LOOPBACK_COMPONENTS_ATI:
7523 CHECK_EXT1(ATI_fragment_shader);
7524 params[0] = (GLint64)(3);
7525 break;
7526 case GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI:
7527 CHECK_EXT1(ATI_fragment_shader);
7528 params[0] = (GLint64)(3);
7529 break;
7530 case GL_STENCIL_BACK_FUNC:
7531 params[0] = ENUM_TO_INT64(ctx->Stencil.Function[1]);
7532 break;
7533 case GL_STENCIL_BACK_VALUE_MASK:
7534 params[0] = (GLint64)(ctx->Stencil.ValueMask[1]);
7535 break;
7536 case GL_STENCIL_BACK_WRITEMASK:
7537 params[0] = (GLint64)(ctx->Stencil.WriteMask[1]);
7538 break;
7539 case GL_STENCIL_BACK_REF:
7540 params[0] = (GLint64)(ctx->Stencil.Ref[1]);
7541 break;
7542 case GL_STENCIL_BACK_FAIL:
7543 params[0] = ENUM_TO_INT64(ctx->Stencil.FailFunc[1]);
7544 break;
7545 case GL_STENCIL_BACK_PASS_DEPTH_FAIL:
7546 params[0] = ENUM_TO_INT64(ctx->Stencil.ZFailFunc[1]);
7547 break;
7548 case GL_STENCIL_BACK_PASS_DEPTH_PASS:
7549 params[0] = ENUM_TO_INT64(ctx->Stencil.ZPassFunc[1]);
7550 break;
7551 case GL_FRAMEBUFFER_BINDING_EXT:
7552 CHECK_EXT1(EXT_framebuffer_object);
7553 params[0] = (GLint64)(ctx->DrawBuffer->Name);
7554 break;
7555 case GL_RENDERBUFFER_BINDING_EXT:
7556 CHECK_EXT1(EXT_framebuffer_object);
7557 params[0] = (GLint64)(ctx->CurrentRenderbuffer ? ctx->CurrentRenderbuffer->Name : 0);
7558 break;
7559 case GL_MAX_COLOR_ATTACHMENTS_EXT:
7560 CHECK_EXT1(EXT_framebuffer_object);
7561 params[0] = (GLint64)(ctx->Const.MaxColorAttachments);
7562 break;
7563 case GL_MAX_RENDERBUFFER_SIZE_EXT:
7564 CHECK_EXT1(EXT_framebuffer_object);
7565 params[0] = (GLint64)(ctx->Const.MaxRenderbufferSize);
7566 break;
7567 case GL_READ_FRAMEBUFFER_BINDING_EXT:
7568 CHECK_EXT1(EXT_framebuffer_blit);
7569 params[0] = (GLint64)(ctx->ReadBuffer->Name);
7570 break;
7571 case GL_PROVOKING_VERTEX_EXT:
7572 CHECK_EXT1(EXT_provoking_vertex);
7573 params[0] = BOOLEAN_TO_INT64(ctx->Light.ProvokingVertex);
7574 break;
7575 case GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT:
7576 CHECK_EXT1(EXT_provoking_vertex);
7577 params[0] = BOOLEAN_TO_INT64(ctx->Const.QuadsFollowProvokingVertexConvention);
7578 break;
7579 case GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB:
7580 CHECK_EXT1(ARB_fragment_shader);
7581 params[0] = (GLint64)(ctx->Const.FragmentProgram.MaxUniformComponents);
7582 break;
7583 case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB:
7584 CHECK_EXT1(ARB_fragment_shader);
7585 params[0] = ENUM_TO_INT64(ctx->Hint.FragmentShaderDerivative);
7586 break;
7587 case GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB:
7588 CHECK_EXT1(ARB_vertex_shader);
7589 params[0] = (GLint64)(ctx->Const.VertexProgram.MaxUniformComponents);
7590 break;
7591 case GL_MAX_VARYING_FLOATS_ARB:
7592 CHECK_EXT1(ARB_vertex_shader);
7593 params[0] = (GLint64)(ctx->Const.MaxVarying * 4);
7594 break;
7595 case GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB:
7596 CHECK_EXT1(ARB_vertex_shader);
7597 params[0] = (GLint64)(ctx->Const.MaxVertexTextureImageUnits);
7598 break;
7599 case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB:
7600 CHECK_EXT1(ARB_vertex_shader);
7601 params[0] = (GLint64)(ctx->Const.MaxCombinedTextureImageUnits);
7602 break;
7603 case GL_CURRENT_PROGRAM:
7604 CHECK_EXT1(ARB_shader_objects);
7605 params[0] = (GLint64)(ctx->Shader.CurrentProgram ? ctx->Shader.CurrentProgram->Name : 0);
7606 break;
7607 case GL_MAX_SAMPLES:
7608 CHECK_EXT1(ARB_framebuffer_object);
7609 params[0] = (GLint64)(ctx->Const.MaxSamples);
7610 break;
7611 case GL_VERTEX_ARRAY_BINDING_APPLE:
7612 CHECK_EXT1(APPLE_vertex_array_object);
7613 params[0] = (GLint64)(ctx->Array.ArrayObj->Name);
7614 break;
7615 case GL_TEXTURE_CUBE_MAP_SEAMLESS:
7616 CHECK_EXT1(ARB_seamless_cube_map);
7617 params[0] = BOOLEAN_TO_INT64(ctx->Texture.CubeMapSeamless);
7618 break;
7619 case GL_MAX_SERVER_WAIT_TIMEOUT:
7620 CHECK_EXT1(ARB_sync);
7621 params[0] = ctx->Const.MaxServerWaitTimeout;
7622 break;
7623 case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING:
7624 CHECK_EXT1(EXT_transform_feedback);
7625 params[0] = (GLint64)(ctx->TransformFeedback.CurrentBuffer->Name);
7626 break;
7627 case GL_RASTERIZER_DISCARD:
7628 CHECK_EXT1(EXT_transform_feedback);
7629 params[0] = BOOLEAN_TO_INT64(ctx->TransformFeedback.RasterDiscard);
7630 break;
7631 case GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS:
7632 CHECK_EXT1(EXT_transform_feedback);
7633 params[0] = (GLint64)(ctx->Const.MaxTransformFeedbackInterleavedComponents);
7634 break;
7635 case GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS:
7636 CHECK_EXT1(EXT_transform_feedback);
7637 params[0] = (GLint64)(ctx->Const.MaxTransformFeedbackSeparateAttribs);
7638 break;
7639 case GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS:
7640 CHECK_EXT1(EXT_transform_feedback);
7641 params[0] = (GLint64)(ctx->Const.MaxTransformFeedbackSeparateComponents);
7642 break;
7643 case GL_NUM_EXTENSIONS:
7644 params[0] = (GLint64)(_mesa_get_extension_count(ctx));
7645 break;
7646 case GL_MAJOR_VERSION:
7647 params[0] = (GLint64)(ctx->VersionMajor);
7648 break;
7649 case GL_MINOR_VERSION:
7650 params[0] = (GLint64)(ctx->VersionMinor);
7651 break;
7652 case GL_CONTEXT_FLAGS:
7653 params[0] = (GLint64)(ctx->Const.ContextFlags);
7654 break;
7655 default:
7656 goto invalid_enum_error;
7657 }
7658 return;
7659
7660 invalid_enum_error:
7661 _mesa_error(ctx, GL_INVALID_ENUM, "glGetInteger64v(pname=0x%x)", pname);
7662 }
7663 #endif /* FEATURE_ARB_sync */
7664
7665
7666 void GLAPIENTRY
7667 _mesa_GetDoublev( GLenum pname, GLdouble *params )
7668 {
7669 const GLfloat magic = -1234.5F;
7670 GLfloat values[16];
7671 GLuint i;
7672
7673 if (!params)
7674 return;
7675
7676 /* Init temp array to magic numbers so we can figure out how many values
7677 * are returned by the GetFloatv() call.
7678 */
7679 for (i = 0; i < 16; i++)
7680 values[i] = magic;
7681
7682 _mesa_GetFloatv(pname, values);
7683
7684 for (i = 0; i < 16 && values[i] != magic; i++)
7685 params[i] = (GLdouble) values[i];
7686 }
7687
7688 void GLAPIENTRY
7689 _mesa_GetBooleanIndexedv( GLenum pname, GLuint index, GLboolean *params )
7690 {
7691 GET_CURRENT_CONTEXT(ctx);
7692 ASSERT_OUTSIDE_BEGIN_END(ctx);
7693
7694 if (!params)
7695 return;
7696
7697 switch (pname) {
7698 case GL_BLEND:
7699 CHECK_EXT1(EXT_draw_buffers2);
7700 if (index >= ctx->Const.MaxDrawBuffers) {
7701 _mesa_error(ctx, GL_INVALID_VALUE, "glGetBooleanIndexedv(index=%u), index", pname);
7702 return;
7703 }
7704 params[0] = INT_TO_BOOLEAN(((ctx->Color.BlendEnabled >> index) & 1));
7705 break;
7706 case GL_COLOR_WRITEMASK:
7707 CHECK_EXT1(EXT_draw_buffers2);
7708 if (index >= ctx->Const.MaxDrawBuffers) {
7709 _mesa_error(ctx, GL_INVALID_VALUE, "glGetBooleanIndexedv(index=%u), index", pname);
7710 return;
7711 }
7712 params[0] = INT_TO_BOOLEAN(ctx->Color.ColorMask[index][RCOMP] ? 1 : 0);
7713 params[1] = INT_TO_BOOLEAN(ctx->Color.ColorMask[index][GCOMP] ? 1 : 0);
7714 params[2] = INT_TO_BOOLEAN(ctx->Color.ColorMask[index][BCOMP] ? 1 : 0);
7715 params[3] = INT_TO_BOOLEAN(ctx->Color.ColorMask[index][ACOMP] ? 1 : 0);
7716 break;
7717 case GL_TRANSFORM_FEEDBACK_BUFFER_START:
7718 CHECK_EXT1(EXT_transform_feedback);
7719 if (index >= ctx->Const.MaxTransformFeedbackSeparateAttribs) {
7720 _mesa_error(ctx, GL_INVALID_VALUE, "glGetBooleanIndexedv(index=%u), index", pname);
7721 return;
7722 }
7723 params[0] = INT64_TO_BOOLEAN(ctx->TransformFeedback.Offset[index]);
7724 break;
7725 case GL_TRANSFORM_FEEDBACK_BUFFER_SIZE:
7726 CHECK_EXT1(EXT_transform_feedback);
7727 if (index >= ctx->Const.MaxTransformFeedbackSeparateAttribs) {
7728 _mesa_error(ctx, GL_INVALID_VALUE, "glGetBooleanIndexedv(index=%u), index", pname);
7729 return;
7730 }
7731 params[0] = INT64_TO_BOOLEAN(ctx->TransformFeedback.Size[index]);
7732 break;
7733 case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING:
7734 CHECK_EXT1(EXT_transform_feedback);
7735 if (index >= ctx->Const.MaxTransformFeedbackSeparateAttribs) {
7736 _mesa_error(ctx, GL_INVALID_VALUE, "glGetBooleanIndexedv(index=%u), index", pname);
7737 return;
7738 }
7739 params[0] = INT_TO_BOOLEAN(ctx->TransformFeedback.Buffers[index]->Name);
7740 break;
7741 default:
7742 goto invalid_enum_error;
7743 }
7744 return;
7745
7746 invalid_enum_error:
7747 _mesa_error(ctx, GL_INVALID_ENUM, "glGetBooleanIndexedv(pname=0x%x)", pname);
7748 }
7749
7750 void GLAPIENTRY
7751 _mesa_GetIntegerIndexedv( GLenum pname, GLuint index, GLint *params )
7752 {
7753 GET_CURRENT_CONTEXT(ctx);
7754 ASSERT_OUTSIDE_BEGIN_END(ctx);
7755
7756 if (!params)
7757 return;
7758
7759 switch (pname) {
7760 case GL_BLEND:
7761 CHECK_EXT1(EXT_draw_buffers2);
7762 if (index >= ctx->Const.MaxDrawBuffers) {
7763 _mesa_error(ctx, GL_INVALID_VALUE, "glGetIntegerIndexedv(index=%u), index", pname);
7764 return;
7765 }
7766 params[0] = ((ctx->Color.BlendEnabled >> index) & 1);
7767 break;
7768 case GL_COLOR_WRITEMASK:
7769 CHECK_EXT1(EXT_draw_buffers2);
7770 if (index >= ctx->Const.MaxDrawBuffers) {
7771 _mesa_error(ctx, GL_INVALID_VALUE, "glGetIntegerIndexedv(index=%u), index", pname);
7772 return;
7773 }
7774 params[0] = ctx->Color.ColorMask[index][RCOMP] ? 1 : 0;
7775 params[1] = ctx->Color.ColorMask[index][GCOMP] ? 1 : 0;
7776 params[2] = ctx->Color.ColorMask[index][BCOMP] ? 1 : 0;
7777 params[3] = ctx->Color.ColorMask[index][ACOMP] ? 1 : 0;
7778 break;
7779 case GL_TRANSFORM_FEEDBACK_BUFFER_START:
7780 CHECK_EXT1(EXT_transform_feedback);
7781 if (index >= ctx->Const.MaxTransformFeedbackSeparateAttribs) {
7782 _mesa_error(ctx, GL_INVALID_VALUE, "glGetIntegerIndexedv(index=%u), index", pname);
7783 return;
7784 }
7785 params[0] = INT64_TO_INT(ctx->TransformFeedback.Offset[index]);
7786 break;
7787 case GL_TRANSFORM_FEEDBACK_BUFFER_SIZE:
7788 CHECK_EXT1(EXT_transform_feedback);
7789 if (index >= ctx->Const.MaxTransformFeedbackSeparateAttribs) {
7790 _mesa_error(ctx, GL_INVALID_VALUE, "glGetIntegerIndexedv(index=%u), index", pname);
7791 return;
7792 }
7793 params[0] = INT64_TO_INT(ctx->TransformFeedback.Size[index]);
7794 break;
7795 case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING:
7796 CHECK_EXT1(EXT_transform_feedback);
7797 if (index >= ctx->Const.MaxTransformFeedbackSeparateAttribs) {
7798 _mesa_error(ctx, GL_INVALID_VALUE, "glGetIntegerIndexedv(index=%u), index", pname);
7799 return;
7800 }
7801 params[0] = ctx->TransformFeedback.Buffers[index]->Name;
7802 break;
7803 default:
7804 goto invalid_enum_error;
7805 }
7806 return;
7807
7808 invalid_enum_error:
7809 _mesa_error(ctx, GL_INVALID_ENUM, "glGetIntegerIndexedv(pname=0x%x)", pname);
7810 }
7811
7812 #if FEATURE_ARB_sync
7813 void GLAPIENTRY
7814 _mesa_GetInteger64Indexedv( GLenum pname, GLuint index, GLint64 *params )
7815 {
7816 GET_CURRENT_CONTEXT(ctx);
7817 ASSERT_OUTSIDE_BEGIN_END(ctx);
7818
7819 if (!params)
7820 return;
7821
7822 switch (pname) {
7823 case GL_BLEND:
7824 CHECK_EXT1(EXT_draw_buffers2);
7825 if (index >= ctx->Const.MaxDrawBuffers) {
7826 _mesa_error(ctx, GL_INVALID_VALUE, "glGetInteger64Indexedv(index=%u), index", pname);
7827 return;
7828 }
7829 params[0] = (GLint64)(((ctx->Color.BlendEnabled >> index) & 1));
7830 break;
7831 case GL_COLOR_WRITEMASK:
7832 CHECK_EXT1(EXT_draw_buffers2);
7833 if (index >= ctx->Const.MaxDrawBuffers) {
7834 _mesa_error(ctx, GL_INVALID_VALUE, "glGetInteger64Indexedv(index=%u), index", pname);
7835 return;
7836 }
7837 params[0] = (GLint64)(ctx->Color.ColorMask[index][RCOMP] ? 1 : 0);
7838 params[1] = (GLint64)(ctx->Color.ColorMask[index][GCOMP] ? 1 : 0);
7839 params[2] = (GLint64)(ctx->Color.ColorMask[index][BCOMP] ? 1 : 0);
7840 params[3] = (GLint64)(ctx->Color.ColorMask[index][ACOMP] ? 1 : 0);
7841 break;
7842 case GL_TRANSFORM_FEEDBACK_BUFFER_START:
7843 CHECK_EXT1(EXT_transform_feedback);
7844 if (index >= ctx->Const.MaxTransformFeedbackSeparateAttribs) {
7845 _mesa_error(ctx, GL_INVALID_VALUE, "glGetInteger64Indexedv(index=%u), index", pname);
7846 return;
7847 }
7848 params[0] = ctx->TransformFeedback.Offset[index];
7849 break;
7850 case GL_TRANSFORM_FEEDBACK_BUFFER_SIZE:
7851 CHECK_EXT1(EXT_transform_feedback);
7852 if (index >= ctx->Const.MaxTransformFeedbackSeparateAttribs) {
7853 _mesa_error(ctx, GL_INVALID_VALUE, "glGetInteger64Indexedv(index=%u), index", pname);
7854 return;
7855 }
7856 params[0] = ctx->TransformFeedback.Size[index];
7857 break;
7858 case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING:
7859 CHECK_EXT1(EXT_transform_feedback);
7860 if (index >= ctx->Const.MaxTransformFeedbackSeparateAttribs) {
7861 _mesa_error(ctx, GL_INVALID_VALUE, "glGetInteger64Indexedv(index=%u), index", pname);
7862 return;
7863 }
7864 params[0] = (GLint64)(ctx->TransformFeedback.Buffers[index]->Name);
7865 break;
7866 default:
7867 goto invalid_enum_error;
7868 }
7869 return;
7870
7871 invalid_enum_error:
7872 _mesa_error(ctx, GL_INVALID_ENUM, "glGetInteger64Indexedv(pname=0x%x)", pname);
7873 }
7874 #endif /* FEATURE_ARB_sync */
7875