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