home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / mesa5.zip / mesa5src.zip / MesaDLL / get.cpp < prev    next >
C/C++ Source or Header  |  2002-11-14  |  201KB  |  5,709 lines

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