get.c revision 9818734e0148510967ca9ee0d1aa8b196b509f02
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 "fbobject.h"
11#include "get.h"
12#include "macros.h"
13#include "mtypes.h"
14#include "state.h"
15#include "texcompress.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 BOOLEAN_TO_INT(B)     ( (GLint) (B) )
23#define BOOLEAN_TO_FLOAT(B)   ( (B) ? 1.0F : 0.0F )
24
25
26/*
27 * Check if named extension is enabled, if not generate error and return.
28 */
29#define CHECK_EXT1(EXT1, FUNC)                                         \
30   if (!ctx->Extensions.EXT1) {                                        \
31      _mesa_error(ctx, GL_INVALID_ENUM, FUNC "(0x%x)", (int) pname);  \
32      return;                                                          \
33   }
34
35/*
36 * Check if either of two extensions is enabled.
37 */
38#define CHECK_EXT2(EXT1, EXT2, FUNC)                                   \
39   if (!ctx->Extensions.EXT1 && !ctx->Extensions.EXT2) {               \
40      _mesa_error(ctx, GL_INVALID_ENUM, FUNC "(0x%x)", (int) pname);  \
41      return;                                                          \
42   }
43
44/*
45 * Check if either of three extensions is enabled.
46 */
47#define CHECK_EXT3(EXT1, EXT2, EXT3, FUNC)                             \
48   if (!ctx->Extensions.EXT1 && !ctx->Extensions.EXT2 &&               \
49       !ctx->Extensions.EXT3) {                                        \
50      _mesa_error(ctx, GL_INVALID_ENUM, FUNC "(0x%x)", (int) pname);  \
51      return;                                                          \
52   }
53
54/*
55 * Check if either of four extensions is enabled.
56 */
57#define CHECK_EXT4(EXT1, EXT2, EXT3, EXT4, FUNC)                       \
58   if (!ctx->Extensions.EXT1 && !ctx->Extensions.EXT2 &&               \
59       !ctx->Extensions.EXT3 && !ctx->Extensions.EXT4) {               \
60      _mesa_error(ctx, GL_INVALID_ENUM, FUNC "(0x%x)", (int) pname);  \
61      return;                                                          \
62   }
63
64
65void GLAPIENTRY
66_mesa_GetBooleanv( GLenum pname, GLboolean *params )
67{
68   GET_CURRENT_CONTEXT(ctx);
69   ASSERT_OUTSIDE_BEGIN_END(ctx);
70
71   if (!params)
72      return;
73
74   if (ctx->NewState)
75      _mesa_update_state(ctx);
76
77   if (ctx->Driver.GetBooleanv &&
78       ctx->Driver.GetBooleanv(ctx, pname, params))
79      return;
80
81   switch (pname) {
82      case GL_ACCUM_RED_BITS:
83         params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.accumRedBits);
84         break;
85      case GL_ACCUM_GREEN_BITS:
86         params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.accumGreenBits);
87         break;
88      case GL_ACCUM_BLUE_BITS:
89         params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.accumBlueBits);
90         break;
91      case GL_ACCUM_ALPHA_BITS:
92         params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.accumAlphaBits);
93         break;
94      case GL_ACCUM_CLEAR_VALUE:
95         params[0] = FLOAT_TO_BOOLEAN(ctx->Accum.ClearColor[0]);
96         params[1] = FLOAT_TO_BOOLEAN(ctx->Accum.ClearColor[1]);
97         params[2] = FLOAT_TO_BOOLEAN(ctx->Accum.ClearColor[2]);
98         params[3] = FLOAT_TO_BOOLEAN(ctx->Accum.ClearColor[3]);
99         break;
100      case GL_ALPHA_BIAS:
101         params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.AlphaBias);
102         break;
103      case GL_ALPHA_BITS:
104         params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.alphaBits);
105         break;
106      case GL_ALPHA_SCALE:
107         params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.AlphaScale);
108         break;
109      case GL_ALPHA_TEST:
110         params[0] = ctx->Color.AlphaEnabled;
111         break;
112      case GL_ALPHA_TEST_FUNC:
113         params[0] = ENUM_TO_BOOLEAN(ctx->Color.AlphaFunc);
114         break;
115      case GL_ALPHA_TEST_REF:
116         params[0] = FLOAT_TO_BOOLEAN(ctx->Color.AlphaRef);
117         break;
118      case GL_ATTRIB_STACK_DEPTH:
119         params[0] = INT_TO_BOOLEAN(ctx->AttribStackDepth);
120         break;
121      case GL_AUTO_NORMAL:
122         params[0] = ctx->Eval.AutoNormal;
123         break;
124      case GL_AUX_BUFFERS:
125         params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.numAuxBuffers);
126         break;
127      case GL_BLEND:
128         params[0] = ctx->Color.BlendEnabled;
129         break;
130      case GL_BLEND_DST:
131         params[0] = ENUM_TO_BOOLEAN(ctx->Color.BlendDstRGB);
132         break;
133      case GL_BLEND_SRC:
134         params[0] = ENUM_TO_BOOLEAN(ctx->Color.BlendSrcRGB);
135         break;
136      case GL_BLEND_SRC_RGB_EXT:
137         params[0] = ENUM_TO_BOOLEAN(ctx->Color.BlendSrcRGB);
138         break;
139      case GL_BLEND_DST_RGB_EXT:
140         params[0] = ENUM_TO_BOOLEAN(ctx->Color.BlendDstRGB);
141         break;
142      case GL_BLEND_SRC_ALPHA_EXT:
143         params[0] = ENUM_TO_BOOLEAN(ctx->Color.BlendSrcA);
144         break;
145      case GL_BLEND_DST_ALPHA_EXT:
146         params[0] = ENUM_TO_BOOLEAN(ctx->Color.BlendDstA);
147         break;
148      case GL_BLEND_EQUATION:
149         params[0] = ENUM_TO_BOOLEAN(ctx->Color.BlendEquationRGB );
150         break;
151      case GL_BLEND_EQUATION_ALPHA_EXT:
152         params[0] = ENUM_TO_BOOLEAN(ctx->Color.BlendEquationA );
153         break;
154      case GL_BLEND_COLOR_EXT:
155         params[0] = FLOAT_TO_BOOLEAN(ctx->Color.BlendColor[0]);
156         params[1] = FLOAT_TO_BOOLEAN(ctx->Color.BlendColor[1]);
157         params[2] = FLOAT_TO_BOOLEAN(ctx->Color.BlendColor[2]);
158         params[3] = FLOAT_TO_BOOLEAN(ctx->Color.BlendColor[3]);
159         break;
160      case GL_BLUE_BIAS:
161         params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.BlueBias);
162         break;
163      case GL_BLUE_BITS:
164         params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.blueBits);
165         break;
166      case GL_BLUE_SCALE:
167         params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.BlueScale);
168         break;
169      case GL_CLIENT_ATTRIB_STACK_DEPTH:
170         params[0] = INT_TO_BOOLEAN(ctx->ClientAttribStackDepth);
171         break;
172      case GL_CLIP_PLANE0:
173         params[0] = (ctx->Transform.ClipPlanesEnabled >> 0) & 1;
174         break;
175      case GL_CLIP_PLANE1:
176         params[0] = (ctx->Transform.ClipPlanesEnabled >> 1) & 1;
177         break;
178      case GL_CLIP_PLANE2:
179         params[0] = (ctx->Transform.ClipPlanesEnabled >> 2) & 1;
180         break;
181      case GL_CLIP_PLANE3:
182         params[0] = (ctx->Transform.ClipPlanesEnabled >> 3) & 1;
183         break;
184      case GL_CLIP_PLANE4:
185         params[0] = (ctx->Transform.ClipPlanesEnabled >> 4) & 1;
186         break;
187      case GL_CLIP_PLANE5:
188         params[0] = (ctx->Transform.ClipPlanesEnabled >> 5) & 1;
189         break;
190      case GL_COLOR_CLEAR_VALUE:
191         params[0] = FLOAT_TO_BOOLEAN(ctx->Color.ClearColor[0]);
192         params[1] = FLOAT_TO_BOOLEAN(ctx->Color.ClearColor[1]);
193         params[2] = FLOAT_TO_BOOLEAN(ctx->Color.ClearColor[2]);
194         params[3] = FLOAT_TO_BOOLEAN(ctx->Color.ClearColor[3]);
195         break;
196      case GL_COLOR_MATERIAL:
197         params[0] = ctx->Light.ColorMaterialEnabled;
198         break;
199      case GL_COLOR_MATERIAL_FACE:
200         params[0] = ENUM_TO_BOOLEAN(ctx->Light.ColorMaterialFace);
201         break;
202      case GL_COLOR_MATERIAL_PARAMETER:
203         params[0] = ENUM_TO_BOOLEAN(ctx->Light.ColorMaterialMode);
204         break;
205      case GL_COLOR_WRITEMASK:
206         params[0] = INT_TO_BOOLEAN(ctx->Color.ColorMask[RCOMP] ? 1 : 0);
207         params[1] = INT_TO_BOOLEAN(ctx->Color.ColorMask[GCOMP] ? 1 : 0);
208         params[2] = INT_TO_BOOLEAN(ctx->Color.ColorMask[BCOMP] ? 1 : 0);
209         params[3] = INT_TO_BOOLEAN(ctx->Color.ColorMask[ACOMP] ? 1 : 0);
210         break;
211      case GL_CULL_FACE:
212         params[0] = ctx->Polygon.CullFlag;
213         break;
214      case GL_CULL_FACE_MODE:
215         params[0] = ENUM_TO_BOOLEAN(ctx->Polygon.CullFaceMode);
216         break;
217      case GL_CURRENT_COLOR:
218         {
219         FLUSH_CURRENT(ctx, 0);
220         params[0] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][0]);
221         params[1] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][1]);
222         params[2] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][2]);
223         params[3] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][3]);
224         }
225         break;
226      case GL_CURRENT_INDEX:
227         {
228         FLUSH_CURRENT(ctx, 0);
229         params[0] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_COLOR_INDEX][0]);
230         }
231         break;
232      case GL_CURRENT_NORMAL:
233         {
234         FLUSH_CURRENT(ctx, 0);
235         params[0] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_NORMAL][0]);
236         params[1] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_NORMAL][1]);
237         params[2] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_NORMAL][2]);
238         }
239         break;
240      case GL_CURRENT_RASTER_COLOR:
241         params[0] = FLOAT_TO_BOOLEAN(ctx->Current.RasterColor[0]);
242         params[1] = FLOAT_TO_BOOLEAN(ctx->Current.RasterColor[1]);
243         params[2] = FLOAT_TO_BOOLEAN(ctx->Current.RasterColor[2]);
244         params[3] = FLOAT_TO_BOOLEAN(ctx->Current.RasterColor[3]);
245         break;
246      case GL_CURRENT_RASTER_DISTANCE:
247         params[0] = FLOAT_TO_BOOLEAN(ctx->Current.RasterDistance);
248         break;
249      case GL_CURRENT_RASTER_INDEX:
250         params[0] = FLOAT_TO_BOOLEAN(ctx->Current.RasterIndex);
251         break;
252      case GL_CURRENT_RASTER_POSITION:
253         params[0] = FLOAT_TO_BOOLEAN(ctx->Current.RasterPos[0]);
254         params[1] = FLOAT_TO_BOOLEAN(ctx->Current.RasterPos[1]);
255         params[2] = FLOAT_TO_BOOLEAN(ctx->Current.RasterPos[2]);
256         params[3] = FLOAT_TO_BOOLEAN(ctx->Current.RasterPos[3]);
257         break;
258      case GL_CURRENT_RASTER_SECONDARY_COLOR:
259         params[0] = FLOAT_TO_BOOLEAN(ctx->Current.RasterSecondaryColor[0]);
260         params[1] = FLOAT_TO_BOOLEAN(ctx->Current.RasterSecondaryColor[1]);
261         params[2] = FLOAT_TO_BOOLEAN(ctx->Current.RasterSecondaryColor[2]);
262         params[3] = FLOAT_TO_BOOLEAN(ctx->Current.RasterSecondaryColor[3]);
263         break;
264      case GL_CURRENT_RASTER_TEXTURE_COORDS:
265         {
266         const GLuint texUnit = ctx->Texture.CurrentUnit;
267         params[0] = FLOAT_TO_BOOLEAN(ctx->Current.RasterTexCoords[texUnit][0]);
268         params[1] = FLOAT_TO_BOOLEAN(ctx->Current.RasterTexCoords[texUnit][1]);
269         params[2] = FLOAT_TO_BOOLEAN(ctx->Current.RasterTexCoords[texUnit][2]);
270         params[3] = FLOAT_TO_BOOLEAN(ctx->Current.RasterTexCoords[texUnit][3]);
271         }
272         break;
273      case GL_CURRENT_RASTER_POSITION_VALID:
274         params[0] = ctx->Current.RasterPosValid;
275         break;
276      case GL_CURRENT_TEXTURE_COORDS:
277         {
278         const GLuint texUnit = ctx->Texture.CurrentUnit;
279         params[0] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][0]);
280         params[1] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][1]);
281         params[2] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][2]);
282         params[3] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][3]);
283         }
284         break;
285      case GL_DEPTH_BIAS:
286         params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.DepthBias);
287         break;
288      case GL_DEPTH_BITS:
289         params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.depthBits);
290         break;
291      case GL_DEPTH_CLEAR_VALUE:
292         params[0] = FLOAT_TO_BOOLEAN(((GLfloat) ctx->Depth.Clear));
293         break;
294      case GL_DEPTH_FUNC:
295         params[0] = ENUM_TO_BOOLEAN(ctx->Depth.Func);
296         break;
297      case GL_DEPTH_RANGE:
298         params[0] = FLOAT_TO_BOOLEAN(ctx->Viewport.Near);
299         params[1] = FLOAT_TO_BOOLEAN(ctx->Viewport.Far);
300         break;
301      case GL_DEPTH_SCALE:
302         params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.DepthScale);
303         break;
304      case GL_DEPTH_TEST:
305         params[0] = ctx->Depth.Test;
306         break;
307      case GL_DEPTH_WRITEMASK:
308         params[0] = ctx->Depth.Mask;
309         break;
310      case GL_DITHER:
311         params[0] = ctx->Color.DitherFlag;
312         break;
313      case GL_DOUBLEBUFFER:
314         params[0] = ctx->DrawBuffer->Visual.doubleBufferMode;
315         break;
316      case GL_DRAW_BUFFER:
317         params[0] = ENUM_TO_BOOLEAN(ctx->DrawBuffer->ColorDrawBuffer[0]);
318         break;
319      case GL_EDGE_FLAG:
320         {
321         FLUSH_CURRENT(ctx, 0);
322         params[0] = (ctx->Current.Attrib[VERT_ATTRIB_EDGEFLAG][0] == 1.0);
323         }
324         break;
325      case GL_FEEDBACK_BUFFER_SIZE:
326         params[0] = INT_TO_BOOLEAN(ctx->Feedback.BufferSize);
327         break;
328      case GL_FEEDBACK_BUFFER_TYPE:
329         params[0] = ENUM_TO_BOOLEAN(ctx->Feedback.Type);
330         break;
331      case GL_FOG:
332         params[0] = ctx->Fog.Enabled;
333         break;
334      case GL_FOG_COLOR:
335         params[0] = FLOAT_TO_BOOLEAN(ctx->Fog.Color[0]);
336         params[1] = FLOAT_TO_BOOLEAN(ctx->Fog.Color[1]);
337         params[2] = FLOAT_TO_BOOLEAN(ctx->Fog.Color[2]);
338         params[3] = FLOAT_TO_BOOLEAN(ctx->Fog.Color[3]);
339         break;
340      case GL_FOG_DENSITY:
341         params[0] = FLOAT_TO_BOOLEAN(ctx->Fog.Density);
342         break;
343      case GL_FOG_END:
344         params[0] = FLOAT_TO_BOOLEAN(ctx->Fog.End);
345         break;
346      case GL_FOG_HINT:
347         params[0] = ENUM_TO_BOOLEAN(ctx->Hint.Fog);
348         break;
349      case GL_FOG_INDEX:
350         params[0] = FLOAT_TO_BOOLEAN(ctx->Fog.Index);
351         break;
352      case GL_FOG_MODE:
353         params[0] = ENUM_TO_BOOLEAN(ctx->Fog.Mode);
354         break;
355      case GL_FOG_START:
356         params[0] = FLOAT_TO_BOOLEAN(ctx->Fog.Start);
357         break;
358      case GL_FRONT_FACE:
359         params[0] = ENUM_TO_BOOLEAN(ctx->Polygon.FrontFace);
360         break;
361      case GL_GREEN_BIAS:
362         params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.GreenBias);
363         break;
364      case GL_GREEN_BITS:
365         params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.greenBits);
366         break;
367      case GL_GREEN_SCALE:
368         params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.GreenScale);
369         break;
370      case GL_INDEX_BITS:
371         params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.indexBits);
372         break;
373      case GL_INDEX_CLEAR_VALUE:
374         params[0] = INT_TO_BOOLEAN(ctx->Color.ClearIndex);
375         break;
376      case GL_INDEX_MODE:
377         params[0] = !ctx->DrawBuffer->Visual.rgbMode;
378         break;
379      case GL_INDEX_OFFSET:
380         params[0] = INT_TO_BOOLEAN(ctx->Pixel.IndexOffset);
381         break;
382      case GL_INDEX_SHIFT:
383         params[0] = INT_TO_BOOLEAN(ctx->Pixel.IndexShift);
384         break;
385      case GL_INDEX_WRITEMASK:
386         params[0] = INT_TO_BOOLEAN(ctx->Color.IndexMask);
387         break;
388      case GL_LIGHT0:
389         params[0] = ctx->Light.Light[0].Enabled;
390         break;
391      case GL_LIGHT1:
392         params[0] = ctx->Light.Light[1].Enabled;
393         break;
394      case GL_LIGHT2:
395         params[0] = ctx->Light.Light[2].Enabled;
396         break;
397      case GL_LIGHT3:
398         params[0] = ctx->Light.Light[3].Enabled;
399         break;
400      case GL_LIGHT4:
401         params[0] = ctx->Light.Light[4].Enabled;
402         break;
403      case GL_LIGHT5:
404         params[0] = ctx->Light.Light[5].Enabled;
405         break;
406      case GL_LIGHT6:
407         params[0] = ctx->Light.Light[6].Enabled;
408         break;
409      case GL_LIGHT7:
410         params[0] = ctx->Light.Light[7].Enabled;
411         break;
412      case GL_LIGHTING:
413         params[0] = ctx->Light.Enabled;
414         break;
415      case GL_LIGHT_MODEL_AMBIENT:
416         params[0] = FLOAT_TO_BOOLEAN(ctx->Light.Model.Ambient[0]);
417         params[1] = FLOAT_TO_BOOLEAN(ctx->Light.Model.Ambient[1]);
418         params[2] = FLOAT_TO_BOOLEAN(ctx->Light.Model.Ambient[2]);
419         params[3] = FLOAT_TO_BOOLEAN(ctx->Light.Model.Ambient[3]);
420         break;
421      case GL_LIGHT_MODEL_COLOR_CONTROL:
422         params[0] = ENUM_TO_BOOLEAN(ctx->Light.Model.ColorControl);
423         break;
424      case GL_LIGHT_MODEL_LOCAL_VIEWER:
425         params[0] = ctx->Light.Model.LocalViewer;
426         break;
427      case GL_LIGHT_MODEL_TWO_SIDE:
428         params[0] = ctx->Light.Model.TwoSide;
429         break;
430      case GL_LINE_SMOOTH:
431         params[0] = ctx->Line.SmoothFlag;
432         break;
433      case GL_LINE_SMOOTH_HINT:
434         params[0] = ENUM_TO_BOOLEAN(ctx->Hint.LineSmooth);
435         break;
436      case GL_LINE_STIPPLE:
437         params[0] = ctx->Line.StippleFlag;
438         break;
439      case GL_LINE_STIPPLE_PATTERN:
440         params[0] = INT_TO_BOOLEAN(ctx->Line.StipplePattern);
441         break;
442      case GL_LINE_STIPPLE_REPEAT:
443         params[0] = INT_TO_BOOLEAN(ctx->Line.StippleFactor);
444         break;
445      case GL_LINE_WIDTH:
446         params[0] = FLOAT_TO_BOOLEAN(ctx->Line.Width);
447         break;
448      case GL_LINE_WIDTH_GRANULARITY:
449         params[0] = FLOAT_TO_BOOLEAN(ctx->Const.LineWidthGranularity);
450         break;
451      case GL_LINE_WIDTH_RANGE:
452         params[0] = FLOAT_TO_BOOLEAN(ctx->Const.MinLineWidthAA);
453         params[1] = FLOAT_TO_BOOLEAN(ctx->Const.MaxLineWidthAA);
454         break;
455      case GL_ALIASED_LINE_WIDTH_RANGE:
456         params[0] = FLOAT_TO_BOOLEAN(ctx->Const.MinLineWidth);
457         params[1] = FLOAT_TO_BOOLEAN(ctx->Const.MaxLineWidth);
458         break;
459      case GL_LIST_BASE:
460         params[0] = INT_TO_BOOLEAN(ctx->List.ListBase);
461         break;
462      case GL_LIST_INDEX:
463         params[0] = INT_TO_BOOLEAN((ctx->ListState.CurrentList ? ctx->ListState.CurrentList->Name : 0));
464         break;
465      case GL_LIST_MODE:
466         {
467         GLenum mode;
468         if (!ctx->CompileFlag)
469            mode = 0;
470         else if (ctx->ExecuteFlag)
471            mode = GL_COMPILE_AND_EXECUTE;
472         else
473            mode = GL_COMPILE;
474         params[0] = ENUM_TO_BOOLEAN(mode);
475         }
476         break;
477      case GL_INDEX_LOGIC_OP:
478         params[0] = ctx->Color.IndexLogicOpEnabled;
479         break;
480      case GL_COLOR_LOGIC_OP:
481         params[0] = ctx->Color.ColorLogicOpEnabled;
482         break;
483      case GL_LOGIC_OP_MODE:
484         params[0] = ENUM_TO_BOOLEAN(ctx->Color.LogicOp);
485         break;
486      case GL_MAP1_COLOR_4:
487         params[0] = ctx->Eval.Map1Color4;
488         break;
489      case GL_MAP1_GRID_DOMAIN:
490         params[0] = FLOAT_TO_BOOLEAN(ctx->Eval.MapGrid1u1);
491         params[1] = FLOAT_TO_BOOLEAN(ctx->Eval.MapGrid1u2);
492         break;
493      case GL_MAP1_GRID_SEGMENTS:
494         params[0] = INT_TO_BOOLEAN(ctx->Eval.MapGrid1un);
495         break;
496      case GL_MAP1_INDEX:
497         params[0] = ctx->Eval.Map1Index;
498         break;
499      case GL_MAP1_NORMAL:
500         params[0] = ctx->Eval.Map1Normal;
501         break;
502      case GL_MAP1_TEXTURE_COORD_1:
503         params[0] = ctx->Eval.Map1TextureCoord1;
504         break;
505      case GL_MAP1_TEXTURE_COORD_2:
506         params[0] = ctx->Eval.Map1TextureCoord2;
507         break;
508      case GL_MAP1_TEXTURE_COORD_3:
509         params[0] = ctx->Eval.Map1TextureCoord3;
510         break;
511      case GL_MAP1_TEXTURE_COORD_4:
512         params[0] = ctx->Eval.Map1TextureCoord4;
513         break;
514      case GL_MAP1_VERTEX_3:
515         params[0] = ctx->Eval.Map1Vertex3;
516         break;
517      case GL_MAP1_VERTEX_4:
518         params[0] = ctx->Eval.Map1Vertex4;
519         break;
520      case GL_MAP2_COLOR_4:
521         params[0] = ctx->Eval.Map2Color4;
522         break;
523      case GL_MAP2_GRID_DOMAIN:
524         params[0] = FLOAT_TO_BOOLEAN(ctx->Eval.MapGrid2u1);
525         params[1] = FLOAT_TO_BOOLEAN(ctx->Eval.MapGrid2u2);
526         params[2] = FLOAT_TO_BOOLEAN(ctx->Eval.MapGrid2v1);
527         params[3] = FLOAT_TO_BOOLEAN(ctx->Eval.MapGrid2v2);
528         break;
529      case GL_MAP2_GRID_SEGMENTS:
530         params[0] = INT_TO_BOOLEAN(ctx->Eval.MapGrid2un);
531         params[1] = INT_TO_BOOLEAN(ctx->Eval.MapGrid2vn);
532         break;
533      case GL_MAP2_INDEX:
534         params[0] = ctx->Eval.Map2Index;
535         break;
536      case GL_MAP2_NORMAL:
537         params[0] = ctx->Eval.Map2Normal;
538         break;
539      case GL_MAP2_TEXTURE_COORD_1:
540         params[0] = ctx->Eval.Map2TextureCoord1;
541         break;
542      case GL_MAP2_TEXTURE_COORD_2:
543         params[0] = ctx->Eval.Map2TextureCoord2;
544         break;
545      case GL_MAP2_TEXTURE_COORD_3:
546         params[0] = ctx->Eval.Map2TextureCoord3;
547         break;
548      case GL_MAP2_TEXTURE_COORD_4:
549         params[0] = ctx->Eval.Map2TextureCoord4;
550         break;
551      case GL_MAP2_VERTEX_3:
552         params[0] = ctx->Eval.Map2Vertex3;
553         break;
554      case GL_MAP2_VERTEX_4:
555         params[0] = ctx->Eval.Map2Vertex4;
556         break;
557      case GL_MAP_COLOR:
558         params[0] = ctx->Pixel.MapColorFlag;
559         break;
560      case GL_MAP_STENCIL:
561         params[0] = ctx->Pixel.MapStencilFlag;
562         break;
563      case GL_MATRIX_MODE:
564         params[0] = ENUM_TO_BOOLEAN(ctx->Transform.MatrixMode);
565         break;
566      case GL_MAX_ATTRIB_STACK_DEPTH:
567         params[0] = INT_TO_BOOLEAN(MAX_ATTRIB_STACK_DEPTH);
568         break;
569      case GL_MAX_CLIENT_ATTRIB_STACK_DEPTH:
570         params[0] = INT_TO_BOOLEAN(MAX_CLIENT_ATTRIB_STACK_DEPTH);
571         break;
572      case GL_MAX_CLIP_PLANES:
573         params[0] = INT_TO_BOOLEAN(ctx->Const.MaxClipPlanes);
574         break;
575      case GL_MAX_ELEMENTS_VERTICES:
576         params[0] = INT_TO_BOOLEAN(ctx->Const.MaxArrayLockSize);
577         break;
578      case GL_MAX_ELEMENTS_INDICES:
579         params[0] = INT_TO_BOOLEAN(ctx->Const.MaxArrayLockSize);
580         break;
581      case GL_MAX_EVAL_ORDER:
582         params[0] = INT_TO_BOOLEAN(MAX_EVAL_ORDER);
583         break;
584      case GL_MAX_LIGHTS:
585         params[0] = INT_TO_BOOLEAN(ctx->Const.MaxLights);
586         break;
587      case GL_MAX_LIST_NESTING:
588         params[0] = INT_TO_BOOLEAN(MAX_LIST_NESTING);
589         break;
590      case GL_MAX_MODELVIEW_STACK_DEPTH:
591         params[0] = INT_TO_BOOLEAN(MAX_MODELVIEW_STACK_DEPTH);
592         break;
593      case GL_MAX_NAME_STACK_DEPTH:
594         params[0] = INT_TO_BOOLEAN(MAX_NAME_STACK_DEPTH);
595         break;
596      case GL_MAX_PIXEL_MAP_TABLE:
597         params[0] = INT_TO_BOOLEAN(MAX_PIXEL_MAP_TABLE);
598         break;
599      case GL_MAX_PROJECTION_STACK_DEPTH:
600         params[0] = INT_TO_BOOLEAN(MAX_PROJECTION_STACK_DEPTH);
601         break;
602      case GL_MAX_TEXTURE_SIZE:
603         params[0] = INT_TO_BOOLEAN(1 << (ctx->Const.MaxTextureLevels - 1));
604         break;
605      case GL_MAX_3D_TEXTURE_SIZE:
606         params[0] = INT_TO_BOOLEAN(1 << (ctx->Const.Max3DTextureLevels - 1));
607         break;
608      case GL_MAX_TEXTURE_STACK_DEPTH:
609         params[0] = INT_TO_BOOLEAN(MAX_TEXTURE_STACK_DEPTH);
610         break;
611      case GL_MAX_VIEWPORT_DIMS:
612         params[0] = INT_TO_BOOLEAN(ctx->Const.MaxViewportWidth);
613         params[1] = INT_TO_BOOLEAN(ctx->Const.MaxViewportHeight);
614         break;
615      case GL_MODELVIEW_MATRIX:
616         {
617         const GLfloat *matrix = ctx->ModelviewMatrixStack.Top->m;
618         params[0] = FLOAT_TO_BOOLEAN(matrix[0]);
619         params[1] = FLOAT_TO_BOOLEAN(matrix[1]);
620         params[2] = FLOAT_TO_BOOLEAN(matrix[2]);
621         params[3] = FLOAT_TO_BOOLEAN(matrix[3]);
622         params[4] = FLOAT_TO_BOOLEAN(matrix[4]);
623         params[5] = FLOAT_TO_BOOLEAN(matrix[5]);
624         params[6] = FLOAT_TO_BOOLEAN(matrix[6]);
625         params[7] = FLOAT_TO_BOOLEAN(matrix[7]);
626         params[8] = FLOAT_TO_BOOLEAN(matrix[8]);
627         params[9] = FLOAT_TO_BOOLEAN(matrix[9]);
628         params[10] = FLOAT_TO_BOOLEAN(matrix[10]);
629         params[11] = FLOAT_TO_BOOLEAN(matrix[11]);
630         params[12] = FLOAT_TO_BOOLEAN(matrix[12]);
631         params[13] = FLOAT_TO_BOOLEAN(matrix[13]);
632         params[14] = FLOAT_TO_BOOLEAN(matrix[14]);
633         params[15] = FLOAT_TO_BOOLEAN(matrix[15]);
634         }
635         break;
636      case GL_MODELVIEW_STACK_DEPTH:
637         params[0] = INT_TO_BOOLEAN(ctx->ModelviewMatrixStack.Depth + 1);
638         break;
639      case GL_NAME_STACK_DEPTH:
640         params[0] = INT_TO_BOOLEAN(ctx->Select.NameStackDepth);
641         break;
642      case GL_NORMALIZE:
643         params[0] = ctx->Transform.Normalize;
644         break;
645      case GL_PACK_ALIGNMENT:
646         params[0] = INT_TO_BOOLEAN(ctx->Pack.Alignment);
647         break;
648      case GL_PACK_LSB_FIRST:
649         params[0] = ctx->Pack.LsbFirst;
650         break;
651      case GL_PACK_ROW_LENGTH:
652         params[0] = INT_TO_BOOLEAN(ctx->Pack.RowLength);
653         break;
654      case GL_PACK_SKIP_PIXELS:
655         params[0] = INT_TO_BOOLEAN(ctx->Pack.SkipPixels);
656         break;
657      case GL_PACK_SKIP_ROWS:
658         params[0] = INT_TO_BOOLEAN(ctx->Pack.SkipRows);
659         break;
660      case GL_PACK_SWAP_BYTES:
661         params[0] = ctx->Pack.SwapBytes;
662         break;
663      case GL_PACK_SKIP_IMAGES_EXT:
664         params[0] = INT_TO_BOOLEAN(ctx->Pack.SkipImages);
665         break;
666      case GL_PACK_IMAGE_HEIGHT_EXT:
667         params[0] = INT_TO_BOOLEAN(ctx->Pack.ImageHeight);
668         break;
669      case GL_PACK_INVERT_MESA:
670         params[0] = ctx->Pack.Invert;
671         break;
672      case GL_PERSPECTIVE_CORRECTION_HINT:
673         params[0] = ENUM_TO_BOOLEAN(ctx->Hint.PerspectiveCorrection);
674         break;
675      case GL_PIXEL_MAP_A_TO_A_SIZE:
676         params[0] = INT_TO_BOOLEAN(ctx->PixelMaps.AtoA.Size);
677         break;
678      case GL_PIXEL_MAP_B_TO_B_SIZE:
679         params[0] = INT_TO_BOOLEAN(ctx->PixelMaps.BtoB.Size);
680         break;
681      case GL_PIXEL_MAP_G_TO_G_SIZE:
682         params[0] = INT_TO_BOOLEAN(ctx->PixelMaps.GtoG.Size);
683         break;
684      case GL_PIXEL_MAP_I_TO_A_SIZE:
685         params[0] = INT_TO_BOOLEAN(ctx->PixelMaps.ItoA.Size);
686         break;
687      case GL_PIXEL_MAP_I_TO_B_SIZE:
688         params[0] = INT_TO_BOOLEAN(ctx->PixelMaps.ItoB.Size);
689         break;
690      case GL_PIXEL_MAP_I_TO_G_SIZE:
691         params[0] = INT_TO_BOOLEAN(ctx->PixelMaps.ItoG.Size);
692         break;
693      case GL_PIXEL_MAP_I_TO_I_SIZE:
694         params[0] = INT_TO_BOOLEAN(ctx->PixelMaps.ItoI.Size);
695         break;
696      case GL_PIXEL_MAP_I_TO_R_SIZE:
697         params[0] = INT_TO_BOOLEAN(ctx->PixelMaps.ItoR.Size);
698         break;
699      case GL_PIXEL_MAP_R_TO_R_SIZE:
700         params[0] = INT_TO_BOOLEAN(ctx->PixelMaps.RtoR.Size);
701         break;
702      case GL_PIXEL_MAP_S_TO_S_SIZE:
703         params[0] = INT_TO_BOOLEAN(ctx->PixelMaps.StoS.Size);
704         break;
705      case GL_POINT_SIZE:
706         params[0] = FLOAT_TO_BOOLEAN(ctx->Point.Size);
707         break;
708      case GL_POINT_SIZE_GRANULARITY:
709         params[0] = FLOAT_TO_BOOLEAN(ctx->Const.PointSizeGranularity);
710         break;
711      case GL_POINT_SIZE_RANGE:
712         params[0] = FLOAT_TO_BOOLEAN(ctx->Const.MinPointSizeAA);
713         params[1] = FLOAT_TO_BOOLEAN(ctx->Const.MaxPointSizeAA);
714         break;
715      case GL_ALIASED_POINT_SIZE_RANGE:
716         params[0] = FLOAT_TO_BOOLEAN(ctx->Const.MinPointSize);
717         params[1] = FLOAT_TO_BOOLEAN(ctx->Const.MaxPointSize);
718         break;
719      case GL_POINT_SMOOTH:
720         params[0] = ctx->Point.SmoothFlag;
721         break;
722      case GL_POINT_SMOOTH_HINT:
723         params[0] = ENUM_TO_BOOLEAN(ctx->Hint.PointSmooth);
724         break;
725      case GL_POINT_SIZE_MIN_EXT:
726         params[0] = FLOAT_TO_BOOLEAN(ctx->Point.MinSize);
727         break;
728      case GL_POINT_SIZE_MAX_EXT:
729         params[0] = FLOAT_TO_BOOLEAN(ctx->Point.MaxSize);
730         break;
731      case GL_POINT_FADE_THRESHOLD_SIZE_EXT:
732         params[0] = FLOAT_TO_BOOLEAN(ctx->Point.Threshold);
733         break;
734      case GL_DISTANCE_ATTENUATION_EXT:
735         params[0] = FLOAT_TO_BOOLEAN(ctx->Point.Params[0]);
736         params[1] = FLOAT_TO_BOOLEAN(ctx->Point.Params[1]);
737         params[2] = FLOAT_TO_BOOLEAN(ctx->Point.Params[2]);
738         break;
739      case GL_POLYGON_MODE:
740         params[0] = ENUM_TO_BOOLEAN(ctx->Polygon.FrontMode);
741         params[1] = ENUM_TO_BOOLEAN(ctx->Polygon.BackMode);
742         break;
743      case GL_POLYGON_OFFSET_BIAS_EXT:
744         params[0] = FLOAT_TO_BOOLEAN(ctx->Polygon.OffsetUnits);
745         break;
746      case GL_POLYGON_OFFSET_FACTOR:
747         params[0] = FLOAT_TO_BOOLEAN(ctx->Polygon.OffsetFactor );
748         break;
749      case GL_POLYGON_OFFSET_UNITS:
750         params[0] = FLOAT_TO_BOOLEAN(ctx->Polygon.OffsetUnits );
751         break;
752      case GL_POLYGON_OFFSET_POINT:
753         params[0] = ctx->Polygon.OffsetPoint;
754         break;
755      case GL_POLYGON_OFFSET_LINE:
756         params[0] = ctx->Polygon.OffsetLine;
757         break;
758      case GL_POLYGON_OFFSET_FILL:
759         params[0] = ctx->Polygon.OffsetFill;
760         break;
761      case GL_POLYGON_SMOOTH:
762         params[0] = ctx->Polygon.SmoothFlag;
763         break;
764      case GL_POLYGON_SMOOTH_HINT:
765         params[0] = ENUM_TO_BOOLEAN(ctx->Hint.PolygonSmooth);
766         break;
767      case GL_POLYGON_STIPPLE:
768         params[0] = ctx->Polygon.StippleFlag;
769         break;
770      case GL_PROJECTION_MATRIX:
771         {
772         const GLfloat *matrix = ctx->ProjectionMatrixStack.Top->m;
773         params[0] = FLOAT_TO_BOOLEAN(matrix[0]);
774         params[1] = FLOAT_TO_BOOLEAN(matrix[1]);
775         params[2] = FLOAT_TO_BOOLEAN(matrix[2]);
776         params[3] = FLOAT_TO_BOOLEAN(matrix[3]);
777         params[4] = FLOAT_TO_BOOLEAN(matrix[4]);
778         params[5] = FLOAT_TO_BOOLEAN(matrix[5]);
779         params[6] = FLOAT_TO_BOOLEAN(matrix[6]);
780         params[7] = FLOAT_TO_BOOLEAN(matrix[7]);
781         params[8] = FLOAT_TO_BOOLEAN(matrix[8]);
782         params[9] = FLOAT_TO_BOOLEAN(matrix[9]);
783         params[10] = FLOAT_TO_BOOLEAN(matrix[10]);
784         params[11] = FLOAT_TO_BOOLEAN(matrix[11]);
785         params[12] = FLOAT_TO_BOOLEAN(matrix[12]);
786         params[13] = FLOAT_TO_BOOLEAN(matrix[13]);
787         params[14] = FLOAT_TO_BOOLEAN(matrix[14]);
788         params[15] = FLOAT_TO_BOOLEAN(matrix[15]);
789         }
790         break;
791      case GL_PROJECTION_STACK_DEPTH:
792         params[0] = INT_TO_BOOLEAN(ctx->ProjectionMatrixStack.Depth + 1);
793         break;
794      case GL_READ_BUFFER:
795         params[0] = ENUM_TO_BOOLEAN(ctx->ReadBuffer->ColorReadBuffer);
796         break;
797      case GL_RED_BIAS:
798         params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.RedBias);
799         break;
800      case GL_RED_BITS:
801         params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.redBits);
802         break;
803      case GL_RED_SCALE:
804         params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.RedScale);
805         break;
806      case GL_RENDER_MODE:
807         params[0] = ENUM_TO_BOOLEAN(ctx->RenderMode);
808         break;
809      case GL_RESCALE_NORMAL:
810         params[0] = ctx->Transform.RescaleNormals;
811         break;
812      case GL_RGBA_MODE:
813         params[0] = ctx->DrawBuffer->Visual.rgbMode;
814         break;
815      case GL_SCISSOR_BOX:
816         params[0] = INT_TO_BOOLEAN(ctx->Scissor.X);
817         params[1] = INT_TO_BOOLEAN(ctx->Scissor.Y);
818         params[2] = INT_TO_BOOLEAN(ctx->Scissor.Width);
819         params[3] = INT_TO_BOOLEAN(ctx->Scissor.Height);
820         break;
821      case GL_SCISSOR_TEST:
822         params[0] = ctx->Scissor.Enabled;
823         break;
824      case GL_SELECTION_BUFFER_SIZE:
825         params[0] = INT_TO_BOOLEAN(ctx->Select.BufferSize);
826         break;
827      case GL_SHADE_MODEL:
828         params[0] = ENUM_TO_BOOLEAN(ctx->Light.ShadeModel);
829         break;
830      case GL_SHARED_TEXTURE_PALETTE_EXT:
831         params[0] = ctx->Texture.SharedPalette;
832         break;
833      case GL_STENCIL_BITS:
834         params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.stencilBits);
835         break;
836      case GL_STENCIL_CLEAR_VALUE:
837         params[0] = INT_TO_BOOLEAN(ctx->Stencil.Clear);
838         break;
839      case GL_STENCIL_FAIL:
840         params[0] = ENUM_TO_BOOLEAN(ctx->Stencil.FailFunc[ctx->Stencil.ActiveFace]);
841         break;
842      case GL_STENCIL_FUNC:
843         params[0] = ENUM_TO_BOOLEAN(ctx->Stencil.Function[ctx->Stencil.ActiveFace]);
844         break;
845      case GL_STENCIL_PASS_DEPTH_FAIL:
846         params[0] = ENUM_TO_BOOLEAN(ctx->Stencil.ZFailFunc[ctx->Stencil.ActiveFace]);
847         break;
848      case GL_STENCIL_PASS_DEPTH_PASS:
849         params[0] = ENUM_TO_BOOLEAN(ctx->Stencil.ZPassFunc[ctx->Stencil.ActiveFace]);
850         break;
851      case GL_STENCIL_REF:
852         params[0] = INT_TO_BOOLEAN(ctx->Stencil.Ref[ctx->Stencil.ActiveFace]);
853         break;
854      case GL_STENCIL_TEST:
855         params[0] = ctx->Stencil.Enabled;
856         break;
857      case GL_STENCIL_VALUE_MASK:
858         params[0] = INT_TO_BOOLEAN(ctx->Stencil.ValueMask[ctx->Stencil.ActiveFace]);
859         break;
860      case GL_STENCIL_WRITEMASK:
861         params[0] = INT_TO_BOOLEAN(ctx->Stencil.WriteMask[ctx->Stencil.ActiveFace]);
862         break;
863      case GL_STEREO:
864         params[0] = ctx->DrawBuffer->Visual.stereoMode;
865         break;
866      case GL_SUBPIXEL_BITS:
867         params[0] = INT_TO_BOOLEAN(ctx->Const.SubPixelBits);
868         break;
869      case GL_TEXTURE_1D:
870         params[0] = _mesa_IsEnabled(GL_TEXTURE_1D);
871         break;
872      case GL_TEXTURE_2D:
873         params[0] = _mesa_IsEnabled(GL_TEXTURE_2D);
874         break;
875      case GL_TEXTURE_3D:
876         params[0] = _mesa_IsEnabled(GL_TEXTURE_3D);
877         break;
878      case GL_TEXTURE_1D_ARRAY_EXT:
879         CHECK_EXT1(MESA_texture_array, "GetBooleanv");
880         params[0] = _mesa_IsEnabled(GL_TEXTURE_1D_ARRAY_EXT);
881         break;
882      case GL_TEXTURE_2D_ARRAY_EXT:
883         CHECK_EXT1(MESA_texture_array, "GetBooleanv");
884         params[0] = _mesa_IsEnabled(GL_TEXTURE_2D_ARRAY_EXT);
885         break;
886      case GL_TEXTURE_BINDING_1D:
887         params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_INDEX]->Name);
888         break;
889      case GL_TEXTURE_BINDING_2D:
890         params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_INDEX]->Name);
891         break;
892      case GL_TEXTURE_BINDING_3D:
893         params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_3D_INDEX]->Name);
894         break;
895      case GL_TEXTURE_BINDING_1D_ARRAY_EXT:
896         CHECK_EXT1(MESA_texture_array, "GetBooleanv");
897         params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_ARRAY_INDEX]->Name);
898         break;
899      case GL_TEXTURE_BINDING_2D_ARRAY_EXT:
900         CHECK_EXT1(MESA_texture_array, "GetBooleanv");
901         params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_ARRAY_INDEX]->Name);
902         break;
903      case GL_TEXTURE_GEN_S:
904         params[0] = ((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & S_BIT) ? 1 : 0);
905         break;
906      case GL_TEXTURE_GEN_T:
907         params[0] = ((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & T_BIT) ? 1 : 0);
908         break;
909      case GL_TEXTURE_GEN_R:
910         params[0] = ((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & R_BIT) ? 1 : 0);
911         break;
912      case GL_TEXTURE_GEN_Q:
913         params[0] = ((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & Q_BIT) ? 1 : 0);
914         break;
915      case GL_TEXTURE_MATRIX:
916         {
917         const GLfloat *matrix = ctx->TextureMatrixStack[ctx->Texture.CurrentUnit].Top->m;
918         params[0] = FLOAT_TO_BOOLEAN(matrix[0]);
919         params[1] = FLOAT_TO_BOOLEAN(matrix[1]);
920         params[2] = FLOAT_TO_BOOLEAN(matrix[2]);
921         params[3] = FLOAT_TO_BOOLEAN(matrix[3]);
922         params[4] = FLOAT_TO_BOOLEAN(matrix[4]);
923         params[5] = FLOAT_TO_BOOLEAN(matrix[5]);
924         params[6] = FLOAT_TO_BOOLEAN(matrix[6]);
925         params[7] = FLOAT_TO_BOOLEAN(matrix[7]);
926         params[8] = FLOAT_TO_BOOLEAN(matrix[8]);
927         params[9] = FLOAT_TO_BOOLEAN(matrix[9]);
928         params[10] = FLOAT_TO_BOOLEAN(matrix[10]);
929         params[11] = FLOAT_TO_BOOLEAN(matrix[11]);
930         params[12] = FLOAT_TO_BOOLEAN(matrix[12]);
931         params[13] = FLOAT_TO_BOOLEAN(matrix[13]);
932         params[14] = FLOAT_TO_BOOLEAN(matrix[14]);
933         params[15] = FLOAT_TO_BOOLEAN(matrix[15]);
934         }
935         break;
936      case GL_TEXTURE_STACK_DEPTH:
937         params[0] = INT_TO_BOOLEAN(ctx->TextureMatrixStack[ctx->Texture.CurrentUnit].Depth + 1);
938         break;
939      case GL_UNPACK_ALIGNMENT:
940         params[0] = INT_TO_BOOLEAN(ctx->Unpack.Alignment);
941         break;
942      case GL_UNPACK_LSB_FIRST:
943         params[0] = ctx->Unpack.LsbFirst;
944         break;
945      case GL_UNPACK_ROW_LENGTH:
946         params[0] = INT_TO_BOOLEAN(ctx->Unpack.RowLength);
947         break;
948      case GL_UNPACK_SKIP_PIXELS:
949         params[0] = INT_TO_BOOLEAN(ctx->Unpack.SkipPixels);
950         break;
951      case GL_UNPACK_SKIP_ROWS:
952         params[0] = INT_TO_BOOLEAN(ctx->Unpack.SkipRows);
953         break;
954      case GL_UNPACK_SWAP_BYTES:
955         params[0] = ctx->Unpack.SwapBytes;
956         break;
957      case GL_UNPACK_SKIP_IMAGES_EXT:
958         params[0] = INT_TO_BOOLEAN(ctx->Unpack.SkipImages);
959         break;
960      case GL_UNPACK_IMAGE_HEIGHT_EXT:
961         params[0] = INT_TO_BOOLEAN(ctx->Unpack.ImageHeight);
962         break;
963      case GL_UNPACK_CLIENT_STORAGE_APPLE:
964         params[0] = ctx->Unpack.ClientStorage;
965         break;
966      case GL_VIEWPORT:
967         params[0] = INT_TO_BOOLEAN(ctx->Viewport.X);
968         params[1] = INT_TO_BOOLEAN(ctx->Viewport.Y);
969         params[2] = INT_TO_BOOLEAN(ctx->Viewport.Width);
970         params[3] = INT_TO_BOOLEAN(ctx->Viewport.Height);
971         break;
972      case GL_ZOOM_X:
973         params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.ZoomX);
974         break;
975      case GL_ZOOM_Y:
976         params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.ZoomY);
977         break;
978      case GL_VERTEX_ARRAY:
979         params[0] = ctx->Array.ArrayObj->Vertex.Enabled;
980         break;
981      case GL_VERTEX_ARRAY_SIZE:
982         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Vertex.Size);
983         break;
984      case GL_VERTEX_ARRAY_TYPE:
985         params[0] = ENUM_TO_BOOLEAN(ctx->Array.ArrayObj->Vertex.Type);
986         break;
987      case GL_VERTEX_ARRAY_STRIDE:
988         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Vertex.Stride);
989         break;
990      case GL_VERTEX_ARRAY_COUNT_EXT:
991         params[0] = INT_TO_BOOLEAN(0);
992         break;
993      case GL_NORMAL_ARRAY:
994         params[0] = ENUM_TO_BOOLEAN(ctx->Array.ArrayObj->Normal.Enabled);
995         break;
996      case GL_NORMAL_ARRAY_TYPE:
997         params[0] = ENUM_TO_BOOLEAN(ctx->Array.ArrayObj->Normal.Type);
998         break;
999      case GL_NORMAL_ARRAY_STRIDE:
1000         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Normal.Stride);
1001         break;
1002      case GL_NORMAL_ARRAY_COUNT_EXT:
1003         params[0] = INT_TO_BOOLEAN(0);
1004         break;
1005      case GL_COLOR_ARRAY:
1006         params[0] = ctx->Array.ArrayObj->Color.Enabled;
1007         break;
1008      case GL_COLOR_ARRAY_SIZE:
1009         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Color.Size);
1010         break;
1011      case GL_COLOR_ARRAY_TYPE:
1012         params[0] = ENUM_TO_BOOLEAN(ctx->Array.ArrayObj->Color.Type);
1013         break;
1014      case GL_COLOR_ARRAY_STRIDE:
1015         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Color.Stride);
1016         break;
1017      case GL_COLOR_ARRAY_COUNT_EXT:
1018         params[0] = INT_TO_BOOLEAN(0);
1019         break;
1020      case GL_INDEX_ARRAY:
1021         params[0] = ctx->Array.ArrayObj->Index.Enabled;
1022         break;
1023      case GL_INDEX_ARRAY_TYPE:
1024         params[0] = ENUM_TO_BOOLEAN(ctx->Array.ArrayObj->Index.Type);
1025         break;
1026      case GL_INDEX_ARRAY_STRIDE:
1027         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Index.Stride);
1028         break;
1029      case GL_INDEX_ARRAY_COUNT_EXT:
1030         params[0] = INT_TO_BOOLEAN(0);
1031         break;
1032      case GL_TEXTURE_COORD_ARRAY:
1033         params[0] = ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Enabled;
1034         break;
1035      case GL_TEXTURE_COORD_ARRAY_SIZE:
1036         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Size);
1037         break;
1038      case GL_TEXTURE_COORD_ARRAY_TYPE:
1039         params[0] = ENUM_TO_BOOLEAN(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Type);
1040         break;
1041      case GL_TEXTURE_COORD_ARRAY_STRIDE:
1042         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Stride);
1043         break;
1044      case GL_TEXTURE_COORD_ARRAY_COUNT_EXT:
1045         params[0] = INT_TO_BOOLEAN(0);
1046         break;
1047      case GL_EDGE_FLAG_ARRAY:
1048         params[0] = ctx->Array.ArrayObj->EdgeFlag.Enabled;
1049         break;
1050      case GL_EDGE_FLAG_ARRAY_STRIDE:
1051         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->EdgeFlag.Stride);
1052         break;
1053      case GL_EDGE_FLAG_ARRAY_COUNT_EXT:
1054         params[0] = INT_TO_BOOLEAN(0);
1055         break;
1056      case GL_MAX_TEXTURE_UNITS_ARB:
1057         CHECK_EXT1(ARB_multitexture, "GetBooleanv");
1058         params[0] = INT_TO_BOOLEAN(ctx->Const.MaxTextureUnits);
1059         break;
1060      case GL_ACTIVE_TEXTURE_ARB:
1061         CHECK_EXT1(ARB_multitexture, "GetBooleanv");
1062         params[0] = INT_TO_BOOLEAN(GL_TEXTURE0_ARB + ctx->Texture.CurrentUnit);
1063         break;
1064      case GL_CLIENT_ACTIVE_TEXTURE_ARB:
1065         CHECK_EXT1(ARB_multitexture, "GetBooleanv");
1066         params[0] = INT_TO_BOOLEAN(GL_TEXTURE0_ARB + ctx->Array.ActiveTexture);
1067         break;
1068      case GL_TEXTURE_CUBE_MAP_ARB:
1069         CHECK_EXT1(ARB_texture_cube_map, "GetBooleanv");
1070         params[0] = _mesa_IsEnabled(GL_TEXTURE_CUBE_MAP_ARB);
1071         break;
1072      case GL_TEXTURE_BINDING_CUBE_MAP_ARB:
1073         CHECK_EXT1(ARB_texture_cube_map, "GetBooleanv");
1074         params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_CUBE_INDEX]->Name);
1075         break;
1076      case GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB:
1077         CHECK_EXT1(ARB_texture_cube_map, "GetBooleanv");
1078         params[0] = INT_TO_BOOLEAN((1 << (ctx->Const.MaxCubeTextureLevels - 1)));
1079         break;
1080      case GL_TEXTURE_COMPRESSION_HINT_ARB:
1081         params[0] = INT_TO_BOOLEAN(ctx->Hint.TextureCompression);
1082         break;
1083      case GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB:
1084         params[0] = INT_TO_BOOLEAN(_mesa_get_compressed_formats(ctx, NULL, GL_FALSE));
1085         break;
1086      case GL_COMPRESSED_TEXTURE_FORMATS_ARB:
1087         {
1088         GLint formats[100];
1089         GLuint i, n = _mesa_get_compressed_formats(ctx, formats, GL_FALSE);
1090         ASSERT(n <= 100);
1091         for (i = 0; i < n; i++)
1092            params[i] = ENUM_TO_BOOLEAN(formats[i]);
1093         }
1094         break;
1095      case GL_ARRAY_ELEMENT_LOCK_FIRST_EXT:
1096         CHECK_EXT1(EXT_compiled_vertex_array, "GetBooleanv");
1097         params[0] = INT_TO_BOOLEAN(ctx->Array.LockFirst);
1098         break;
1099      case GL_ARRAY_ELEMENT_LOCK_COUNT_EXT:
1100         CHECK_EXT1(EXT_compiled_vertex_array, "GetBooleanv");
1101         params[0] = INT_TO_BOOLEAN(ctx->Array.LockCount);
1102         break;
1103      case GL_TRANSPOSE_COLOR_MATRIX_ARB:
1104         {
1105         const GLfloat *matrix = ctx->ColorMatrixStack.Top->m;
1106         params[0] = FLOAT_TO_BOOLEAN(matrix[0]);
1107         params[1] = FLOAT_TO_BOOLEAN(matrix[4]);
1108         params[2] = FLOAT_TO_BOOLEAN(matrix[8]);
1109         params[3] = FLOAT_TO_BOOLEAN(matrix[12]);
1110         params[4] = FLOAT_TO_BOOLEAN(matrix[1]);
1111         params[5] = FLOAT_TO_BOOLEAN(matrix[5]);
1112         params[6] = FLOAT_TO_BOOLEAN(matrix[9]);
1113         params[7] = FLOAT_TO_BOOLEAN(matrix[13]);
1114         params[8] = FLOAT_TO_BOOLEAN(matrix[2]);
1115         params[9] = FLOAT_TO_BOOLEAN(matrix[6]);
1116         params[10] = FLOAT_TO_BOOLEAN(matrix[10]);
1117         params[11] = FLOAT_TO_BOOLEAN(matrix[14]);
1118         params[12] = FLOAT_TO_BOOLEAN(matrix[3]);
1119         params[13] = FLOAT_TO_BOOLEAN(matrix[7]);
1120         params[14] = FLOAT_TO_BOOLEAN(matrix[11]);
1121         params[15] = FLOAT_TO_BOOLEAN(matrix[15]);
1122         }
1123         break;
1124      case GL_TRANSPOSE_MODELVIEW_MATRIX_ARB:
1125         {
1126         const GLfloat *matrix = ctx->ModelviewMatrixStack.Top->m;
1127         params[0] = FLOAT_TO_BOOLEAN(matrix[0]);
1128         params[1] = FLOAT_TO_BOOLEAN(matrix[4]);
1129         params[2] = FLOAT_TO_BOOLEAN(matrix[8]);
1130         params[3] = FLOAT_TO_BOOLEAN(matrix[12]);
1131         params[4] = FLOAT_TO_BOOLEAN(matrix[1]);
1132         params[5] = FLOAT_TO_BOOLEAN(matrix[5]);
1133         params[6] = FLOAT_TO_BOOLEAN(matrix[9]);
1134         params[7] = FLOAT_TO_BOOLEAN(matrix[13]);
1135         params[8] = FLOAT_TO_BOOLEAN(matrix[2]);
1136         params[9] = FLOAT_TO_BOOLEAN(matrix[6]);
1137         params[10] = FLOAT_TO_BOOLEAN(matrix[10]);
1138         params[11] = FLOAT_TO_BOOLEAN(matrix[14]);
1139         params[12] = FLOAT_TO_BOOLEAN(matrix[3]);
1140         params[13] = FLOAT_TO_BOOLEAN(matrix[7]);
1141         params[14] = FLOAT_TO_BOOLEAN(matrix[11]);
1142         params[15] = FLOAT_TO_BOOLEAN(matrix[15]);
1143         }
1144         break;
1145      case GL_TRANSPOSE_PROJECTION_MATRIX_ARB:
1146         {
1147         const GLfloat *matrix = ctx->ProjectionMatrixStack.Top->m;
1148         params[0] = FLOAT_TO_BOOLEAN(matrix[0]);
1149         params[1] = FLOAT_TO_BOOLEAN(matrix[4]);
1150         params[2] = FLOAT_TO_BOOLEAN(matrix[8]);
1151         params[3] = FLOAT_TO_BOOLEAN(matrix[12]);
1152         params[4] = FLOAT_TO_BOOLEAN(matrix[1]);
1153         params[5] = FLOAT_TO_BOOLEAN(matrix[5]);
1154         params[6] = FLOAT_TO_BOOLEAN(matrix[9]);
1155         params[7] = FLOAT_TO_BOOLEAN(matrix[13]);
1156         params[8] = FLOAT_TO_BOOLEAN(matrix[2]);
1157         params[9] = FLOAT_TO_BOOLEAN(matrix[6]);
1158         params[10] = FLOAT_TO_BOOLEAN(matrix[10]);
1159         params[11] = FLOAT_TO_BOOLEAN(matrix[14]);
1160         params[12] = FLOAT_TO_BOOLEAN(matrix[3]);
1161         params[13] = FLOAT_TO_BOOLEAN(matrix[7]);
1162         params[14] = FLOAT_TO_BOOLEAN(matrix[11]);
1163         params[15] = FLOAT_TO_BOOLEAN(matrix[15]);
1164         }
1165         break;
1166      case GL_TRANSPOSE_TEXTURE_MATRIX_ARB:
1167         {
1168         const GLfloat *matrix = ctx->TextureMatrixStack[ctx->Texture.CurrentUnit].Top->m;
1169         params[0] = FLOAT_TO_BOOLEAN(matrix[0]);
1170         params[1] = FLOAT_TO_BOOLEAN(matrix[4]);
1171         params[2] = FLOAT_TO_BOOLEAN(matrix[8]);
1172         params[3] = FLOAT_TO_BOOLEAN(matrix[12]);
1173         params[4] = FLOAT_TO_BOOLEAN(matrix[1]);
1174         params[5] = FLOAT_TO_BOOLEAN(matrix[5]);
1175         params[6] = FLOAT_TO_BOOLEAN(matrix[9]);
1176         params[7] = FLOAT_TO_BOOLEAN(matrix[13]);
1177         params[8] = FLOAT_TO_BOOLEAN(matrix[2]);
1178         params[9] = FLOAT_TO_BOOLEAN(matrix[6]);
1179         params[10] = FLOAT_TO_BOOLEAN(matrix[10]);
1180         params[11] = FLOAT_TO_BOOLEAN(matrix[14]);
1181         params[12] = FLOAT_TO_BOOLEAN(matrix[3]);
1182         params[13] = FLOAT_TO_BOOLEAN(matrix[7]);
1183         params[14] = FLOAT_TO_BOOLEAN(matrix[11]);
1184         params[15] = FLOAT_TO_BOOLEAN(matrix[15]);
1185         }
1186         break;
1187      case GL_COLOR_MATRIX_SGI:
1188         {
1189         const GLfloat *matrix = ctx->ColorMatrixStack.Top->m;
1190         params[0] = FLOAT_TO_BOOLEAN(matrix[0]);
1191         params[1] = FLOAT_TO_BOOLEAN(matrix[1]);
1192         params[2] = FLOAT_TO_BOOLEAN(matrix[2]);
1193         params[3] = FLOAT_TO_BOOLEAN(matrix[3]);
1194         params[4] = FLOAT_TO_BOOLEAN(matrix[4]);
1195         params[5] = FLOAT_TO_BOOLEAN(matrix[5]);
1196         params[6] = FLOAT_TO_BOOLEAN(matrix[6]);
1197         params[7] = FLOAT_TO_BOOLEAN(matrix[7]);
1198         params[8] = FLOAT_TO_BOOLEAN(matrix[8]);
1199         params[9] = FLOAT_TO_BOOLEAN(matrix[9]);
1200         params[10] = FLOAT_TO_BOOLEAN(matrix[10]);
1201         params[11] = FLOAT_TO_BOOLEAN(matrix[11]);
1202         params[12] = FLOAT_TO_BOOLEAN(matrix[12]);
1203         params[13] = FLOAT_TO_BOOLEAN(matrix[13]);
1204         params[14] = FLOAT_TO_BOOLEAN(matrix[14]);
1205         params[15] = FLOAT_TO_BOOLEAN(matrix[15]);
1206         }
1207         break;
1208      case GL_COLOR_MATRIX_STACK_DEPTH_SGI:
1209         params[0] = INT_TO_BOOLEAN(ctx->ColorMatrixStack.Depth + 1);
1210         break;
1211      case GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI:
1212         params[0] = INT_TO_BOOLEAN(MAX_COLOR_STACK_DEPTH);
1213         break;
1214      case GL_POST_COLOR_MATRIX_RED_SCALE_SGI:
1215         params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostColorMatrixScale[0]);
1216         break;
1217      case GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI:
1218         params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostColorMatrixScale[1]);
1219         break;
1220      case GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI:
1221         params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostColorMatrixScale[2]);
1222         break;
1223      case GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI:
1224         params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostColorMatrixScale[3]);
1225         break;
1226      case GL_POST_COLOR_MATRIX_RED_BIAS_SGI:
1227         params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostColorMatrixBias[0]);
1228         break;
1229      case GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI:
1230         params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostColorMatrixBias[1]);
1231         break;
1232      case GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI:
1233         params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostColorMatrixBias[2]);
1234         break;
1235      case GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI:
1236         params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostColorMatrixBias[3]);
1237         break;
1238      case GL_CONVOLUTION_1D_EXT:
1239         CHECK_EXT1(EXT_convolution, "GetBooleanv");
1240         params[0] = ctx->Pixel.Convolution1DEnabled;
1241         break;
1242      case GL_CONVOLUTION_2D_EXT:
1243         CHECK_EXT1(EXT_convolution, "GetBooleanv");
1244         params[0] = ctx->Pixel.Convolution2DEnabled;
1245         break;
1246      case GL_SEPARABLE_2D_EXT:
1247         CHECK_EXT1(EXT_convolution, "GetBooleanv");
1248         params[0] = ctx->Pixel.Separable2DEnabled;
1249         break;
1250      case GL_POST_CONVOLUTION_RED_SCALE_EXT:
1251         CHECK_EXT1(EXT_convolution, "GetBooleanv");
1252         params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostConvolutionScale[0]);
1253         break;
1254      case GL_POST_CONVOLUTION_GREEN_SCALE_EXT:
1255         CHECK_EXT1(EXT_convolution, "GetBooleanv");
1256         params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostConvolutionScale[1]);
1257         break;
1258      case GL_POST_CONVOLUTION_BLUE_SCALE_EXT:
1259         CHECK_EXT1(EXT_convolution, "GetBooleanv");
1260         params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostConvolutionScale[2]);
1261         break;
1262      case GL_POST_CONVOLUTION_ALPHA_SCALE_EXT:
1263         CHECK_EXT1(EXT_convolution, "GetBooleanv");
1264         params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostConvolutionScale[3]);
1265         break;
1266      case GL_POST_CONVOLUTION_RED_BIAS_EXT:
1267         CHECK_EXT1(EXT_convolution, "GetBooleanv");
1268         params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostConvolutionBias[0]);
1269         break;
1270      case GL_POST_CONVOLUTION_GREEN_BIAS_EXT:
1271         CHECK_EXT1(EXT_convolution, "GetBooleanv");
1272         params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostConvolutionBias[1]);
1273         break;
1274      case GL_POST_CONVOLUTION_BLUE_BIAS_EXT:
1275         CHECK_EXT1(EXT_convolution, "GetBooleanv");
1276         params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostConvolutionBias[2]);
1277         break;
1278      case GL_POST_CONVOLUTION_ALPHA_BIAS_EXT:
1279         CHECK_EXT1(EXT_convolution, "GetBooleanv");
1280         params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostConvolutionBias[3]);
1281         break;
1282      case GL_HISTOGRAM:
1283         CHECK_EXT1(EXT_histogram, "GetBooleanv");
1284         params[0] = ctx->Pixel.HistogramEnabled;
1285         break;
1286      case GL_MINMAX:
1287         CHECK_EXT1(EXT_histogram, "GetBooleanv");
1288         params[0] = ctx->Pixel.MinMaxEnabled;
1289         break;
1290      case GL_COLOR_TABLE_SGI:
1291         CHECK_EXT1(SGI_color_table, "GetBooleanv");
1292         params[0] = ctx->Pixel.ColorTableEnabled[COLORTABLE_PRECONVOLUTION];
1293         break;
1294      case GL_POST_CONVOLUTION_COLOR_TABLE_SGI:
1295         CHECK_EXT1(SGI_color_table, "GetBooleanv");
1296         params[0] = ctx->Pixel.ColorTableEnabled[COLORTABLE_POSTCONVOLUTION];
1297         break;
1298      case GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI:
1299         CHECK_EXT1(SGI_color_table, "GetBooleanv");
1300         params[0] = ctx->Pixel.ColorTableEnabled[COLORTABLE_POSTCOLORMATRIX];
1301         break;
1302      case GL_TEXTURE_COLOR_TABLE_SGI:
1303         CHECK_EXT1(SGI_texture_color_table, "GetBooleanv");
1304         params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].ColorTableEnabled;
1305         break;
1306      case GL_COLOR_SUM_EXT:
1307         CHECK_EXT2(EXT_secondary_color, ARB_vertex_program, "GetBooleanv");
1308         params[0] = ctx->Fog.ColorSumEnabled;
1309         break;
1310      case GL_CURRENT_SECONDARY_COLOR_EXT:
1311         CHECK_EXT1(EXT_secondary_color, "GetBooleanv");
1312         {
1313         FLUSH_CURRENT(ctx, 0);
1314         params[0] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][0]);
1315         params[1] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][1]);
1316         params[2] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][2]);
1317         params[3] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][3]);
1318         }
1319         break;
1320      case GL_SECONDARY_COLOR_ARRAY_EXT:
1321         CHECK_EXT1(EXT_secondary_color, "GetBooleanv");
1322         params[0] = ctx->Array.ArrayObj->SecondaryColor.Enabled;
1323         break;
1324      case GL_SECONDARY_COLOR_ARRAY_TYPE_EXT:
1325         CHECK_EXT1(EXT_secondary_color, "GetBooleanv");
1326         params[0] = ENUM_TO_BOOLEAN(ctx->Array.ArrayObj->SecondaryColor.Type);
1327         break;
1328      case GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT:
1329         CHECK_EXT1(EXT_secondary_color, "GetBooleanv");
1330         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->SecondaryColor.Stride);
1331         break;
1332      case GL_SECONDARY_COLOR_ARRAY_SIZE_EXT:
1333         CHECK_EXT1(EXT_secondary_color, "GetBooleanv");
1334         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->SecondaryColor.Size);
1335         break;
1336      case GL_CURRENT_FOG_COORDINATE_EXT:
1337         CHECK_EXT1(EXT_fog_coord, "GetBooleanv");
1338         {
1339         FLUSH_CURRENT(ctx, 0);
1340         params[0] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_FOG][0]);
1341         }
1342         break;
1343      case GL_FOG_COORDINATE_ARRAY_EXT:
1344         CHECK_EXT1(EXT_fog_coord, "GetBooleanv");
1345         params[0] = ctx->Array.ArrayObj->FogCoord.Enabled;
1346         break;
1347      case GL_FOG_COORDINATE_ARRAY_TYPE_EXT:
1348         CHECK_EXT1(EXT_fog_coord, "GetBooleanv");
1349         params[0] = ENUM_TO_BOOLEAN(ctx->Array.ArrayObj->FogCoord.Type);
1350         break;
1351      case GL_FOG_COORDINATE_ARRAY_STRIDE_EXT:
1352         CHECK_EXT1(EXT_fog_coord, "GetBooleanv");
1353         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->FogCoord.Stride);
1354         break;
1355      case GL_FOG_COORDINATE_SOURCE_EXT:
1356         CHECK_EXT1(EXT_fog_coord, "GetBooleanv");
1357         params[0] = ENUM_TO_BOOLEAN(ctx->Fog.FogCoordinateSource);
1358         break;
1359      case GL_MAX_TEXTURE_LOD_BIAS_EXT:
1360         CHECK_EXT1(EXT_texture_lod_bias, "GetBooleanv");
1361         params[0] = FLOAT_TO_BOOLEAN(ctx->Const.MaxTextureLodBias);
1362         break;
1363      case GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT:
1364         CHECK_EXT1(EXT_texture_filter_anisotropic, "GetBooleanv");
1365         params[0] = FLOAT_TO_BOOLEAN(ctx->Const.MaxTextureMaxAnisotropy);
1366         break;
1367      case GL_MULTISAMPLE_ARB:
1368         params[0] = ctx->Multisample.Enabled;
1369         break;
1370      case GL_SAMPLE_ALPHA_TO_COVERAGE_ARB:
1371         params[0] = ctx->Multisample.SampleAlphaToCoverage;
1372         break;
1373      case GL_SAMPLE_ALPHA_TO_ONE_ARB:
1374         params[0] = ctx->Multisample.SampleAlphaToOne;
1375         break;
1376      case GL_SAMPLE_COVERAGE_ARB:
1377         params[0] = ctx->Multisample.SampleCoverage;
1378         break;
1379      case GL_SAMPLE_COVERAGE_VALUE_ARB:
1380         params[0] = FLOAT_TO_BOOLEAN(ctx->Multisample.SampleCoverageValue);
1381         break;
1382      case GL_SAMPLE_COVERAGE_INVERT_ARB:
1383         params[0] = ctx->Multisample.SampleCoverageInvert;
1384         break;
1385      case GL_SAMPLE_BUFFERS_ARB:
1386         params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.sampleBuffers);
1387         break;
1388      case GL_SAMPLES_ARB:
1389         params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.samples);
1390         break;
1391      case GL_RASTER_POSITION_UNCLIPPED_IBM:
1392         CHECK_EXT1(IBM_rasterpos_clip, "GetBooleanv");
1393         params[0] = ctx->Transform.RasterPositionUnclipped;
1394         break;
1395      case GL_POINT_SPRITE_NV:
1396         CHECK_EXT2(NV_point_sprite, ARB_point_sprite, "GetBooleanv");
1397         params[0] = ctx->Point.PointSprite;
1398         break;
1399      case GL_POINT_SPRITE_R_MODE_NV:
1400         CHECK_EXT1(NV_point_sprite, "GetBooleanv");
1401         params[0] = ENUM_TO_BOOLEAN(ctx->Point.SpriteRMode);
1402         break;
1403      case GL_POINT_SPRITE_COORD_ORIGIN:
1404         CHECK_EXT2(NV_point_sprite, ARB_point_sprite, "GetBooleanv");
1405         params[0] = ENUM_TO_BOOLEAN(ctx->Point.SpriteOrigin);
1406         break;
1407      case GL_GENERATE_MIPMAP_HINT_SGIS:
1408         CHECK_EXT1(SGIS_generate_mipmap, "GetBooleanv");
1409         params[0] = ENUM_TO_BOOLEAN(ctx->Hint.GenerateMipmap);
1410         break;
1411      case GL_VERTEX_PROGRAM_BINDING_NV:
1412         CHECK_EXT1(NV_vertex_program, "GetBooleanv");
1413         params[0] = INT_TO_BOOLEAN((ctx->VertexProgram.Current ? ctx->VertexProgram.Current->Base.Id : 0));
1414         break;
1415      case GL_VERTEX_ATTRIB_ARRAY0_NV:
1416         CHECK_EXT1(NV_vertex_program, "GetBooleanv");
1417         params[0] = ctx->Array.ArrayObj->VertexAttrib[0].Enabled;
1418         break;
1419      case GL_VERTEX_ATTRIB_ARRAY1_NV:
1420         CHECK_EXT1(NV_vertex_program, "GetBooleanv");
1421         params[0] = ctx->Array.ArrayObj->VertexAttrib[1].Enabled;
1422         break;
1423      case GL_VERTEX_ATTRIB_ARRAY2_NV:
1424         CHECK_EXT1(NV_vertex_program, "GetBooleanv");
1425         params[0] = ctx->Array.ArrayObj->VertexAttrib[2].Enabled;
1426         break;
1427      case GL_VERTEX_ATTRIB_ARRAY3_NV:
1428         CHECK_EXT1(NV_vertex_program, "GetBooleanv");
1429         params[0] = ctx->Array.ArrayObj->VertexAttrib[3].Enabled;
1430         break;
1431      case GL_VERTEX_ATTRIB_ARRAY4_NV:
1432         CHECK_EXT1(NV_vertex_program, "GetBooleanv");
1433         params[0] = ctx->Array.ArrayObj->VertexAttrib[4].Enabled;
1434         break;
1435      case GL_VERTEX_ATTRIB_ARRAY5_NV:
1436         CHECK_EXT1(NV_vertex_program, "GetBooleanv");
1437         params[0] = ctx->Array.ArrayObj->VertexAttrib[5].Enabled;
1438         break;
1439      case GL_VERTEX_ATTRIB_ARRAY6_NV:
1440         CHECK_EXT1(NV_vertex_program, "GetBooleanv");
1441         params[0] = ctx->Array.ArrayObj->VertexAttrib[6].Enabled;
1442         break;
1443      case GL_VERTEX_ATTRIB_ARRAY7_NV:
1444         CHECK_EXT1(NV_vertex_program, "GetBooleanv");
1445         params[0] = ctx->Array.ArrayObj->VertexAttrib[7].Enabled;
1446         break;
1447      case GL_VERTEX_ATTRIB_ARRAY8_NV:
1448         CHECK_EXT1(NV_vertex_program, "GetBooleanv");
1449         params[0] = ctx->Array.ArrayObj->VertexAttrib[8].Enabled;
1450         break;
1451      case GL_VERTEX_ATTRIB_ARRAY9_NV:
1452         CHECK_EXT1(NV_vertex_program, "GetBooleanv");
1453         params[0] = ctx->Array.ArrayObj->VertexAttrib[9].Enabled;
1454         break;
1455      case GL_VERTEX_ATTRIB_ARRAY10_NV:
1456         CHECK_EXT1(NV_vertex_program, "GetBooleanv");
1457         params[0] = ctx->Array.ArrayObj->VertexAttrib[10].Enabled;
1458         break;
1459      case GL_VERTEX_ATTRIB_ARRAY11_NV:
1460         CHECK_EXT1(NV_vertex_program, "GetBooleanv");
1461         params[0] = ctx->Array.ArrayObj->VertexAttrib[11].Enabled;
1462         break;
1463      case GL_VERTEX_ATTRIB_ARRAY12_NV:
1464         CHECK_EXT1(NV_vertex_program, "GetBooleanv");
1465         params[0] = ctx->Array.ArrayObj->VertexAttrib[12].Enabled;
1466         break;
1467      case GL_VERTEX_ATTRIB_ARRAY13_NV:
1468         CHECK_EXT1(NV_vertex_program, "GetBooleanv");
1469         params[0] = ctx->Array.ArrayObj->VertexAttrib[13].Enabled;
1470         break;
1471      case GL_VERTEX_ATTRIB_ARRAY14_NV:
1472         CHECK_EXT1(NV_vertex_program, "GetBooleanv");
1473         params[0] = ctx->Array.ArrayObj->VertexAttrib[14].Enabled;
1474         break;
1475      case GL_VERTEX_ATTRIB_ARRAY15_NV:
1476         CHECK_EXT1(NV_vertex_program, "GetBooleanv");
1477         params[0] = ctx->Array.ArrayObj->VertexAttrib[15].Enabled;
1478         break;
1479      case GL_MAP1_VERTEX_ATTRIB0_4_NV:
1480         CHECK_EXT1(NV_vertex_program, "GetBooleanv");
1481         params[0] = ctx->Eval.Map1Attrib[0];
1482         break;
1483      case GL_MAP1_VERTEX_ATTRIB1_4_NV:
1484         CHECK_EXT1(NV_vertex_program, "GetBooleanv");
1485         params[0] = ctx->Eval.Map1Attrib[1];
1486         break;
1487      case GL_MAP1_VERTEX_ATTRIB2_4_NV:
1488         CHECK_EXT1(NV_vertex_program, "GetBooleanv");
1489         params[0] = ctx->Eval.Map1Attrib[2];
1490         break;
1491      case GL_MAP1_VERTEX_ATTRIB3_4_NV:
1492         CHECK_EXT1(NV_vertex_program, "GetBooleanv");
1493         params[0] = ctx->Eval.Map1Attrib[3];
1494         break;
1495      case GL_MAP1_VERTEX_ATTRIB4_4_NV:
1496         CHECK_EXT1(NV_vertex_program, "GetBooleanv");
1497         params[0] = ctx->Eval.Map1Attrib[4];
1498         break;
1499      case GL_MAP1_VERTEX_ATTRIB5_4_NV:
1500         CHECK_EXT1(NV_vertex_program, "GetBooleanv");
1501         params[0] = ctx->Eval.Map1Attrib[5];
1502         break;
1503      case GL_MAP1_VERTEX_ATTRIB6_4_NV:
1504         CHECK_EXT1(NV_vertex_program, "GetBooleanv");
1505         params[0] = ctx->Eval.Map1Attrib[6];
1506         break;
1507      case GL_MAP1_VERTEX_ATTRIB7_4_NV:
1508         CHECK_EXT1(NV_vertex_program, "GetBooleanv");
1509         params[0] = ctx->Eval.Map1Attrib[7];
1510         break;
1511      case GL_MAP1_VERTEX_ATTRIB8_4_NV:
1512         CHECK_EXT1(NV_vertex_program, "GetBooleanv");
1513         params[0] = ctx->Eval.Map1Attrib[8];
1514         break;
1515      case GL_MAP1_VERTEX_ATTRIB9_4_NV:
1516         CHECK_EXT1(NV_vertex_program, "GetBooleanv");
1517         params[0] = ctx->Eval.Map1Attrib[9];
1518         break;
1519      case GL_MAP1_VERTEX_ATTRIB10_4_NV:
1520         CHECK_EXT1(NV_vertex_program, "GetBooleanv");
1521         params[0] = ctx->Eval.Map1Attrib[10];
1522         break;
1523      case GL_MAP1_VERTEX_ATTRIB11_4_NV:
1524         CHECK_EXT1(NV_vertex_program, "GetBooleanv");
1525         params[0] = ctx->Eval.Map1Attrib[11];
1526         break;
1527      case GL_MAP1_VERTEX_ATTRIB12_4_NV:
1528         CHECK_EXT1(NV_vertex_program, "GetBooleanv");
1529         params[0] = ctx->Eval.Map1Attrib[12];
1530         break;
1531      case GL_MAP1_VERTEX_ATTRIB13_4_NV:
1532         CHECK_EXT1(NV_vertex_program, "GetBooleanv");
1533         params[0] = ctx->Eval.Map1Attrib[13];
1534         break;
1535      case GL_MAP1_VERTEX_ATTRIB14_4_NV:
1536         CHECK_EXT1(NV_vertex_program, "GetBooleanv");
1537         params[0] = ctx->Eval.Map1Attrib[14];
1538         break;
1539      case GL_MAP1_VERTEX_ATTRIB15_4_NV:
1540         CHECK_EXT1(NV_vertex_program, "GetBooleanv");
1541         params[0] = ctx->Eval.Map1Attrib[15];
1542         break;
1543      case GL_FRAGMENT_PROGRAM_NV:
1544         CHECK_EXT1(NV_fragment_program, "GetBooleanv");
1545         params[0] = ctx->FragmentProgram.Enabled;
1546         break;
1547      case GL_FRAGMENT_PROGRAM_BINDING_NV:
1548         CHECK_EXT1(NV_fragment_program, "GetBooleanv");
1549         params[0] = INT_TO_BOOLEAN(ctx->FragmentProgram.Current ? ctx->FragmentProgram.Current->Base.Id : 0);
1550         break;
1551      case GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV:
1552         CHECK_EXT1(NV_fragment_program, "GetBooleanv");
1553         params[0] = INT_TO_BOOLEAN(MAX_NV_FRAGMENT_PROGRAM_PARAMS);
1554         break;
1555      case GL_TEXTURE_RECTANGLE_NV:
1556         CHECK_EXT1(NV_texture_rectangle, "GetBooleanv");
1557         params[0] = _mesa_IsEnabled(GL_TEXTURE_RECTANGLE_NV);
1558         break;
1559      case GL_TEXTURE_BINDING_RECTANGLE_NV:
1560         CHECK_EXT1(NV_texture_rectangle, "GetBooleanv");
1561         params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_RECT_INDEX]->Name);
1562         break;
1563      case GL_MAX_RECTANGLE_TEXTURE_SIZE_NV:
1564         CHECK_EXT1(NV_texture_rectangle, "GetBooleanv");
1565         params[0] = INT_TO_BOOLEAN(ctx->Const.MaxTextureRectSize);
1566         break;
1567      case GL_STENCIL_TEST_TWO_SIDE_EXT:
1568         CHECK_EXT1(EXT_stencil_two_side, "GetBooleanv");
1569         params[0] = ctx->Stencil.TestTwoSide;
1570         break;
1571      case GL_ACTIVE_STENCIL_FACE_EXT:
1572         CHECK_EXT1(EXT_stencil_two_side, "GetBooleanv");
1573         params[0] = ENUM_TO_BOOLEAN(ctx->Stencil.ActiveFace ? GL_BACK : GL_FRONT);
1574         break;
1575      case GL_MAX_SHININESS_NV:
1576         CHECK_EXT1(NV_light_max_exponent, "GetBooleanv");
1577         params[0] = FLOAT_TO_BOOLEAN(ctx->Const.MaxShininess);
1578         break;
1579      case GL_MAX_SPOT_EXPONENT_NV:
1580         CHECK_EXT1(NV_light_max_exponent, "GetBooleanv");
1581         params[0] = FLOAT_TO_BOOLEAN(ctx->Const.MaxSpotExponent);
1582         break;
1583      case GL_ARRAY_BUFFER_BINDING_ARB:
1584         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayBufferObj->Name);
1585         break;
1586      case GL_VERTEX_ARRAY_BUFFER_BINDING_ARB:
1587         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Vertex.BufferObj->Name);
1588         break;
1589      case GL_NORMAL_ARRAY_BUFFER_BINDING_ARB:
1590         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Normal.BufferObj->Name);
1591         break;
1592      case GL_COLOR_ARRAY_BUFFER_BINDING_ARB:
1593         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Color.BufferObj->Name);
1594         break;
1595      case GL_INDEX_ARRAY_BUFFER_BINDING_ARB:
1596         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Index.BufferObj->Name);
1597         break;
1598      case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB:
1599         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].BufferObj->Name);
1600         break;
1601      case GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB:
1602         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->EdgeFlag.BufferObj->Name);
1603         break;
1604      case GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB:
1605         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->SecondaryColor.BufferObj->Name);
1606         break;
1607      case GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB:
1608         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->FogCoord.BufferObj->Name);
1609         break;
1610      case GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB:
1611         params[0] = INT_TO_BOOLEAN(ctx->Array.ElementArrayBufferObj->Name);
1612         break;
1613      case GL_PIXEL_PACK_BUFFER_BINDING_EXT:
1614         CHECK_EXT1(EXT_pixel_buffer_object, "GetBooleanv");
1615         params[0] = INT_TO_BOOLEAN(ctx->Pack.BufferObj->Name);
1616         break;
1617      case GL_PIXEL_UNPACK_BUFFER_BINDING_EXT:
1618         CHECK_EXT1(EXT_pixel_buffer_object, "GetBooleanv");
1619         params[0] = INT_TO_BOOLEAN(ctx->Unpack.BufferObj->Name);
1620         break;
1621      case GL_VERTEX_PROGRAM_ARB:
1622         CHECK_EXT2(ARB_vertex_program, NV_vertex_program, "GetBooleanv");
1623         params[0] = ctx->VertexProgram.Enabled;
1624         break;
1625      case GL_VERTEX_PROGRAM_POINT_SIZE_ARB:
1626         CHECK_EXT2(ARB_vertex_program, NV_vertex_program, "GetBooleanv");
1627         params[0] = ctx->VertexProgram.PointSizeEnabled;
1628         break;
1629      case GL_VERTEX_PROGRAM_TWO_SIDE_ARB:
1630         CHECK_EXT2(ARB_vertex_program, NV_vertex_program, "GetBooleanv");
1631         params[0] = ctx->VertexProgram.TwoSideEnabled;
1632         break;
1633      case GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB:
1634         CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_vertex_program, "GetBooleanv");
1635         params[0] = INT_TO_BOOLEAN(ctx->Const.MaxProgramMatrixStackDepth);
1636         break;
1637      case GL_MAX_PROGRAM_MATRICES_ARB:
1638         CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_vertex_program, "GetBooleanv");
1639         params[0] = INT_TO_BOOLEAN(ctx->Const.MaxProgramMatrices);
1640         break;
1641      case GL_CURRENT_MATRIX_STACK_DEPTH_ARB:
1642         CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_vertex_program, "GetBooleanv");
1643         params[0] = ctx->CurrentStack->Depth + 1;
1644         break;
1645      case GL_CURRENT_MATRIX_ARB:
1646         CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_fragment_program, "GetBooleanv");
1647         {
1648         const GLfloat *matrix = ctx->CurrentStack->Top->m;
1649         params[0] = FLOAT_TO_BOOLEAN(matrix[0]);
1650         params[1] = FLOAT_TO_BOOLEAN(matrix[1]);
1651         params[2] = FLOAT_TO_BOOLEAN(matrix[2]);
1652         params[3] = FLOAT_TO_BOOLEAN(matrix[3]);
1653         params[4] = FLOAT_TO_BOOLEAN(matrix[4]);
1654         params[5] = FLOAT_TO_BOOLEAN(matrix[5]);
1655         params[6] = FLOAT_TO_BOOLEAN(matrix[6]);
1656         params[7] = FLOAT_TO_BOOLEAN(matrix[7]);
1657         params[8] = FLOAT_TO_BOOLEAN(matrix[8]);
1658         params[9] = FLOAT_TO_BOOLEAN(matrix[9]);
1659         params[10] = FLOAT_TO_BOOLEAN(matrix[10]);
1660         params[11] = FLOAT_TO_BOOLEAN(matrix[11]);
1661         params[12] = FLOAT_TO_BOOLEAN(matrix[12]);
1662         params[13] = FLOAT_TO_BOOLEAN(matrix[13]);
1663         params[14] = FLOAT_TO_BOOLEAN(matrix[14]);
1664         params[15] = FLOAT_TO_BOOLEAN(matrix[15]);
1665         }
1666         break;
1667      case GL_TRANSPOSE_CURRENT_MATRIX_ARB:
1668         CHECK_EXT2(ARB_vertex_program, ARB_fragment_program, "GetBooleanv");
1669         {
1670         const GLfloat *matrix = ctx->CurrentStack->Top->m;
1671         params[0] = FLOAT_TO_BOOLEAN(matrix[0]);
1672         params[1] = FLOAT_TO_BOOLEAN(matrix[4]);
1673         params[2] = FLOAT_TO_BOOLEAN(matrix[8]);
1674         params[3] = FLOAT_TO_BOOLEAN(matrix[12]);
1675         params[4] = FLOAT_TO_BOOLEAN(matrix[1]);
1676         params[5] = FLOAT_TO_BOOLEAN(matrix[5]);
1677         params[6] = FLOAT_TO_BOOLEAN(matrix[9]);
1678         params[7] = FLOAT_TO_BOOLEAN(matrix[13]);
1679         params[8] = FLOAT_TO_BOOLEAN(matrix[2]);
1680         params[9] = FLOAT_TO_BOOLEAN(matrix[6]);
1681         params[10] = FLOAT_TO_BOOLEAN(matrix[10]);
1682         params[11] = FLOAT_TO_BOOLEAN(matrix[14]);
1683         params[12] = FLOAT_TO_BOOLEAN(matrix[3]);
1684         params[13] = FLOAT_TO_BOOLEAN(matrix[7]);
1685         params[14] = FLOAT_TO_BOOLEAN(matrix[11]);
1686         params[15] = FLOAT_TO_BOOLEAN(matrix[15]);
1687         }
1688         break;
1689      case GL_MAX_VERTEX_ATTRIBS_ARB:
1690         CHECK_EXT1(ARB_vertex_program, "GetBooleanv");
1691         params[0] = INT_TO_BOOLEAN(ctx->Const.VertexProgram.MaxAttribs);
1692         break;
1693      case GL_PROGRAM_ERROR_POSITION_ARB:
1694         CHECK_EXT4(NV_vertex_program, ARB_vertex_program, NV_fragment_program, ARB_fragment_program, "GetBooleanv");
1695         params[0] = INT_TO_BOOLEAN(ctx->Program.ErrorPos);
1696         break;
1697      case GL_FRAGMENT_PROGRAM_ARB:
1698         CHECK_EXT1(ARB_fragment_program, "GetBooleanv");
1699         params[0] = ctx->FragmentProgram.Enabled;
1700         break;
1701      case GL_MAX_TEXTURE_COORDS_ARB:
1702         CHECK_EXT2(ARB_fragment_program, NV_fragment_program, "GetBooleanv");
1703         params[0] = INT_TO_BOOLEAN(ctx->Const.MaxTextureCoordUnits);
1704         break;
1705      case GL_MAX_TEXTURE_IMAGE_UNITS_ARB:
1706         CHECK_EXT2(ARB_fragment_program, NV_fragment_program, "GetBooleanv");
1707         params[0] = INT_TO_BOOLEAN(ctx->Const.MaxTextureImageUnits);
1708         break;
1709      case GL_DEPTH_BOUNDS_TEST_EXT:
1710         CHECK_EXT1(EXT_depth_bounds_test, "GetBooleanv");
1711         params[0] = ctx->Depth.BoundsTest;
1712         break;
1713      case GL_DEPTH_BOUNDS_EXT:
1714         CHECK_EXT1(EXT_depth_bounds_test, "GetBooleanv");
1715         params[0] = FLOAT_TO_BOOLEAN(ctx->Depth.BoundsMin);
1716         params[1] = FLOAT_TO_BOOLEAN(ctx->Depth.BoundsMax);
1717         break;
1718      case GL_FRAGMENT_PROGRAM_CALLBACK_MESA:
1719         CHECK_EXT1(MESA_program_debug, "GetBooleanv");
1720         params[0] = ctx->FragmentProgram.CallbackEnabled;
1721         break;
1722      case GL_VERTEX_PROGRAM_CALLBACK_MESA:
1723         CHECK_EXT1(MESA_program_debug, "GetBooleanv");
1724         params[0] = ctx->VertexProgram.CallbackEnabled;
1725         break;
1726      case GL_FRAGMENT_PROGRAM_POSITION_MESA:
1727         CHECK_EXT1(MESA_program_debug, "GetBooleanv");
1728         params[0] = INT_TO_BOOLEAN(ctx->FragmentProgram.CurrentPosition);
1729         break;
1730      case GL_VERTEX_PROGRAM_POSITION_MESA:
1731         CHECK_EXT1(MESA_program_debug, "GetBooleanv");
1732         params[0] = INT_TO_BOOLEAN(ctx->VertexProgram.CurrentPosition);
1733         break;
1734      case GL_MAX_DRAW_BUFFERS_ARB:
1735         params[0] = INT_TO_BOOLEAN(ctx->Const.MaxDrawBuffers);
1736         break;
1737      case GL_DRAW_BUFFER0_ARB:
1738         params[0] = ENUM_TO_BOOLEAN(ctx->DrawBuffer->ColorDrawBuffer[0]);
1739         break;
1740      case GL_DRAW_BUFFER1_ARB:
1741         {
1742         GLenum buffer;
1743         if (pname - GL_DRAW_BUFFER0_ARB >= ctx->Const.MaxDrawBuffers) {
1744            _mesa_error(ctx, GL_INVALID_ENUM, "glGet(GL_DRAW_BUFFERx_ARB)");
1745            return;
1746         }
1747         buffer = ctx->DrawBuffer->ColorDrawBuffer[1];
1748         params[0] = ENUM_TO_BOOLEAN(buffer);
1749         }
1750         break;
1751      case GL_DRAW_BUFFER2_ARB:
1752         {
1753         GLenum buffer;
1754         if (pname - GL_DRAW_BUFFER0_ARB >= ctx->Const.MaxDrawBuffers) {
1755            _mesa_error(ctx, GL_INVALID_ENUM, "glGet(GL_DRAW_BUFFERx_ARB)");
1756            return;
1757         }
1758         buffer = ctx->DrawBuffer->ColorDrawBuffer[2];
1759         params[0] = ENUM_TO_BOOLEAN(buffer);
1760         }
1761         break;
1762      case GL_DRAW_BUFFER3_ARB:
1763         {
1764         GLenum buffer;
1765         if (pname - GL_DRAW_BUFFER0_ARB >= ctx->Const.MaxDrawBuffers) {
1766            _mesa_error(ctx, GL_INVALID_ENUM, "glGet(GL_DRAW_BUFFERx_ARB)");
1767            return;
1768         }
1769         buffer = ctx->DrawBuffer->ColorDrawBuffer[3];
1770         params[0] = ENUM_TO_BOOLEAN(buffer);
1771         }
1772         break;
1773      case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES:
1774         CHECK_EXT1(OES_read_format, "GetBooleanv");
1775         params[0] = INT_TO_BOOLEAN(ctx->Const.ColorReadType);
1776         break;
1777      case GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES:
1778         CHECK_EXT1(OES_read_format, "GetBooleanv");
1779         params[0] = INT_TO_BOOLEAN(ctx->Const.ColorReadFormat);
1780         break;
1781      case GL_NUM_FRAGMENT_REGISTERS_ATI:
1782         CHECK_EXT1(ATI_fragment_shader, "GetBooleanv");
1783         params[0] = INT_TO_BOOLEAN(6);
1784         break;
1785      case GL_NUM_FRAGMENT_CONSTANTS_ATI:
1786         CHECK_EXT1(ATI_fragment_shader, "GetBooleanv");
1787         params[0] = INT_TO_BOOLEAN(8);
1788         break;
1789      case GL_NUM_PASSES_ATI:
1790         CHECK_EXT1(ATI_fragment_shader, "GetBooleanv");
1791         params[0] = INT_TO_BOOLEAN(2);
1792         break;
1793      case GL_NUM_INSTRUCTIONS_PER_PASS_ATI:
1794         CHECK_EXT1(ATI_fragment_shader, "GetBooleanv");
1795         params[0] = INT_TO_BOOLEAN(8);
1796         break;
1797      case GL_NUM_INSTRUCTIONS_TOTAL_ATI:
1798         CHECK_EXT1(ATI_fragment_shader, "GetBooleanv");
1799         params[0] = INT_TO_BOOLEAN(16);
1800         break;
1801      case GL_COLOR_ALPHA_PAIRING_ATI:
1802         CHECK_EXT1(ATI_fragment_shader, "GetBooleanv");
1803         params[0] = GL_TRUE;
1804         break;
1805      case GL_NUM_LOOPBACK_COMPONENTS_ATI:
1806         CHECK_EXT1(ATI_fragment_shader, "GetBooleanv");
1807         params[0] = INT_TO_BOOLEAN(3);
1808         break;
1809      case GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI:
1810         CHECK_EXT1(ATI_fragment_shader, "GetBooleanv");
1811         params[0] = INT_TO_BOOLEAN(3);
1812         break;
1813      case GL_STENCIL_BACK_FUNC:
1814         params[0] = ENUM_TO_BOOLEAN(ctx->Stencil.Function[1]);
1815         break;
1816      case GL_STENCIL_BACK_VALUE_MASK:
1817         params[0] = INT_TO_BOOLEAN(ctx->Stencil.ValueMask[1]);
1818         break;
1819      case GL_STENCIL_BACK_WRITEMASK:
1820         params[0] = INT_TO_BOOLEAN(ctx->Stencil.WriteMask[1]);
1821         break;
1822      case GL_STENCIL_BACK_REF:
1823         params[0] = INT_TO_BOOLEAN(ctx->Stencil.Ref[1]);
1824         break;
1825      case GL_STENCIL_BACK_FAIL:
1826         params[0] = ENUM_TO_BOOLEAN(ctx->Stencil.FailFunc[1]);
1827         break;
1828      case GL_STENCIL_BACK_PASS_DEPTH_FAIL:
1829         params[0] = ENUM_TO_BOOLEAN(ctx->Stencil.ZFailFunc[1]);
1830         break;
1831      case GL_STENCIL_BACK_PASS_DEPTH_PASS:
1832         params[0] = ENUM_TO_BOOLEAN(ctx->Stencil.ZPassFunc[1]);
1833         break;
1834      case GL_FRAMEBUFFER_BINDING_EXT:
1835         CHECK_EXT1(EXT_framebuffer_object, "GetBooleanv");
1836         params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Name);
1837         break;
1838      case GL_RENDERBUFFER_BINDING_EXT:
1839         CHECK_EXT1(EXT_framebuffer_object, "GetBooleanv");
1840         params[0] = INT_TO_BOOLEAN(ctx->CurrentRenderbuffer ? ctx->CurrentRenderbuffer->Name : 0);
1841         break;
1842      case GL_MAX_COLOR_ATTACHMENTS_EXT:
1843         CHECK_EXT1(EXT_framebuffer_object, "GetBooleanv");
1844         params[0] = INT_TO_BOOLEAN(ctx->Const.MaxColorAttachments);
1845         break;
1846      case GL_MAX_RENDERBUFFER_SIZE_EXT:
1847         CHECK_EXT1(EXT_framebuffer_object, "GetBooleanv");
1848         params[0] = INT_TO_BOOLEAN(ctx->Const.MaxRenderbufferSize);
1849         break;
1850      case GL_READ_FRAMEBUFFER_BINDING_EXT:
1851         CHECK_EXT1(EXT_framebuffer_blit, "GetBooleanv");
1852         params[0] = INT_TO_BOOLEAN(ctx->ReadBuffer->Name);
1853         break;
1854      case GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB:
1855         CHECK_EXT1(ARB_fragment_shader, "GetBooleanv");
1856         params[0] = INT_TO_BOOLEAN(ctx->Const.FragmentProgram.MaxUniformComponents);
1857         break;
1858      case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB:
1859         CHECK_EXT1(ARB_fragment_shader, "GetBooleanv");
1860         params[0] = ENUM_TO_BOOLEAN(ctx->Hint.FragmentShaderDerivative);
1861         break;
1862      case GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB:
1863         CHECK_EXT1(ARB_vertex_shader, "GetBooleanv");
1864         params[0] = INT_TO_BOOLEAN(ctx->Const.VertexProgram.MaxUniformComponents);
1865         break;
1866      case GL_MAX_VARYING_FLOATS_ARB:
1867         CHECK_EXT1(ARB_vertex_shader, "GetBooleanv");
1868         params[0] = INT_TO_BOOLEAN(ctx->Const.MaxVarying * 4);
1869         break;
1870      case GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB:
1871         CHECK_EXT1(ARB_vertex_shader, "GetBooleanv");
1872         params[0] = INT_TO_BOOLEAN(ctx->Const.MaxVertexTextureImageUnits);
1873         break;
1874      case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB:
1875         CHECK_EXT1(ARB_vertex_shader, "GetBooleanv");
1876         params[0] = INT_TO_BOOLEAN(MAX_COMBINED_TEXTURE_IMAGE_UNITS);
1877         break;
1878      case GL_CURRENT_PROGRAM:
1879         CHECK_EXT1(ARB_shader_objects, "GetBooleanv");
1880         params[0] = INT_TO_BOOLEAN(ctx->Shader.CurrentProgram ? ctx->Shader.CurrentProgram->Name : 0);
1881         break;
1882      case GL_MAX_SAMPLES:
1883         CHECK_EXT1(ARB_framebuffer_object, "GetBooleanv");
1884         params[0] = INT_TO_BOOLEAN(ctx->Const.MaxSamples);
1885         break;
1886      default:
1887         _mesa_error(ctx, GL_INVALID_ENUM, "glGetBooleanv(pname=0x%x)", pname);
1888   }
1889}
1890
1891void GLAPIENTRY
1892_mesa_GetFloatv( GLenum pname, GLfloat *params )
1893{
1894   GET_CURRENT_CONTEXT(ctx);
1895   ASSERT_OUTSIDE_BEGIN_END(ctx);
1896
1897   if (!params)
1898      return;
1899
1900   if (ctx->NewState)
1901      _mesa_update_state(ctx);
1902
1903   if (ctx->Driver.GetFloatv &&
1904       ctx->Driver.GetFloatv(ctx, pname, params))
1905      return;
1906
1907   switch (pname) {
1908      case GL_ACCUM_RED_BITS:
1909         params[0] = (GLfloat)(ctx->DrawBuffer->Visual.accumRedBits);
1910         break;
1911      case GL_ACCUM_GREEN_BITS:
1912         params[0] = (GLfloat)(ctx->DrawBuffer->Visual.accumGreenBits);
1913         break;
1914      case GL_ACCUM_BLUE_BITS:
1915         params[0] = (GLfloat)(ctx->DrawBuffer->Visual.accumBlueBits);
1916         break;
1917      case GL_ACCUM_ALPHA_BITS:
1918         params[0] = (GLfloat)(ctx->DrawBuffer->Visual.accumAlphaBits);
1919         break;
1920      case GL_ACCUM_CLEAR_VALUE:
1921         params[0] = ctx->Accum.ClearColor[0];
1922         params[1] = ctx->Accum.ClearColor[1];
1923         params[2] = ctx->Accum.ClearColor[2];
1924         params[3] = ctx->Accum.ClearColor[3];
1925         break;
1926      case GL_ALPHA_BIAS:
1927         params[0] = ctx->Pixel.AlphaBias;
1928         break;
1929      case GL_ALPHA_BITS:
1930         params[0] = (GLfloat)(ctx->DrawBuffer->Visual.alphaBits);
1931         break;
1932      case GL_ALPHA_SCALE:
1933         params[0] = ctx->Pixel.AlphaScale;
1934         break;
1935      case GL_ALPHA_TEST:
1936         params[0] = BOOLEAN_TO_FLOAT(ctx->Color.AlphaEnabled);
1937         break;
1938      case GL_ALPHA_TEST_FUNC:
1939         params[0] = ENUM_TO_FLOAT(ctx->Color.AlphaFunc);
1940         break;
1941      case GL_ALPHA_TEST_REF:
1942         params[0] = ctx->Color.AlphaRef;
1943         break;
1944      case GL_ATTRIB_STACK_DEPTH:
1945         params[0] = (GLfloat)(ctx->AttribStackDepth);
1946         break;
1947      case GL_AUTO_NORMAL:
1948         params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.AutoNormal);
1949         break;
1950      case GL_AUX_BUFFERS:
1951         params[0] = (GLfloat)(ctx->DrawBuffer->Visual.numAuxBuffers);
1952         break;
1953      case GL_BLEND:
1954         params[0] = BOOLEAN_TO_FLOAT(ctx->Color.BlendEnabled);
1955         break;
1956      case GL_BLEND_DST:
1957         params[0] = ENUM_TO_FLOAT(ctx->Color.BlendDstRGB);
1958         break;
1959      case GL_BLEND_SRC:
1960         params[0] = ENUM_TO_FLOAT(ctx->Color.BlendSrcRGB);
1961         break;
1962      case GL_BLEND_SRC_RGB_EXT:
1963         params[0] = ENUM_TO_FLOAT(ctx->Color.BlendSrcRGB);
1964         break;
1965      case GL_BLEND_DST_RGB_EXT:
1966         params[0] = ENUM_TO_FLOAT(ctx->Color.BlendDstRGB);
1967         break;
1968      case GL_BLEND_SRC_ALPHA_EXT:
1969         params[0] = ENUM_TO_FLOAT(ctx->Color.BlendSrcA);
1970         break;
1971      case GL_BLEND_DST_ALPHA_EXT:
1972         params[0] = ENUM_TO_FLOAT(ctx->Color.BlendDstA);
1973         break;
1974      case GL_BLEND_EQUATION:
1975         params[0] = ENUM_TO_FLOAT(ctx->Color.BlendEquationRGB );
1976         break;
1977      case GL_BLEND_EQUATION_ALPHA_EXT:
1978         params[0] = ENUM_TO_FLOAT(ctx->Color.BlendEquationA );
1979         break;
1980      case GL_BLEND_COLOR_EXT:
1981         params[0] = ctx->Color.BlendColor[0];
1982         params[1] = ctx->Color.BlendColor[1];
1983         params[2] = ctx->Color.BlendColor[2];
1984         params[3] = ctx->Color.BlendColor[3];
1985         break;
1986      case GL_BLUE_BIAS:
1987         params[0] = ctx->Pixel.BlueBias;
1988         break;
1989      case GL_BLUE_BITS:
1990         params[0] = (GLfloat)(ctx->DrawBuffer->Visual.blueBits);
1991         break;
1992      case GL_BLUE_SCALE:
1993         params[0] = ctx->Pixel.BlueScale;
1994         break;
1995      case GL_CLIENT_ATTRIB_STACK_DEPTH:
1996         params[0] = (GLfloat)(ctx->ClientAttribStackDepth);
1997         break;
1998      case GL_CLIP_PLANE0:
1999         params[0] = BOOLEAN_TO_FLOAT((ctx->Transform.ClipPlanesEnabled >> 0) & 1);
2000         break;
2001      case GL_CLIP_PLANE1:
2002         params[0] = BOOLEAN_TO_FLOAT((ctx->Transform.ClipPlanesEnabled >> 1) & 1);
2003         break;
2004      case GL_CLIP_PLANE2:
2005         params[0] = BOOLEAN_TO_FLOAT((ctx->Transform.ClipPlanesEnabled >> 2) & 1);
2006         break;
2007      case GL_CLIP_PLANE3:
2008         params[0] = BOOLEAN_TO_FLOAT((ctx->Transform.ClipPlanesEnabled >> 3) & 1);
2009         break;
2010      case GL_CLIP_PLANE4:
2011         params[0] = BOOLEAN_TO_FLOAT((ctx->Transform.ClipPlanesEnabled >> 4) & 1);
2012         break;
2013      case GL_CLIP_PLANE5:
2014         params[0] = BOOLEAN_TO_FLOAT((ctx->Transform.ClipPlanesEnabled >> 5) & 1);
2015         break;
2016      case GL_COLOR_CLEAR_VALUE:
2017         params[0] = ctx->Color.ClearColor[0];
2018         params[1] = ctx->Color.ClearColor[1];
2019         params[2] = ctx->Color.ClearColor[2];
2020         params[3] = ctx->Color.ClearColor[3];
2021         break;
2022      case GL_COLOR_MATERIAL:
2023         params[0] = BOOLEAN_TO_FLOAT(ctx->Light.ColorMaterialEnabled);
2024         break;
2025      case GL_COLOR_MATERIAL_FACE:
2026         params[0] = ENUM_TO_FLOAT(ctx->Light.ColorMaterialFace);
2027         break;
2028      case GL_COLOR_MATERIAL_PARAMETER:
2029         params[0] = ENUM_TO_FLOAT(ctx->Light.ColorMaterialMode);
2030         break;
2031      case GL_COLOR_WRITEMASK:
2032         params[0] = (GLfloat)(ctx->Color.ColorMask[RCOMP] ? 1 : 0);
2033         params[1] = (GLfloat)(ctx->Color.ColorMask[GCOMP] ? 1 : 0);
2034         params[2] = (GLfloat)(ctx->Color.ColorMask[BCOMP] ? 1 : 0);
2035         params[3] = (GLfloat)(ctx->Color.ColorMask[ACOMP] ? 1 : 0);
2036         break;
2037      case GL_CULL_FACE:
2038         params[0] = BOOLEAN_TO_FLOAT(ctx->Polygon.CullFlag);
2039         break;
2040      case GL_CULL_FACE_MODE:
2041         params[0] = ENUM_TO_FLOAT(ctx->Polygon.CullFaceMode);
2042         break;
2043      case GL_CURRENT_COLOR:
2044         {
2045         FLUSH_CURRENT(ctx, 0);
2046         params[0] = ctx->Current.Attrib[VERT_ATTRIB_COLOR0][0];
2047         params[1] = ctx->Current.Attrib[VERT_ATTRIB_COLOR0][1];
2048         params[2] = ctx->Current.Attrib[VERT_ATTRIB_COLOR0][2];
2049         params[3] = ctx->Current.Attrib[VERT_ATTRIB_COLOR0][3];
2050         }
2051         break;
2052      case GL_CURRENT_INDEX:
2053         {
2054         FLUSH_CURRENT(ctx, 0);
2055         params[0] = ctx->Current.Attrib[VERT_ATTRIB_COLOR_INDEX][0];
2056         }
2057         break;
2058      case GL_CURRENT_NORMAL:
2059         {
2060         FLUSH_CURRENT(ctx, 0);
2061         params[0] = ctx->Current.Attrib[VERT_ATTRIB_NORMAL][0];
2062         params[1] = ctx->Current.Attrib[VERT_ATTRIB_NORMAL][1];
2063         params[2] = ctx->Current.Attrib[VERT_ATTRIB_NORMAL][2];
2064         }
2065         break;
2066      case GL_CURRENT_RASTER_COLOR:
2067         params[0] = ctx->Current.RasterColor[0];
2068         params[1] = ctx->Current.RasterColor[1];
2069         params[2] = ctx->Current.RasterColor[2];
2070         params[3] = ctx->Current.RasterColor[3];
2071         break;
2072      case GL_CURRENT_RASTER_DISTANCE:
2073         params[0] = ctx->Current.RasterDistance;
2074         break;
2075      case GL_CURRENT_RASTER_INDEX:
2076         params[0] = ctx->Current.RasterIndex;
2077         break;
2078      case GL_CURRENT_RASTER_POSITION:
2079         params[0] = ctx->Current.RasterPos[0];
2080         params[1] = ctx->Current.RasterPos[1];
2081         params[2] = ctx->Current.RasterPos[2];
2082         params[3] = ctx->Current.RasterPos[3];
2083         break;
2084      case GL_CURRENT_RASTER_SECONDARY_COLOR:
2085         params[0] = ctx->Current.RasterSecondaryColor[0];
2086         params[1] = ctx->Current.RasterSecondaryColor[1];
2087         params[2] = ctx->Current.RasterSecondaryColor[2];
2088         params[3] = ctx->Current.RasterSecondaryColor[3];
2089         break;
2090      case GL_CURRENT_RASTER_TEXTURE_COORDS:
2091         {
2092         const GLuint texUnit = ctx->Texture.CurrentUnit;
2093         params[0] = ctx->Current.RasterTexCoords[texUnit][0];
2094         params[1] = ctx->Current.RasterTexCoords[texUnit][1];
2095         params[2] = ctx->Current.RasterTexCoords[texUnit][2];
2096         params[3] = ctx->Current.RasterTexCoords[texUnit][3];
2097         }
2098         break;
2099      case GL_CURRENT_RASTER_POSITION_VALID:
2100         params[0] = BOOLEAN_TO_FLOAT(ctx->Current.RasterPosValid);
2101         break;
2102      case GL_CURRENT_TEXTURE_COORDS:
2103         {
2104         const GLuint texUnit = ctx->Texture.CurrentUnit;
2105         params[0] = ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][0];
2106         params[1] = ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][1];
2107         params[2] = ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][2];
2108         params[3] = ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][3];
2109         }
2110         break;
2111      case GL_DEPTH_BIAS:
2112         params[0] = ctx->Pixel.DepthBias;
2113         break;
2114      case GL_DEPTH_BITS:
2115         params[0] = (GLfloat)(ctx->DrawBuffer->Visual.depthBits);
2116         break;
2117      case GL_DEPTH_CLEAR_VALUE:
2118         params[0] = ((GLfloat) ctx->Depth.Clear);
2119         break;
2120      case GL_DEPTH_FUNC:
2121         params[0] = ENUM_TO_FLOAT(ctx->Depth.Func);
2122         break;
2123      case GL_DEPTH_RANGE:
2124         params[0] = ctx->Viewport.Near;
2125         params[1] = ctx->Viewport.Far;
2126         break;
2127      case GL_DEPTH_SCALE:
2128         params[0] = ctx->Pixel.DepthScale;
2129         break;
2130      case GL_DEPTH_TEST:
2131         params[0] = BOOLEAN_TO_FLOAT(ctx->Depth.Test);
2132         break;
2133      case GL_DEPTH_WRITEMASK:
2134         params[0] = BOOLEAN_TO_FLOAT(ctx->Depth.Mask);
2135         break;
2136      case GL_DITHER:
2137         params[0] = BOOLEAN_TO_FLOAT(ctx->Color.DitherFlag);
2138         break;
2139      case GL_DOUBLEBUFFER:
2140         params[0] = BOOLEAN_TO_FLOAT(ctx->DrawBuffer->Visual.doubleBufferMode);
2141         break;
2142      case GL_DRAW_BUFFER:
2143         params[0] = ENUM_TO_FLOAT(ctx->DrawBuffer->ColorDrawBuffer[0]);
2144         break;
2145      case GL_EDGE_FLAG:
2146         {
2147         FLUSH_CURRENT(ctx, 0);
2148         params[0] = BOOLEAN_TO_FLOAT((ctx->Current.Attrib[VERT_ATTRIB_EDGEFLAG][0] == 1.0));
2149         }
2150         break;
2151      case GL_FEEDBACK_BUFFER_SIZE:
2152         params[0] = (GLfloat)(ctx->Feedback.BufferSize);
2153         break;
2154      case GL_FEEDBACK_BUFFER_TYPE:
2155         params[0] = ENUM_TO_FLOAT(ctx->Feedback.Type);
2156         break;
2157      case GL_FOG:
2158         params[0] = BOOLEAN_TO_FLOAT(ctx->Fog.Enabled);
2159         break;
2160      case GL_FOG_COLOR:
2161         params[0] = ctx->Fog.Color[0];
2162         params[1] = ctx->Fog.Color[1];
2163         params[2] = ctx->Fog.Color[2];
2164         params[3] = ctx->Fog.Color[3];
2165         break;
2166      case GL_FOG_DENSITY:
2167         params[0] = ctx->Fog.Density;
2168         break;
2169      case GL_FOG_END:
2170         params[0] = ctx->Fog.End;
2171         break;
2172      case GL_FOG_HINT:
2173         params[0] = ENUM_TO_FLOAT(ctx->Hint.Fog);
2174         break;
2175      case GL_FOG_INDEX:
2176         params[0] = ctx->Fog.Index;
2177         break;
2178      case GL_FOG_MODE:
2179         params[0] = ENUM_TO_FLOAT(ctx->Fog.Mode);
2180         break;
2181      case GL_FOG_START:
2182         params[0] = ctx->Fog.Start;
2183         break;
2184      case GL_FRONT_FACE:
2185         params[0] = ENUM_TO_FLOAT(ctx->Polygon.FrontFace);
2186         break;
2187      case GL_GREEN_BIAS:
2188         params[0] = ctx->Pixel.GreenBias;
2189         break;
2190      case GL_GREEN_BITS:
2191         params[0] = (GLfloat)(ctx->DrawBuffer->Visual.greenBits);
2192         break;
2193      case GL_GREEN_SCALE:
2194         params[0] = ctx->Pixel.GreenScale;
2195         break;
2196      case GL_INDEX_BITS:
2197         params[0] = (GLfloat)(ctx->DrawBuffer->Visual.indexBits);
2198         break;
2199      case GL_INDEX_CLEAR_VALUE:
2200         params[0] = (GLfloat)(ctx->Color.ClearIndex);
2201         break;
2202      case GL_INDEX_MODE:
2203         params[0] = BOOLEAN_TO_FLOAT(!ctx->DrawBuffer->Visual.rgbMode);
2204         break;
2205      case GL_INDEX_OFFSET:
2206         params[0] = (GLfloat)(ctx->Pixel.IndexOffset);
2207         break;
2208      case GL_INDEX_SHIFT:
2209         params[0] = (GLfloat)(ctx->Pixel.IndexShift);
2210         break;
2211      case GL_INDEX_WRITEMASK:
2212         params[0] = (GLfloat)(ctx->Color.IndexMask);
2213         break;
2214      case GL_LIGHT0:
2215         params[0] = BOOLEAN_TO_FLOAT(ctx->Light.Light[0].Enabled);
2216         break;
2217      case GL_LIGHT1:
2218         params[0] = BOOLEAN_TO_FLOAT(ctx->Light.Light[1].Enabled);
2219         break;
2220      case GL_LIGHT2:
2221         params[0] = BOOLEAN_TO_FLOAT(ctx->Light.Light[2].Enabled);
2222         break;
2223      case GL_LIGHT3:
2224         params[0] = BOOLEAN_TO_FLOAT(ctx->Light.Light[3].Enabled);
2225         break;
2226      case GL_LIGHT4:
2227         params[0] = BOOLEAN_TO_FLOAT(ctx->Light.Light[4].Enabled);
2228         break;
2229      case GL_LIGHT5:
2230         params[0] = BOOLEAN_TO_FLOAT(ctx->Light.Light[5].Enabled);
2231         break;
2232      case GL_LIGHT6:
2233         params[0] = BOOLEAN_TO_FLOAT(ctx->Light.Light[6].Enabled);
2234         break;
2235      case GL_LIGHT7:
2236         params[0] = BOOLEAN_TO_FLOAT(ctx->Light.Light[7].Enabled);
2237         break;
2238      case GL_LIGHTING:
2239         params[0] = BOOLEAN_TO_FLOAT(ctx->Light.Enabled);
2240         break;
2241      case GL_LIGHT_MODEL_AMBIENT:
2242         params[0] = ctx->Light.Model.Ambient[0];
2243         params[1] = ctx->Light.Model.Ambient[1];
2244         params[2] = ctx->Light.Model.Ambient[2];
2245         params[3] = ctx->Light.Model.Ambient[3];
2246         break;
2247      case GL_LIGHT_MODEL_COLOR_CONTROL:
2248         params[0] = ENUM_TO_FLOAT(ctx->Light.Model.ColorControl);
2249         break;
2250      case GL_LIGHT_MODEL_LOCAL_VIEWER:
2251         params[0] = BOOLEAN_TO_FLOAT(ctx->Light.Model.LocalViewer);
2252         break;
2253      case GL_LIGHT_MODEL_TWO_SIDE:
2254         params[0] = BOOLEAN_TO_FLOAT(ctx->Light.Model.TwoSide);
2255         break;
2256      case GL_LINE_SMOOTH:
2257         params[0] = BOOLEAN_TO_FLOAT(ctx->Line.SmoothFlag);
2258         break;
2259      case GL_LINE_SMOOTH_HINT:
2260         params[0] = ENUM_TO_FLOAT(ctx->Hint.LineSmooth);
2261         break;
2262      case GL_LINE_STIPPLE:
2263         params[0] = BOOLEAN_TO_FLOAT(ctx->Line.StippleFlag);
2264         break;
2265      case GL_LINE_STIPPLE_PATTERN:
2266         params[0] = (GLfloat)(ctx->Line.StipplePattern);
2267         break;
2268      case GL_LINE_STIPPLE_REPEAT:
2269         params[0] = (GLfloat)(ctx->Line.StippleFactor);
2270         break;
2271      case GL_LINE_WIDTH:
2272         params[0] = ctx->Line.Width;
2273         break;
2274      case GL_LINE_WIDTH_GRANULARITY:
2275         params[0] = ctx->Const.LineWidthGranularity;
2276         break;
2277      case GL_LINE_WIDTH_RANGE:
2278         params[0] = ctx->Const.MinLineWidthAA;
2279         params[1] = ctx->Const.MaxLineWidthAA;
2280         break;
2281      case GL_ALIASED_LINE_WIDTH_RANGE:
2282         params[0] = ctx->Const.MinLineWidth;
2283         params[1] = ctx->Const.MaxLineWidth;
2284         break;
2285      case GL_LIST_BASE:
2286         params[0] = (GLfloat)(ctx->List.ListBase);
2287         break;
2288      case GL_LIST_INDEX:
2289         params[0] = (GLfloat)((ctx->ListState.CurrentList ? ctx->ListState.CurrentList->Name : 0));
2290         break;
2291      case GL_LIST_MODE:
2292         {
2293         GLenum mode;
2294         if (!ctx->CompileFlag)
2295            mode = 0;
2296         else if (ctx->ExecuteFlag)
2297            mode = GL_COMPILE_AND_EXECUTE;
2298         else
2299            mode = GL_COMPILE;
2300         params[0] = ENUM_TO_FLOAT(mode);
2301         }
2302         break;
2303      case GL_INDEX_LOGIC_OP:
2304         params[0] = BOOLEAN_TO_FLOAT(ctx->Color.IndexLogicOpEnabled);
2305         break;
2306      case GL_COLOR_LOGIC_OP:
2307         params[0] = BOOLEAN_TO_FLOAT(ctx->Color.ColorLogicOpEnabled);
2308         break;
2309      case GL_LOGIC_OP_MODE:
2310         params[0] = ENUM_TO_FLOAT(ctx->Color.LogicOp);
2311         break;
2312      case GL_MAP1_COLOR_4:
2313         params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Color4);
2314         break;
2315      case GL_MAP1_GRID_DOMAIN:
2316         params[0] = ctx->Eval.MapGrid1u1;
2317         params[1] = ctx->Eval.MapGrid1u2;
2318         break;
2319      case GL_MAP1_GRID_SEGMENTS:
2320         params[0] = (GLfloat)(ctx->Eval.MapGrid1un);
2321         break;
2322      case GL_MAP1_INDEX:
2323         params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Index);
2324         break;
2325      case GL_MAP1_NORMAL:
2326         params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Normal);
2327         break;
2328      case GL_MAP1_TEXTURE_COORD_1:
2329         params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1TextureCoord1);
2330         break;
2331      case GL_MAP1_TEXTURE_COORD_2:
2332         params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1TextureCoord2);
2333         break;
2334      case GL_MAP1_TEXTURE_COORD_3:
2335         params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1TextureCoord3);
2336         break;
2337      case GL_MAP1_TEXTURE_COORD_4:
2338         params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1TextureCoord4);
2339         break;
2340      case GL_MAP1_VERTEX_3:
2341         params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Vertex3);
2342         break;
2343      case GL_MAP1_VERTEX_4:
2344         params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Vertex4);
2345         break;
2346      case GL_MAP2_COLOR_4:
2347         params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map2Color4);
2348         break;
2349      case GL_MAP2_GRID_DOMAIN:
2350         params[0] = ctx->Eval.MapGrid2u1;
2351         params[1] = ctx->Eval.MapGrid2u2;
2352         params[2] = ctx->Eval.MapGrid2v1;
2353         params[3] = ctx->Eval.MapGrid2v2;
2354         break;
2355      case GL_MAP2_GRID_SEGMENTS:
2356         params[0] = (GLfloat)(ctx->Eval.MapGrid2un);
2357         params[1] = (GLfloat)(ctx->Eval.MapGrid2vn);
2358         break;
2359      case GL_MAP2_INDEX:
2360         params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map2Index);
2361         break;
2362      case GL_MAP2_NORMAL:
2363         params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map2Normal);
2364         break;
2365      case GL_MAP2_TEXTURE_COORD_1:
2366         params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map2TextureCoord1);
2367         break;
2368      case GL_MAP2_TEXTURE_COORD_2:
2369         params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map2TextureCoord2);
2370         break;
2371      case GL_MAP2_TEXTURE_COORD_3:
2372         params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map2TextureCoord3);
2373         break;
2374      case GL_MAP2_TEXTURE_COORD_4:
2375         params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map2TextureCoord4);
2376         break;
2377      case GL_MAP2_VERTEX_3:
2378         params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map2Vertex3);
2379         break;
2380      case GL_MAP2_VERTEX_4:
2381         params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map2Vertex4);
2382         break;
2383      case GL_MAP_COLOR:
2384         params[0] = BOOLEAN_TO_FLOAT(ctx->Pixel.MapColorFlag);
2385         break;
2386      case GL_MAP_STENCIL:
2387         params[0] = BOOLEAN_TO_FLOAT(ctx->Pixel.MapStencilFlag);
2388         break;
2389      case GL_MATRIX_MODE:
2390         params[0] = ENUM_TO_FLOAT(ctx->Transform.MatrixMode);
2391         break;
2392      case GL_MAX_ATTRIB_STACK_DEPTH:
2393         params[0] = (GLfloat)(MAX_ATTRIB_STACK_DEPTH);
2394         break;
2395      case GL_MAX_CLIENT_ATTRIB_STACK_DEPTH:
2396         params[0] = (GLfloat)(MAX_CLIENT_ATTRIB_STACK_DEPTH);
2397         break;
2398      case GL_MAX_CLIP_PLANES:
2399         params[0] = (GLfloat)(ctx->Const.MaxClipPlanes);
2400         break;
2401      case GL_MAX_ELEMENTS_VERTICES:
2402         params[0] = (GLfloat)(ctx->Const.MaxArrayLockSize);
2403         break;
2404      case GL_MAX_ELEMENTS_INDICES:
2405         params[0] = (GLfloat)(ctx->Const.MaxArrayLockSize);
2406         break;
2407      case GL_MAX_EVAL_ORDER:
2408         params[0] = (GLfloat)(MAX_EVAL_ORDER);
2409         break;
2410      case GL_MAX_LIGHTS:
2411         params[0] = (GLfloat)(ctx->Const.MaxLights);
2412         break;
2413      case GL_MAX_LIST_NESTING:
2414         params[0] = (GLfloat)(MAX_LIST_NESTING);
2415         break;
2416      case GL_MAX_MODELVIEW_STACK_DEPTH:
2417         params[0] = (GLfloat)(MAX_MODELVIEW_STACK_DEPTH);
2418         break;
2419      case GL_MAX_NAME_STACK_DEPTH:
2420         params[0] = (GLfloat)(MAX_NAME_STACK_DEPTH);
2421         break;
2422      case GL_MAX_PIXEL_MAP_TABLE:
2423         params[0] = (GLfloat)(MAX_PIXEL_MAP_TABLE);
2424         break;
2425      case GL_MAX_PROJECTION_STACK_DEPTH:
2426         params[0] = (GLfloat)(MAX_PROJECTION_STACK_DEPTH);
2427         break;
2428      case GL_MAX_TEXTURE_SIZE:
2429         params[0] = (GLfloat)(1 << (ctx->Const.MaxTextureLevels - 1));
2430         break;
2431      case GL_MAX_3D_TEXTURE_SIZE:
2432         params[0] = (GLfloat)(1 << (ctx->Const.Max3DTextureLevels - 1));
2433         break;
2434      case GL_MAX_TEXTURE_STACK_DEPTH:
2435         params[0] = (GLfloat)(MAX_TEXTURE_STACK_DEPTH);
2436         break;
2437      case GL_MAX_VIEWPORT_DIMS:
2438         params[0] = (GLfloat)(ctx->Const.MaxViewportWidth);
2439         params[1] = (GLfloat)(ctx->Const.MaxViewportHeight);
2440         break;
2441      case GL_MODELVIEW_MATRIX:
2442         {
2443         const GLfloat *matrix = ctx->ModelviewMatrixStack.Top->m;
2444         params[0] = matrix[0];
2445         params[1] = matrix[1];
2446         params[2] = matrix[2];
2447         params[3] = matrix[3];
2448         params[4] = matrix[4];
2449         params[5] = matrix[5];
2450         params[6] = matrix[6];
2451         params[7] = matrix[7];
2452         params[8] = matrix[8];
2453         params[9] = matrix[9];
2454         params[10] = matrix[10];
2455         params[11] = matrix[11];
2456         params[12] = matrix[12];
2457         params[13] = matrix[13];
2458         params[14] = matrix[14];
2459         params[15] = matrix[15];
2460         }
2461         break;
2462      case GL_MODELVIEW_STACK_DEPTH:
2463         params[0] = (GLfloat)(ctx->ModelviewMatrixStack.Depth + 1);
2464         break;
2465      case GL_NAME_STACK_DEPTH:
2466         params[0] = (GLfloat)(ctx->Select.NameStackDepth);
2467         break;
2468      case GL_NORMALIZE:
2469         params[0] = BOOLEAN_TO_FLOAT(ctx->Transform.Normalize);
2470         break;
2471      case GL_PACK_ALIGNMENT:
2472         params[0] = (GLfloat)(ctx->Pack.Alignment);
2473         break;
2474      case GL_PACK_LSB_FIRST:
2475         params[0] = BOOLEAN_TO_FLOAT(ctx->Pack.LsbFirst);
2476         break;
2477      case GL_PACK_ROW_LENGTH:
2478         params[0] = (GLfloat)(ctx->Pack.RowLength);
2479         break;
2480      case GL_PACK_SKIP_PIXELS:
2481         params[0] = (GLfloat)(ctx->Pack.SkipPixels);
2482         break;
2483      case GL_PACK_SKIP_ROWS:
2484         params[0] = (GLfloat)(ctx->Pack.SkipRows);
2485         break;
2486      case GL_PACK_SWAP_BYTES:
2487         params[0] = BOOLEAN_TO_FLOAT(ctx->Pack.SwapBytes);
2488         break;
2489      case GL_PACK_SKIP_IMAGES_EXT:
2490         params[0] = (GLfloat)(ctx->Pack.SkipImages);
2491         break;
2492      case GL_PACK_IMAGE_HEIGHT_EXT:
2493         params[0] = (GLfloat)(ctx->Pack.ImageHeight);
2494         break;
2495      case GL_PACK_INVERT_MESA:
2496         params[0] = BOOLEAN_TO_FLOAT(ctx->Pack.Invert);
2497         break;
2498      case GL_PERSPECTIVE_CORRECTION_HINT:
2499         params[0] = ENUM_TO_FLOAT(ctx->Hint.PerspectiveCorrection);
2500         break;
2501      case GL_PIXEL_MAP_A_TO_A_SIZE:
2502         params[0] = (GLfloat)(ctx->PixelMaps.AtoA.Size);
2503         break;
2504      case GL_PIXEL_MAP_B_TO_B_SIZE:
2505         params[0] = (GLfloat)(ctx->PixelMaps.BtoB.Size);
2506         break;
2507      case GL_PIXEL_MAP_G_TO_G_SIZE:
2508         params[0] = (GLfloat)(ctx->PixelMaps.GtoG.Size);
2509         break;
2510      case GL_PIXEL_MAP_I_TO_A_SIZE:
2511         params[0] = (GLfloat)(ctx->PixelMaps.ItoA.Size);
2512         break;
2513      case GL_PIXEL_MAP_I_TO_B_SIZE:
2514         params[0] = (GLfloat)(ctx->PixelMaps.ItoB.Size);
2515         break;
2516      case GL_PIXEL_MAP_I_TO_G_SIZE:
2517         params[0] = (GLfloat)(ctx->PixelMaps.ItoG.Size);
2518         break;
2519      case GL_PIXEL_MAP_I_TO_I_SIZE:
2520         params[0] = (GLfloat)(ctx->PixelMaps.ItoI.Size);
2521         break;
2522      case GL_PIXEL_MAP_I_TO_R_SIZE:
2523         params[0] = (GLfloat)(ctx->PixelMaps.ItoR.Size);
2524         break;
2525      case GL_PIXEL_MAP_R_TO_R_SIZE:
2526         params[0] = (GLfloat)(ctx->PixelMaps.RtoR.Size);
2527         break;
2528      case GL_PIXEL_MAP_S_TO_S_SIZE:
2529         params[0] = (GLfloat)(ctx->PixelMaps.StoS.Size);
2530         break;
2531      case GL_POINT_SIZE:
2532         params[0] = ctx->Point.Size;
2533         break;
2534      case GL_POINT_SIZE_GRANULARITY:
2535         params[0] = ctx->Const.PointSizeGranularity;
2536         break;
2537      case GL_POINT_SIZE_RANGE:
2538         params[0] = ctx->Const.MinPointSizeAA;
2539         params[1] = ctx->Const.MaxPointSizeAA;
2540         break;
2541      case GL_ALIASED_POINT_SIZE_RANGE:
2542         params[0] = ctx->Const.MinPointSize;
2543         params[1] = ctx->Const.MaxPointSize;
2544         break;
2545      case GL_POINT_SMOOTH:
2546         params[0] = BOOLEAN_TO_FLOAT(ctx->Point.SmoothFlag);
2547         break;
2548      case GL_POINT_SMOOTH_HINT:
2549         params[0] = ENUM_TO_FLOAT(ctx->Hint.PointSmooth);
2550         break;
2551      case GL_POINT_SIZE_MIN_EXT:
2552         params[0] = ctx->Point.MinSize;
2553         break;
2554      case GL_POINT_SIZE_MAX_EXT:
2555         params[0] = ctx->Point.MaxSize;
2556         break;
2557      case GL_POINT_FADE_THRESHOLD_SIZE_EXT:
2558         params[0] = ctx->Point.Threshold;
2559         break;
2560      case GL_DISTANCE_ATTENUATION_EXT:
2561         params[0] = ctx->Point.Params[0];
2562         params[1] = ctx->Point.Params[1];
2563         params[2] = ctx->Point.Params[2];
2564         break;
2565      case GL_POLYGON_MODE:
2566         params[0] = ENUM_TO_FLOAT(ctx->Polygon.FrontMode);
2567         params[1] = ENUM_TO_FLOAT(ctx->Polygon.BackMode);
2568         break;
2569      case GL_POLYGON_OFFSET_BIAS_EXT:
2570         params[0] = ctx->Polygon.OffsetUnits;
2571         break;
2572      case GL_POLYGON_OFFSET_FACTOR:
2573         params[0] = ctx->Polygon.OffsetFactor ;
2574         break;
2575      case GL_POLYGON_OFFSET_UNITS:
2576         params[0] = ctx->Polygon.OffsetUnits ;
2577         break;
2578      case GL_POLYGON_OFFSET_POINT:
2579         params[0] = BOOLEAN_TO_FLOAT(ctx->Polygon.OffsetPoint);
2580         break;
2581      case GL_POLYGON_OFFSET_LINE:
2582         params[0] = BOOLEAN_TO_FLOAT(ctx->Polygon.OffsetLine);
2583         break;
2584      case GL_POLYGON_OFFSET_FILL:
2585         params[0] = BOOLEAN_TO_FLOAT(ctx->Polygon.OffsetFill);
2586         break;
2587      case GL_POLYGON_SMOOTH:
2588         params[0] = BOOLEAN_TO_FLOAT(ctx->Polygon.SmoothFlag);
2589         break;
2590      case GL_POLYGON_SMOOTH_HINT:
2591         params[0] = ENUM_TO_FLOAT(ctx->Hint.PolygonSmooth);
2592         break;
2593      case GL_POLYGON_STIPPLE:
2594         params[0] = BOOLEAN_TO_FLOAT(ctx->Polygon.StippleFlag);
2595         break;
2596      case GL_PROJECTION_MATRIX:
2597         {
2598         const GLfloat *matrix = ctx->ProjectionMatrixStack.Top->m;
2599         params[0] = matrix[0];
2600         params[1] = matrix[1];
2601         params[2] = matrix[2];
2602         params[3] = matrix[3];
2603         params[4] = matrix[4];
2604         params[5] = matrix[5];
2605         params[6] = matrix[6];
2606         params[7] = matrix[7];
2607         params[8] = matrix[8];
2608         params[9] = matrix[9];
2609         params[10] = matrix[10];
2610         params[11] = matrix[11];
2611         params[12] = matrix[12];
2612         params[13] = matrix[13];
2613         params[14] = matrix[14];
2614         params[15] = matrix[15];
2615         }
2616         break;
2617      case GL_PROJECTION_STACK_DEPTH:
2618         params[0] = (GLfloat)(ctx->ProjectionMatrixStack.Depth + 1);
2619         break;
2620      case GL_READ_BUFFER:
2621         params[0] = ENUM_TO_FLOAT(ctx->ReadBuffer->ColorReadBuffer);
2622         break;
2623      case GL_RED_BIAS:
2624         params[0] = ctx->Pixel.RedBias;
2625         break;
2626      case GL_RED_BITS:
2627         params[0] = (GLfloat)(ctx->DrawBuffer->Visual.redBits);
2628         break;
2629      case GL_RED_SCALE:
2630         params[0] = ctx->Pixel.RedScale;
2631         break;
2632      case GL_RENDER_MODE:
2633         params[0] = ENUM_TO_FLOAT(ctx->RenderMode);
2634         break;
2635      case GL_RESCALE_NORMAL:
2636         params[0] = BOOLEAN_TO_FLOAT(ctx->Transform.RescaleNormals);
2637         break;
2638      case GL_RGBA_MODE:
2639         params[0] = BOOLEAN_TO_FLOAT(ctx->DrawBuffer->Visual.rgbMode);
2640         break;
2641      case GL_SCISSOR_BOX:
2642         params[0] = (GLfloat)(ctx->Scissor.X);
2643         params[1] = (GLfloat)(ctx->Scissor.Y);
2644         params[2] = (GLfloat)(ctx->Scissor.Width);
2645         params[3] = (GLfloat)(ctx->Scissor.Height);
2646         break;
2647      case GL_SCISSOR_TEST:
2648         params[0] = BOOLEAN_TO_FLOAT(ctx->Scissor.Enabled);
2649         break;
2650      case GL_SELECTION_BUFFER_SIZE:
2651         params[0] = (GLfloat)(ctx->Select.BufferSize);
2652         break;
2653      case GL_SHADE_MODEL:
2654         params[0] = ENUM_TO_FLOAT(ctx->Light.ShadeModel);
2655         break;
2656      case GL_SHARED_TEXTURE_PALETTE_EXT:
2657         params[0] = BOOLEAN_TO_FLOAT(ctx->Texture.SharedPalette);
2658         break;
2659      case GL_STENCIL_BITS:
2660         params[0] = (GLfloat)(ctx->DrawBuffer->Visual.stencilBits);
2661         break;
2662      case GL_STENCIL_CLEAR_VALUE:
2663         params[0] = (GLfloat)(ctx->Stencil.Clear);
2664         break;
2665      case GL_STENCIL_FAIL:
2666         params[0] = ENUM_TO_FLOAT(ctx->Stencil.FailFunc[ctx->Stencil.ActiveFace]);
2667         break;
2668      case GL_STENCIL_FUNC:
2669         params[0] = ENUM_TO_FLOAT(ctx->Stencil.Function[ctx->Stencil.ActiveFace]);
2670         break;
2671      case GL_STENCIL_PASS_DEPTH_FAIL:
2672         params[0] = ENUM_TO_FLOAT(ctx->Stencil.ZFailFunc[ctx->Stencil.ActiveFace]);
2673         break;
2674      case GL_STENCIL_PASS_DEPTH_PASS:
2675         params[0] = ENUM_TO_FLOAT(ctx->Stencil.ZPassFunc[ctx->Stencil.ActiveFace]);
2676         break;
2677      case GL_STENCIL_REF:
2678         params[0] = (GLfloat)(ctx->Stencil.Ref[ctx->Stencil.ActiveFace]);
2679         break;
2680      case GL_STENCIL_TEST:
2681         params[0] = BOOLEAN_TO_FLOAT(ctx->Stencil.Enabled);
2682         break;
2683      case GL_STENCIL_VALUE_MASK:
2684         params[0] = (GLfloat)(ctx->Stencil.ValueMask[ctx->Stencil.ActiveFace]);
2685         break;
2686      case GL_STENCIL_WRITEMASK:
2687         params[0] = (GLfloat)(ctx->Stencil.WriteMask[ctx->Stencil.ActiveFace]);
2688         break;
2689      case GL_STEREO:
2690         params[0] = BOOLEAN_TO_FLOAT(ctx->DrawBuffer->Visual.stereoMode);
2691         break;
2692      case GL_SUBPIXEL_BITS:
2693         params[0] = (GLfloat)(ctx->Const.SubPixelBits);
2694         break;
2695      case GL_TEXTURE_1D:
2696         params[0] = BOOLEAN_TO_FLOAT(_mesa_IsEnabled(GL_TEXTURE_1D));
2697         break;
2698      case GL_TEXTURE_2D:
2699         params[0] = BOOLEAN_TO_FLOAT(_mesa_IsEnabled(GL_TEXTURE_2D));
2700         break;
2701      case GL_TEXTURE_3D:
2702         params[0] = BOOLEAN_TO_FLOAT(_mesa_IsEnabled(GL_TEXTURE_3D));
2703         break;
2704      case GL_TEXTURE_1D_ARRAY_EXT:
2705         CHECK_EXT1(MESA_texture_array, "GetFloatv");
2706         params[0] = BOOLEAN_TO_FLOAT(_mesa_IsEnabled(GL_TEXTURE_1D_ARRAY_EXT));
2707         break;
2708      case GL_TEXTURE_2D_ARRAY_EXT:
2709         CHECK_EXT1(MESA_texture_array, "GetFloatv");
2710         params[0] = BOOLEAN_TO_FLOAT(_mesa_IsEnabled(GL_TEXTURE_2D_ARRAY_EXT));
2711         break;
2712      case GL_TEXTURE_BINDING_1D:
2713         params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_INDEX]->Name);
2714         break;
2715      case GL_TEXTURE_BINDING_2D:
2716         params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_INDEX]->Name);
2717         break;
2718      case GL_TEXTURE_BINDING_3D:
2719         params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_3D_INDEX]->Name);
2720         break;
2721      case GL_TEXTURE_BINDING_1D_ARRAY_EXT:
2722         CHECK_EXT1(MESA_texture_array, "GetFloatv");
2723         params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_ARRAY_INDEX]->Name);
2724         break;
2725      case GL_TEXTURE_BINDING_2D_ARRAY_EXT:
2726         CHECK_EXT1(MESA_texture_array, "GetFloatv");
2727         params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_ARRAY_INDEX]->Name);
2728         break;
2729      case GL_TEXTURE_GEN_S:
2730         params[0] = BOOLEAN_TO_FLOAT(((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & S_BIT) ? 1 : 0));
2731         break;
2732      case GL_TEXTURE_GEN_T:
2733         params[0] = BOOLEAN_TO_FLOAT(((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & T_BIT) ? 1 : 0));
2734         break;
2735      case GL_TEXTURE_GEN_R:
2736         params[0] = BOOLEAN_TO_FLOAT(((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & R_BIT) ? 1 : 0));
2737         break;
2738      case GL_TEXTURE_GEN_Q:
2739         params[0] = BOOLEAN_TO_FLOAT(((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & Q_BIT) ? 1 : 0));
2740         break;
2741      case GL_TEXTURE_MATRIX:
2742         {
2743         const GLfloat *matrix = ctx->TextureMatrixStack[ctx->Texture.CurrentUnit].Top->m;
2744         params[0] = matrix[0];
2745         params[1] = matrix[1];
2746         params[2] = matrix[2];
2747         params[3] = matrix[3];
2748         params[4] = matrix[4];
2749         params[5] = matrix[5];
2750         params[6] = matrix[6];
2751         params[7] = matrix[7];
2752         params[8] = matrix[8];
2753         params[9] = matrix[9];
2754         params[10] = matrix[10];
2755         params[11] = matrix[11];
2756         params[12] = matrix[12];
2757         params[13] = matrix[13];
2758         params[14] = matrix[14];
2759         params[15] = matrix[15];
2760         }
2761         break;
2762      case GL_TEXTURE_STACK_DEPTH:
2763         params[0] = (GLfloat)(ctx->TextureMatrixStack[ctx->Texture.CurrentUnit].Depth + 1);
2764         break;
2765      case GL_UNPACK_ALIGNMENT:
2766         params[0] = (GLfloat)(ctx->Unpack.Alignment);
2767         break;
2768      case GL_UNPACK_LSB_FIRST:
2769         params[0] = BOOLEAN_TO_FLOAT(ctx->Unpack.LsbFirst);
2770         break;
2771      case GL_UNPACK_ROW_LENGTH:
2772         params[0] = (GLfloat)(ctx->Unpack.RowLength);
2773         break;
2774      case GL_UNPACK_SKIP_PIXELS:
2775         params[0] = (GLfloat)(ctx->Unpack.SkipPixels);
2776         break;
2777      case GL_UNPACK_SKIP_ROWS:
2778         params[0] = (GLfloat)(ctx->Unpack.SkipRows);
2779         break;
2780      case GL_UNPACK_SWAP_BYTES:
2781         params[0] = BOOLEAN_TO_FLOAT(ctx->Unpack.SwapBytes);
2782         break;
2783      case GL_UNPACK_SKIP_IMAGES_EXT:
2784         params[0] = (GLfloat)(ctx->Unpack.SkipImages);
2785         break;
2786      case GL_UNPACK_IMAGE_HEIGHT_EXT:
2787         params[0] = (GLfloat)(ctx->Unpack.ImageHeight);
2788         break;
2789      case GL_UNPACK_CLIENT_STORAGE_APPLE:
2790         params[0] = BOOLEAN_TO_FLOAT(ctx->Unpack.ClientStorage);
2791         break;
2792      case GL_VIEWPORT:
2793         params[0] = (GLfloat)(ctx->Viewport.X);
2794         params[1] = (GLfloat)(ctx->Viewport.Y);
2795         params[2] = (GLfloat)(ctx->Viewport.Width);
2796         params[3] = (GLfloat)(ctx->Viewport.Height);
2797         break;
2798      case GL_ZOOM_X:
2799         params[0] = ctx->Pixel.ZoomX;
2800         break;
2801      case GL_ZOOM_Y:
2802         params[0] = ctx->Pixel.ZoomY;
2803         break;
2804      case GL_VERTEX_ARRAY:
2805         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->Vertex.Enabled);
2806         break;
2807      case GL_VERTEX_ARRAY_SIZE:
2808         params[0] = (GLfloat)(ctx->Array.ArrayObj->Vertex.Size);
2809         break;
2810      case GL_VERTEX_ARRAY_TYPE:
2811         params[0] = ENUM_TO_FLOAT(ctx->Array.ArrayObj->Vertex.Type);
2812         break;
2813      case GL_VERTEX_ARRAY_STRIDE:
2814         params[0] = (GLfloat)(ctx->Array.ArrayObj->Vertex.Stride);
2815         break;
2816      case GL_VERTEX_ARRAY_COUNT_EXT:
2817         params[0] = (GLfloat)(0);
2818         break;
2819      case GL_NORMAL_ARRAY:
2820         params[0] = ENUM_TO_FLOAT(ctx->Array.ArrayObj->Normal.Enabled);
2821         break;
2822      case GL_NORMAL_ARRAY_TYPE:
2823         params[0] = ENUM_TO_FLOAT(ctx->Array.ArrayObj->Normal.Type);
2824         break;
2825      case GL_NORMAL_ARRAY_STRIDE:
2826         params[0] = (GLfloat)(ctx->Array.ArrayObj->Normal.Stride);
2827         break;
2828      case GL_NORMAL_ARRAY_COUNT_EXT:
2829         params[0] = (GLfloat)(0);
2830         break;
2831      case GL_COLOR_ARRAY:
2832         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->Color.Enabled);
2833         break;
2834      case GL_COLOR_ARRAY_SIZE:
2835         params[0] = (GLfloat)(ctx->Array.ArrayObj->Color.Size);
2836         break;
2837      case GL_COLOR_ARRAY_TYPE:
2838         params[0] = ENUM_TO_FLOAT(ctx->Array.ArrayObj->Color.Type);
2839         break;
2840      case GL_COLOR_ARRAY_STRIDE:
2841         params[0] = (GLfloat)(ctx->Array.ArrayObj->Color.Stride);
2842         break;
2843      case GL_COLOR_ARRAY_COUNT_EXT:
2844         params[0] = (GLfloat)(0);
2845         break;
2846      case GL_INDEX_ARRAY:
2847         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->Index.Enabled);
2848         break;
2849      case GL_INDEX_ARRAY_TYPE:
2850         params[0] = ENUM_TO_FLOAT(ctx->Array.ArrayObj->Index.Type);
2851         break;
2852      case GL_INDEX_ARRAY_STRIDE:
2853         params[0] = (GLfloat)(ctx->Array.ArrayObj->Index.Stride);
2854         break;
2855      case GL_INDEX_ARRAY_COUNT_EXT:
2856         params[0] = (GLfloat)(0);
2857         break;
2858      case GL_TEXTURE_COORD_ARRAY:
2859         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Enabled);
2860         break;
2861      case GL_TEXTURE_COORD_ARRAY_SIZE:
2862         params[0] = (GLfloat)(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Size);
2863         break;
2864      case GL_TEXTURE_COORD_ARRAY_TYPE:
2865         params[0] = ENUM_TO_FLOAT(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Type);
2866         break;
2867      case GL_TEXTURE_COORD_ARRAY_STRIDE:
2868         params[0] = (GLfloat)(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Stride);
2869         break;
2870      case GL_TEXTURE_COORD_ARRAY_COUNT_EXT:
2871         params[0] = (GLfloat)(0);
2872         break;
2873      case GL_EDGE_FLAG_ARRAY:
2874         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->EdgeFlag.Enabled);
2875         break;
2876      case GL_EDGE_FLAG_ARRAY_STRIDE:
2877         params[0] = (GLfloat)(ctx->Array.ArrayObj->EdgeFlag.Stride);
2878         break;
2879      case GL_EDGE_FLAG_ARRAY_COUNT_EXT:
2880         params[0] = (GLfloat)(0);
2881         break;
2882      case GL_MAX_TEXTURE_UNITS_ARB:
2883         CHECK_EXT1(ARB_multitexture, "GetFloatv");
2884         params[0] = (GLfloat)(ctx->Const.MaxTextureUnits);
2885         break;
2886      case GL_ACTIVE_TEXTURE_ARB:
2887         CHECK_EXT1(ARB_multitexture, "GetFloatv");
2888         params[0] = (GLfloat)(GL_TEXTURE0_ARB + ctx->Texture.CurrentUnit);
2889         break;
2890      case GL_CLIENT_ACTIVE_TEXTURE_ARB:
2891         CHECK_EXT1(ARB_multitexture, "GetFloatv");
2892         params[0] = (GLfloat)(GL_TEXTURE0_ARB + ctx->Array.ActiveTexture);
2893         break;
2894      case GL_TEXTURE_CUBE_MAP_ARB:
2895         CHECK_EXT1(ARB_texture_cube_map, "GetFloatv");
2896         params[0] = BOOLEAN_TO_FLOAT(_mesa_IsEnabled(GL_TEXTURE_CUBE_MAP_ARB));
2897         break;
2898      case GL_TEXTURE_BINDING_CUBE_MAP_ARB:
2899         CHECK_EXT1(ARB_texture_cube_map, "GetFloatv");
2900         params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_CUBE_INDEX]->Name);
2901         break;
2902      case GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB:
2903         CHECK_EXT1(ARB_texture_cube_map, "GetFloatv");
2904         params[0] = (GLfloat)((1 << (ctx->Const.MaxCubeTextureLevels - 1)));
2905         break;
2906      case GL_TEXTURE_COMPRESSION_HINT_ARB:
2907         params[0] = (GLfloat)(ctx->Hint.TextureCompression);
2908         break;
2909      case GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB:
2910         params[0] = (GLfloat)(_mesa_get_compressed_formats(ctx, NULL, GL_FALSE));
2911         break;
2912      case GL_COMPRESSED_TEXTURE_FORMATS_ARB:
2913         {
2914         GLint formats[100];
2915         GLuint i, n = _mesa_get_compressed_formats(ctx, formats, GL_FALSE);
2916         ASSERT(n <= 100);
2917         for (i = 0; i < n; i++)
2918            params[i] = ENUM_TO_FLOAT(formats[i]);
2919         }
2920         break;
2921      case GL_ARRAY_ELEMENT_LOCK_FIRST_EXT:
2922         CHECK_EXT1(EXT_compiled_vertex_array, "GetFloatv");
2923         params[0] = (GLfloat)(ctx->Array.LockFirst);
2924         break;
2925      case GL_ARRAY_ELEMENT_LOCK_COUNT_EXT:
2926         CHECK_EXT1(EXT_compiled_vertex_array, "GetFloatv");
2927         params[0] = (GLfloat)(ctx->Array.LockCount);
2928         break;
2929      case GL_TRANSPOSE_COLOR_MATRIX_ARB:
2930         {
2931         const GLfloat *matrix = ctx->ColorMatrixStack.Top->m;
2932         params[0] = matrix[0];
2933         params[1] = matrix[4];
2934         params[2] = matrix[8];
2935         params[3] = matrix[12];
2936         params[4] = matrix[1];
2937         params[5] = matrix[5];
2938         params[6] = matrix[9];
2939         params[7] = matrix[13];
2940         params[8] = matrix[2];
2941         params[9] = matrix[6];
2942         params[10] = matrix[10];
2943         params[11] = matrix[14];
2944         params[12] = matrix[3];
2945         params[13] = matrix[7];
2946         params[14] = matrix[11];
2947         params[15] = matrix[15];
2948         }
2949         break;
2950      case GL_TRANSPOSE_MODELVIEW_MATRIX_ARB:
2951         {
2952         const GLfloat *matrix = ctx->ModelviewMatrixStack.Top->m;
2953         params[0] = matrix[0];
2954         params[1] = matrix[4];
2955         params[2] = matrix[8];
2956         params[3] = matrix[12];
2957         params[4] = matrix[1];
2958         params[5] = matrix[5];
2959         params[6] = matrix[9];
2960         params[7] = matrix[13];
2961         params[8] = matrix[2];
2962         params[9] = matrix[6];
2963         params[10] = matrix[10];
2964         params[11] = matrix[14];
2965         params[12] = matrix[3];
2966         params[13] = matrix[7];
2967         params[14] = matrix[11];
2968         params[15] = matrix[15];
2969         }
2970         break;
2971      case GL_TRANSPOSE_PROJECTION_MATRIX_ARB:
2972         {
2973         const GLfloat *matrix = ctx->ProjectionMatrixStack.Top->m;
2974         params[0] = matrix[0];
2975         params[1] = matrix[4];
2976         params[2] = matrix[8];
2977         params[3] = matrix[12];
2978         params[4] = matrix[1];
2979         params[5] = matrix[5];
2980         params[6] = matrix[9];
2981         params[7] = matrix[13];
2982         params[8] = matrix[2];
2983         params[9] = matrix[6];
2984         params[10] = matrix[10];
2985         params[11] = matrix[14];
2986         params[12] = matrix[3];
2987         params[13] = matrix[7];
2988         params[14] = matrix[11];
2989         params[15] = matrix[15];
2990         }
2991         break;
2992      case GL_TRANSPOSE_TEXTURE_MATRIX_ARB:
2993         {
2994         const GLfloat *matrix = ctx->TextureMatrixStack[ctx->Texture.CurrentUnit].Top->m;
2995         params[0] = matrix[0];
2996         params[1] = matrix[4];
2997         params[2] = matrix[8];
2998         params[3] = matrix[12];
2999         params[4] = matrix[1];
3000         params[5] = matrix[5];
3001         params[6] = matrix[9];
3002         params[7] = matrix[13];
3003         params[8] = matrix[2];
3004         params[9] = matrix[6];
3005         params[10] = matrix[10];
3006         params[11] = matrix[14];
3007         params[12] = matrix[3];
3008         params[13] = matrix[7];
3009         params[14] = matrix[11];
3010         params[15] = matrix[15];
3011         }
3012         break;
3013      case GL_COLOR_MATRIX_SGI:
3014         {
3015         const GLfloat *matrix = ctx->ColorMatrixStack.Top->m;
3016         params[0] = matrix[0];
3017         params[1] = matrix[1];
3018         params[2] = matrix[2];
3019         params[3] = matrix[3];
3020         params[4] = matrix[4];
3021         params[5] = matrix[5];
3022         params[6] = matrix[6];
3023         params[7] = matrix[7];
3024         params[8] = matrix[8];
3025         params[9] = matrix[9];
3026         params[10] = matrix[10];
3027         params[11] = matrix[11];
3028         params[12] = matrix[12];
3029         params[13] = matrix[13];
3030         params[14] = matrix[14];
3031         params[15] = matrix[15];
3032         }
3033         break;
3034      case GL_COLOR_MATRIX_STACK_DEPTH_SGI:
3035         params[0] = (GLfloat)(ctx->ColorMatrixStack.Depth + 1);
3036         break;
3037      case GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI:
3038         params[0] = (GLfloat)(MAX_COLOR_STACK_DEPTH);
3039         break;
3040      case GL_POST_COLOR_MATRIX_RED_SCALE_SGI:
3041         params[0] = ctx->Pixel.PostColorMatrixScale[0];
3042         break;
3043      case GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI:
3044         params[0] = ctx->Pixel.PostColorMatrixScale[1];
3045         break;
3046      case GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI:
3047         params[0] = ctx->Pixel.PostColorMatrixScale[2];
3048         break;
3049      case GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI:
3050         params[0] = ctx->Pixel.PostColorMatrixScale[3];
3051         break;
3052      case GL_POST_COLOR_MATRIX_RED_BIAS_SGI:
3053         params[0] = ctx->Pixel.PostColorMatrixBias[0];
3054         break;
3055      case GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI:
3056         params[0] = ctx->Pixel.PostColorMatrixBias[1];
3057         break;
3058      case GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI:
3059         params[0] = ctx->Pixel.PostColorMatrixBias[2];
3060         break;
3061      case GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI:
3062         params[0] = ctx->Pixel.PostColorMatrixBias[3];
3063         break;
3064      case GL_CONVOLUTION_1D_EXT:
3065         CHECK_EXT1(EXT_convolution, "GetFloatv");
3066         params[0] = BOOLEAN_TO_FLOAT(ctx->Pixel.Convolution1DEnabled);
3067         break;
3068      case GL_CONVOLUTION_2D_EXT:
3069         CHECK_EXT1(EXT_convolution, "GetFloatv");
3070         params[0] = BOOLEAN_TO_FLOAT(ctx->Pixel.Convolution2DEnabled);
3071         break;
3072      case GL_SEPARABLE_2D_EXT:
3073         CHECK_EXT1(EXT_convolution, "GetFloatv");
3074         params[0] = BOOLEAN_TO_FLOAT(ctx->Pixel.Separable2DEnabled);
3075         break;
3076      case GL_POST_CONVOLUTION_RED_SCALE_EXT:
3077         CHECK_EXT1(EXT_convolution, "GetFloatv");
3078         params[0] = ctx->Pixel.PostConvolutionScale[0];
3079         break;
3080      case GL_POST_CONVOLUTION_GREEN_SCALE_EXT:
3081         CHECK_EXT1(EXT_convolution, "GetFloatv");
3082         params[0] = ctx->Pixel.PostConvolutionScale[1];
3083         break;
3084      case GL_POST_CONVOLUTION_BLUE_SCALE_EXT:
3085         CHECK_EXT1(EXT_convolution, "GetFloatv");
3086         params[0] = ctx->Pixel.PostConvolutionScale[2];
3087         break;
3088      case GL_POST_CONVOLUTION_ALPHA_SCALE_EXT:
3089         CHECK_EXT1(EXT_convolution, "GetFloatv");
3090         params[0] = ctx->Pixel.PostConvolutionScale[3];
3091         break;
3092      case GL_POST_CONVOLUTION_RED_BIAS_EXT:
3093         CHECK_EXT1(EXT_convolution, "GetFloatv");
3094         params[0] = ctx->Pixel.PostConvolutionBias[0];
3095         break;
3096      case GL_POST_CONVOLUTION_GREEN_BIAS_EXT:
3097         CHECK_EXT1(EXT_convolution, "GetFloatv");
3098         params[0] = ctx->Pixel.PostConvolutionBias[1];
3099         break;
3100      case GL_POST_CONVOLUTION_BLUE_BIAS_EXT:
3101         CHECK_EXT1(EXT_convolution, "GetFloatv");
3102         params[0] = ctx->Pixel.PostConvolutionBias[2];
3103         break;
3104      case GL_POST_CONVOLUTION_ALPHA_BIAS_EXT:
3105         CHECK_EXT1(EXT_convolution, "GetFloatv");
3106         params[0] = ctx->Pixel.PostConvolutionBias[3];
3107         break;
3108      case GL_HISTOGRAM:
3109         CHECK_EXT1(EXT_histogram, "GetFloatv");
3110         params[0] = BOOLEAN_TO_FLOAT(ctx->Pixel.HistogramEnabled);
3111         break;
3112      case GL_MINMAX:
3113         CHECK_EXT1(EXT_histogram, "GetFloatv");
3114         params[0] = BOOLEAN_TO_FLOAT(ctx->Pixel.MinMaxEnabled);
3115         break;
3116      case GL_COLOR_TABLE_SGI:
3117         CHECK_EXT1(SGI_color_table, "GetFloatv");
3118         params[0] = BOOLEAN_TO_FLOAT(ctx->Pixel.ColorTableEnabled[COLORTABLE_PRECONVOLUTION]);
3119         break;
3120      case GL_POST_CONVOLUTION_COLOR_TABLE_SGI:
3121         CHECK_EXT1(SGI_color_table, "GetFloatv");
3122         params[0] = BOOLEAN_TO_FLOAT(ctx->Pixel.ColorTableEnabled[COLORTABLE_POSTCONVOLUTION]);
3123         break;
3124      case GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI:
3125         CHECK_EXT1(SGI_color_table, "GetFloatv");
3126         params[0] = BOOLEAN_TO_FLOAT(ctx->Pixel.ColorTableEnabled[COLORTABLE_POSTCOLORMATRIX]);
3127         break;
3128      case GL_TEXTURE_COLOR_TABLE_SGI:
3129         CHECK_EXT1(SGI_texture_color_table, "GetFloatv");
3130         params[0] = BOOLEAN_TO_FLOAT(ctx->Texture.Unit[ctx->Texture.CurrentUnit].ColorTableEnabled);
3131         break;
3132      case GL_COLOR_SUM_EXT:
3133         CHECK_EXT2(EXT_secondary_color, ARB_vertex_program, "GetFloatv");
3134         params[0] = BOOLEAN_TO_FLOAT(ctx->Fog.ColorSumEnabled);
3135         break;
3136      case GL_CURRENT_SECONDARY_COLOR_EXT:
3137         CHECK_EXT1(EXT_secondary_color, "GetFloatv");
3138         {
3139         FLUSH_CURRENT(ctx, 0);
3140         params[0] = ctx->Current.Attrib[VERT_ATTRIB_COLOR1][0];
3141         params[1] = ctx->Current.Attrib[VERT_ATTRIB_COLOR1][1];
3142         params[2] = ctx->Current.Attrib[VERT_ATTRIB_COLOR1][2];
3143         params[3] = ctx->Current.Attrib[VERT_ATTRIB_COLOR1][3];
3144         }
3145         break;
3146      case GL_SECONDARY_COLOR_ARRAY_EXT:
3147         CHECK_EXT1(EXT_secondary_color, "GetFloatv");
3148         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->SecondaryColor.Enabled);
3149         break;
3150      case GL_SECONDARY_COLOR_ARRAY_TYPE_EXT:
3151         CHECK_EXT1(EXT_secondary_color, "GetFloatv");
3152         params[0] = ENUM_TO_FLOAT(ctx->Array.ArrayObj->SecondaryColor.Type);
3153         break;
3154      case GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT:
3155         CHECK_EXT1(EXT_secondary_color, "GetFloatv");
3156         params[0] = (GLfloat)(ctx->Array.ArrayObj->SecondaryColor.Stride);
3157         break;
3158      case GL_SECONDARY_COLOR_ARRAY_SIZE_EXT:
3159         CHECK_EXT1(EXT_secondary_color, "GetFloatv");
3160         params[0] = (GLfloat)(ctx->Array.ArrayObj->SecondaryColor.Size);
3161         break;
3162      case GL_CURRENT_FOG_COORDINATE_EXT:
3163         CHECK_EXT1(EXT_fog_coord, "GetFloatv");
3164         {
3165         FLUSH_CURRENT(ctx, 0);
3166         params[0] = ctx->Current.Attrib[VERT_ATTRIB_FOG][0];
3167         }
3168         break;
3169      case GL_FOG_COORDINATE_ARRAY_EXT:
3170         CHECK_EXT1(EXT_fog_coord, "GetFloatv");
3171         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->FogCoord.Enabled);
3172         break;
3173      case GL_FOG_COORDINATE_ARRAY_TYPE_EXT:
3174         CHECK_EXT1(EXT_fog_coord, "GetFloatv");
3175         params[0] = ENUM_TO_FLOAT(ctx->Array.ArrayObj->FogCoord.Type);
3176         break;
3177      case GL_FOG_COORDINATE_ARRAY_STRIDE_EXT:
3178         CHECK_EXT1(EXT_fog_coord, "GetFloatv");
3179         params[0] = (GLfloat)(ctx->Array.ArrayObj->FogCoord.Stride);
3180         break;
3181      case GL_FOG_COORDINATE_SOURCE_EXT:
3182         CHECK_EXT1(EXT_fog_coord, "GetFloatv");
3183         params[0] = ENUM_TO_FLOAT(ctx->Fog.FogCoordinateSource);
3184         break;
3185      case GL_MAX_TEXTURE_LOD_BIAS_EXT:
3186         CHECK_EXT1(EXT_texture_lod_bias, "GetFloatv");
3187         params[0] = ctx->Const.MaxTextureLodBias;
3188         break;
3189      case GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT:
3190         CHECK_EXT1(EXT_texture_filter_anisotropic, "GetFloatv");
3191         params[0] = ctx->Const.MaxTextureMaxAnisotropy;
3192         break;
3193      case GL_MULTISAMPLE_ARB:
3194         params[0] = BOOLEAN_TO_FLOAT(ctx->Multisample.Enabled);
3195         break;
3196      case GL_SAMPLE_ALPHA_TO_COVERAGE_ARB:
3197         params[0] = BOOLEAN_TO_FLOAT(ctx->Multisample.SampleAlphaToCoverage);
3198         break;
3199      case GL_SAMPLE_ALPHA_TO_ONE_ARB:
3200         params[0] = BOOLEAN_TO_FLOAT(ctx->Multisample.SampleAlphaToOne);
3201         break;
3202      case GL_SAMPLE_COVERAGE_ARB:
3203         params[0] = BOOLEAN_TO_FLOAT(ctx->Multisample.SampleCoverage);
3204         break;
3205      case GL_SAMPLE_COVERAGE_VALUE_ARB:
3206         params[0] = ctx->Multisample.SampleCoverageValue;
3207         break;
3208      case GL_SAMPLE_COVERAGE_INVERT_ARB:
3209         params[0] = BOOLEAN_TO_FLOAT(ctx->Multisample.SampleCoverageInvert);
3210         break;
3211      case GL_SAMPLE_BUFFERS_ARB:
3212         params[0] = (GLfloat)(ctx->DrawBuffer->Visual.sampleBuffers);
3213         break;
3214      case GL_SAMPLES_ARB:
3215         params[0] = (GLfloat)(ctx->DrawBuffer->Visual.samples);
3216         break;
3217      case GL_RASTER_POSITION_UNCLIPPED_IBM:
3218         CHECK_EXT1(IBM_rasterpos_clip, "GetFloatv");
3219         params[0] = BOOLEAN_TO_FLOAT(ctx->Transform.RasterPositionUnclipped);
3220         break;
3221      case GL_POINT_SPRITE_NV:
3222         CHECK_EXT2(NV_point_sprite, ARB_point_sprite, "GetFloatv");
3223         params[0] = BOOLEAN_TO_FLOAT(ctx->Point.PointSprite);
3224         break;
3225      case GL_POINT_SPRITE_R_MODE_NV:
3226         CHECK_EXT1(NV_point_sprite, "GetFloatv");
3227         params[0] = ENUM_TO_FLOAT(ctx->Point.SpriteRMode);
3228         break;
3229      case GL_POINT_SPRITE_COORD_ORIGIN:
3230         CHECK_EXT2(NV_point_sprite, ARB_point_sprite, "GetFloatv");
3231         params[0] = ENUM_TO_FLOAT(ctx->Point.SpriteOrigin);
3232         break;
3233      case GL_GENERATE_MIPMAP_HINT_SGIS:
3234         CHECK_EXT1(SGIS_generate_mipmap, "GetFloatv");
3235         params[0] = ENUM_TO_FLOAT(ctx->Hint.GenerateMipmap);
3236         break;
3237      case GL_VERTEX_PROGRAM_BINDING_NV:
3238         CHECK_EXT1(NV_vertex_program, "GetFloatv");
3239         params[0] = (GLfloat)((ctx->VertexProgram.Current ? ctx->VertexProgram.Current->Base.Id : 0));
3240         break;
3241      case GL_VERTEX_ATTRIB_ARRAY0_NV:
3242         CHECK_EXT1(NV_vertex_program, "GetFloatv");
3243         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[0].Enabled);
3244         break;
3245      case GL_VERTEX_ATTRIB_ARRAY1_NV:
3246         CHECK_EXT1(NV_vertex_program, "GetFloatv");
3247         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[1].Enabled);
3248         break;
3249      case GL_VERTEX_ATTRIB_ARRAY2_NV:
3250         CHECK_EXT1(NV_vertex_program, "GetFloatv");
3251         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[2].Enabled);
3252         break;
3253      case GL_VERTEX_ATTRIB_ARRAY3_NV:
3254         CHECK_EXT1(NV_vertex_program, "GetFloatv");
3255         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[3].Enabled);
3256         break;
3257      case GL_VERTEX_ATTRIB_ARRAY4_NV:
3258         CHECK_EXT1(NV_vertex_program, "GetFloatv");
3259         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[4].Enabled);
3260         break;
3261      case GL_VERTEX_ATTRIB_ARRAY5_NV:
3262         CHECK_EXT1(NV_vertex_program, "GetFloatv");
3263         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[5].Enabled);
3264         break;
3265      case GL_VERTEX_ATTRIB_ARRAY6_NV:
3266         CHECK_EXT1(NV_vertex_program, "GetFloatv");
3267         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[6].Enabled);
3268         break;
3269      case GL_VERTEX_ATTRIB_ARRAY7_NV:
3270         CHECK_EXT1(NV_vertex_program, "GetFloatv");
3271         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[7].Enabled);
3272         break;
3273      case GL_VERTEX_ATTRIB_ARRAY8_NV:
3274         CHECK_EXT1(NV_vertex_program, "GetFloatv");
3275         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[8].Enabled);
3276         break;
3277      case GL_VERTEX_ATTRIB_ARRAY9_NV:
3278         CHECK_EXT1(NV_vertex_program, "GetFloatv");
3279         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[9].Enabled);
3280         break;
3281      case GL_VERTEX_ATTRIB_ARRAY10_NV:
3282         CHECK_EXT1(NV_vertex_program, "GetFloatv");
3283         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[10].Enabled);
3284         break;
3285      case GL_VERTEX_ATTRIB_ARRAY11_NV:
3286         CHECK_EXT1(NV_vertex_program, "GetFloatv");
3287         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[11].Enabled);
3288         break;
3289      case GL_VERTEX_ATTRIB_ARRAY12_NV:
3290         CHECK_EXT1(NV_vertex_program, "GetFloatv");
3291         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[12].Enabled);
3292         break;
3293      case GL_VERTEX_ATTRIB_ARRAY13_NV:
3294         CHECK_EXT1(NV_vertex_program, "GetFloatv");
3295         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[13].Enabled);
3296         break;
3297      case GL_VERTEX_ATTRIB_ARRAY14_NV:
3298         CHECK_EXT1(NV_vertex_program, "GetFloatv");
3299         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[14].Enabled);
3300         break;
3301      case GL_VERTEX_ATTRIB_ARRAY15_NV:
3302         CHECK_EXT1(NV_vertex_program, "GetFloatv");
3303         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[15].Enabled);
3304         break;
3305      case GL_MAP1_VERTEX_ATTRIB0_4_NV:
3306         CHECK_EXT1(NV_vertex_program, "GetFloatv");
3307         params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[0]);
3308         break;
3309      case GL_MAP1_VERTEX_ATTRIB1_4_NV:
3310         CHECK_EXT1(NV_vertex_program, "GetFloatv");
3311         params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[1]);
3312         break;
3313      case GL_MAP1_VERTEX_ATTRIB2_4_NV:
3314         CHECK_EXT1(NV_vertex_program, "GetFloatv");
3315         params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[2]);
3316         break;
3317      case GL_MAP1_VERTEX_ATTRIB3_4_NV:
3318         CHECK_EXT1(NV_vertex_program, "GetFloatv");
3319         params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[3]);
3320         break;
3321      case GL_MAP1_VERTEX_ATTRIB4_4_NV:
3322         CHECK_EXT1(NV_vertex_program, "GetFloatv");
3323         params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[4]);
3324         break;
3325      case GL_MAP1_VERTEX_ATTRIB5_4_NV:
3326         CHECK_EXT1(NV_vertex_program, "GetFloatv");
3327         params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[5]);
3328         break;
3329      case GL_MAP1_VERTEX_ATTRIB6_4_NV:
3330         CHECK_EXT1(NV_vertex_program, "GetFloatv");
3331         params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[6]);
3332         break;
3333      case GL_MAP1_VERTEX_ATTRIB7_4_NV:
3334         CHECK_EXT1(NV_vertex_program, "GetFloatv");
3335         params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[7]);
3336         break;
3337      case GL_MAP1_VERTEX_ATTRIB8_4_NV:
3338         CHECK_EXT1(NV_vertex_program, "GetFloatv");
3339         params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[8]);
3340         break;
3341      case GL_MAP1_VERTEX_ATTRIB9_4_NV:
3342         CHECK_EXT1(NV_vertex_program, "GetFloatv");
3343         params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[9]);
3344         break;
3345      case GL_MAP1_VERTEX_ATTRIB10_4_NV:
3346         CHECK_EXT1(NV_vertex_program, "GetFloatv");
3347         params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[10]);
3348         break;
3349      case GL_MAP1_VERTEX_ATTRIB11_4_NV:
3350         CHECK_EXT1(NV_vertex_program, "GetFloatv");
3351         params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[11]);
3352         break;
3353      case GL_MAP1_VERTEX_ATTRIB12_4_NV:
3354         CHECK_EXT1(NV_vertex_program, "GetFloatv");
3355         params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[12]);
3356         break;
3357      case GL_MAP1_VERTEX_ATTRIB13_4_NV:
3358         CHECK_EXT1(NV_vertex_program, "GetFloatv");
3359         params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[13]);
3360         break;
3361      case GL_MAP1_VERTEX_ATTRIB14_4_NV:
3362         CHECK_EXT1(NV_vertex_program, "GetFloatv");
3363         params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[14]);
3364         break;
3365      case GL_MAP1_VERTEX_ATTRIB15_4_NV:
3366         CHECK_EXT1(NV_vertex_program, "GetFloatv");
3367         params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[15]);
3368         break;
3369      case GL_FRAGMENT_PROGRAM_NV:
3370         CHECK_EXT1(NV_fragment_program, "GetFloatv");
3371         params[0] = BOOLEAN_TO_FLOAT(ctx->FragmentProgram.Enabled);
3372         break;
3373      case GL_FRAGMENT_PROGRAM_BINDING_NV:
3374         CHECK_EXT1(NV_fragment_program, "GetFloatv");
3375         params[0] = (GLfloat)(ctx->FragmentProgram.Current ? ctx->FragmentProgram.Current->Base.Id : 0);
3376         break;
3377      case GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV:
3378         CHECK_EXT1(NV_fragment_program, "GetFloatv");
3379         params[0] = (GLfloat)(MAX_NV_FRAGMENT_PROGRAM_PARAMS);
3380         break;
3381      case GL_TEXTURE_RECTANGLE_NV:
3382         CHECK_EXT1(NV_texture_rectangle, "GetFloatv");
3383         params[0] = BOOLEAN_TO_FLOAT(_mesa_IsEnabled(GL_TEXTURE_RECTANGLE_NV));
3384         break;
3385      case GL_TEXTURE_BINDING_RECTANGLE_NV:
3386         CHECK_EXT1(NV_texture_rectangle, "GetFloatv");
3387         params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_RECT_INDEX]->Name);
3388         break;
3389      case GL_MAX_RECTANGLE_TEXTURE_SIZE_NV:
3390         CHECK_EXT1(NV_texture_rectangle, "GetFloatv");
3391         params[0] = (GLfloat)(ctx->Const.MaxTextureRectSize);
3392         break;
3393      case GL_STENCIL_TEST_TWO_SIDE_EXT:
3394         CHECK_EXT1(EXT_stencil_two_side, "GetFloatv");
3395         params[0] = BOOLEAN_TO_FLOAT(ctx->Stencil.TestTwoSide);
3396         break;
3397      case GL_ACTIVE_STENCIL_FACE_EXT:
3398         CHECK_EXT1(EXT_stencil_two_side, "GetFloatv");
3399         params[0] = ENUM_TO_FLOAT(ctx->Stencil.ActiveFace ? GL_BACK : GL_FRONT);
3400         break;
3401      case GL_MAX_SHININESS_NV:
3402         CHECK_EXT1(NV_light_max_exponent, "GetFloatv");
3403         params[0] = ctx->Const.MaxShininess;
3404         break;
3405      case GL_MAX_SPOT_EXPONENT_NV:
3406         CHECK_EXT1(NV_light_max_exponent, "GetFloatv");
3407         params[0] = ctx->Const.MaxSpotExponent;
3408         break;
3409      case GL_ARRAY_BUFFER_BINDING_ARB:
3410         params[0] = (GLfloat)(ctx->Array.ArrayBufferObj->Name);
3411         break;
3412      case GL_VERTEX_ARRAY_BUFFER_BINDING_ARB:
3413         params[0] = (GLfloat)(ctx->Array.ArrayObj->Vertex.BufferObj->Name);
3414         break;
3415      case GL_NORMAL_ARRAY_BUFFER_BINDING_ARB:
3416         params[0] = (GLfloat)(ctx->Array.ArrayObj->Normal.BufferObj->Name);
3417         break;
3418      case GL_COLOR_ARRAY_BUFFER_BINDING_ARB:
3419         params[0] = (GLfloat)(ctx->Array.ArrayObj->Color.BufferObj->Name);
3420         break;
3421      case GL_INDEX_ARRAY_BUFFER_BINDING_ARB:
3422         params[0] = (GLfloat)(ctx->Array.ArrayObj->Index.BufferObj->Name);
3423         break;
3424      case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB:
3425         params[0] = (GLfloat)(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].BufferObj->Name);
3426         break;
3427      case GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB:
3428         params[0] = (GLfloat)(ctx->Array.ArrayObj->EdgeFlag.BufferObj->Name);
3429         break;
3430      case GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB:
3431         params[0] = (GLfloat)(ctx->Array.ArrayObj->SecondaryColor.BufferObj->Name);
3432         break;
3433      case GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB:
3434         params[0] = (GLfloat)(ctx->Array.ArrayObj->FogCoord.BufferObj->Name);
3435         break;
3436      case GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB:
3437         params[0] = (GLfloat)(ctx->Array.ElementArrayBufferObj->Name);
3438         break;
3439      case GL_PIXEL_PACK_BUFFER_BINDING_EXT:
3440         CHECK_EXT1(EXT_pixel_buffer_object, "GetFloatv");
3441         params[0] = (GLfloat)(ctx->Pack.BufferObj->Name);
3442         break;
3443      case GL_PIXEL_UNPACK_BUFFER_BINDING_EXT:
3444         CHECK_EXT1(EXT_pixel_buffer_object, "GetFloatv");
3445         params[0] = (GLfloat)(ctx->Unpack.BufferObj->Name);
3446         break;
3447      case GL_VERTEX_PROGRAM_ARB:
3448         CHECK_EXT2(ARB_vertex_program, NV_vertex_program, "GetFloatv");
3449         params[0] = BOOLEAN_TO_FLOAT(ctx->VertexProgram.Enabled);
3450         break;
3451      case GL_VERTEX_PROGRAM_POINT_SIZE_ARB:
3452         CHECK_EXT2(ARB_vertex_program, NV_vertex_program, "GetFloatv");
3453         params[0] = BOOLEAN_TO_FLOAT(ctx->VertexProgram.PointSizeEnabled);
3454         break;
3455      case GL_VERTEX_PROGRAM_TWO_SIDE_ARB:
3456         CHECK_EXT2(ARB_vertex_program, NV_vertex_program, "GetFloatv");
3457         params[0] = BOOLEAN_TO_FLOAT(ctx->VertexProgram.TwoSideEnabled);
3458         break;
3459      case GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB:
3460         CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_vertex_program, "GetFloatv");
3461         params[0] = (GLfloat)(ctx->Const.MaxProgramMatrixStackDepth);
3462         break;
3463      case GL_MAX_PROGRAM_MATRICES_ARB:
3464         CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_vertex_program, "GetFloatv");
3465         params[0] = (GLfloat)(ctx->Const.MaxProgramMatrices);
3466         break;
3467      case GL_CURRENT_MATRIX_STACK_DEPTH_ARB:
3468         CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_vertex_program, "GetFloatv");
3469         params[0] = BOOLEAN_TO_FLOAT(ctx->CurrentStack->Depth + 1);
3470         break;
3471      case GL_CURRENT_MATRIX_ARB:
3472         CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_fragment_program, "GetFloatv");
3473         {
3474         const GLfloat *matrix = ctx->CurrentStack->Top->m;
3475         params[0] = matrix[0];
3476         params[1] = matrix[1];
3477         params[2] = matrix[2];
3478         params[3] = matrix[3];
3479         params[4] = matrix[4];
3480         params[5] = matrix[5];
3481         params[6] = matrix[6];
3482         params[7] = matrix[7];
3483         params[8] = matrix[8];
3484         params[9] = matrix[9];
3485         params[10] = matrix[10];
3486         params[11] = matrix[11];
3487         params[12] = matrix[12];
3488         params[13] = matrix[13];
3489         params[14] = matrix[14];
3490         params[15] = matrix[15];
3491         }
3492         break;
3493      case GL_TRANSPOSE_CURRENT_MATRIX_ARB:
3494         CHECK_EXT2(ARB_vertex_program, ARB_fragment_program, "GetFloatv");
3495         {
3496         const GLfloat *matrix = ctx->CurrentStack->Top->m;
3497         params[0] = matrix[0];
3498         params[1] = matrix[4];
3499         params[2] = matrix[8];
3500         params[3] = matrix[12];
3501         params[4] = matrix[1];
3502         params[5] = matrix[5];
3503         params[6] = matrix[9];
3504         params[7] = matrix[13];
3505         params[8] = matrix[2];
3506         params[9] = matrix[6];
3507         params[10] = matrix[10];
3508         params[11] = matrix[14];
3509         params[12] = matrix[3];
3510         params[13] = matrix[7];
3511         params[14] = matrix[11];
3512         params[15] = matrix[15];
3513         }
3514         break;
3515      case GL_MAX_VERTEX_ATTRIBS_ARB:
3516         CHECK_EXT1(ARB_vertex_program, "GetFloatv");
3517         params[0] = (GLfloat)(ctx->Const.VertexProgram.MaxAttribs);
3518         break;
3519      case GL_PROGRAM_ERROR_POSITION_ARB:
3520         CHECK_EXT4(NV_vertex_program, ARB_vertex_program, NV_fragment_program, ARB_fragment_program, "GetFloatv");
3521         params[0] = (GLfloat)(ctx->Program.ErrorPos);
3522         break;
3523      case GL_FRAGMENT_PROGRAM_ARB:
3524         CHECK_EXT1(ARB_fragment_program, "GetFloatv");
3525         params[0] = BOOLEAN_TO_FLOAT(ctx->FragmentProgram.Enabled);
3526         break;
3527      case GL_MAX_TEXTURE_COORDS_ARB:
3528         CHECK_EXT2(ARB_fragment_program, NV_fragment_program, "GetFloatv");
3529         params[0] = (GLfloat)(ctx->Const.MaxTextureCoordUnits);
3530         break;
3531      case GL_MAX_TEXTURE_IMAGE_UNITS_ARB:
3532         CHECK_EXT2(ARB_fragment_program, NV_fragment_program, "GetFloatv");
3533         params[0] = (GLfloat)(ctx->Const.MaxTextureImageUnits);
3534         break;
3535      case GL_DEPTH_BOUNDS_TEST_EXT:
3536         CHECK_EXT1(EXT_depth_bounds_test, "GetFloatv");
3537         params[0] = BOOLEAN_TO_FLOAT(ctx->Depth.BoundsTest);
3538         break;
3539      case GL_DEPTH_BOUNDS_EXT:
3540         CHECK_EXT1(EXT_depth_bounds_test, "GetFloatv");
3541         params[0] = ctx->Depth.BoundsMin;
3542         params[1] = ctx->Depth.BoundsMax;
3543         break;
3544      case GL_FRAGMENT_PROGRAM_CALLBACK_MESA:
3545         CHECK_EXT1(MESA_program_debug, "GetFloatv");
3546         params[0] = BOOLEAN_TO_FLOAT(ctx->FragmentProgram.CallbackEnabled);
3547         break;
3548      case GL_VERTEX_PROGRAM_CALLBACK_MESA:
3549         CHECK_EXT1(MESA_program_debug, "GetFloatv");
3550         params[0] = BOOLEAN_TO_FLOAT(ctx->VertexProgram.CallbackEnabled);
3551         break;
3552      case GL_FRAGMENT_PROGRAM_POSITION_MESA:
3553         CHECK_EXT1(MESA_program_debug, "GetFloatv");
3554         params[0] = (GLfloat)(ctx->FragmentProgram.CurrentPosition);
3555         break;
3556      case GL_VERTEX_PROGRAM_POSITION_MESA:
3557         CHECK_EXT1(MESA_program_debug, "GetFloatv");
3558         params[0] = (GLfloat)(ctx->VertexProgram.CurrentPosition);
3559         break;
3560      case GL_MAX_DRAW_BUFFERS_ARB:
3561         params[0] = (GLfloat)(ctx->Const.MaxDrawBuffers);
3562         break;
3563      case GL_DRAW_BUFFER0_ARB:
3564         params[0] = ENUM_TO_FLOAT(ctx->DrawBuffer->ColorDrawBuffer[0]);
3565         break;
3566      case GL_DRAW_BUFFER1_ARB:
3567         {
3568         GLenum buffer;
3569         if (pname - GL_DRAW_BUFFER0_ARB >= ctx->Const.MaxDrawBuffers) {
3570            _mesa_error(ctx, GL_INVALID_ENUM, "glGet(GL_DRAW_BUFFERx_ARB)");
3571            return;
3572         }
3573         buffer = ctx->DrawBuffer->ColorDrawBuffer[1];
3574         params[0] = ENUM_TO_FLOAT(buffer);
3575         }
3576         break;
3577      case GL_DRAW_BUFFER2_ARB:
3578         {
3579         GLenum buffer;
3580         if (pname - GL_DRAW_BUFFER0_ARB >= ctx->Const.MaxDrawBuffers) {
3581            _mesa_error(ctx, GL_INVALID_ENUM, "glGet(GL_DRAW_BUFFERx_ARB)");
3582            return;
3583         }
3584         buffer = ctx->DrawBuffer->ColorDrawBuffer[2];
3585         params[0] = ENUM_TO_FLOAT(buffer);
3586         }
3587         break;
3588      case GL_DRAW_BUFFER3_ARB:
3589         {
3590         GLenum buffer;
3591         if (pname - GL_DRAW_BUFFER0_ARB >= ctx->Const.MaxDrawBuffers) {
3592            _mesa_error(ctx, GL_INVALID_ENUM, "glGet(GL_DRAW_BUFFERx_ARB)");
3593            return;
3594         }
3595         buffer = ctx->DrawBuffer->ColorDrawBuffer[3];
3596         params[0] = ENUM_TO_FLOAT(buffer);
3597         }
3598         break;
3599      case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES:
3600         CHECK_EXT1(OES_read_format, "GetFloatv");
3601         params[0] = (GLfloat)(ctx->Const.ColorReadType);
3602         break;
3603      case GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES:
3604         CHECK_EXT1(OES_read_format, "GetFloatv");
3605         params[0] = (GLfloat)(ctx->Const.ColorReadFormat);
3606         break;
3607      case GL_NUM_FRAGMENT_REGISTERS_ATI:
3608         CHECK_EXT1(ATI_fragment_shader, "GetFloatv");
3609         params[0] = (GLfloat)(6);
3610         break;
3611      case GL_NUM_FRAGMENT_CONSTANTS_ATI:
3612         CHECK_EXT1(ATI_fragment_shader, "GetFloatv");
3613         params[0] = (GLfloat)(8);
3614         break;
3615      case GL_NUM_PASSES_ATI:
3616         CHECK_EXT1(ATI_fragment_shader, "GetFloatv");
3617         params[0] = (GLfloat)(2);
3618         break;
3619      case GL_NUM_INSTRUCTIONS_PER_PASS_ATI:
3620         CHECK_EXT1(ATI_fragment_shader, "GetFloatv");
3621         params[0] = (GLfloat)(8);
3622         break;
3623      case GL_NUM_INSTRUCTIONS_TOTAL_ATI:
3624         CHECK_EXT1(ATI_fragment_shader, "GetFloatv");
3625         params[0] = (GLfloat)(16);
3626         break;
3627      case GL_COLOR_ALPHA_PAIRING_ATI:
3628         CHECK_EXT1(ATI_fragment_shader, "GetFloatv");
3629         params[0] = BOOLEAN_TO_FLOAT(GL_TRUE);
3630         break;
3631      case GL_NUM_LOOPBACK_COMPONENTS_ATI:
3632         CHECK_EXT1(ATI_fragment_shader, "GetFloatv");
3633         params[0] = (GLfloat)(3);
3634         break;
3635      case GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI:
3636         CHECK_EXT1(ATI_fragment_shader, "GetFloatv");
3637         params[0] = (GLfloat)(3);
3638         break;
3639      case GL_STENCIL_BACK_FUNC:
3640         params[0] = ENUM_TO_FLOAT(ctx->Stencil.Function[1]);
3641         break;
3642      case GL_STENCIL_BACK_VALUE_MASK:
3643         params[0] = (GLfloat)(ctx->Stencil.ValueMask[1]);
3644         break;
3645      case GL_STENCIL_BACK_WRITEMASK:
3646         params[0] = (GLfloat)(ctx->Stencil.WriteMask[1]);
3647         break;
3648      case GL_STENCIL_BACK_REF:
3649         params[0] = (GLfloat)(ctx->Stencil.Ref[1]);
3650         break;
3651      case GL_STENCIL_BACK_FAIL:
3652         params[0] = ENUM_TO_FLOAT(ctx->Stencil.FailFunc[1]);
3653         break;
3654      case GL_STENCIL_BACK_PASS_DEPTH_FAIL:
3655         params[0] = ENUM_TO_FLOAT(ctx->Stencil.ZFailFunc[1]);
3656         break;
3657      case GL_STENCIL_BACK_PASS_DEPTH_PASS:
3658         params[0] = ENUM_TO_FLOAT(ctx->Stencil.ZPassFunc[1]);
3659         break;
3660      case GL_FRAMEBUFFER_BINDING_EXT:
3661         CHECK_EXT1(EXT_framebuffer_object, "GetFloatv");
3662         params[0] = (GLfloat)(ctx->DrawBuffer->Name);
3663         break;
3664      case GL_RENDERBUFFER_BINDING_EXT:
3665         CHECK_EXT1(EXT_framebuffer_object, "GetFloatv");
3666         params[0] = (GLfloat)(ctx->CurrentRenderbuffer ? ctx->CurrentRenderbuffer->Name : 0);
3667         break;
3668      case GL_MAX_COLOR_ATTACHMENTS_EXT:
3669         CHECK_EXT1(EXT_framebuffer_object, "GetFloatv");
3670         params[0] = (GLfloat)(ctx->Const.MaxColorAttachments);
3671         break;
3672      case GL_MAX_RENDERBUFFER_SIZE_EXT:
3673         CHECK_EXT1(EXT_framebuffer_object, "GetFloatv");
3674         params[0] = (GLfloat)(ctx->Const.MaxRenderbufferSize);
3675         break;
3676      case GL_READ_FRAMEBUFFER_BINDING_EXT:
3677         CHECK_EXT1(EXT_framebuffer_blit, "GetFloatv");
3678         params[0] = (GLfloat)(ctx->ReadBuffer->Name);
3679         break;
3680      case GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB:
3681         CHECK_EXT1(ARB_fragment_shader, "GetFloatv");
3682         params[0] = (GLfloat)(ctx->Const.FragmentProgram.MaxUniformComponents);
3683         break;
3684      case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB:
3685         CHECK_EXT1(ARB_fragment_shader, "GetFloatv");
3686         params[0] = ENUM_TO_FLOAT(ctx->Hint.FragmentShaderDerivative);
3687         break;
3688      case GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB:
3689         CHECK_EXT1(ARB_vertex_shader, "GetFloatv");
3690         params[0] = (GLfloat)(ctx->Const.VertexProgram.MaxUniformComponents);
3691         break;
3692      case GL_MAX_VARYING_FLOATS_ARB:
3693         CHECK_EXT1(ARB_vertex_shader, "GetFloatv");
3694         params[0] = (GLfloat)(ctx->Const.MaxVarying * 4);
3695         break;
3696      case GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB:
3697         CHECK_EXT1(ARB_vertex_shader, "GetFloatv");
3698         params[0] = (GLfloat)(ctx->Const.MaxVertexTextureImageUnits);
3699         break;
3700      case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB:
3701         CHECK_EXT1(ARB_vertex_shader, "GetFloatv");
3702         params[0] = (GLfloat)(MAX_COMBINED_TEXTURE_IMAGE_UNITS);
3703         break;
3704      case GL_CURRENT_PROGRAM:
3705         CHECK_EXT1(ARB_shader_objects, "GetFloatv");
3706         params[0] = (GLfloat)(ctx->Shader.CurrentProgram ? ctx->Shader.CurrentProgram->Name : 0);
3707         break;
3708      case GL_MAX_SAMPLES:
3709         CHECK_EXT1(ARB_framebuffer_object, "GetFloatv");
3710         params[0] = (GLfloat)(ctx->Const.MaxSamples);
3711         break;
3712      default:
3713         _mesa_error(ctx, GL_INVALID_ENUM, "glGetFloatv(pname=0x%x)", pname);
3714   }
3715}
3716
3717void GLAPIENTRY
3718_mesa_GetIntegerv( GLenum pname, GLint *params )
3719{
3720   GET_CURRENT_CONTEXT(ctx);
3721   ASSERT_OUTSIDE_BEGIN_END(ctx);
3722
3723   if (!params)
3724      return;
3725
3726   if (ctx->NewState)
3727      _mesa_update_state(ctx);
3728
3729   if (ctx->Driver.GetIntegerv &&
3730       ctx->Driver.GetIntegerv(ctx, pname, params))
3731      return;
3732
3733   switch (pname) {
3734      case GL_ACCUM_RED_BITS:
3735         params[0] = ctx->DrawBuffer->Visual.accumRedBits;
3736         break;
3737      case GL_ACCUM_GREEN_BITS:
3738         params[0] = ctx->DrawBuffer->Visual.accumGreenBits;
3739         break;
3740      case GL_ACCUM_BLUE_BITS:
3741         params[0] = ctx->DrawBuffer->Visual.accumBlueBits;
3742         break;
3743      case GL_ACCUM_ALPHA_BITS:
3744         params[0] = ctx->DrawBuffer->Visual.accumAlphaBits;
3745         break;
3746      case GL_ACCUM_CLEAR_VALUE:
3747         params[0] = FLOAT_TO_INT(ctx->Accum.ClearColor[0]);
3748         params[1] = FLOAT_TO_INT(ctx->Accum.ClearColor[1]);
3749         params[2] = FLOAT_TO_INT(ctx->Accum.ClearColor[2]);
3750         params[3] = FLOAT_TO_INT(ctx->Accum.ClearColor[3]);
3751         break;
3752      case GL_ALPHA_BIAS:
3753         params[0] = IROUND(ctx->Pixel.AlphaBias);
3754         break;
3755      case GL_ALPHA_BITS:
3756         params[0] = ctx->DrawBuffer->Visual.alphaBits;
3757         break;
3758      case GL_ALPHA_SCALE:
3759         params[0] = IROUND(ctx->Pixel.AlphaScale);
3760         break;
3761      case GL_ALPHA_TEST:
3762         params[0] = BOOLEAN_TO_INT(ctx->Color.AlphaEnabled);
3763         break;
3764      case GL_ALPHA_TEST_FUNC:
3765         params[0] = ENUM_TO_INT(ctx->Color.AlphaFunc);
3766         break;
3767      case GL_ALPHA_TEST_REF:
3768         params[0] = FLOAT_TO_INT(ctx->Color.AlphaRef);
3769         break;
3770      case GL_ATTRIB_STACK_DEPTH:
3771         params[0] = ctx->AttribStackDepth;
3772         break;
3773      case GL_AUTO_NORMAL:
3774         params[0] = BOOLEAN_TO_INT(ctx->Eval.AutoNormal);
3775         break;
3776      case GL_AUX_BUFFERS:
3777         params[0] = ctx->DrawBuffer->Visual.numAuxBuffers;
3778         break;
3779      case GL_BLEND:
3780         params[0] = BOOLEAN_TO_INT(ctx->Color.BlendEnabled);
3781         break;
3782      case GL_BLEND_DST:
3783         params[0] = ENUM_TO_INT(ctx->Color.BlendDstRGB);
3784         break;
3785      case GL_BLEND_SRC:
3786         params[0] = ENUM_TO_INT(ctx->Color.BlendSrcRGB);
3787         break;
3788      case GL_BLEND_SRC_RGB_EXT:
3789         params[0] = ENUM_TO_INT(ctx->Color.BlendSrcRGB);
3790         break;
3791      case GL_BLEND_DST_RGB_EXT:
3792         params[0] = ENUM_TO_INT(ctx->Color.BlendDstRGB);
3793         break;
3794      case GL_BLEND_SRC_ALPHA_EXT:
3795         params[0] = ENUM_TO_INT(ctx->Color.BlendSrcA);
3796         break;
3797      case GL_BLEND_DST_ALPHA_EXT:
3798         params[0] = ENUM_TO_INT(ctx->Color.BlendDstA);
3799         break;
3800      case GL_BLEND_EQUATION:
3801         params[0] = ENUM_TO_INT(ctx->Color.BlendEquationRGB );
3802         break;
3803      case GL_BLEND_EQUATION_ALPHA_EXT:
3804         params[0] = ENUM_TO_INT(ctx->Color.BlendEquationA );
3805         break;
3806      case GL_BLEND_COLOR_EXT:
3807         params[0] = FLOAT_TO_INT(ctx->Color.BlendColor[0]);
3808         params[1] = FLOAT_TO_INT(ctx->Color.BlendColor[1]);
3809         params[2] = FLOAT_TO_INT(ctx->Color.BlendColor[2]);
3810         params[3] = FLOAT_TO_INT(ctx->Color.BlendColor[3]);
3811         break;
3812      case GL_BLUE_BIAS:
3813         params[0] = IROUND(ctx->Pixel.BlueBias);
3814         break;
3815      case GL_BLUE_BITS:
3816         params[0] = ctx->DrawBuffer->Visual.blueBits;
3817         break;
3818      case GL_BLUE_SCALE:
3819         params[0] = IROUND(ctx->Pixel.BlueScale);
3820         break;
3821      case GL_CLIENT_ATTRIB_STACK_DEPTH:
3822         params[0] = ctx->ClientAttribStackDepth;
3823         break;
3824      case GL_CLIP_PLANE0:
3825         params[0] = BOOLEAN_TO_INT((ctx->Transform.ClipPlanesEnabled >> 0) & 1);
3826         break;
3827      case GL_CLIP_PLANE1:
3828         params[0] = BOOLEAN_TO_INT((ctx->Transform.ClipPlanesEnabled >> 1) & 1);
3829         break;
3830      case GL_CLIP_PLANE2:
3831         params[0] = BOOLEAN_TO_INT((ctx->Transform.ClipPlanesEnabled >> 2) & 1);
3832         break;
3833      case GL_CLIP_PLANE3:
3834         params[0] = BOOLEAN_TO_INT((ctx->Transform.ClipPlanesEnabled >> 3) & 1);
3835         break;
3836      case GL_CLIP_PLANE4:
3837         params[0] = BOOLEAN_TO_INT((ctx->Transform.ClipPlanesEnabled >> 4) & 1);
3838         break;
3839      case GL_CLIP_PLANE5:
3840         params[0] = BOOLEAN_TO_INT((ctx->Transform.ClipPlanesEnabled >> 5) & 1);
3841         break;
3842      case GL_COLOR_CLEAR_VALUE:
3843         params[0] = FLOAT_TO_INT(ctx->Color.ClearColor[0]);
3844         params[1] = FLOAT_TO_INT(ctx->Color.ClearColor[1]);
3845         params[2] = FLOAT_TO_INT(ctx->Color.ClearColor[2]);
3846         params[3] = FLOAT_TO_INT(ctx->Color.ClearColor[3]);
3847         break;
3848      case GL_COLOR_MATERIAL:
3849         params[0] = BOOLEAN_TO_INT(ctx->Light.ColorMaterialEnabled);
3850         break;
3851      case GL_COLOR_MATERIAL_FACE:
3852         params[0] = ENUM_TO_INT(ctx->Light.ColorMaterialFace);
3853         break;
3854      case GL_COLOR_MATERIAL_PARAMETER:
3855         params[0] = ENUM_TO_INT(ctx->Light.ColorMaterialMode);
3856         break;
3857      case GL_COLOR_WRITEMASK:
3858         params[0] = ctx->Color.ColorMask[RCOMP] ? 1 : 0;
3859         params[1] = ctx->Color.ColorMask[GCOMP] ? 1 : 0;
3860         params[2] = ctx->Color.ColorMask[BCOMP] ? 1 : 0;
3861         params[3] = ctx->Color.ColorMask[ACOMP] ? 1 : 0;
3862         break;
3863      case GL_CULL_FACE:
3864         params[0] = BOOLEAN_TO_INT(ctx->Polygon.CullFlag);
3865         break;
3866      case GL_CULL_FACE_MODE:
3867         params[0] = ENUM_TO_INT(ctx->Polygon.CullFaceMode);
3868         break;
3869      case GL_CURRENT_COLOR:
3870         {
3871         FLUSH_CURRENT(ctx, 0);
3872         params[0] = FLOAT_TO_INT(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][0]);
3873         params[1] = FLOAT_TO_INT(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][1]);
3874         params[2] = FLOAT_TO_INT(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][2]);
3875         params[3] = FLOAT_TO_INT(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][3]);
3876         }
3877         break;
3878      case GL_CURRENT_INDEX:
3879         {
3880         FLUSH_CURRENT(ctx, 0);
3881         params[0] = IROUND(ctx->Current.Attrib[VERT_ATTRIB_COLOR_INDEX][0]);
3882         }
3883         break;
3884      case GL_CURRENT_NORMAL:
3885         {
3886         FLUSH_CURRENT(ctx, 0);
3887         params[0] = FLOAT_TO_INT(ctx->Current.Attrib[VERT_ATTRIB_NORMAL][0]);
3888         params[1] = FLOAT_TO_INT(ctx->Current.Attrib[VERT_ATTRIB_NORMAL][1]);
3889         params[2] = FLOAT_TO_INT(ctx->Current.Attrib[VERT_ATTRIB_NORMAL][2]);
3890         }
3891         break;
3892      case GL_CURRENT_RASTER_COLOR:
3893         params[0] = FLOAT_TO_INT(ctx->Current.RasterColor[0]);
3894         params[1] = FLOAT_TO_INT(ctx->Current.RasterColor[1]);
3895         params[2] = FLOAT_TO_INT(ctx->Current.RasterColor[2]);
3896         params[3] = FLOAT_TO_INT(ctx->Current.RasterColor[3]);
3897         break;
3898      case GL_CURRENT_RASTER_DISTANCE:
3899         params[0] = IROUND(ctx->Current.RasterDistance);
3900         break;
3901      case GL_CURRENT_RASTER_INDEX:
3902         params[0] = IROUND(ctx->Current.RasterIndex);
3903         break;
3904      case GL_CURRENT_RASTER_POSITION:
3905         params[0] = IROUND(ctx->Current.RasterPos[0]);
3906         params[1] = IROUND(ctx->Current.RasterPos[1]);
3907         params[2] = IROUND(ctx->Current.RasterPos[2]);
3908         params[3] = IROUND(ctx->Current.RasterPos[3]);
3909         break;
3910      case GL_CURRENT_RASTER_SECONDARY_COLOR:
3911         params[0] = FLOAT_TO_INT(ctx->Current.RasterSecondaryColor[0]);
3912         params[1] = FLOAT_TO_INT(ctx->Current.RasterSecondaryColor[1]);
3913         params[2] = FLOAT_TO_INT(ctx->Current.RasterSecondaryColor[2]);
3914         params[3] = FLOAT_TO_INT(ctx->Current.RasterSecondaryColor[3]);
3915         break;
3916      case GL_CURRENT_RASTER_TEXTURE_COORDS:
3917         {
3918         const GLuint texUnit = ctx->Texture.CurrentUnit;
3919         params[0] = IROUND(ctx->Current.RasterTexCoords[texUnit][0]);
3920         params[1] = IROUND(ctx->Current.RasterTexCoords[texUnit][1]);
3921         params[2] = IROUND(ctx->Current.RasterTexCoords[texUnit][2]);
3922         params[3] = IROUND(ctx->Current.RasterTexCoords[texUnit][3]);
3923         }
3924         break;
3925      case GL_CURRENT_RASTER_POSITION_VALID:
3926         params[0] = BOOLEAN_TO_INT(ctx->Current.RasterPosValid);
3927         break;
3928      case GL_CURRENT_TEXTURE_COORDS:
3929         {
3930         const GLuint texUnit = ctx->Texture.CurrentUnit;
3931         params[0] = IROUND(ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][0]);
3932         params[1] = IROUND(ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][1]);
3933         params[2] = IROUND(ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][2]);
3934         params[3] = IROUND(ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][3]);
3935         }
3936         break;
3937      case GL_DEPTH_BIAS:
3938         params[0] = IROUND(ctx->Pixel.DepthBias);
3939         break;
3940      case GL_DEPTH_BITS:
3941         params[0] = ctx->DrawBuffer->Visual.depthBits;
3942         break;
3943      case GL_DEPTH_CLEAR_VALUE:
3944         params[0] = FLOAT_TO_INT(((GLfloat) ctx->Depth.Clear));
3945         break;
3946      case GL_DEPTH_FUNC:
3947         params[0] = ENUM_TO_INT(ctx->Depth.Func);
3948         break;
3949      case GL_DEPTH_RANGE:
3950         params[0] = FLOAT_TO_INT(ctx->Viewport.Near);
3951         params[1] = FLOAT_TO_INT(ctx->Viewport.Far);
3952         break;
3953      case GL_DEPTH_SCALE:
3954         params[0] = IROUND(ctx->Pixel.DepthScale);
3955         break;
3956      case GL_DEPTH_TEST:
3957         params[0] = BOOLEAN_TO_INT(ctx->Depth.Test);
3958         break;
3959      case GL_DEPTH_WRITEMASK:
3960         params[0] = BOOLEAN_TO_INT(ctx->Depth.Mask);
3961         break;
3962      case GL_DITHER:
3963         params[0] = BOOLEAN_TO_INT(ctx->Color.DitherFlag);
3964         break;
3965      case GL_DOUBLEBUFFER:
3966         params[0] = BOOLEAN_TO_INT(ctx->DrawBuffer->Visual.doubleBufferMode);
3967         break;
3968      case GL_DRAW_BUFFER:
3969         params[0] = ENUM_TO_INT(ctx->DrawBuffer->ColorDrawBuffer[0]);
3970         break;
3971      case GL_EDGE_FLAG:
3972         {
3973         FLUSH_CURRENT(ctx, 0);
3974         params[0] = BOOLEAN_TO_INT((ctx->Current.Attrib[VERT_ATTRIB_EDGEFLAG][0] == 1.0));
3975         }
3976         break;
3977      case GL_FEEDBACK_BUFFER_SIZE:
3978         params[0] = ctx->Feedback.BufferSize;
3979         break;
3980      case GL_FEEDBACK_BUFFER_TYPE:
3981         params[0] = ENUM_TO_INT(ctx->Feedback.Type);
3982         break;
3983      case GL_FOG:
3984         params[0] = BOOLEAN_TO_INT(ctx->Fog.Enabled);
3985         break;
3986      case GL_FOG_COLOR:
3987         params[0] = FLOAT_TO_INT(ctx->Fog.Color[0]);
3988         params[1] = FLOAT_TO_INT(ctx->Fog.Color[1]);
3989         params[2] = FLOAT_TO_INT(ctx->Fog.Color[2]);
3990         params[3] = FLOAT_TO_INT(ctx->Fog.Color[3]);
3991         break;
3992      case GL_FOG_DENSITY:
3993         params[0] = IROUND(ctx->Fog.Density);
3994         break;
3995      case GL_FOG_END:
3996         params[0] = IROUND(ctx->Fog.End);
3997         break;
3998      case GL_FOG_HINT:
3999         params[0] = ENUM_TO_INT(ctx->Hint.Fog);
4000         break;
4001      case GL_FOG_INDEX:
4002         params[0] = IROUND(ctx->Fog.Index);
4003         break;
4004      case GL_FOG_MODE:
4005         params[0] = ENUM_TO_INT(ctx->Fog.Mode);
4006         break;
4007      case GL_FOG_START:
4008         params[0] = IROUND(ctx->Fog.Start);
4009         break;
4010      case GL_FRONT_FACE:
4011         params[0] = ENUM_TO_INT(ctx->Polygon.FrontFace);
4012         break;
4013      case GL_GREEN_BIAS:
4014         params[0] = IROUND(ctx->Pixel.GreenBias);
4015         break;
4016      case GL_GREEN_BITS:
4017         params[0] = ctx->DrawBuffer->Visual.greenBits;
4018         break;
4019      case GL_GREEN_SCALE:
4020         params[0] = IROUND(ctx->Pixel.GreenScale);
4021         break;
4022      case GL_INDEX_BITS:
4023         params[0] = ctx->DrawBuffer->Visual.indexBits;
4024         break;
4025      case GL_INDEX_CLEAR_VALUE:
4026         params[0] = ctx->Color.ClearIndex;
4027         break;
4028      case GL_INDEX_MODE:
4029         params[0] = BOOLEAN_TO_INT(!ctx->DrawBuffer->Visual.rgbMode);
4030         break;
4031      case GL_INDEX_OFFSET:
4032         params[0] = ctx->Pixel.IndexOffset;
4033         break;
4034      case GL_INDEX_SHIFT:
4035         params[0] = ctx->Pixel.IndexShift;
4036         break;
4037      case GL_INDEX_WRITEMASK:
4038         params[0] = ctx->Color.IndexMask;
4039         break;
4040      case GL_LIGHT0:
4041         params[0] = BOOLEAN_TO_INT(ctx->Light.Light[0].Enabled);
4042         break;
4043      case GL_LIGHT1:
4044         params[0] = BOOLEAN_TO_INT(ctx->Light.Light[1].Enabled);
4045         break;
4046      case GL_LIGHT2:
4047         params[0] = BOOLEAN_TO_INT(ctx->Light.Light[2].Enabled);
4048         break;
4049      case GL_LIGHT3:
4050         params[0] = BOOLEAN_TO_INT(ctx->Light.Light[3].Enabled);
4051         break;
4052      case GL_LIGHT4:
4053         params[0] = BOOLEAN_TO_INT(ctx->Light.Light[4].Enabled);
4054         break;
4055      case GL_LIGHT5:
4056         params[0] = BOOLEAN_TO_INT(ctx->Light.Light[5].Enabled);
4057         break;
4058      case GL_LIGHT6:
4059         params[0] = BOOLEAN_TO_INT(ctx->Light.Light[6].Enabled);
4060         break;
4061      case GL_LIGHT7:
4062         params[0] = BOOLEAN_TO_INT(ctx->Light.Light[7].Enabled);
4063         break;
4064      case GL_LIGHTING:
4065         params[0] = BOOLEAN_TO_INT(ctx->Light.Enabled);
4066         break;
4067      case GL_LIGHT_MODEL_AMBIENT:
4068         params[0] = FLOAT_TO_INT(ctx->Light.Model.Ambient[0]);
4069         params[1] = FLOAT_TO_INT(ctx->Light.Model.Ambient[1]);
4070         params[2] = FLOAT_TO_INT(ctx->Light.Model.Ambient[2]);
4071         params[3] = FLOAT_TO_INT(ctx->Light.Model.Ambient[3]);
4072         break;
4073      case GL_LIGHT_MODEL_COLOR_CONTROL:
4074         params[0] = ENUM_TO_INT(ctx->Light.Model.ColorControl);
4075         break;
4076      case GL_LIGHT_MODEL_LOCAL_VIEWER:
4077         params[0] = BOOLEAN_TO_INT(ctx->Light.Model.LocalViewer);
4078         break;
4079      case GL_LIGHT_MODEL_TWO_SIDE:
4080         params[0] = BOOLEAN_TO_INT(ctx->Light.Model.TwoSide);
4081         break;
4082      case GL_LINE_SMOOTH:
4083         params[0] = BOOLEAN_TO_INT(ctx->Line.SmoothFlag);
4084         break;
4085      case GL_LINE_SMOOTH_HINT:
4086         params[0] = ENUM_TO_INT(ctx->Hint.LineSmooth);
4087         break;
4088      case GL_LINE_STIPPLE:
4089         params[0] = BOOLEAN_TO_INT(ctx->Line.StippleFlag);
4090         break;
4091      case GL_LINE_STIPPLE_PATTERN:
4092         params[0] = ctx->Line.StipplePattern;
4093         break;
4094      case GL_LINE_STIPPLE_REPEAT:
4095         params[0] = ctx->Line.StippleFactor;
4096         break;
4097      case GL_LINE_WIDTH:
4098         params[0] = IROUND(ctx->Line.Width);
4099         break;
4100      case GL_LINE_WIDTH_GRANULARITY:
4101         params[0] = IROUND(ctx->Const.LineWidthGranularity);
4102         break;
4103      case GL_LINE_WIDTH_RANGE:
4104         params[0] = IROUND(ctx->Const.MinLineWidthAA);
4105         params[1] = IROUND(ctx->Const.MaxLineWidthAA);
4106         break;
4107      case GL_ALIASED_LINE_WIDTH_RANGE:
4108         params[0] = IROUND(ctx->Const.MinLineWidth);
4109         params[1] = IROUND(ctx->Const.MaxLineWidth);
4110         break;
4111      case GL_LIST_BASE:
4112         params[0] = ctx->List.ListBase;
4113         break;
4114      case GL_LIST_INDEX:
4115         params[0] = (ctx->ListState.CurrentList ? ctx->ListState.CurrentList->Name : 0);
4116         break;
4117      case GL_LIST_MODE:
4118         {
4119         GLenum mode;
4120         if (!ctx->CompileFlag)
4121            mode = 0;
4122         else if (ctx->ExecuteFlag)
4123            mode = GL_COMPILE_AND_EXECUTE;
4124         else
4125            mode = GL_COMPILE;
4126         params[0] = ENUM_TO_INT(mode);
4127         }
4128         break;
4129      case GL_INDEX_LOGIC_OP:
4130         params[0] = BOOLEAN_TO_INT(ctx->Color.IndexLogicOpEnabled);
4131         break;
4132      case GL_COLOR_LOGIC_OP:
4133         params[0] = BOOLEAN_TO_INT(ctx->Color.ColorLogicOpEnabled);
4134         break;
4135      case GL_LOGIC_OP_MODE:
4136         params[0] = ENUM_TO_INT(ctx->Color.LogicOp);
4137         break;
4138      case GL_MAP1_COLOR_4:
4139         params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Color4);
4140         break;
4141      case GL_MAP1_GRID_DOMAIN:
4142         params[0] = IROUND(ctx->Eval.MapGrid1u1);
4143         params[1] = IROUND(ctx->Eval.MapGrid1u2);
4144         break;
4145      case GL_MAP1_GRID_SEGMENTS:
4146         params[0] = ctx->Eval.MapGrid1un;
4147         break;
4148      case GL_MAP1_INDEX:
4149         params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Index);
4150         break;
4151      case GL_MAP1_NORMAL:
4152         params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Normal);
4153         break;
4154      case GL_MAP1_TEXTURE_COORD_1:
4155         params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1TextureCoord1);
4156         break;
4157      case GL_MAP1_TEXTURE_COORD_2:
4158         params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1TextureCoord2);
4159         break;
4160      case GL_MAP1_TEXTURE_COORD_3:
4161         params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1TextureCoord3);
4162         break;
4163      case GL_MAP1_TEXTURE_COORD_4:
4164         params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1TextureCoord4);
4165         break;
4166      case GL_MAP1_VERTEX_3:
4167         params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Vertex3);
4168         break;
4169      case GL_MAP1_VERTEX_4:
4170         params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Vertex4);
4171         break;
4172      case GL_MAP2_COLOR_4:
4173         params[0] = BOOLEAN_TO_INT(ctx->Eval.Map2Color4);
4174         break;
4175      case GL_MAP2_GRID_DOMAIN:
4176         params[0] = IROUND(ctx->Eval.MapGrid2u1);
4177         params[1] = IROUND(ctx->Eval.MapGrid2u2);
4178         params[2] = IROUND(ctx->Eval.MapGrid2v1);
4179         params[3] = IROUND(ctx->Eval.MapGrid2v2);
4180         break;
4181      case GL_MAP2_GRID_SEGMENTS:
4182         params[0] = ctx->Eval.MapGrid2un;
4183         params[1] = ctx->Eval.MapGrid2vn;
4184         break;
4185      case GL_MAP2_INDEX:
4186         params[0] = BOOLEAN_TO_INT(ctx->Eval.Map2Index);
4187         break;
4188      case GL_MAP2_NORMAL:
4189         params[0] = BOOLEAN_TO_INT(ctx->Eval.Map2Normal);
4190         break;
4191      case GL_MAP2_TEXTURE_COORD_1:
4192         params[0] = BOOLEAN_TO_INT(ctx->Eval.Map2TextureCoord1);
4193         break;
4194      case GL_MAP2_TEXTURE_COORD_2:
4195         params[0] = BOOLEAN_TO_INT(ctx->Eval.Map2TextureCoord2);
4196         break;
4197      case GL_MAP2_TEXTURE_COORD_3:
4198         params[0] = BOOLEAN_TO_INT(ctx->Eval.Map2TextureCoord3);
4199         break;
4200      case GL_MAP2_TEXTURE_COORD_4:
4201         params[0] = BOOLEAN_TO_INT(ctx->Eval.Map2TextureCoord4);
4202         break;
4203      case GL_MAP2_VERTEX_3:
4204         params[0] = BOOLEAN_TO_INT(ctx->Eval.Map2Vertex3);
4205         break;
4206      case GL_MAP2_VERTEX_4:
4207         params[0] = BOOLEAN_TO_INT(ctx->Eval.Map2Vertex4);
4208         break;
4209      case GL_MAP_COLOR:
4210         params[0] = BOOLEAN_TO_INT(ctx->Pixel.MapColorFlag);
4211         break;
4212      case GL_MAP_STENCIL:
4213         params[0] = BOOLEAN_TO_INT(ctx->Pixel.MapStencilFlag);
4214         break;
4215      case GL_MATRIX_MODE:
4216         params[0] = ENUM_TO_INT(ctx->Transform.MatrixMode);
4217         break;
4218      case GL_MAX_ATTRIB_STACK_DEPTH:
4219         params[0] = MAX_ATTRIB_STACK_DEPTH;
4220         break;
4221      case GL_MAX_CLIENT_ATTRIB_STACK_DEPTH:
4222         params[0] = MAX_CLIENT_ATTRIB_STACK_DEPTH;
4223         break;
4224      case GL_MAX_CLIP_PLANES:
4225         params[0] = ctx->Const.MaxClipPlanes;
4226         break;
4227      case GL_MAX_ELEMENTS_VERTICES:
4228         params[0] = ctx->Const.MaxArrayLockSize;
4229         break;
4230      case GL_MAX_ELEMENTS_INDICES:
4231         params[0] = ctx->Const.MaxArrayLockSize;
4232         break;
4233      case GL_MAX_EVAL_ORDER:
4234         params[0] = MAX_EVAL_ORDER;
4235         break;
4236      case GL_MAX_LIGHTS:
4237         params[0] = ctx->Const.MaxLights;
4238         break;
4239      case GL_MAX_LIST_NESTING:
4240         params[0] = MAX_LIST_NESTING;
4241         break;
4242      case GL_MAX_MODELVIEW_STACK_DEPTH:
4243         params[0] = MAX_MODELVIEW_STACK_DEPTH;
4244         break;
4245      case GL_MAX_NAME_STACK_DEPTH:
4246         params[0] = MAX_NAME_STACK_DEPTH;
4247         break;
4248      case GL_MAX_PIXEL_MAP_TABLE:
4249         params[0] = MAX_PIXEL_MAP_TABLE;
4250         break;
4251      case GL_MAX_PROJECTION_STACK_DEPTH:
4252         params[0] = MAX_PROJECTION_STACK_DEPTH;
4253         break;
4254      case GL_MAX_TEXTURE_SIZE:
4255         params[0] = 1 << (ctx->Const.MaxTextureLevels - 1);
4256         break;
4257      case GL_MAX_3D_TEXTURE_SIZE:
4258         params[0] = 1 << (ctx->Const.Max3DTextureLevels - 1);
4259         break;
4260      case GL_MAX_TEXTURE_STACK_DEPTH:
4261         params[0] = MAX_TEXTURE_STACK_DEPTH;
4262         break;
4263      case GL_MAX_VIEWPORT_DIMS:
4264         params[0] = ctx->Const.MaxViewportWidth;
4265         params[1] = ctx->Const.MaxViewportHeight;
4266         break;
4267      case GL_MODELVIEW_MATRIX:
4268         {
4269         const GLfloat *matrix = ctx->ModelviewMatrixStack.Top->m;
4270         params[0] = IROUND(matrix[0]);
4271         params[1] = IROUND(matrix[1]);
4272         params[2] = IROUND(matrix[2]);
4273         params[3] = IROUND(matrix[3]);
4274         params[4] = IROUND(matrix[4]);
4275         params[5] = IROUND(matrix[5]);
4276         params[6] = IROUND(matrix[6]);
4277         params[7] = IROUND(matrix[7]);
4278         params[8] = IROUND(matrix[8]);
4279         params[9] = IROUND(matrix[9]);
4280         params[10] = IROUND(matrix[10]);
4281         params[11] = IROUND(matrix[11]);
4282         params[12] = IROUND(matrix[12]);
4283         params[13] = IROUND(matrix[13]);
4284         params[14] = IROUND(matrix[14]);
4285         params[15] = IROUND(matrix[15]);
4286         }
4287         break;
4288      case GL_MODELVIEW_STACK_DEPTH:
4289         params[0] = ctx->ModelviewMatrixStack.Depth + 1;
4290         break;
4291      case GL_NAME_STACK_DEPTH:
4292         params[0] = ctx->Select.NameStackDepth;
4293         break;
4294      case GL_NORMALIZE:
4295         params[0] = BOOLEAN_TO_INT(ctx->Transform.Normalize);
4296         break;
4297      case GL_PACK_ALIGNMENT:
4298         params[0] = ctx->Pack.Alignment;
4299         break;
4300      case GL_PACK_LSB_FIRST:
4301         params[0] = BOOLEAN_TO_INT(ctx->Pack.LsbFirst);
4302         break;
4303      case GL_PACK_ROW_LENGTH:
4304         params[0] = ctx->Pack.RowLength;
4305         break;
4306      case GL_PACK_SKIP_PIXELS:
4307         params[0] = ctx->Pack.SkipPixels;
4308         break;
4309      case GL_PACK_SKIP_ROWS:
4310         params[0] = ctx->Pack.SkipRows;
4311         break;
4312      case GL_PACK_SWAP_BYTES:
4313         params[0] = BOOLEAN_TO_INT(ctx->Pack.SwapBytes);
4314         break;
4315      case GL_PACK_SKIP_IMAGES_EXT:
4316         params[0] = ctx->Pack.SkipImages;
4317         break;
4318      case GL_PACK_IMAGE_HEIGHT_EXT:
4319         params[0] = ctx->Pack.ImageHeight;
4320         break;
4321      case GL_PACK_INVERT_MESA:
4322         params[0] = BOOLEAN_TO_INT(ctx->Pack.Invert);
4323         break;
4324      case GL_PERSPECTIVE_CORRECTION_HINT:
4325         params[0] = ENUM_TO_INT(ctx->Hint.PerspectiveCorrection);
4326         break;
4327      case GL_PIXEL_MAP_A_TO_A_SIZE:
4328         params[0] = ctx->PixelMaps.AtoA.Size;
4329         break;
4330      case GL_PIXEL_MAP_B_TO_B_SIZE:
4331         params[0] = ctx->PixelMaps.BtoB.Size;
4332         break;
4333      case GL_PIXEL_MAP_G_TO_G_SIZE:
4334         params[0] = ctx->PixelMaps.GtoG.Size;
4335         break;
4336      case GL_PIXEL_MAP_I_TO_A_SIZE:
4337         params[0] = ctx->PixelMaps.ItoA.Size;
4338         break;
4339      case GL_PIXEL_MAP_I_TO_B_SIZE:
4340         params[0] = ctx->PixelMaps.ItoB.Size;
4341         break;
4342      case GL_PIXEL_MAP_I_TO_G_SIZE:
4343         params[0] = ctx->PixelMaps.ItoG.Size;
4344         break;
4345      case GL_PIXEL_MAP_I_TO_I_SIZE:
4346         params[0] = ctx->PixelMaps.ItoI.Size;
4347         break;
4348      case GL_PIXEL_MAP_I_TO_R_SIZE:
4349         params[0] = ctx->PixelMaps.ItoR.Size;
4350         break;
4351      case GL_PIXEL_MAP_R_TO_R_SIZE:
4352         params[0] = ctx->PixelMaps.RtoR.Size;
4353         break;
4354      case GL_PIXEL_MAP_S_TO_S_SIZE:
4355         params[0] = ctx->PixelMaps.StoS.Size;
4356         break;
4357      case GL_POINT_SIZE:
4358         params[0] = IROUND(ctx->Point.Size);
4359         break;
4360      case GL_POINT_SIZE_GRANULARITY:
4361         params[0] = IROUND(ctx->Const.PointSizeGranularity);
4362         break;
4363      case GL_POINT_SIZE_RANGE:
4364         params[0] = IROUND(ctx->Const.MinPointSizeAA);
4365         params[1] = IROUND(ctx->Const.MaxPointSizeAA);
4366         break;
4367      case GL_ALIASED_POINT_SIZE_RANGE:
4368         params[0] = IROUND(ctx->Const.MinPointSize);
4369         params[1] = IROUND(ctx->Const.MaxPointSize);
4370         break;
4371      case GL_POINT_SMOOTH:
4372         params[0] = BOOLEAN_TO_INT(ctx->Point.SmoothFlag);
4373         break;
4374      case GL_POINT_SMOOTH_HINT:
4375         params[0] = ENUM_TO_INT(ctx->Hint.PointSmooth);
4376         break;
4377      case GL_POINT_SIZE_MIN_EXT:
4378         params[0] = IROUND(ctx->Point.MinSize);
4379         break;
4380      case GL_POINT_SIZE_MAX_EXT:
4381         params[0] = IROUND(ctx->Point.MaxSize);
4382         break;
4383      case GL_POINT_FADE_THRESHOLD_SIZE_EXT:
4384         params[0] = IROUND(ctx->Point.Threshold);
4385         break;
4386      case GL_DISTANCE_ATTENUATION_EXT:
4387         params[0] = IROUND(ctx->Point.Params[0]);
4388         params[1] = IROUND(ctx->Point.Params[1]);
4389         params[2] = IROUND(ctx->Point.Params[2]);
4390         break;
4391      case GL_POLYGON_MODE:
4392         params[0] = ENUM_TO_INT(ctx->Polygon.FrontMode);
4393         params[1] = ENUM_TO_INT(ctx->Polygon.BackMode);
4394         break;
4395      case GL_POLYGON_OFFSET_BIAS_EXT:
4396         params[0] = IROUND(ctx->Polygon.OffsetUnits);
4397         break;
4398      case GL_POLYGON_OFFSET_FACTOR:
4399         params[0] = IROUND(ctx->Polygon.OffsetFactor );
4400         break;
4401      case GL_POLYGON_OFFSET_UNITS:
4402         params[0] = IROUND(ctx->Polygon.OffsetUnits );
4403         break;
4404      case GL_POLYGON_OFFSET_POINT:
4405         params[0] = BOOLEAN_TO_INT(ctx->Polygon.OffsetPoint);
4406         break;
4407      case GL_POLYGON_OFFSET_LINE:
4408         params[0] = BOOLEAN_TO_INT(ctx->Polygon.OffsetLine);
4409         break;
4410      case GL_POLYGON_OFFSET_FILL:
4411         params[0] = BOOLEAN_TO_INT(ctx->Polygon.OffsetFill);
4412         break;
4413      case GL_POLYGON_SMOOTH:
4414         params[0] = BOOLEAN_TO_INT(ctx->Polygon.SmoothFlag);
4415         break;
4416      case GL_POLYGON_SMOOTH_HINT:
4417         params[0] = ENUM_TO_INT(ctx->Hint.PolygonSmooth);
4418         break;
4419      case GL_POLYGON_STIPPLE:
4420         params[0] = BOOLEAN_TO_INT(ctx->Polygon.StippleFlag);
4421         break;
4422      case GL_PROJECTION_MATRIX:
4423         {
4424         const GLfloat *matrix = ctx->ProjectionMatrixStack.Top->m;
4425         params[0] = IROUND(matrix[0]);
4426         params[1] = IROUND(matrix[1]);
4427         params[2] = IROUND(matrix[2]);
4428         params[3] = IROUND(matrix[3]);
4429         params[4] = IROUND(matrix[4]);
4430         params[5] = IROUND(matrix[5]);
4431         params[6] = IROUND(matrix[6]);
4432         params[7] = IROUND(matrix[7]);
4433         params[8] = IROUND(matrix[8]);
4434         params[9] = IROUND(matrix[9]);
4435         params[10] = IROUND(matrix[10]);
4436         params[11] = IROUND(matrix[11]);
4437         params[12] = IROUND(matrix[12]);
4438         params[13] = IROUND(matrix[13]);
4439         params[14] = IROUND(matrix[14]);
4440         params[15] = IROUND(matrix[15]);
4441         }
4442         break;
4443      case GL_PROJECTION_STACK_DEPTH:
4444         params[0] = ctx->ProjectionMatrixStack.Depth + 1;
4445         break;
4446      case GL_READ_BUFFER:
4447         params[0] = ENUM_TO_INT(ctx->ReadBuffer->ColorReadBuffer);
4448         break;
4449      case GL_RED_BIAS:
4450         params[0] = IROUND(ctx->Pixel.RedBias);
4451         break;
4452      case GL_RED_BITS:
4453         params[0] = ctx->DrawBuffer->Visual.redBits;
4454         break;
4455      case GL_RED_SCALE:
4456         params[0] = IROUND(ctx->Pixel.RedScale);
4457         break;
4458      case GL_RENDER_MODE:
4459         params[0] = ENUM_TO_INT(ctx->RenderMode);
4460         break;
4461      case GL_RESCALE_NORMAL:
4462         params[0] = BOOLEAN_TO_INT(ctx->Transform.RescaleNormals);
4463         break;
4464      case GL_RGBA_MODE:
4465         params[0] = BOOLEAN_TO_INT(ctx->DrawBuffer->Visual.rgbMode);
4466         break;
4467      case GL_SCISSOR_BOX:
4468         params[0] = ctx->Scissor.X;
4469         params[1] = ctx->Scissor.Y;
4470         params[2] = ctx->Scissor.Width;
4471         params[3] = ctx->Scissor.Height;
4472         break;
4473      case GL_SCISSOR_TEST:
4474         params[0] = BOOLEAN_TO_INT(ctx->Scissor.Enabled);
4475         break;
4476      case GL_SELECTION_BUFFER_SIZE:
4477         params[0] = ctx->Select.BufferSize;
4478         break;
4479      case GL_SHADE_MODEL:
4480         params[0] = ENUM_TO_INT(ctx->Light.ShadeModel);
4481         break;
4482      case GL_SHARED_TEXTURE_PALETTE_EXT:
4483         params[0] = BOOLEAN_TO_INT(ctx->Texture.SharedPalette);
4484         break;
4485      case GL_STENCIL_BITS:
4486         params[0] = ctx->DrawBuffer->Visual.stencilBits;
4487         break;
4488      case GL_STENCIL_CLEAR_VALUE:
4489         params[0] = ctx->Stencil.Clear;
4490         break;
4491      case GL_STENCIL_FAIL:
4492         params[0] = ENUM_TO_INT(ctx->Stencil.FailFunc[ctx->Stencil.ActiveFace]);
4493         break;
4494      case GL_STENCIL_FUNC:
4495         params[0] = ENUM_TO_INT(ctx->Stencil.Function[ctx->Stencil.ActiveFace]);
4496         break;
4497      case GL_STENCIL_PASS_DEPTH_FAIL:
4498         params[0] = ENUM_TO_INT(ctx->Stencil.ZFailFunc[ctx->Stencil.ActiveFace]);
4499         break;
4500      case GL_STENCIL_PASS_DEPTH_PASS:
4501         params[0] = ENUM_TO_INT(ctx->Stencil.ZPassFunc[ctx->Stencil.ActiveFace]);
4502         break;
4503      case GL_STENCIL_REF:
4504         params[0] = ctx->Stencil.Ref[ctx->Stencil.ActiveFace];
4505         break;
4506      case GL_STENCIL_TEST:
4507         params[0] = BOOLEAN_TO_INT(ctx->Stencil.Enabled);
4508         break;
4509      case GL_STENCIL_VALUE_MASK:
4510         params[0] = ctx->Stencil.ValueMask[ctx->Stencil.ActiveFace];
4511         break;
4512      case GL_STENCIL_WRITEMASK:
4513         params[0] = ctx->Stencil.WriteMask[ctx->Stencil.ActiveFace];
4514         break;
4515      case GL_STEREO:
4516         params[0] = BOOLEAN_TO_INT(ctx->DrawBuffer->Visual.stereoMode);
4517         break;
4518      case GL_SUBPIXEL_BITS:
4519         params[0] = ctx->Const.SubPixelBits;
4520         break;
4521      case GL_TEXTURE_1D:
4522         params[0] = BOOLEAN_TO_INT(_mesa_IsEnabled(GL_TEXTURE_1D));
4523         break;
4524      case GL_TEXTURE_2D:
4525         params[0] = BOOLEAN_TO_INT(_mesa_IsEnabled(GL_TEXTURE_2D));
4526         break;
4527      case GL_TEXTURE_3D:
4528         params[0] = BOOLEAN_TO_INT(_mesa_IsEnabled(GL_TEXTURE_3D));
4529         break;
4530      case GL_TEXTURE_1D_ARRAY_EXT:
4531         CHECK_EXT1(MESA_texture_array, "GetIntegerv");
4532         params[0] = BOOLEAN_TO_INT(_mesa_IsEnabled(GL_TEXTURE_1D_ARRAY_EXT));
4533         break;
4534      case GL_TEXTURE_2D_ARRAY_EXT:
4535         CHECK_EXT1(MESA_texture_array, "GetIntegerv");
4536         params[0] = BOOLEAN_TO_INT(_mesa_IsEnabled(GL_TEXTURE_2D_ARRAY_EXT));
4537         break;
4538      case GL_TEXTURE_BINDING_1D:
4539         params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_INDEX]->Name;
4540         break;
4541      case GL_TEXTURE_BINDING_2D:
4542         params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_INDEX]->Name;
4543         break;
4544      case GL_TEXTURE_BINDING_3D:
4545         params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_3D_INDEX]->Name;
4546         break;
4547      case GL_TEXTURE_BINDING_1D_ARRAY_EXT:
4548         CHECK_EXT1(MESA_texture_array, "GetIntegerv");
4549         params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_ARRAY_INDEX]->Name;
4550         break;
4551      case GL_TEXTURE_BINDING_2D_ARRAY_EXT:
4552         CHECK_EXT1(MESA_texture_array, "GetIntegerv");
4553         params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_ARRAY_INDEX]->Name;
4554         break;
4555      case GL_TEXTURE_GEN_S:
4556         params[0] = BOOLEAN_TO_INT(((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & S_BIT) ? 1 : 0));
4557         break;
4558      case GL_TEXTURE_GEN_T:
4559         params[0] = BOOLEAN_TO_INT(((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & T_BIT) ? 1 : 0));
4560         break;
4561      case GL_TEXTURE_GEN_R:
4562         params[0] = BOOLEAN_TO_INT(((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & R_BIT) ? 1 : 0));
4563         break;
4564      case GL_TEXTURE_GEN_Q:
4565         params[0] = BOOLEAN_TO_INT(((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & Q_BIT) ? 1 : 0));
4566         break;
4567      case GL_TEXTURE_MATRIX:
4568         {
4569         const GLfloat *matrix = ctx->TextureMatrixStack[ctx->Texture.CurrentUnit].Top->m;
4570         params[0] = IROUND(matrix[0]);
4571         params[1] = IROUND(matrix[1]);
4572         params[2] = IROUND(matrix[2]);
4573         params[3] = IROUND(matrix[3]);
4574         params[4] = IROUND(matrix[4]);
4575         params[5] = IROUND(matrix[5]);
4576         params[6] = IROUND(matrix[6]);
4577         params[7] = IROUND(matrix[7]);
4578         params[8] = IROUND(matrix[8]);
4579         params[9] = IROUND(matrix[9]);
4580         params[10] = IROUND(matrix[10]);
4581         params[11] = IROUND(matrix[11]);
4582         params[12] = IROUND(matrix[12]);
4583         params[13] = IROUND(matrix[13]);
4584         params[14] = IROUND(matrix[14]);
4585         params[15] = IROUND(matrix[15]);
4586         }
4587         break;
4588      case GL_TEXTURE_STACK_DEPTH:
4589         params[0] = ctx->TextureMatrixStack[ctx->Texture.CurrentUnit].Depth + 1;
4590         break;
4591      case GL_UNPACK_ALIGNMENT:
4592         params[0] = ctx->Unpack.Alignment;
4593         break;
4594      case GL_UNPACK_LSB_FIRST:
4595         params[0] = BOOLEAN_TO_INT(ctx->Unpack.LsbFirst);
4596         break;
4597      case GL_UNPACK_ROW_LENGTH:
4598         params[0] = ctx->Unpack.RowLength;
4599         break;
4600      case GL_UNPACK_SKIP_PIXELS:
4601         params[0] = ctx->Unpack.SkipPixels;
4602         break;
4603      case GL_UNPACK_SKIP_ROWS:
4604         params[0] = ctx->Unpack.SkipRows;
4605         break;
4606      case GL_UNPACK_SWAP_BYTES:
4607         params[0] = BOOLEAN_TO_INT(ctx->Unpack.SwapBytes);
4608         break;
4609      case GL_UNPACK_SKIP_IMAGES_EXT:
4610         params[0] = ctx->Unpack.SkipImages;
4611         break;
4612      case GL_UNPACK_IMAGE_HEIGHT_EXT:
4613         params[0] = ctx->Unpack.ImageHeight;
4614         break;
4615      case GL_UNPACK_CLIENT_STORAGE_APPLE:
4616         params[0] = BOOLEAN_TO_INT(ctx->Unpack.ClientStorage);
4617         break;
4618      case GL_VIEWPORT:
4619         params[0] = ctx->Viewport.X;
4620         params[1] = ctx->Viewport.Y;
4621         params[2] = ctx->Viewport.Width;
4622         params[3] = ctx->Viewport.Height;
4623         break;
4624      case GL_ZOOM_X:
4625         params[0] = IROUND(ctx->Pixel.ZoomX);
4626         break;
4627      case GL_ZOOM_Y:
4628         params[0] = IROUND(ctx->Pixel.ZoomY);
4629         break;
4630      case GL_VERTEX_ARRAY:
4631         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->Vertex.Enabled);
4632         break;
4633      case GL_VERTEX_ARRAY_SIZE:
4634         params[0] = ctx->Array.ArrayObj->Vertex.Size;
4635         break;
4636      case GL_VERTEX_ARRAY_TYPE:
4637         params[0] = ENUM_TO_INT(ctx->Array.ArrayObj->Vertex.Type);
4638         break;
4639      case GL_VERTEX_ARRAY_STRIDE:
4640         params[0] = ctx->Array.ArrayObj->Vertex.Stride;
4641         break;
4642      case GL_VERTEX_ARRAY_COUNT_EXT:
4643         params[0] = 0;
4644         break;
4645      case GL_NORMAL_ARRAY:
4646         params[0] = ENUM_TO_INT(ctx->Array.ArrayObj->Normal.Enabled);
4647         break;
4648      case GL_NORMAL_ARRAY_TYPE:
4649         params[0] = ENUM_TO_INT(ctx->Array.ArrayObj->Normal.Type);
4650         break;
4651      case GL_NORMAL_ARRAY_STRIDE:
4652         params[0] = ctx->Array.ArrayObj->Normal.Stride;
4653         break;
4654      case GL_NORMAL_ARRAY_COUNT_EXT:
4655         params[0] = 0;
4656         break;
4657      case GL_COLOR_ARRAY:
4658         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->Color.Enabled);
4659         break;
4660      case GL_COLOR_ARRAY_SIZE:
4661         params[0] = ctx->Array.ArrayObj->Color.Size;
4662         break;
4663      case GL_COLOR_ARRAY_TYPE:
4664         params[0] = ENUM_TO_INT(ctx->Array.ArrayObj->Color.Type);
4665         break;
4666      case GL_COLOR_ARRAY_STRIDE:
4667         params[0] = ctx->Array.ArrayObj->Color.Stride;
4668         break;
4669      case GL_COLOR_ARRAY_COUNT_EXT:
4670         params[0] = 0;
4671         break;
4672      case GL_INDEX_ARRAY:
4673         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->Index.Enabled);
4674         break;
4675      case GL_INDEX_ARRAY_TYPE:
4676         params[0] = ENUM_TO_INT(ctx->Array.ArrayObj->Index.Type);
4677         break;
4678      case GL_INDEX_ARRAY_STRIDE:
4679         params[0] = ctx->Array.ArrayObj->Index.Stride;
4680         break;
4681      case GL_INDEX_ARRAY_COUNT_EXT:
4682         params[0] = 0;
4683         break;
4684      case GL_TEXTURE_COORD_ARRAY:
4685         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Enabled);
4686         break;
4687      case GL_TEXTURE_COORD_ARRAY_SIZE:
4688         params[0] = ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Size;
4689         break;
4690      case GL_TEXTURE_COORD_ARRAY_TYPE:
4691         params[0] = ENUM_TO_INT(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Type);
4692         break;
4693      case GL_TEXTURE_COORD_ARRAY_STRIDE:
4694         params[0] = ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Stride;
4695         break;
4696      case GL_TEXTURE_COORD_ARRAY_COUNT_EXT:
4697         params[0] = 0;
4698         break;
4699      case GL_EDGE_FLAG_ARRAY:
4700         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->EdgeFlag.Enabled);
4701         break;
4702      case GL_EDGE_FLAG_ARRAY_STRIDE:
4703         params[0] = ctx->Array.ArrayObj->EdgeFlag.Stride;
4704         break;
4705      case GL_EDGE_FLAG_ARRAY_COUNT_EXT:
4706         params[0] = 0;
4707         break;
4708      case GL_MAX_TEXTURE_UNITS_ARB:
4709         CHECK_EXT1(ARB_multitexture, "GetIntegerv");
4710         params[0] = ctx->Const.MaxTextureUnits;
4711         break;
4712      case GL_ACTIVE_TEXTURE_ARB:
4713         CHECK_EXT1(ARB_multitexture, "GetIntegerv");
4714         params[0] = GL_TEXTURE0_ARB + ctx->Texture.CurrentUnit;
4715         break;
4716      case GL_CLIENT_ACTIVE_TEXTURE_ARB:
4717         CHECK_EXT1(ARB_multitexture, "GetIntegerv");
4718         params[0] = GL_TEXTURE0_ARB + ctx->Array.ActiveTexture;
4719         break;
4720      case GL_TEXTURE_CUBE_MAP_ARB:
4721         CHECK_EXT1(ARB_texture_cube_map, "GetIntegerv");
4722         params[0] = BOOLEAN_TO_INT(_mesa_IsEnabled(GL_TEXTURE_CUBE_MAP_ARB));
4723         break;
4724      case GL_TEXTURE_BINDING_CUBE_MAP_ARB:
4725         CHECK_EXT1(ARB_texture_cube_map, "GetIntegerv");
4726         params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_CUBE_INDEX]->Name;
4727         break;
4728      case GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB:
4729         CHECK_EXT1(ARB_texture_cube_map, "GetIntegerv");
4730         params[0] = (1 << (ctx->Const.MaxCubeTextureLevels - 1));
4731         break;
4732      case GL_TEXTURE_COMPRESSION_HINT_ARB:
4733         params[0] = ctx->Hint.TextureCompression;
4734         break;
4735      case GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB:
4736         params[0] = _mesa_get_compressed_formats(ctx, NULL, GL_FALSE);
4737         break;
4738      case GL_COMPRESSED_TEXTURE_FORMATS_ARB:
4739         {
4740         GLint formats[100];
4741         GLuint i, n = _mesa_get_compressed_formats(ctx, formats, GL_FALSE);
4742         ASSERT(n <= 100);
4743         for (i = 0; i < n; i++)
4744            params[i] = ENUM_TO_INT(formats[i]);
4745         }
4746         break;
4747      case GL_ARRAY_ELEMENT_LOCK_FIRST_EXT:
4748         CHECK_EXT1(EXT_compiled_vertex_array, "GetIntegerv");
4749         params[0] = ctx->Array.LockFirst;
4750         break;
4751      case GL_ARRAY_ELEMENT_LOCK_COUNT_EXT:
4752         CHECK_EXT1(EXT_compiled_vertex_array, "GetIntegerv");
4753         params[0] = ctx->Array.LockCount;
4754         break;
4755      case GL_TRANSPOSE_COLOR_MATRIX_ARB:
4756         {
4757         const GLfloat *matrix = ctx->ColorMatrixStack.Top->m;
4758         params[0] = IROUND(matrix[0]);
4759         params[1] = IROUND(matrix[4]);
4760         params[2] = IROUND(matrix[8]);
4761         params[3] = IROUND(matrix[12]);
4762         params[4] = IROUND(matrix[1]);
4763         params[5] = IROUND(matrix[5]);
4764         params[6] = IROUND(matrix[9]);
4765         params[7] = IROUND(matrix[13]);
4766         params[8] = IROUND(matrix[2]);
4767         params[9] = IROUND(matrix[6]);
4768         params[10] = IROUND(matrix[10]);
4769         params[11] = IROUND(matrix[14]);
4770         params[12] = IROUND(matrix[3]);
4771         params[13] = IROUND(matrix[7]);
4772         params[14] = IROUND(matrix[11]);
4773         params[15] = IROUND(matrix[15]);
4774         }
4775         break;
4776      case GL_TRANSPOSE_MODELVIEW_MATRIX_ARB:
4777         {
4778         const GLfloat *matrix = ctx->ModelviewMatrixStack.Top->m;
4779         params[0] = IROUND(matrix[0]);
4780         params[1] = IROUND(matrix[4]);
4781         params[2] = IROUND(matrix[8]);
4782         params[3] = IROUND(matrix[12]);
4783         params[4] = IROUND(matrix[1]);
4784         params[5] = IROUND(matrix[5]);
4785         params[6] = IROUND(matrix[9]);
4786         params[7] = IROUND(matrix[13]);
4787         params[8] = IROUND(matrix[2]);
4788         params[9] = IROUND(matrix[6]);
4789         params[10] = IROUND(matrix[10]);
4790         params[11] = IROUND(matrix[14]);
4791         params[12] = IROUND(matrix[3]);
4792         params[13] = IROUND(matrix[7]);
4793         params[14] = IROUND(matrix[11]);
4794         params[15] = IROUND(matrix[15]);
4795         }
4796         break;
4797      case GL_TRANSPOSE_PROJECTION_MATRIX_ARB:
4798         {
4799         const GLfloat *matrix = ctx->ProjectionMatrixStack.Top->m;
4800         params[0] = IROUND(matrix[0]);
4801         params[1] = IROUND(matrix[4]);
4802         params[2] = IROUND(matrix[8]);
4803         params[3] = IROUND(matrix[12]);
4804         params[4] = IROUND(matrix[1]);
4805         params[5] = IROUND(matrix[5]);
4806         params[6] = IROUND(matrix[9]);
4807         params[7] = IROUND(matrix[13]);
4808         params[8] = IROUND(matrix[2]);
4809         params[9] = IROUND(matrix[6]);
4810         params[10] = IROUND(matrix[10]);
4811         params[11] = IROUND(matrix[14]);
4812         params[12] = IROUND(matrix[3]);
4813         params[13] = IROUND(matrix[7]);
4814         params[14] = IROUND(matrix[11]);
4815         params[15] = IROUND(matrix[15]);
4816         }
4817         break;
4818      case GL_TRANSPOSE_TEXTURE_MATRIX_ARB:
4819         {
4820         const GLfloat *matrix = ctx->TextureMatrixStack[ctx->Texture.CurrentUnit].Top->m;
4821         params[0] = IROUND(matrix[0]);
4822         params[1] = IROUND(matrix[4]);
4823         params[2] = IROUND(matrix[8]);
4824         params[3] = IROUND(matrix[12]);
4825         params[4] = IROUND(matrix[1]);
4826         params[5] = IROUND(matrix[5]);
4827         params[6] = IROUND(matrix[9]);
4828         params[7] = IROUND(matrix[13]);
4829         params[8] = IROUND(matrix[2]);
4830         params[9] = IROUND(matrix[6]);
4831         params[10] = IROUND(matrix[10]);
4832         params[11] = IROUND(matrix[14]);
4833         params[12] = IROUND(matrix[3]);
4834         params[13] = IROUND(matrix[7]);
4835         params[14] = IROUND(matrix[11]);
4836         params[15] = IROUND(matrix[15]);
4837         }
4838         break;
4839      case GL_COLOR_MATRIX_SGI:
4840         {
4841         const GLfloat *matrix = ctx->ColorMatrixStack.Top->m;
4842         params[0] = IROUND(matrix[0]);
4843         params[1] = IROUND(matrix[1]);
4844         params[2] = IROUND(matrix[2]);
4845         params[3] = IROUND(matrix[3]);
4846         params[4] = IROUND(matrix[4]);
4847         params[5] = IROUND(matrix[5]);
4848         params[6] = IROUND(matrix[6]);
4849         params[7] = IROUND(matrix[7]);
4850         params[8] = IROUND(matrix[8]);
4851         params[9] = IROUND(matrix[9]);
4852         params[10] = IROUND(matrix[10]);
4853         params[11] = IROUND(matrix[11]);
4854         params[12] = IROUND(matrix[12]);
4855         params[13] = IROUND(matrix[13]);
4856         params[14] = IROUND(matrix[14]);
4857         params[15] = IROUND(matrix[15]);
4858         }
4859         break;
4860      case GL_COLOR_MATRIX_STACK_DEPTH_SGI:
4861         params[0] = ctx->ColorMatrixStack.Depth + 1;
4862         break;
4863      case GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI:
4864         params[0] = MAX_COLOR_STACK_DEPTH;
4865         break;
4866      case GL_POST_COLOR_MATRIX_RED_SCALE_SGI:
4867         params[0] = IROUND(ctx->Pixel.PostColorMatrixScale[0]);
4868         break;
4869      case GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI:
4870         params[0] = IROUND(ctx->Pixel.PostColorMatrixScale[1]);
4871         break;
4872      case GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI:
4873         params[0] = IROUND(ctx->Pixel.PostColorMatrixScale[2]);
4874         break;
4875      case GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI:
4876         params[0] = IROUND(ctx->Pixel.PostColorMatrixScale[3]);
4877         break;
4878      case GL_POST_COLOR_MATRIX_RED_BIAS_SGI:
4879         params[0] = IROUND(ctx->Pixel.PostColorMatrixBias[0]);
4880         break;
4881      case GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI:
4882         params[0] = IROUND(ctx->Pixel.PostColorMatrixBias[1]);
4883         break;
4884      case GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI:
4885         params[0] = IROUND(ctx->Pixel.PostColorMatrixBias[2]);
4886         break;
4887      case GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI:
4888         params[0] = IROUND(ctx->Pixel.PostColorMatrixBias[3]);
4889         break;
4890      case GL_CONVOLUTION_1D_EXT:
4891         CHECK_EXT1(EXT_convolution, "GetIntegerv");
4892         params[0] = BOOLEAN_TO_INT(ctx->Pixel.Convolution1DEnabled);
4893         break;
4894      case GL_CONVOLUTION_2D_EXT:
4895         CHECK_EXT1(EXT_convolution, "GetIntegerv");
4896         params[0] = BOOLEAN_TO_INT(ctx->Pixel.Convolution2DEnabled);
4897         break;
4898      case GL_SEPARABLE_2D_EXT:
4899         CHECK_EXT1(EXT_convolution, "GetIntegerv");
4900         params[0] = BOOLEAN_TO_INT(ctx->Pixel.Separable2DEnabled);
4901         break;
4902      case GL_POST_CONVOLUTION_RED_SCALE_EXT:
4903         CHECK_EXT1(EXT_convolution, "GetIntegerv");
4904         params[0] = IROUND(ctx->Pixel.PostConvolutionScale[0]);
4905         break;
4906      case GL_POST_CONVOLUTION_GREEN_SCALE_EXT:
4907         CHECK_EXT1(EXT_convolution, "GetIntegerv");
4908         params[0] = IROUND(ctx->Pixel.PostConvolutionScale[1]);
4909         break;
4910      case GL_POST_CONVOLUTION_BLUE_SCALE_EXT:
4911         CHECK_EXT1(EXT_convolution, "GetIntegerv");
4912         params[0] = IROUND(ctx->Pixel.PostConvolutionScale[2]);
4913         break;
4914      case GL_POST_CONVOLUTION_ALPHA_SCALE_EXT:
4915         CHECK_EXT1(EXT_convolution, "GetIntegerv");
4916         params[0] = IROUND(ctx->Pixel.PostConvolutionScale[3]);
4917         break;
4918      case GL_POST_CONVOLUTION_RED_BIAS_EXT:
4919         CHECK_EXT1(EXT_convolution, "GetIntegerv");
4920         params[0] = IROUND(ctx->Pixel.PostConvolutionBias[0]);
4921         break;
4922      case GL_POST_CONVOLUTION_GREEN_BIAS_EXT:
4923         CHECK_EXT1(EXT_convolution, "GetIntegerv");
4924         params[0] = IROUND(ctx->Pixel.PostConvolutionBias[1]);
4925         break;
4926      case GL_POST_CONVOLUTION_BLUE_BIAS_EXT:
4927         CHECK_EXT1(EXT_convolution, "GetIntegerv");
4928         params[0] = IROUND(ctx->Pixel.PostConvolutionBias[2]);
4929         break;
4930      case GL_POST_CONVOLUTION_ALPHA_BIAS_EXT:
4931         CHECK_EXT1(EXT_convolution, "GetIntegerv");
4932         params[0] = IROUND(ctx->Pixel.PostConvolutionBias[3]);
4933         break;
4934      case GL_HISTOGRAM:
4935         CHECK_EXT1(EXT_histogram, "GetIntegerv");
4936         params[0] = BOOLEAN_TO_INT(ctx->Pixel.HistogramEnabled);
4937         break;
4938      case GL_MINMAX:
4939         CHECK_EXT1(EXT_histogram, "GetIntegerv");
4940         params[0] = BOOLEAN_TO_INT(ctx->Pixel.MinMaxEnabled);
4941         break;
4942      case GL_COLOR_TABLE_SGI:
4943         CHECK_EXT1(SGI_color_table, "GetIntegerv");
4944         params[0] = BOOLEAN_TO_INT(ctx->Pixel.ColorTableEnabled[COLORTABLE_PRECONVOLUTION]);
4945         break;
4946      case GL_POST_CONVOLUTION_COLOR_TABLE_SGI:
4947         CHECK_EXT1(SGI_color_table, "GetIntegerv");
4948         params[0] = BOOLEAN_TO_INT(ctx->Pixel.ColorTableEnabled[COLORTABLE_POSTCONVOLUTION]);
4949         break;
4950      case GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI:
4951         CHECK_EXT1(SGI_color_table, "GetIntegerv");
4952         params[0] = BOOLEAN_TO_INT(ctx->Pixel.ColorTableEnabled[COLORTABLE_POSTCOLORMATRIX]);
4953         break;
4954      case GL_TEXTURE_COLOR_TABLE_SGI:
4955         CHECK_EXT1(SGI_texture_color_table, "GetIntegerv");
4956         params[0] = BOOLEAN_TO_INT(ctx->Texture.Unit[ctx->Texture.CurrentUnit].ColorTableEnabled);
4957         break;
4958      case GL_COLOR_SUM_EXT:
4959         CHECK_EXT2(EXT_secondary_color, ARB_vertex_program, "GetIntegerv");
4960         params[0] = BOOLEAN_TO_INT(ctx->Fog.ColorSumEnabled);
4961         break;
4962      case GL_CURRENT_SECONDARY_COLOR_EXT:
4963         CHECK_EXT1(EXT_secondary_color, "GetIntegerv");
4964         {
4965         FLUSH_CURRENT(ctx, 0);
4966         params[0] = FLOAT_TO_INT(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][0]);
4967         params[1] = FLOAT_TO_INT(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][1]);
4968         params[2] = FLOAT_TO_INT(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][2]);
4969         params[3] = FLOAT_TO_INT(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][3]);
4970         }
4971         break;
4972      case GL_SECONDARY_COLOR_ARRAY_EXT:
4973         CHECK_EXT1(EXT_secondary_color, "GetIntegerv");
4974         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->SecondaryColor.Enabled);
4975         break;
4976      case GL_SECONDARY_COLOR_ARRAY_TYPE_EXT:
4977         CHECK_EXT1(EXT_secondary_color, "GetIntegerv");
4978         params[0] = ENUM_TO_INT(ctx->Array.ArrayObj->SecondaryColor.Type);
4979         break;
4980      case GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT:
4981         CHECK_EXT1(EXT_secondary_color, "GetIntegerv");
4982         params[0] = ctx->Array.ArrayObj->SecondaryColor.Stride;
4983         break;
4984      case GL_SECONDARY_COLOR_ARRAY_SIZE_EXT:
4985         CHECK_EXT1(EXT_secondary_color, "GetIntegerv");
4986         params[0] = ctx->Array.ArrayObj->SecondaryColor.Size;
4987         break;
4988      case GL_CURRENT_FOG_COORDINATE_EXT:
4989         CHECK_EXT1(EXT_fog_coord, "GetIntegerv");
4990         {
4991         FLUSH_CURRENT(ctx, 0);
4992         params[0] = IROUND(ctx->Current.Attrib[VERT_ATTRIB_FOG][0]);
4993         }
4994         break;
4995      case GL_FOG_COORDINATE_ARRAY_EXT:
4996         CHECK_EXT1(EXT_fog_coord, "GetIntegerv");
4997         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->FogCoord.Enabled);
4998         break;
4999      case GL_FOG_COORDINATE_ARRAY_TYPE_EXT:
5000         CHECK_EXT1(EXT_fog_coord, "GetIntegerv");
5001         params[0] = ENUM_TO_INT(ctx->Array.ArrayObj->FogCoord.Type);
5002         break;
5003      case GL_FOG_COORDINATE_ARRAY_STRIDE_EXT:
5004         CHECK_EXT1(EXT_fog_coord, "GetIntegerv");
5005         params[0] = ctx->Array.ArrayObj->FogCoord.Stride;
5006         break;
5007      case GL_FOG_COORDINATE_SOURCE_EXT:
5008         CHECK_EXT1(EXT_fog_coord, "GetIntegerv");
5009         params[0] = ENUM_TO_INT(ctx->Fog.FogCoordinateSource);
5010         break;
5011      case GL_MAX_TEXTURE_LOD_BIAS_EXT:
5012         CHECK_EXT1(EXT_texture_lod_bias, "GetIntegerv");
5013         params[0] = IROUND(ctx->Const.MaxTextureLodBias);
5014         break;
5015      case GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT:
5016         CHECK_EXT1(EXT_texture_filter_anisotropic, "GetIntegerv");
5017         params[0] = IROUND(ctx->Const.MaxTextureMaxAnisotropy);
5018         break;
5019      case GL_MULTISAMPLE_ARB:
5020         params[0] = BOOLEAN_TO_INT(ctx->Multisample.Enabled);
5021         break;
5022      case GL_SAMPLE_ALPHA_TO_COVERAGE_ARB:
5023         params[0] = BOOLEAN_TO_INT(ctx->Multisample.SampleAlphaToCoverage);
5024         break;
5025      case GL_SAMPLE_ALPHA_TO_ONE_ARB:
5026         params[0] = BOOLEAN_TO_INT(ctx->Multisample.SampleAlphaToOne);
5027         break;
5028      case GL_SAMPLE_COVERAGE_ARB:
5029         params[0] = BOOLEAN_TO_INT(ctx->Multisample.SampleCoverage);
5030         break;
5031      case GL_SAMPLE_COVERAGE_VALUE_ARB:
5032         params[0] = IROUND(ctx->Multisample.SampleCoverageValue);
5033         break;
5034      case GL_SAMPLE_COVERAGE_INVERT_ARB:
5035         params[0] = BOOLEAN_TO_INT(ctx->Multisample.SampleCoverageInvert);
5036         break;
5037      case GL_SAMPLE_BUFFERS_ARB:
5038         params[0] = ctx->DrawBuffer->Visual.sampleBuffers;
5039         break;
5040      case GL_SAMPLES_ARB:
5041         params[0] = ctx->DrawBuffer->Visual.samples;
5042         break;
5043      case GL_RASTER_POSITION_UNCLIPPED_IBM:
5044         CHECK_EXT1(IBM_rasterpos_clip, "GetIntegerv");
5045         params[0] = BOOLEAN_TO_INT(ctx->Transform.RasterPositionUnclipped);
5046         break;
5047      case GL_POINT_SPRITE_NV:
5048         CHECK_EXT2(NV_point_sprite, ARB_point_sprite, "GetIntegerv");
5049         params[0] = BOOLEAN_TO_INT(ctx->Point.PointSprite);
5050         break;
5051      case GL_POINT_SPRITE_R_MODE_NV:
5052         CHECK_EXT1(NV_point_sprite, "GetIntegerv");
5053         params[0] = ENUM_TO_INT(ctx->Point.SpriteRMode);
5054         break;
5055      case GL_POINT_SPRITE_COORD_ORIGIN:
5056         CHECK_EXT2(NV_point_sprite, ARB_point_sprite, "GetIntegerv");
5057         params[0] = ENUM_TO_INT(ctx->Point.SpriteOrigin);
5058         break;
5059      case GL_GENERATE_MIPMAP_HINT_SGIS:
5060         CHECK_EXT1(SGIS_generate_mipmap, "GetIntegerv");
5061         params[0] = ENUM_TO_INT(ctx->Hint.GenerateMipmap);
5062         break;
5063      case GL_VERTEX_PROGRAM_BINDING_NV:
5064         CHECK_EXT1(NV_vertex_program, "GetIntegerv");
5065         params[0] = (ctx->VertexProgram.Current ? ctx->VertexProgram.Current->Base.Id : 0);
5066         break;
5067      case GL_VERTEX_ATTRIB_ARRAY0_NV:
5068         CHECK_EXT1(NV_vertex_program, "GetIntegerv");
5069         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[0].Enabled);
5070         break;
5071      case GL_VERTEX_ATTRIB_ARRAY1_NV:
5072         CHECK_EXT1(NV_vertex_program, "GetIntegerv");
5073         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[1].Enabled);
5074         break;
5075      case GL_VERTEX_ATTRIB_ARRAY2_NV:
5076         CHECK_EXT1(NV_vertex_program, "GetIntegerv");
5077         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[2].Enabled);
5078         break;
5079      case GL_VERTEX_ATTRIB_ARRAY3_NV:
5080         CHECK_EXT1(NV_vertex_program, "GetIntegerv");
5081         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[3].Enabled);
5082         break;
5083      case GL_VERTEX_ATTRIB_ARRAY4_NV:
5084         CHECK_EXT1(NV_vertex_program, "GetIntegerv");
5085         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[4].Enabled);
5086         break;
5087      case GL_VERTEX_ATTRIB_ARRAY5_NV:
5088         CHECK_EXT1(NV_vertex_program, "GetIntegerv");
5089         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[5].Enabled);
5090         break;
5091      case GL_VERTEX_ATTRIB_ARRAY6_NV:
5092         CHECK_EXT1(NV_vertex_program, "GetIntegerv");
5093         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[6].Enabled);
5094         break;
5095      case GL_VERTEX_ATTRIB_ARRAY7_NV:
5096         CHECK_EXT1(NV_vertex_program, "GetIntegerv");
5097         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[7].Enabled);
5098         break;
5099      case GL_VERTEX_ATTRIB_ARRAY8_NV:
5100         CHECK_EXT1(NV_vertex_program, "GetIntegerv");
5101         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[8].Enabled);
5102         break;
5103      case GL_VERTEX_ATTRIB_ARRAY9_NV:
5104         CHECK_EXT1(NV_vertex_program, "GetIntegerv");
5105         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[9].Enabled);
5106         break;
5107      case GL_VERTEX_ATTRIB_ARRAY10_NV:
5108         CHECK_EXT1(NV_vertex_program, "GetIntegerv");
5109         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[10].Enabled);
5110         break;
5111      case GL_VERTEX_ATTRIB_ARRAY11_NV:
5112         CHECK_EXT1(NV_vertex_program, "GetIntegerv");
5113         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[11].Enabled);
5114         break;
5115      case GL_VERTEX_ATTRIB_ARRAY12_NV:
5116         CHECK_EXT1(NV_vertex_program, "GetIntegerv");
5117         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[12].Enabled);
5118         break;
5119      case GL_VERTEX_ATTRIB_ARRAY13_NV:
5120         CHECK_EXT1(NV_vertex_program, "GetIntegerv");
5121         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[13].Enabled);
5122         break;
5123      case GL_VERTEX_ATTRIB_ARRAY14_NV:
5124         CHECK_EXT1(NV_vertex_program, "GetIntegerv");
5125         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[14].Enabled);
5126         break;
5127      case GL_VERTEX_ATTRIB_ARRAY15_NV:
5128         CHECK_EXT1(NV_vertex_program, "GetIntegerv");
5129         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[15].Enabled);
5130         break;
5131      case GL_MAP1_VERTEX_ATTRIB0_4_NV:
5132         CHECK_EXT1(NV_vertex_program, "GetIntegerv");
5133         params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[0]);
5134         break;
5135      case GL_MAP1_VERTEX_ATTRIB1_4_NV:
5136         CHECK_EXT1(NV_vertex_program, "GetIntegerv");
5137         params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[1]);
5138         break;
5139      case GL_MAP1_VERTEX_ATTRIB2_4_NV:
5140         CHECK_EXT1(NV_vertex_program, "GetIntegerv");
5141         params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[2]);
5142         break;
5143      case GL_MAP1_VERTEX_ATTRIB3_4_NV:
5144         CHECK_EXT1(NV_vertex_program, "GetIntegerv");
5145         params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[3]);
5146         break;
5147      case GL_MAP1_VERTEX_ATTRIB4_4_NV:
5148         CHECK_EXT1(NV_vertex_program, "GetIntegerv");
5149         params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[4]);
5150         break;
5151      case GL_MAP1_VERTEX_ATTRIB5_4_NV:
5152         CHECK_EXT1(NV_vertex_program, "GetIntegerv");
5153         params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[5]);
5154         break;
5155      case GL_MAP1_VERTEX_ATTRIB6_4_NV:
5156         CHECK_EXT1(NV_vertex_program, "GetIntegerv");
5157         params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[6]);
5158         break;
5159      case GL_MAP1_VERTEX_ATTRIB7_4_NV:
5160         CHECK_EXT1(NV_vertex_program, "GetIntegerv");
5161         params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[7]);
5162         break;
5163      case GL_MAP1_VERTEX_ATTRIB8_4_NV:
5164         CHECK_EXT1(NV_vertex_program, "GetIntegerv");
5165         params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[8]);
5166         break;
5167      case GL_MAP1_VERTEX_ATTRIB9_4_NV:
5168         CHECK_EXT1(NV_vertex_program, "GetIntegerv");
5169         params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[9]);
5170         break;
5171      case GL_MAP1_VERTEX_ATTRIB10_4_NV:
5172         CHECK_EXT1(NV_vertex_program, "GetIntegerv");
5173         params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[10]);
5174         break;
5175      case GL_MAP1_VERTEX_ATTRIB11_4_NV:
5176         CHECK_EXT1(NV_vertex_program, "GetIntegerv");
5177         params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[11]);
5178         break;
5179      case GL_MAP1_VERTEX_ATTRIB12_4_NV:
5180         CHECK_EXT1(NV_vertex_program, "GetIntegerv");
5181         params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[12]);
5182         break;
5183      case GL_MAP1_VERTEX_ATTRIB13_4_NV:
5184         CHECK_EXT1(NV_vertex_program, "GetIntegerv");
5185         params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[13]);
5186         break;
5187      case GL_MAP1_VERTEX_ATTRIB14_4_NV:
5188         CHECK_EXT1(NV_vertex_program, "GetIntegerv");
5189         params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[14]);
5190         break;
5191      case GL_MAP1_VERTEX_ATTRIB15_4_NV:
5192         CHECK_EXT1(NV_vertex_program, "GetIntegerv");
5193         params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[15]);
5194         break;
5195      case GL_FRAGMENT_PROGRAM_NV:
5196         CHECK_EXT1(NV_fragment_program, "GetIntegerv");
5197         params[0] = BOOLEAN_TO_INT(ctx->FragmentProgram.Enabled);
5198         break;
5199      case GL_FRAGMENT_PROGRAM_BINDING_NV:
5200         CHECK_EXT1(NV_fragment_program, "GetIntegerv");
5201         params[0] = ctx->FragmentProgram.Current ? ctx->FragmentProgram.Current->Base.Id : 0;
5202         break;
5203      case GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV:
5204         CHECK_EXT1(NV_fragment_program, "GetIntegerv");
5205         params[0] = MAX_NV_FRAGMENT_PROGRAM_PARAMS;
5206         break;
5207      case GL_TEXTURE_RECTANGLE_NV:
5208         CHECK_EXT1(NV_texture_rectangle, "GetIntegerv");
5209         params[0] = BOOLEAN_TO_INT(_mesa_IsEnabled(GL_TEXTURE_RECTANGLE_NV));
5210         break;
5211      case GL_TEXTURE_BINDING_RECTANGLE_NV:
5212         CHECK_EXT1(NV_texture_rectangle, "GetIntegerv");
5213         params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_RECT_INDEX]->Name;
5214         break;
5215      case GL_MAX_RECTANGLE_TEXTURE_SIZE_NV:
5216         CHECK_EXT1(NV_texture_rectangle, "GetIntegerv");
5217         params[0] = ctx->Const.MaxTextureRectSize;
5218         break;
5219      case GL_STENCIL_TEST_TWO_SIDE_EXT:
5220         CHECK_EXT1(EXT_stencil_two_side, "GetIntegerv");
5221         params[0] = BOOLEAN_TO_INT(ctx->Stencil.TestTwoSide);
5222         break;
5223      case GL_ACTIVE_STENCIL_FACE_EXT:
5224         CHECK_EXT1(EXT_stencil_two_side, "GetIntegerv");
5225         params[0] = ENUM_TO_INT(ctx->Stencil.ActiveFace ? GL_BACK : GL_FRONT);
5226         break;
5227      case GL_MAX_SHININESS_NV:
5228         CHECK_EXT1(NV_light_max_exponent, "GetIntegerv");
5229         params[0] = IROUND(ctx->Const.MaxShininess);
5230         break;
5231      case GL_MAX_SPOT_EXPONENT_NV:
5232         CHECK_EXT1(NV_light_max_exponent, "GetIntegerv");
5233         params[0] = IROUND(ctx->Const.MaxSpotExponent);
5234         break;
5235      case GL_ARRAY_BUFFER_BINDING_ARB:
5236         params[0] = ctx->Array.ArrayBufferObj->Name;
5237         break;
5238      case GL_VERTEX_ARRAY_BUFFER_BINDING_ARB:
5239         params[0] = ctx->Array.ArrayObj->Vertex.BufferObj->Name;
5240         break;
5241      case GL_NORMAL_ARRAY_BUFFER_BINDING_ARB:
5242         params[0] = ctx->Array.ArrayObj->Normal.BufferObj->Name;
5243         break;
5244      case GL_COLOR_ARRAY_BUFFER_BINDING_ARB:
5245         params[0] = ctx->Array.ArrayObj->Color.BufferObj->Name;
5246         break;
5247      case GL_INDEX_ARRAY_BUFFER_BINDING_ARB:
5248         params[0] = ctx->Array.ArrayObj->Index.BufferObj->Name;
5249         break;
5250      case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB:
5251         params[0] = ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].BufferObj->Name;
5252         break;
5253      case GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB:
5254         params[0] = ctx->Array.ArrayObj->EdgeFlag.BufferObj->Name;
5255         break;
5256      case GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB:
5257         params[0] = ctx->Array.ArrayObj->SecondaryColor.BufferObj->Name;
5258         break;
5259      case GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB:
5260         params[0] = ctx->Array.ArrayObj->FogCoord.BufferObj->Name;
5261         break;
5262      case GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB:
5263         params[0] = ctx->Array.ElementArrayBufferObj->Name;
5264         break;
5265      case GL_PIXEL_PACK_BUFFER_BINDING_EXT:
5266         CHECK_EXT1(EXT_pixel_buffer_object, "GetIntegerv");
5267         params[0] = ctx->Pack.BufferObj->Name;
5268         break;
5269      case GL_PIXEL_UNPACK_BUFFER_BINDING_EXT:
5270         CHECK_EXT1(EXT_pixel_buffer_object, "GetIntegerv");
5271         params[0] = ctx->Unpack.BufferObj->Name;
5272         break;
5273      case GL_VERTEX_PROGRAM_ARB:
5274         CHECK_EXT2(ARB_vertex_program, NV_vertex_program, "GetIntegerv");
5275         params[0] = BOOLEAN_TO_INT(ctx->VertexProgram.Enabled);
5276         break;
5277      case GL_VERTEX_PROGRAM_POINT_SIZE_ARB:
5278         CHECK_EXT2(ARB_vertex_program, NV_vertex_program, "GetIntegerv");
5279         params[0] = BOOLEAN_TO_INT(ctx->VertexProgram.PointSizeEnabled);
5280         break;
5281      case GL_VERTEX_PROGRAM_TWO_SIDE_ARB:
5282         CHECK_EXT2(ARB_vertex_program, NV_vertex_program, "GetIntegerv");
5283         params[0] = BOOLEAN_TO_INT(ctx->VertexProgram.TwoSideEnabled);
5284         break;
5285      case GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB:
5286         CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_vertex_program, "GetIntegerv");
5287         params[0] = ctx->Const.MaxProgramMatrixStackDepth;
5288         break;
5289      case GL_MAX_PROGRAM_MATRICES_ARB:
5290         CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_vertex_program, "GetIntegerv");
5291         params[0] = ctx->Const.MaxProgramMatrices;
5292         break;
5293      case GL_CURRENT_MATRIX_STACK_DEPTH_ARB:
5294         CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_vertex_program, "GetIntegerv");
5295         params[0] = BOOLEAN_TO_INT(ctx->CurrentStack->Depth + 1);
5296         break;
5297      case GL_CURRENT_MATRIX_ARB:
5298         CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_fragment_program, "GetIntegerv");
5299         {
5300         const GLfloat *matrix = ctx->CurrentStack->Top->m;
5301         params[0] = IROUND(matrix[0]);
5302         params[1] = IROUND(matrix[1]);
5303         params[2] = IROUND(matrix[2]);
5304         params[3] = IROUND(matrix[3]);
5305         params[4] = IROUND(matrix[4]);
5306         params[5] = IROUND(matrix[5]);
5307         params[6] = IROUND(matrix[6]);
5308         params[7] = IROUND(matrix[7]);
5309         params[8] = IROUND(matrix[8]);
5310         params[9] = IROUND(matrix[9]);
5311         params[10] = IROUND(matrix[10]);
5312         params[11] = IROUND(matrix[11]);
5313         params[12] = IROUND(matrix[12]);
5314         params[13] = IROUND(matrix[13]);
5315         params[14] = IROUND(matrix[14]);
5316         params[15] = IROUND(matrix[15]);
5317         }
5318         break;
5319      case GL_TRANSPOSE_CURRENT_MATRIX_ARB:
5320         CHECK_EXT2(ARB_vertex_program, ARB_fragment_program, "GetIntegerv");
5321         {
5322         const GLfloat *matrix = ctx->CurrentStack->Top->m;
5323         params[0] = IROUND(matrix[0]);
5324         params[1] = IROUND(matrix[4]);
5325         params[2] = IROUND(matrix[8]);
5326         params[3] = IROUND(matrix[12]);
5327         params[4] = IROUND(matrix[1]);
5328         params[5] = IROUND(matrix[5]);
5329         params[6] = IROUND(matrix[9]);
5330         params[7] = IROUND(matrix[13]);
5331         params[8] = IROUND(matrix[2]);
5332         params[9] = IROUND(matrix[6]);
5333         params[10] = IROUND(matrix[10]);
5334         params[11] = IROUND(matrix[14]);
5335         params[12] = IROUND(matrix[3]);
5336         params[13] = IROUND(matrix[7]);
5337         params[14] = IROUND(matrix[11]);
5338         params[15] = IROUND(matrix[15]);
5339         }
5340         break;
5341      case GL_MAX_VERTEX_ATTRIBS_ARB:
5342         CHECK_EXT1(ARB_vertex_program, "GetIntegerv");
5343         params[0] = ctx->Const.VertexProgram.MaxAttribs;
5344         break;
5345      case GL_PROGRAM_ERROR_POSITION_ARB:
5346         CHECK_EXT4(NV_vertex_program, ARB_vertex_program, NV_fragment_program, ARB_fragment_program, "GetIntegerv");
5347         params[0] = ctx->Program.ErrorPos;
5348         break;
5349      case GL_FRAGMENT_PROGRAM_ARB:
5350         CHECK_EXT1(ARB_fragment_program, "GetIntegerv");
5351         params[0] = BOOLEAN_TO_INT(ctx->FragmentProgram.Enabled);
5352         break;
5353      case GL_MAX_TEXTURE_COORDS_ARB:
5354         CHECK_EXT2(ARB_fragment_program, NV_fragment_program, "GetIntegerv");
5355         params[0] = ctx->Const.MaxTextureCoordUnits;
5356         break;
5357      case GL_MAX_TEXTURE_IMAGE_UNITS_ARB:
5358         CHECK_EXT2(ARB_fragment_program, NV_fragment_program, "GetIntegerv");
5359         params[0] = ctx->Const.MaxTextureImageUnits;
5360         break;
5361      case GL_DEPTH_BOUNDS_TEST_EXT:
5362         CHECK_EXT1(EXT_depth_bounds_test, "GetIntegerv");
5363         params[0] = BOOLEAN_TO_INT(ctx->Depth.BoundsTest);
5364         break;
5365      case GL_DEPTH_BOUNDS_EXT:
5366         CHECK_EXT1(EXT_depth_bounds_test, "GetIntegerv");
5367         params[0] = IROUND(ctx->Depth.BoundsMin);
5368         params[1] = IROUND(ctx->Depth.BoundsMax);
5369         break;
5370      case GL_FRAGMENT_PROGRAM_CALLBACK_MESA:
5371         CHECK_EXT1(MESA_program_debug, "GetIntegerv");
5372         params[0] = BOOLEAN_TO_INT(ctx->FragmentProgram.CallbackEnabled);
5373         break;
5374      case GL_VERTEX_PROGRAM_CALLBACK_MESA:
5375         CHECK_EXT1(MESA_program_debug, "GetIntegerv");
5376         params[0] = BOOLEAN_TO_INT(ctx->VertexProgram.CallbackEnabled);
5377         break;
5378      case GL_FRAGMENT_PROGRAM_POSITION_MESA:
5379         CHECK_EXT1(MESA_program_debug, "GetIntegerv");
5380         params[0] = ctx->FragmentProgram.CurrentPosition;
5381         break;
5382      case GL_VERTEX_PROGRAM_POSITION_MESA:
5383         CHECK_EXT1(MESA_program_debug, "GetIntegerv");
5384         params[0] = ctx->VertexProgram.CurrentPosition;
5385         break;
5386      case GL_MAX_DRAW_BUFFERS_ARB:
5387         params[0] = ctx->Const.MaxDrawBuffers;
5388         break;
5389      case GL_DRAW_BUFFER0_ARB:
5390         params[0] = ENUM_TO_INT(ctx->DrawBuffer->ColorDrawBuffer[0]);
5391         break;
5392      case GL_DRAW_BUFFER1_ARB:
5393         {
5394         GLenum buffer;
5395         if (pname - GL_DRAW_BUFFER0_ARB >= ctx->Const.MaxDrawBuffers) {
5396            _mesa_error(ctx, GL_INVALID_ENUM, "glGet(GL_DRAW_BUFFERx_ARB)");
5397            return;
5398         }
5399         buffer = ctx->DrawBuffer->ColorDrawBuffer[1];
5400         params[0] = ENUM_TO_INT(buffer);
5401         }
5402         break;
5403      case GL_DRAW_BUFFER2_ARB:
5404         {
5405         GLenum buffer;
5406         if (pname - GL_DRAW_BUFFER0_ARB >= ctx->Const.MaxDrawBuffers) {
5407            _mesa_error(ctx, GL_INVALID_ENUM, "glGet(GL_DRAW_BUFFERx_ARB)");
5408            return;
5409         }
5410         buffer = ctx->DrawBuffer->ColorDrawBuffer[2];
5411         params[0] = ENUM_TO_INT(buffer);
5412         }
5413         break;
5414      case GL_DRAW_BUFFER3_ARB:
5415         {
5416         GLenum buffer;
5417         if (pname - GL_DRAW_BUFFER0_ARB >= ctx->Const.MaxDrawBuffers) {
5418            _mesa_error(ctx, GL_INVALID_ENUM, "glGet(GL_DRAW_BUFFERx_ARB)");
5419            return;
5420         }
5421         buffer = ctx->DrawBuffer->ColorDrawBuffer[3];
5422         params[0] = ENUM_TO_INT(buffer);
5423         }
5424         break;
5425      case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES:
5426         CHECK_EXT1(OES_read_format, "GetIntegerv");
5427         params[0] = ctx->Const.ColorReadType;
5428         break;
5429      case GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES:
5430         CHECK_EXT1(OES_read_format, "GetIntegerv");
5431         params[0] = ctx->Const.ColorReadFormat;
5432         break;
5433      case GL_NUM_FRAGMENT_REGISTERS_ATI:
5434         CHECK_EXT1(ATI_fragment_shader, "GetIntegerv");
5435         params[0] = 6;
5436         break;
5437      case GL_NUM_FRAGMENT_CONSTANTS_ATI:
5438         CHECK_EXT1(ATI_fragment_shader, "GetIntegerv");
5439         params[0] = 8;
5440         break;
5441      case GL_NUM_PASSES_ATI:
5442         CHECK_EXT1(ATI_fragment_shader, "GetIntegerv");
5443         params[0] = 2;
5444         break;
5445      case GL_NUM_INSTRUCTIONS_PER_PASS_ATI:
5446         CHECK_EXT1(ATI_fragment_shader, "GetIntegerv");
5447         params[0] = 8;
5448         break;
5449      case GL_NUM_INSTRUCTIONS_TOTAL_ATI:
5450         CHECK_EXT1(ATI_fragment_shader, "GetIntegerv");
5451         params[0] = 16;
5452         break;
5453      case GL_COLOR_ALPHA_PAIRING_ATI:
5454         CHECK_EXT1(ATI_fragment_shader, "GetIntegerv");
5455         params[0] = BOOLEAN_TO_INT(GL_TRUE);
5456         break;
5457      case GL_NUM_LOOPBACK_COMPONENTS_ATI:
5458         CHECK_EXT1(ATI_fragment_shader, "GetIntegerv");
5459         params[0] = 3;
5460         break;
5461      case GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI:
5462         CHECK_EXT1(ATI_fragment_shader, "GetIntegerv");
5463         params[0] = 3;
5464         break;
5465      case GL_STENCIL_BACK_FUNC:
5466         params[0] = ENUM_TO_INT(ctx->Stencil.Function[1]);
5467         break;
5468      case GL_STENCIL_BACK_VALUE_MASK:
5469         params[0] = ctx->Stencil.ValueMask[1];
5470         break;
5471      case GL_STENCIL_BACK_WRITEMASK:
5472         params[0] = ctx->Stencil.WriteMask[1];
5473         break;
5474      case GL_STENCIL_BACK_REF:
5475         params[0] = ctx->Stencil.Ref[1];
5476         break;
5477      case GL_STENCIL_BACK_FAIL:
5478         params[0] = ENUM_TO_INT(ctx->Stencil.FailFunc[1]);
5479         break;
5480      case GL_STENCIL_BACK_PASS_DEPTH_FAIL:
5481         params[0] = ENUM_TO_INT(ctx->Stencil.ZFailFunc[1]);
5482         break;
5483      case GL_STENCIL_BACK_PASS_DEPTH_PASS:
5484         params[0] = ENUM_TO_INT(ctx->Stencil.ZPassFunc[1]);
5485         break;
5486      case GL_FRAMEBUFFER_BINDING_EXT:
5487         CHECK_EXT1(EXT_framebuffer_object, "GetIntegerv");
5488         params[0] = ctx->DrawBuffer->Name;
5489         break;
5490      case GL_RENDERBUFFER_BINDING_EXT:
5491         CHECK_EXT1(EXT_framebuffer_object, "GetIntegerv");
5492         params[0] = ctx->CurrentRenderbuffer ? ctx->CurrentRenderbuffer->Name : 0;
5493         break;
5494      case GL_MAX_COLOR_ATTACHMENTS_EXT:
5495         CHECK_EXT1(EXT_framebuffer_object, "GetIntegerv");
5496         params[0] = ctx->Const.MaxColorAttachments;
5497         break;
5498      case GL_MAX_RENDERBUFFER_SIZE_EXT:
5499         CHECK_EXT1(EXT_framebuffer_object, "GetIntegerv");
5500         params[0] = ctx->Const.MaxRenderbufferSize;
5501         break;
5502      case GL_READ_FRAMEBUFFER_BINDING_EXT:
5503         CHECK_EXT1(EXT_framebuffer_blit, "GetIntegerv");
5504         params[0] = ctx->ReadBuffer->Name;
5505         break;
5506      case GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB:
5507         CHECK_EXT1(ARB_fragment_shader, "GetIntegerv");
5508         params[0] = ctx->Const.FragmentProgram.MaxUniformComponents;
5509         break;
5510      case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB:
5511         CHECK_EXT1(ARB_fragment_shader, "GetIntegerv");
5512         params[0] = ENUM_TO_INT(ctx->Hint.FragmentShaderDerivative);
5513         break;
5514      case GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB:
5515         CHECK_EXT1(ARB_vertex_shader, "GetIntegerv");
5516         params[0] = ctx->Const.VertexProgram.MaxUniformComponents;
5517         break;
5518      case GL_MAX_VARYING_FLOATS_ARB:
5519         CHECK_EXT1(ARB_vertex_shader, "GetIntegerv");
5520         params[0] = ctx->Const.MaxVarying * 4;
5521         break;
5522      case GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB:
5523         CHECK_EXT1(ARB_vertex_shader, "GetIntegerv");
5524         params[0] = ctx->Const.MaxVertexTextureImageUnits;
5525         break;
5526      case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB:
5527         CHECK_EXT1(ARB_vertex_shader, "GetIntegerv");
5528         params[0] = MAX_COMBINED_TEXTURE_IMAGE_UNITS;
5529         break;
5530      case GL_CURRENT_PROGRAM:
5531         CHECK_EXT1(ARB_shader_objects, "GetIntegerv");
5532         params[0] = ctx->Shader.CurrentProgram ? ctx->Shader.CurrentProgram->Name : 0;
5533         break;
5534      case GL_MAX_SAMPLES:
5535         CHECK_EXT1(ARB_framebuffer_object, "GetIntegerv");
5536         params[0] = ctx->Const.MaxSamples;
5537         break;
5538      default:
5539         _mesa_error(ctx, GL_INVALID_ENUM, "glGetIntegerv(pname=0x%x)", pname);
5540   }
5541}
5542
5543
5544void GLAPIENTRY
5545_mesa_GetDoublev( GLenum pname, GLdouble *params )
5546{
5547   const GLfloat magic = -1234.5F;
5548   GLfloat values[16];
5549   GLuint i;
5550
5551   if (!params)
5552      return;
5553
5554   /* Init temp array to magic numbers so we can figure out how many values
5555    * are returned by the GetFloatv() call.
5556    */
5557   for (i = 0; i < 16; i++)
5558      values[i] = magic;
5559
5560   _mesa_GetFloatv(pname, values);
5561
5562   for (i = 0; i < 16 && values[i] != magic; i++)
5563      params[i] = (GLdouble) values[i];
5564}
5565
5566