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