Fix/improve framebuffer object reference counting.
[mesa.git] / src / mesa / main / get.c
index 7147c9a5ccc0e696dc8140c0904bd690ab953040..9b2a42f7c1a5b13d0764e5ae5cd5e2bd24998bfd 100644 (file)
@@ -230,7 +230,7 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
       case GL_CURRENT_INDEX:
          {
          FLUSH_CURRENT(ctx, 0);
-         params[0] = FLOAT_TO_BOOLEAN(ctx->Current.Index);
+         params[0] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_COLOR_INDEX][0]);
          }
          break;
       case GL_CURRENT_NORMAL:
@@ -259,6 +259,12 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
          params[2] = FLOAT_TO_BOOLEAN(ctx->Current.RasterPos[2]);
          params[3] = FLOAT_TO_BOOLEAN(ctx->Current.RasterPos[3]);
          break;
+      case GL_CURRENT_RASTER_SECONDARY_COLOR:
+         params[0] = FLOAT_TO_BOOLEAN(ctx->Current.RasterSecondaryColor[0]);
+         params[1] = FLOAT_TO_BOOLEAN(ctx->Current.RasterSecondaryColor[1]);
+         params[2] = FLOAT_TO_BOOLEAN(ctx->Current.RasterSecondaryColor[2]);
+         params[3] = FLOAT_TO_BOOLEAN(ctx->Current.RasterSecondaryColor[3]);
+         break;
       case GL_CURRENT_RASTER_TEXTURE_COORDS:
          {
          const GLuint texUnit = ctx->Texture.CurrentUnit;
@@ -317,7 +323,7 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
       case GL_EDGE_FLAG:
          {
          FLUSH_CURRENT(ctx, 0);
-         params[0] = ctx->Current.EdgeFlag;
+         params[0] = (ctx->Current.Attrib[VERT_ATTRIB_EDGEFLAG][0] == 1.0);
          }
          break;
       case GL_FEEDBACK_BUFFER_SIZE:
@@ -787,7 +793,7 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
          params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.RedBias);
          break;
       case GL_RED_BITS:
-         params[0] = INT_TO_BOOLEAN( ctx->DrawBuffer->Visual.redBits );
+         params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.redBits);
          break;
       case GL_RED_SCALE:
          params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.RedScale);
@@ -961,86 +967,86 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
          params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.ZoomY);
          break;
       case GL_VERTEX_ARRAY:
-         params[0] = ctx->Array.Vertex.Enabled;
+         params[0] = ctx->Array.ArrayObj->Vertex.Enabled;
          break;
       case GL_VERTEX_ARRAY_SIZE:
-         params[0] = INT_TO_BOOLEAN(ctx->Array.Vertex.Size);
+         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Vertex.Size);
          break;
       case GL_VERTEX_ARRAY_TYPE:
-         params[0] = ENUM_TO_BOOLEAN(ctx->Array.Vertex.Type);
+         params[0] = ENUM_TO_BOOLEAN(ctx->Array.ArrayObj->Vertex.Type);
          break;
       case GL_VERTEX_ARRAY_STRIDE:
-         params[0] = INT_TO_BOOLEAN(ctx->Array.Vertex.Stride);
+         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Vertex.Stride);
          break;
       case GL_VERTEX_ARRAY_COUNT_EXT:
          params[0] = INT_TO_BOOLEAN(0);
          break;
       case GL_NORMAL_ARRAY:
-         params[0] = ENUM_TO_BOOLEAN(ctx->Array.Normal.Enabled);
+         params[0] = ENUM_TO_BOOLEAN(ctx->Array.ArrayObj->Normal.Enabled);
          break;
       case GL_NORMAL_ARRAY_TYPE:
-         params[0] = ENUM_TO_BOOLEAN(ctx->Array.Normal.Type);
+         params[0] = ENUM_TO_BOOLEAN(ctx->Array.ArrayObj->Normal.Type);
          break;
       case GL_NORMAL_ARRAY_STRIDE:
-         params[0] = INT_TO_BOOLEAN(ctx->Array.Normal.Stride);
+         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Normal.Stride);
          break;
       case GL_NORMAL_ARRAY_COUNT_EXT:
          params[0] = INT_TO_BOOLEAN(0);
          break;
       case GL_COLOR_ARRAY:
-         params[0] = ctx->Array.Color.Enabled;
+         params[0] = ctx->Array.ArrayObj->Color.Enabled;
          break;
       case GL_COLOR_ARRAY_SIZE:
-         params[0] = INT_TO_BOOLEAN(ctx->Array.Color.Size);
+         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Color.Size);
          break;
       case GL_COLOR_ARRAY_TYPE:
-         params[0] = ENUM_TO_BOOLEAN(ctx->Array.Color.Type);
+         params[0] = ENUM_TO_BOOLEAN(ctx->Array.ArrayObj->Color.Type);
          break;
       case GL_COLOR_ARRAY_STRIDE:
-         params[0] = INT_TO_BOOLEAN(ctx->Array.Color.Stride);
+         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Color.Stride);
          break;
       case GL_COLOR_ARRAY_COUNT_EXT:
          params[0] = INT_TO_BOOLEAN(0);
          break;
       case GL_INDEX_ARRAY:
-         params[0] = ctx->Array.Index.Enabled;
+         params[0] = ctx->Array.ArrayObj->Index.Enabled;
          break;
       case GL_INDEX_ARRAY_TYPE:
-         params[0] = ENUM_TO_BOOLEAN(ctx->Array.Index.Type);
+         params[0] = ENUM_TO_BOOLEAN(ctx->Array.ArrayObj->Index.Type);
          break;
       case GL_INDEX_ARRAY_STRIDE:
-         params[0] = INT_TO_BOOLEAN(ctx->Array.Index.Stride);
+         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Index.Stride);
          break;
       case GL_INDEX_ARRAY_COUNT_EXT:
          params[0] = INT_TO_BOOLEAN(0);
          break;
       case GL_TEXTURE_COORD_ARRAY:
-         params[0] = ctx->Array.TexCoord[ctx->Array.ActiveTexture].Enabled;
+         params[0] = ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Enabled;
          break;
       case GL_TEXTURE_COORD_ARRAY_SIZE:
-         params[0] = INT_TO_BOOLEAN(ctx->Array.TexCoord[ctx->Array.ActiveTexture].Size);
+         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Size);
          break;
       case GL_TEXTURE_COORD_ARRAY_TYPE:
-         params[0] = ENUM_TO_BOOLEAN(ctx->Array.TexCoord[ctx->Array.ActiveTexture].Type);
+         params[0] = ENUM_TO_BOOLEAN(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Type);
          break;
       case GL_TEXTURE_COORD_ARRAY_STRIDE:
-         params[0] = INT_TO_BOOLEAN(ctx->Array.TexCoord[ctx->Array.ActiveTexture].Stride);
+         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Stride);
          break;
       case GL_TEXTURE_COORD_ARRAY_COUNT_EXT:
          params[0] = INT_TO_BOOLEAN(0);
          break;
       case GL_EDGE_FLAG_ARRAY:
-         params[0] = ctx->Array.EdgeFlag.Enabled;
+         params[0] = ctx->Array.ArrayObj->EdgeFlag.Enabled;
          break;
       case GL_EDGE_FLAG_ARRAY_STRIDE:
-         params[0] = INT_TO_BOOLEAN(ctx->Array.EdgeFlag.Stride);
+         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->EdgeFlag.Stride);
          break;
       case GL_EDGE_FLAG_ARRAY_COUNT_EXT:
          params[0] = INT_TO_BOOLEAN(0);
          break;
       case GL_MAX_TEXTURE_UNITS_ARB:
          CHECK_EXT1(ARB_multitexture, "GetBooleanv");
-         params[0] = INT_TO_BOOLEAN(MIN2(ctx->Const.MaxTextureImageUnits, ctx->Const.MaxTextureCoordUnits));
+         params[0] = INT_TO_BOOLEAN(ctx->Const.MaxTextureUnits);
          break;
       case GL_ACTIVE_TEXTURE_ARB:
          CHECK_EXT1(ARB_multitexture, "GetBooleanv");
@@ -1068,13 +1074,13 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
          break;
       case GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB:
          CHECK_EXT1(ARB_texture_compression, "GetBooleanv");
-         params[0] = INT_TO_BOOLEAN(_mesa_get_compressed_formats(ctx, NULL));
+         params[0] = INT_TO_BOOLEAN(_mesa_get_compressed_formats(ctx, NULL, GL_FALSE));
          break;
       case GL_COMPRESSED_TEXTURE_FORMATS_ARB:
          CHECK_EXT1(ARB_texture_compression, "GetBooleanv");
          {
          GLint formats[100];
-         GLuint i, n = _mesa_get_compressed_formats(ctx, formats);
+         GLuint i, n = _mesa_get_compressed_formats(ctx, formats, GL_FALSE);
          ASSERT(n <= 100);
          for (i = 0; i < n; i++)
             params[i] = ENUM_TO_INT(formats[i]);
@@ -1307,19 +1313,19 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
          break;
       case GL_SECONDARY_COLOR_ARRAY_EXT:
          CHECK_EXT1(EXT_secondary_color, "GetBooleanv");
-         params[0] = ctx->Array.SecondaryColor.Enabled;
+         params[0] = ctx->Array.ArrayObj->SecondaryColor.Enabled;
          break;
       case GL_SECONDARY_COLOR_ARRAY_TYPE_EXT:
          CHECK_EXT1(EXT_secondary_color, "GetBooleanv");
-         params[0] = ENUM_TO_BOOLEAN(ctx->Array.SecondaryColor.Type);
+         params[0] = ENUM_TO_BOOLEAN(ctx->Array.ArrayObj->SecondaryColor.Type);
          break;
       case GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT:
          CHECK_EXT1(EXT_secondary_color, "GetBooleanv");
-         params[0] = INT_TO_BOOLEAN(ctx->Array.SecondaryColor.Stride);
+         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->SecondaryColor.Stride);
          break;
       case GL_SECONDARY_COLOR_ARRAY_SIZE_EXT:
          CHECK_EXT1(EXT_secondary_color, "GetBooleanv");
-         params[0] = INT_TO_BOOLEAN(ctx->Array.SecondaryColor.Size);
+         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->SecondaryColor.Size);
          break;
       case GL_CURRENT_FOG_COORDINATE_EXT:
          CHECK_EXT1(EXT_fog_coord, "GetBooleanv");
@@ -1330,15 +1336,15 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
          break;
       case GL_FOG_COORDINATE_ARRAY_EXT:
          CHECK_EXT1(EXT_fog_coord, "GetBooleanv");
-         params[0] = ctx->Array.FogCoord.Enabled;
+         params[0] = ctx->Array.ArrayObj->FogCoord.Enabled;
          break;
       case GL_FOG_COORDINATE_ARRAY_TYPE_EXT:
          CHECK_EXT1(EXT_fog_coord, "GetBooleanv");
-         params[0] = ENUM_TO_BOOLEAN(ctx->Array.FogCoord.Type);
+         params[0] = ENUM_TO_BOOLEAN(ctx->Array.ArrayObj->FogCoord.Type);
          break;
       case GL_FOG_COORDINATE_ARRAY_STRIDE_EXT:
          CHECK_EXT1(EXT_fog_coord, "GetBooleanv");
-         params[0] = INT_TO_BOOLEAN(ctx->Array.FogCoord.Stride);
+         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->FogCoord.Stride);
          break;
       case GL_FOG_COORDINATE_SOURCE_EXT:
          CHECK_EXT1(EXT_fog_coord, "GetBooleanv");
@@ -1410,67 +1416,67 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
          break;
       case GL_VERTEX_ATTRIB_ARRAY0_NV:
          CHECK_EXT1(NV_vertex_program, "GetBooleanv");
-         params[0] = ctx->Array.VertexAttrib[0].Enabled;
+         params[0] = ctx->Array.ArrayObj->VertexAttrib[0].Enabled;
          break;
       case GL_VERTEX_ATTRIB_ARRAY1_NV:
          CHECK_EXT1(NV_vertex_program, "GetBooleanv");
-         params[0] = ctx->Array.VertexAttrib[1].Enabled;
+         params[0] = ctx->Array.ArrayObj->VertexAttrib[1].Enabled;
          break;
       case GL_VERTEX_ATTRIB_ARRAY2_NV:
          CHECK_EXT1(NV_vertex_program, "GetBooleanv");
-         params[0] = ctx->Array.VertexAttrib[2].Enabled;
+         params[0] = ctx->Array.ArrayObj->VertexAttrib[2].Enabled;
          break;
       case GL_VERTEX_ATTRIB_ARRAY3_NV:
          CHECK_EXT1(NV_vertex_program, "GetBooleanv");
-         params[0] = ctx->Array.VertexAttrib[3].Enabled;
+         params[0] = ctx->Array.ArrayObj->VertexAttrib[3].Enabled;
          break;
       case GL_VERTEX_ATTRIB_ARRAY4_NV:
          CHECK_EXT1(NV_vertex_program, "GetBooleanv");
-         params[0] = ctx->Array.VertexAttrib[4].Enabled;
+         params[0] = ctx->Array.ArrayObj->VertexAttrib[4].Enabled;
          break;
       case GL_VERTEX_ATTRIB_ARRAY5_NV:
          CHECK_EXT1(NV_vertex_program, "GetBooleanv");
-         params[0] = ctx->Array.VertexAttrib[5].Enabled;
+         params[0] = ctx->Array.ArrayObj->VertexAttrib[5].Enabled;
          break;
       case GL_VERTEX_ATTRIB_ARRAY6_NV:
          CHECK_EXT1(NV_vertex_program, "GetBooleanv");
-         params[0] = ctx->Array.VertexAttrib[6].Enabled;
+         params[0] = ctx->Array.ArrayObj->VertexAttrib[6].Enabled;
          break;
       case GL_VERTEX_ATTRIB_ARRAY7_NV:
          CHECK_EXT1(NV_vertex_program, "GetBooleanv");
-         params[0] = ctx->Array.VertexAttrib[7].Enabled;
+         params[0] = ctx->Array.ArrayObj->VertexAttrib[7].Enabled;
          break;
       case GL_VERTEX_ATTRIB_ARRAY8_NV:
          CHECK_EXT1(NV_vertex_program, "GetBooleanv");
-         params[0] = ctx->Array.VertexAttrib[8].Enabled;
+         params[0] = ctx->Array.ArrayObj->VertexAttrib[8].Enabled;
          break;
       case GL_VERTEX_ATTRIB_ARRAY9_NV:
          CHECK_EXT1(NV_vertex_program, "GetBooleanv");
-         params[0] = ctx->Array.VertexAttrib[9].Enabled;
+         params[0] = ctx->Array.ArrayObj->VertexAttrib[9].Enabled;
          break;
       case GL_VERTEX_ATTRIB_ARRAY10_NV:
          CHECK_EXT1(NV_vertex_program, "GetBooleanv");
-         params[0] = ctx->Array.VertexAttrib[10].Enabled;
+         params[0] = ctx->Array.ArrayObj->VertexAttrib[10].Enabled;
          break;
       case GL_VERTEX_ATTRIB_ARRAY11_NV:
          CHECK_EXT1(NV_vertex_program, "GetBooleanv");
-         params[0] = ctx->Array.VertexAttrib[11].Enabled;
+         params[0] = ctx->Array.ArrayObj->VertexAttrib[11].Enabled;
          break;
       case GL_VERTEX_ATTRIB_ARRAY12_NV:
          CHECK_EXT1(NV_vertex_program, "GetBooleanv");
-         params[0] = ctx->Array.VertexAttrib[12].Enabled;
+         params[0] = ctx->Array.ArrayObj->VertexAttrib[12].Enabled;
          break;
       case GL_VERTEX_ATTRIB_ARRAY13_NV:
          CHECK_EXT1(NV_vertex_program, "GetBooleanv");
-         params[0] = ctx->Array.VertexAttrib[13].Enabled;
+         params[0] = ctx->Array.ArrayObj->VertexAttrib[13].Enabled;
          break;
       case GL_VERTEX_ATTRIB_ARRAY14_NV:
          CHECK_EXT1(NV_vertex_program, "GetBooleanv");
-         params[0] = ctx->Array.VertexAttrib[14].Enabled;
+         params[0] = ctx->Array.ArrayObj->VertexAttrib[14].Enabled;
          break;
       case GL_VERTEX_ATTRIB_ARRAY15_NV:
          CHECK_EXT1(NV_vertex_program, "GetBooleanv");
-         params[0] = ctx->Array.VertexAttrib[15].Enabled;
+         params[0] = ctx->Array.ArrayObj->VertexAttrib[15].Enabled;
          break;
       case GL_MAP1_VERTEX_ATTRIB0_4_NV:
          CHECK_EXT1(NV_vertex_program, "GetBooleanv");
@@ -1582,35 +1588,35 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
          break;
       case GL_VERTEX_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXT1(ARB_vertex_buffer_object, "GetBooleanv");
-         params[0] = INT_TO_BOOLEAN(ctx->Array.Vertex.BufferObj->Name);
+         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Vertex.BufferObj->Name);
          break;
       case GL_NORMAL_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXT1(ARB_vertex_buffer_object, "GetBooleanv");
-         params[0] = INT_TO_BOOLEAN(ctx->Array.Normal.BufferObj->Name);
+         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Normal.BufferObj->Name);
          break;
       case GL_COLOR_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXT1(ARB_vertex_buffer_object, "GetBooleanv");
-         params[0] = INT_TO_BOOLEAN(ctx->Array.Color.BufferObj->Name);
+         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Color.BufferObj->Name);
          break;
       case GL_INDEX_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXT1(ARB_vertex_buffer_object, "GetBooleanv");
-         params[0] = INT_TO_BOOLEAN(ctx->Array.Index.BufferObj->Name);
+         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Index.BufferObj->Name);
          break;
       case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXT1(ARB_vertex_buffer_object, "GetBooleanv");
-         params[0] = INT_TO_BOOLEAN(ctx->Array.TexCoord[ctx->Array.ActiveTexture].BufferObj->Name);
+         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].BufferObj->Name);
          break;
       case GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXT1(ARB_vertex_buffer_object, "GetBooleanv");
-         params[0] = INT_TO_BOOLEAN(ctx->Array.EdgeFlag.BufferObj->Name);
+         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->EdgeFlag.BufferObj->Name);
          break;
       case GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXT1(ARB_vertex_buffer_object, "GetBooleanv");
-         params[0] = INT_TO_BOOLEAN(ctx->Array.SecondaryColor.BufferObj->Name);
+         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->SecondaryColor.BufferObj->Name);
          break;
       case GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXT1(ARB_vertex_buffer_object, "GetBooleanv");
-         params[0] = INT_TO_BOOLEAN(ctx->Array.FogCoord.BufferObj->Name);
+         params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->FogCoord.BufferObj->Name);
          break;
       case GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXT1(ARB_vertex_buffer_object, "GetBooleanv");
@@ -1827,6 +1833,9 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
       case GL_STENCIL_BACK_VALUE_MASK:
          params[0] = INT_TO_BOOLEAN(ctx->Stencil.ValueMask[1]);
          break;
+      case GL_STENCIL_BACK_WRITEMASK:
+         params[0] = INT_TO_BOOLEAN(ctx->Stencil.WriteMask[1]);
+         break;
       case GL_STENCIL_BACK_REF:
          params[0] = INT_TO_BOOLEAN(ctx->Stencil.Ref[1]);
          break;
@@ -1857,7 +1866,7 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
          break;
       case GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB:
          CHECK_EXT1(ARB_fragment_shader, "GetBooleanv");
-         params[0] = INT_TO_BOOLEAN(MAX_FRAGMENT_UNIFORM_COMPONENTS);
+         params[0] = INT_TO_BOOLEAN(ctx->Const.FragmentProgram.MaxUniformComponents);
          break;
       case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB:
          CHECK_EXT1(ARB_fragment_shader, "GetBooleanv");
@@ -1865,15 +1874,15 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
          break;
       case GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB:
          CHECK_EXT1(ARB_vertex_shader, "GetBooleanv");
-         params[0] = INT_TO_BOOLEAN(MAX_VERTEX_UNIFORM_COMPONENTS);
+         params[0] = INT_TO_BOOLEAN(ctx->Const.VertexProgram.MaxUniformComponents);
          break;
       case GL_MAX_VARYING_FLOATS_ARB:
          CHECK_EXT1(ARB_vertex_shader, "GetBooleanv");
-         params[0] = INT_TO_BOOLEAN(MAX_VARYING_FLOATS);
+         params[0] = INT_TO_BOOLEAN(ctx->Const.MaxVaryingFloats);
          break;
       case GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB:
          CHECK_EXT1(ARB_vertex_shader, "GetBooleanv");
-         params[0] = INT_TO_BOOLEAN(MAX_VERTEX_TEXTURE_IMAGE_UNITS);
+         params[0] = INT_TO_BOOLEAN(ctx->Const.MaxVertexTextureImageUnits);
          break;
       case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB:
          CHECK_EXT1(ARB_vertex_shader, "GetBooleanv");
@@ -2048,7 +2057,7 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
       case GL_CURRENT_INDEX:
          {
          FLUSH_CURRENT(ctx, 0);
-         params[0] = ctx->Current.Index;
+         params[0] = ctx->Current.Attrib[VERT_ATTRIB_COLOR_INDEX][0];
          }
          break;
       case GL_CURRENT_NORMAL:
@@ -2077,6 +2086,12 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
          params[2] = ctx->Current.RasterPos[2];
          params[3] = ctx->Current.RasterPos[3];
          break;
+      case GL_CURRENT_RASTER_SECONDARY_COLOR:
+         params[0] = ctx->Current.RasterSecondaryColor[0];
+         params[1] = ctx->Current.RasterSecondaryColor[1];
+         params[2] = ctx->Current.RasterSecondaryColor[2];
+         params[3] = ctx->Current.RasterSecondaryColor[3];
+         break;
       case GL_CURRENT_RASTER_TEXTURE_COORDS:
          {
          const GLuint texUnit = ctx->Texture.CurrentUnit;
@@ -2135,7 +2150,7 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
       case GL_EDGE_FLAG:
          {
          FLUSH_CURRENT(ctx, 0);
-         params[0] = BOOLEAN_TO_FLOAT(ctx->Current.EdgeFlag);
+         params[0] = BOOLEAN_TO_FLOAT((ctx->Current.Attrib[VERT_ATTRIB_EDGEFLAG][0] == 1.0));
          }
          break;
       case GL_FEEDBACK_BUFFER_SIZE:
@@ -2605,7 +2620,7 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
          params[0] = ctx->Pixel.RedBias;
          break;
       case GL_RED_BITS:
-         params[0] = (GLfloat)( ctx->DrawBuffer->Visual.redBits );
+         params[0] = (GLfloat)(ctx->DrawBuffer->Visual.redBits);
          break;
       case GL_RED_SCALE:
          params[0] = ctx->Pixel.RedScale;
@@ -2779,86 +2794,86 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
          params[0] = ctx->Pixel.ZoomY;
          break;
       case GL_VERTEX_ARRAY:
-         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.Vertex.Enabled);
+         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->Vertex.Enabled);
          break;
       case GL_VERTEX_ARRAY_SIZE:
-         params[0] = (GLfloat)(ctx->Array.Vertex.Size);
+         params[0] = (GLfloat)(ctx->Array.ArrayObj->Vertex.Size);
          break;
       case GL_VERTEX_ARRAY_TYPE:
-         params[0] = ENUM_TO_FLOAT(ctx->Array.Vertex.Type);
+         params[0] = ENUM_TO_FLOAT(ctx->Array.ArrayObj->Vertex.Type);
          break;
       case GL_VERTEX_ARRAY_STRIDE:
-         params[0] = (GLfloat)(ctx->Array.Vertex.Stride);
+         params[0] = (GLfloat)(ctx->Array.ArrayObj->Vertex.Stride);
          break;
       case GL_VERTEX_ARRAY_COUNT_EXT:
          params[0] = (GLfloat)(0);
          break;
       case GL_NORMAL_ARRAY:
-         params[0] = ENUM_TO_FLOAT(ctx->Array.Normal.Enabled);
+         params[0] = ENUM_TO_FLOAT(ctx->Array.ArrayObj->Normal.Enabled);
          break;
       case GL_NORMAL_ARRAY_TYPE:
-         params[0] = ENUM_TO_FLOAT(ctx->Array.Normal.Type);
+         params[0] = ENUM_TO_FLOAT(ctx->Array.ArrayObj->Normal.Type);
          break;
       case GL_NORMAL_ARRAY_STRIDE:
-         params[0] = (GLfloat)(ctx->Array.Normal.Stride);
+         params[0] = (GLfloat)(ctx->Array.ArrayObj->Normal.Stride);
          break;
       case GL_NORMAL_ARRAY_COUNT_EXT:
          params[0] = (GLfloat)(0);
          break;
       case GL_COLOR_ARRAY:
-         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.Color.Enabled);
+         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->Color.Enabled);
          break;
       case GL_COLOR_ARRAY_SIZE:
-         params[0] = (GLfloat)(ctx->Array.Color.Size);
+         params[0] = (GLfloat)(ctx->Array.ArrayObj->Color.Size);
          break;
       case GL_COLOR_ARRAY_TYPE:
-         params[0] = ENUM_TO_FLOAT(ctx->Array.Color.Type);
+         params[0] = ENUM_TO_FLOAT(ctx->Array.ArrayObj->Color.Type);
          break;
       case GL_COLOR_ARRAY_STRIDE:
-         params[0] = (GLfloat)(ctx->Array.Color.Stride);
+         params[0] = (GLfloat)(ctx->Array.ArrayObj->Color.Stride);
          break;
       case GL_COLOR_ARRAY_COUNT_EXT:
          params[0] = (GLfloat)(0);
          break;
       case GL_INDEX_ARRAY:
-         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.Index.Enabled);
+         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->Index.Enabled);
          break;
       case GL_INDEX_ARRAY_TYPE:
-         params[0] = ENUM_TO_FLOAT(ctx->Array.Index.Type);
+         params[0] = ENUM_TO_FLOAT(ctx->Array.ArrayObj->Index.Type);
          break;
       case GL_INDEX_ARRAY_STRIDE:
-         params[0] = (GLfloat)(ctx->Array.Index.Stride);
+         params[0] = (GLfloat)(ctx->Array.ArrayObj->Index.Stride);
          break;
       case GL_INDEX_ARRAY_COUNT_EXT:
          params[0] = (GLfloat)(0);
          break;
       case GL_TEXTURE_COORD_ARRAY:
-         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.TexCoord[ctx->Array.ActiveTexture].Enabled);
+         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Enabled);
          break;
       case GL_TEXTURE_COORD_ARRAY_SIZE:
-         params[0] = (GLfloat)(ctx->Array.TexCoord[ctx->Array.ActiveTexture].Size);
+         params[0] = (GLfloat)(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Size);
          break;
       case GL_TEXTURE_COORD_ARRAY_TYPE:
-         params[0] = ENUM_TO_FLOAT(ctx->Array.TexCoord[ctx->Array.ActiveTexture].Type);
+         params[0] = ENUM_TO_FLOAT(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Type);
          break;
       case GL_TEXTURE_COORD_ARRAY_STRIDE:
-         params[0] = (GLfloat)(ctx->Array.TexCoord[ctx->Array.ActiveTexture].Stride);
+         params[0] = (GLfloat)(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Stride);
          break;
       case GL_TEXTURE_COORD_ARRAY_COUNT_EXT:
          params[0] = (GLfloat)(0);
          break;
       case GL_EDGE_FLAG_ARRAY:
-         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.EdgeFlag.Enabled);
+         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->EdgeFlag.Enabled);
          break;
       case GL_EDGE_FLAG_ARRAY_STRIDE:
-         params[0] = (GLfloat)(ctx->Array.EdgeFlag.Stride);
+         params[0] = (GLfloat)(ctx->Array.ArrayObj->EdgeFlag.Stride);
          break;
       case GL_EDGE_FLAG_ARRAY_COUNT_EXT:
          params[0] = (GLfloat)(0);
          break;
       case GL_MAX_TEXTURE_UNITS_ARB:
          CHECK_EXT1(ARB_multitexture, "GetFloatv");
-         params[0] = (GLfloat)(MIN2(ctx->Const.MaxTextureImageUnits, ctx->Const.MaxTextureCoordUnits));
+         params[0] = (GLfloat)(ctx->Const.MaxTextureUnits);
          break;
       case GL_ACTIVE_TEXTURE_ARB:
          CHECK_EXT1(ARB_multitexture, "GetFloatv");
@@ -2886,13 +2901,13 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
          break;
       case GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB:
          CHECK_EXT1(ARB_texture_compression, "GetFloatv");
-         params[0] = (GLfloat)(_mesa_get_compressed_formats(ctx, NULL));
+         params[0] = (GLfloat)(_mesa_get_compressed_formats(ctx, NULL, GL_FALSE));
          break;
       case GL_COMPRESSED_TEXTURE_FORMATS_ARB:
          CHECK_EXT1(ARB_texture_compression, "GetFloatv");
          {
          GLint formats[100];
-         GLuint i, n = _mesa_get_compressed_formats(ctx, formats);
+         GLuint i, n = _mesa_get_compressed_formats(ctx, formats, GL_FALSE);
          ASSERT(n <= 100);
          for (i = 0; i < n; i++)
             params[i] = ENUM_TO_INT(formats[i]);
@@ -3125,19 +3140,19 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
          break;
       case GL_SECONDARY_COLOR_ARRAY_EXT:
          CHECK_EXT1(EXT_secondary_color, "GetFloatv");
-         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.SecondaryColor.Enabled);
+         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->SecondaryColor.Enabled);
          break;
       case GL_SECONDARY_COLOR_ARRAY_TYPE_EXT:
          CHECK_EXT1(EXT_secondary_color, "GetFloatv");
-         params[0] = ENUM_TO_FLOAT(ctx->Array.SecondaryColor.Type);
+         params[0] = ENUM_TO_FLOAT(ctx->Array.ArrayObj->SecondaryColor.Type);
          break;
       case GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT:
          CHECK_EXT1(EXT_secondary_color, "GetFloatv");
-         params[0] = (GLfloat)(ctx->Array.SecondaryColor.Stride);
+         params[0] = (GLfloat)(ctx->Array.ArrayObj->SecondaryColor.Stride);
          break;
       case GL_SECONDARY_COLOR_ARRAY_SIZE_EXT:
          CHECK_EXT1(EXT_secondary_color, "GetFloatv");
-         params[0] = (GLfloat)(ctx->Array.SecondaryColor.Size);
+         params[0] = (GLfloat)(ctx->Array.ArrayObj->SecondaryColor.Size);
          break;
       case GL_CURRENT_FOG_COORDINATE_EXT:
          CHECK_EXT1(EXT_fog_coord, "GetFloatv");
@@ -3148,15 +3163,15 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
          break;
       case GL_FOG_COORDINATE_ARRAY_EXT:
          CHECK_EXT1(EXT_fog_coord, "GetFloatv");
-         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.FogCoord.Enabled);
+         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->FogCoord.Enabled);
          break;
       case GL_FOG_COORDINATE_ARRAY_TYPE_EXT:
          CHECK_EXT1(EXT_fog_coord, "GetFloatv");
-         params[0] = ENUM_TO_FLOAT(ctx->Array.FogCoord.Type);
+         params[0] = ENUM_TO_FLOAT(ctx->Array.ArrayObj->FogCoord.Type);
          break;
       case GL_FOG_COORDINATE_ARRAY_STRIDE_EXT:
          CHECK_EXT1(EXT_fog_coord, "GetFloatv");
-         params[0] = (GLfloat)(ctx->Array.FogCoord.Stride);
+         params[0] = (GLfloat)(ctx->Array.ArrayObj->FogCoord.Stride);
          break;
       case GL_FOG_COORDINATE_SOURCE_EXT:
          CHECK_EXT1(EXT_fog_coord, "GetFloatv");
@@ -3228,67 +3243,67 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
          break;
       case GL_VERTEX_ATTRIB_ARRAY0_NV:
          CHECK_EXT1(NV_vertex_program, "GetFloatv");
-         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.VertexAttrib[0].Enabled);
+         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[0].Enabled);
          break;
       case GL_VERTEX_ATTRIB_ARRAY1_NV:
          CHECK_EXT1(NV_vertex_program, "GetFloatv");
-         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.VertexAttrib[1].Enabled);
+         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[1].Enabled);
          break;
       case GL_VERTEX_ATTRIB_ARRAY2_NV:
          CHECK_EXT1(NV_vertex_program, "GetFloatv");
-         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.VertexAttrib[2].Enabled);
+         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[2].Enabled);
          break;
       case GL_VERTEX_ATTRIB_ARRAY3_NV:
          CHECK_EXT1(NV_vertex_program, "GetFloatv");
-         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.VertexAttrib[3].Enabled);
+         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[3].Enabled);
          break;
       case GL_VERTEX_ATTRIB_ARRAY4_NV:
          CHECK_EXT1(NV_vertex_program, "GetFloatv");
-         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.VertexAttrib[4].Enabled);
+         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[4].Enabled);
          break;
       case GL_VERTEX_ATTRIB_ARRAY5_NV:
          CHECK_EXT1(NV_vertex_program, "GetFloatv");
-         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.VertexAttrib[5].Enabled);
+         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[5].Enabled);
          break;
       case GL_VERTEX_ATTRIB_ARRAY6_NV:
          CHECK_EXT1(NV_vertex_program, "GetFloatv");
-         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.VertexAttrib[6].Enabled);
+         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[6].Enabled);
          break;
       case GL_VERTEX_ATTRIB_ARRAY7_NV:
          CHECK_EXT1(NV_vertex_program, "GetFloatv");
-         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.VertexAttrib[7].Enabled);
+         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[7].Enabled);
          break;
       case GL_VERTEX_ATTRIB_ARRAY8_NV:
          CHECK_EXT1(NV_vertex_program, "GetFloatv");
-         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.VertexAttrib[8].Enabled);
+         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[8].Enabled);
          break;
       case GL_VERTEX_ATTRIB_ARRAY9_NV:
          CHECK_EXT1(NV_vertex_program, "GetFloatv");
-         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.VertexAttrib[9].Enabled);
+         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[9].Enabled);
          break;
       case GL_VERTEX_ATTRIB_ARRAY10_NV:
          CHECK_EXT1(NV_vertex_program, "GetFloatv");
-         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.VertexAttrib[10].Enabled);
+         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[10].Enabled);
          break;
       case GL_VERTEX_ATTRIB_ARRAY11_NV:
          CHECK_EXT1(NV_vertex_program, "GetFloatv");
-         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.VertexAttrib[11].Enabled);
+         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[11].Enabled);
          break;
       case GL_VERTEX_ATTRIB_ARRAY12_NV:
          CHECK_EXT1(NV_vertex_program, "GetFloatv");
-         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.VertexAttrib[12].Enabled);
+         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[12].Enabled);
          break;
       case GL_VERTEX_ATTRIB_ARRAY13_NV:
          CHECK_EXT1(NV_vertex_program, "GetFloatv");
-         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.VertexAttrib[13].Enabled);
+         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[13].Enabled);
          break;
       case GL_VERTEX_ATTRIB_ARRAY14_NV:
          CHECK_EXT1(NV_vertex_program, "GetFloatv");
-         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.VertexAttrib[14].Enabled);
+         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[14].Enabled);
          break;
       case GL_VERTEX_ATTRIB_ARRAY15_NV:
          CHECK_EXT1(NV_vertex_program, "GetFloatv");
-         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.VertexAttrib[15].Enabled);
+         params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[15].Enabled);
          break;
       case GL_MAP1_VERTEX_ATTRIB0_4_NV:
          CHECK_EXT1(NV_vertex_program, "GetFloatv");
@@ -3400,35 +3415,35 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
          break;
       case GL_VERTEX_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXT1(ARB_vertex_buffer_object, "GetFloatv");
-         params[0] = (GLfloat)(ctx->Array.Vertex.BufferObj->Name);
+         params[0] = (GLfloat)(ctx->Array.ArrayObj->Vertex.BufferObj->Name);
          break;
       case GL_NORMAL_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXT1(ARB_vertex_buffer_object, "GetFloatv");
-         params[0] = (GLfloat)(ctx->Array.Normal.BufferObj->Name);
+         params[0] = (GLfloat)(ctx->Array.ArrayObj->Normal.BufferObj->Name);
          break;
       case GL_COLOR_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXT1(ARB_vertex_buffer_object, "GetFloatv");
-         params[0] = (GLfloat)(ctx->Array.Color.BufferObj->Name);
+         params[0] = (GLfloat)(ctx->Array.ArrayObj->Color.BufferObj->Name);
          break;
       case GL_INDEX_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXT1(ARB_vertex_buffer_object, "GetFloatv");
-         params[0] = (GLfloat)(ctx->Array.Index.BufferObj->Name);
+         params[0] = (GLfloat)(ctx->Array.ArrayObj->Index.BufferObj->Name);
          break;
       case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXT1(ARB_vertex_buffer_object, "GetFloatv");
-         params[0] = (GLfloat)(ctx->Array.TexCoord[ctx->Array.ActiveTexture].BufferObj->Name);
+         params[0] = (GLfloat)(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].BufferObj->Name);
          break;
       case GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXT1(ARB_vertex_buffer_object, "GetFloatv");
-         params[0] = (GLfloat)(ctx->Array.EdgeFlag.BufferObj->Name);
+         params[0] = (GLfloat)(ctx->Array.ArrayObj->EdgeFlag.BufferObj->Name);
          break;
       case GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXT1(ARB_vertex_buffer_object, "GetFloatv");
-         params[0] = (GLfloat)(ctx->Array.SecondaryColor.BufferObj->Name);
+         params[0] = (GLfloat)(ctx->Array.ArrayObj->SecondaryColor.BufferObj->Name);
          break;
       case GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXT1(ARB_vertex_buffer_object, "GetFloatv");
-         params[0] = (GLfloat)(ctx->Array.FogCoord.BufferObj->Name);
+         params[0] = (GLfloat)(ctx->Array.ArrayObj->FogCoord.BufferObj->Name);
          break;
       case GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXT1(ARB_vertex_buffer_object, "GetFloatv");
@@ -3645,6 +3660,9 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
       case GL_STENCIL_BACK_VALUE_MASK:
          params[0] = (GLfloat)(ctx->Stencil.ValueMask[1]);
          break;
+      case GL_STENCIL_BACK_WRITEMASK:
+         params[0] = (GLfloat)(ctx->Stencil.WriteMask[1]);
+         break;
       case GL_STENCIL_BACK_REF:
          params[0] = (GLfloat)(ctx->Stencil.Ref[1]);
          break;
@@ -3675,7 +3693,7 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
          break;
       case GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB:
          CHECK_EXT1(ARB_fragment_shader, "GetFloatv");
-         params[0] = (GLfloat)(MAX_FRAGMENT_UNIFORM_COMPONENTS);
+         params[0] = (GLfloat)(ctx->Const.FragmentProgram.MaxUniformComponents);
          break;
       case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB:
          CHECK_EXT1(ARB_fragment_shader, "GetFloatv");
@@ -3683,15 +3701,15 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
          break;
       case GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB:
          CHECK_EXT1(ARB_vertex_shader, "GetFloatv");
-         params[0] = (GLfloat)(MAX_VERTEX_UNIFORM_COMPONENTS);
+         params[0] = (GLfloat)(ctx->Const.VertexProgram.MaxUniformComponents);
          break;
       case GL_MAX_VARYING_FLOATS_ARB:
          CHECK_EXT1(ARB_vertex_shader, "GetFloatv");
-         params[0] = (GLfloat)(MAX_VARYING_FLOATS);
+         params[0] = (GLfloat)(ctx->Const.MaxVaryingFloats);
          break;
       case GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB:
          CHECK_EXT1(ARB_vertex_shader, "GetFloatv");
-         params[0] = (GLfloat)(MAX_VERTEX_TEXTURE_IMAGE_UNITS);
+         params[0] = (GLfloat)(ctx->Const.MaxVertexTextureImageUnits);
          break;
       case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB:
          CHECK_EXT1(ARB_vertex_shader, "GetFloatv");
@@ -3866,7 +3884,7 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
       case GL_CURRENT_INDEX:
          {
          FLUSH_CURRENT(ctx, 0);
-         params[0] = IROUND(ctx->Current.Index);
+         params[0] = IROUND(ctx->Current.Attrib[VERT_ATTRIB_COLOR_INDEX][0]);
          }
          break;
       case GL_CURRENT_NORMAL:
@@ -3895,6 +3913,12 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
          params[2] = IROUND(ctx->Current.RasterPos[2]);
          params[3] = IROUND(ctx->Current.RasterPos[3]);
          break;
+      case GL_CURRENT_RASTER_SECONDARY_COLOR:
+         params[0] = FLOAT_TO_INT(ctx->Current.RasterSecondaryColor[0]);
+         params[1] = FLOAT_TO_INT(ctx->Current.RasterSecondaryColor[1]);
+         params[2] = FLOAT_TO_INT(ctx->Current.RasterSecondaryColor[2]);
+         params[3] = FLOAT_TO_INT(ctx->Current.RasterSecondaryColor[3]);
+         break;
       case GL_CURRENT_RASTER_TEXTURE_COORDS:
          {
          const GLuint texUnit = ctx->Texture.CurrentUnit;
@@ -3953,7 +3977,7 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
       case GL_EDGE_FLAG:
          {
          FLUSH_CURRENT(ctx, 0);
-         params[0] = BOOLEAN_TO_INT(ctx->Current.EdgeFlag);
+         params[0] = BOOLEAN_TO_INT((ctx->Current.Attrib[VERT_ATTRIB_EDGEFLAG][0] == 1.0));
          }
          break;
       case GL_FEEDBACK_BUFFER_SIZE:
@@ -4423,7 +4447,7 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
          params[0] = IROUND(ctx->Pixel.RedBias);
          break;
       case GL_RED_BITS:
-         params[0] =  ctx->DrawBuffer->Visual.redBits ;
+         params[0] = ctx->DrawBuffer->Visual.redBits;
          break;
       case GL_RED_SCALE:
          params[0] = IROUND(ctx->Pixel.RedScale);
@@ -4597,86 +4621,86 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
          params[0] = IROUND(ctx->Pixel.ZoomY);
          break;
       case GL_VERTEX_ARRAY:
-         params[0] = BOOLEAN_TO_INT(ctx->Array.Vertex.Enabled);
+         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->Vertex.Enabled);
          break;
       case GL_VERTEX_ARRAY_SIZE:
-         params[0] = ctx->Array.Vertex.Size;
+         params[0] = ctx->Array.ArrayObj->Vertex.Size;
          break;
       case GL_VERTEX_ARRAY_TYPE:
-         params[0] = ENUM_TO_INT(ctx->Array.Vertex.Type);
+         params[0] = ENUM_TO_INT(ctx->Array.ArrayObj->Vertex.Type);
          break;
       case GL_VERTEX_ARRAY_STRIDE:
-         params[0] = ctx->Array.Vertex.Stride;
+         params[0] = ctx->Array.ArrayObj->Vertex.Stride;
          break;
       case GL_VERTEX_ARRAY_COUNT_EXT:
          params[0] = 0;
          break;
       case GL_NORMAL_ARRAY:
-         params[0] = ENUM_TO_INT(ctx->Array.Normal.Enabled);
+         params[0] = ENUM_TO_INT(ctx->Array.ArrayObj->Normal.Enabled);
          break;
       case GL_NORMAL_ARRAY_TYPE:
-         params[0] = ENUM_TO_INT(ctx->Array.Normal.Type);
+         params[0] = ENUM_TO_INT(ctx->Array.ArrayObj->Normal.Type);
          break;
       case GL_NORMAL_ARRAY_STRIDE:
-         params[0] = ctx->Array.Normal.Stride;
+         params[0] = ctx->Array.ArrayObj->Normal.Stride;
          break;
       case GL_NORMAL_ARRAY_COUNT_EXT:
          params[0] = 0;
          break;
       case GL_COLOR_ARRAY:
-         params[0] = BOOLEAN_TO_INT(ctx->Array.Color.Enabled);
+         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->Color.Enabled);
          break;
       case GL_COLOR_ARRAY_SIZE:
-         params[0] = ctx->Array.Color.Size;
+         params[0] = ctx->Array.ArrayObj->Color.Size;
          break;
       case GL_COLOR_ARRAY_TYPE:
-         params[0] = ENUM_TO_INT(ctx->Array.Color.Type);
+         params[0] = ENUM_TO_INT(ctx->Array.ArrayObj->Color.Type);
          break;
       case GL_COLOR_ARRAY_STRIDE:
-         params[0] = ctx->Array.Color.Stride;
+         params[0] = ctx->Array.ArrayObj->Color.Stride;
          break;
       case GL_COLOR_ARRAY_COUNT_EXT:
          params[0] = 0;
          break;
       case GL_INDEX_ARRAY:
-         params[0] = BOOLEAN_TO_INT(ctx->Array.Index.Enabled);
+         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->Index.Enabled);
          break;
       case GL_INDEX_ARRAY_TYPE:
-         params[0] = ENUM_TO_INT(ctx->Array.Index.Type);
+         params[0] = ENUM_TO_INT(ctx->Array.ArrayObj->Index.Type);
          break;
       case GL_INDEX_ARRAY_STRIDE:
-         params[0] = ctx->Array.Index.Stride;
+         params[0] = ctx->Array.ArrayObj->Index.Stride;
          break;
       case GL_INDEX_ARRAY_COUNT_EXT:
          params[0] = 0;
          break;
       case GL_TEXTURE_COORD_ARRAY:
-         params[0] = BOOLEAN_TO_INT(ctx->Array.TexCoord[ctx->Array.ActiveTexture].Enabled);
+         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Enabled);
          break;
       case GL_TEXTURE_COORD_ARRAY_SIZE:
-         params[0] = ctx->Array.TexCoord[ctx->Array.ActiveTexture].Size;
+         params[0] = ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Size;
          break;
       case GL_TEXTURE_COORD_ARRAY_TYPE:
-         params[0] = ENUM_TO_INT(ctx->Array.TexCoord[ctx->Array.ActiveTexture].Type);
+         params[0] = ENUM_TO_INT(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Type);
          break;
       case GL_TEXTURE_COORD_ARRAY_STRIDE:
-         params[0] = ctx->Array.TexCoord[ctx->Array.ActiveTexture].Stride;
+         params[0] = ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Stride;
          break;
       case GL_TEXTURE_COORD_ARRAY_COUNT_EXT:
          params[0] = 0;
          break;
       case GL_EDGE_FLAG_ARRAY:
-         params[0] = BOOLEAN_TO_INT(ctx->Array.EdgeFlag.Enabled);
+         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->EdgeFlag.Enabled);
          break;
       case GL_EDGE_FLAG_ARRAY_STRIDE:
-         params[0] = ctx->Array.EdgeFlag.Stride;
+         params[0] = ctx->Array.ArrayObj->EdgeFlag.Stride;
          break;
       case GL_EDGE_FLAG_ARRAY_COUNT_EXT:
          params[0] = 0;
          break;
       case GL_MAX_TEXTURE_UNITS_ARB:
          CHECK_EXT1(ARB_multitexture, "GetIntegerv");
-         params[0] = MIN2(ctx->Const.MaxTextureImageUnits, ctx->Const.MaxTextureCoordUnits);
+         params[0] = ctx->Const.MaxTextureUnits;
          break;
       case GL_ACTIVE_TEXTURE_ARB:
          CHECK_EXT1(ARB_multitexture, "GetIntegerv");
@@ -4704,13 +4728,13 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
          break;
       case GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB:
          CHECK_EXT1(ARB_texture_compression, "GetIntegerv");
-         params[0] = _mesa_get_compressed_formats(ctx, NULL);
+         params[0] = _mesa_get_compressed_formats(ctx, NULL, GL_FALSE);
          break;
       case GL_COMPRESSED_TEXTURE_FORMATS_ARB:
          CHECK_EXT1(ARB_texture_compression, "GetIntegerv");
          {
          GLint formats[100];
-         GLuint i, n = _mesa_get_compressed_formats(ctx, formats);
+         GLuint i, n = _mesa_get_compressed_formats(ctx, formats, GL_FALSE);
          ASSERT(n <= 100);
          for (i = 0; i < n; i++)
             params[i] = ENUM_TO_INT(formats[i]);
@@ -4943,19 +4967,19 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
          break;
       case GL_SECONDARY_COLOR_ARRAY_EXT:
          CHECK_EXT1(EXT_secondary_color, "GetIntegerv");
-         params[0] = BOOLEAN_TO_INT(ctx->Array.SecondaryColor.Enabled);
+         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->SecondaryColor.Enabled);
          break;
       case GL_SECONDARY_COLOR_ARRAY_TYPE_EXT:
          CHECK_EXT1(EXT_secondary_color, "GetIntegerv");
-         params[0] = ENUM_TO_INT(ctx->Array.SecondaryColor.Type);
+         params[0] = ENUM_TO_INT(ctx->Array.ArrayObj->SecondaryColor.Type);
          break;
       case GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT:
          CHECK_EXT1(EXT_secondary_color, "GetIntegerv");
-         params[0] = ctx->Array.SecondaryColor.Stride;
+         params[0] = ctx->Array.ArrayObj->SecondaryColor.Stride;
          break;
       case GL_SECONDARY_COLOR_ARRAY_SIZE_EXT:
          CHECK_EXT1(EXT_secondary_color, "GetIntegerv");
-         params[0] = ctx->Array.SecondaryColor.Size;
+         params[0] = ctx->Array.ArrayObj->SecondaryColor.Size;
          break;
       case GL_CURRENT_FOG_COORDINATE_EXT:
          CHECK_EXT1(EXT_fog_coord, "GetIntegerv");
@@ -4966,15 +4990,15 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
          break;
       case GL_FOG_COORDINATE_ARRAY_EXT:
          CHECK_EXT1(EXT_fog_coord, "GetIntegerv");
-         params[0] = BOOLEAN_TO_INT(ctx->Array.FogCoord.Enabled);
+         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->FogCoord.Enabled);
          break;
       case GL_FOG_COORDINATE_ARRAY_TYPE_EXT:
          CHECK_EXT1(EXT_fog_coord, "GetIntegerv");
-         params[0] = ENUM_TO_INT(ctx->Array.FogCoord.Type);
+         params[0] = ENUM_TO_INT(ctx->Array.ArrayObj->FogCoord.Type);
          break;
       case GL_FOG_COORDINATE_ARRAY_STRIDE_EXT:
          CHECK_EXT1(EXT_fog_coord, "GetIntegerv");
-         params[0] = ctx->Array.FogCoord.Stride;
+         params[0] = ctx->Array.ArrayObj->FogCoord.Stride;
          break;
       case GL_FOG_COORDINATE_SOURCE_EXT:
          CHECK_EXT1(EXT_fog_coord, "GetIntegerv");
@@ -5046,67 +5070,67 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
          break;
       case GL_VERTEX_ATTRIB_ARRAY0_NV:
          CHECK_EXT1(NV_vertex_program, "GetIntegerv");
-         params[0] = BOOLEAN_TO_INT(ctx->Array.VertexAttrib[0].Enabled);
+         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[0].Enabled);
          break;
       case GL_VERTEX_ATTRIB_ARRAY1_NV:
          CHECK_EXT1(NV_vertex_program, "GetIntegerv");
-         params[0] = BOOLEAN_TO_INT(ctx->Array.VertexAttrib[1].Enabled);
+         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[1].Enabled);
          break;
       case GL_VERTEX_ATTRIB_ARRAY2_NV:
          CHECK_EXT1(NV_vertex_program, "GetIntegerv");
-         params[0] = BOOLEAN_TO_INT(ctx->Array.VertexAttrib[2].Enabled);
+         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[2].Enabled);
          break;
       case GL_VERTEX_ATTRIB_ARRAY3_NV:
          CHECK_EXT1(NV_vertex_program, "GetIntegerv");
-         params[0] = BOOLEAN_TO_INT(ctx->Array.VertexAttrib[3].Enabled);
+         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[3].Enabled);
          break;
       case GL_VERTEX_ATTRIB_ARRAY4_NV:
          CHECK_EXT1(NV_vertex_program, "GetIntegerv");
-         params[0] = BOOLEAN_TO_INT(ctx->Array.VertexAttrib[4].Enabled);
+         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[4].Enabled);
          break;
       case GL_VERTEX_ATTRIB_ARRAY5_NV:
          CHECK_EXT1(NV_vertex_program, "GetIntegerv");
-         params[0] = BOOLEAN_TO_INT(ctx->Array.VertexAttrib[5].Enabled);
+         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[5].Enabled);
          break;
       case GL_VERTEX_ATTRIB_ARRAY6_NV:
          CHECK_EXT1(NV_vertex_program, "GetIntegerv");
-         params[0] = BOOLEAN_TO_INT(ctx->Array.VertexAttrib[6].Enabled);
+         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[6].Enabled);
          break;
       case GL_VERTEX_ATTRIB_ARRAY7_NV:
          CHECK_EXT1(NV_vertex_program, "GetIntegerv");
-         params[0] = BOOLEAN_TO_INT(ctx->Array.VertexAttrib[7].Enabled);
+         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[7].Enabled);
          break;
       case GL_VERTEX_ATTRIB_ARRAY8_NV:
          CHECK_EXT1(NV_vertex_program, "GetIntegerv");
-         params[0] = BOOLEAN_TO_INT(ctx->Array.VertexAttrib[8].Enabled);
+         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[8].Enabled);
          break;
       case GL_VERTEX_ATTRIB_ARRAY9_NV:
          CHECK_EXT1(NV_vertex_program, "GetIntegerv");
-         params[0] = BOOLEAN_TO_INT(ctx->Array.VertexAttrib[9].Enabled);
+         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[9].Enabled);
          break;
       case GL_VERTEX_ATTRIB_ARRAY10_NV:
          CHECK_EXT1(NV_vertex_program, "GetIntegerv");
-         params[0] = BOOLEAN_TO_INT(ctx->Array.VertexAttrib[10].Enabled);
+         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[10].Enabled);
          break;
       case GL_VERTEX_ATTRIB_ARRAY11_NV:
          CHECK_EXT1(NV_vertex_program, "GetIntegerv");
-         params[0] = BOOLEAN_TO_INT(ctx->Array.VertexAttrib[11].Enabled);
+         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[11].Enabled);
          break;
       case GL_VERTEX_ATTRIB_ARRAY12_NV:
          CHECK_EXT1(NV_vertex_program, "GetIntegerv");
-         params[0] = BOOLEAN_TO_INT(ctx->Array.VertexAttrib[12].Enabled);
+         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[12].Enabled);
          break;
       case GL_VERTEX_ATTRIB_ARRAY13_NV:
          CHECK_EXT1(NV_vertex_program, "GetIntegerv");
-         params[0] = BOOLEAN_TO_INT(ctx->Array.VertexAttrib[13].Enabled);
+         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[13].Enabled);
          break;
       case GL_VERTEX_ATTRIB_ARRAY14_NV:
          CHECK_EXT1(NV_vertex_program, "GetIntegerv");
-         params[0] = BOOLEAN_TO_INT(ctx->Array.VertexAttrib[14].Enabled);
+         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[14].Enabled);
          break;
       case GL_VERTEX_ATTRIB_ARRAY15_NV:
          CHECK_EXT1(NV_vertex_program, "GetIntegerv");
-         params[0] = BOOLEAN_TO_INT(ctx->Array.VertexAttrib[15].Enabled);
+         params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[15].Enabled);
          break;
       case GL_MAP1_VERTEX_ATTRIB0_4_NV:
          CHECK_EXT1(NV_vertex_program, "GetIntegerv");
@@ -5218,35 +5242,35 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
          break;
       case GL_VERTEX_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXT1(ARB_vertex_buffer_object, "GetIntegerv");
-         params[0] = ctx->Array.Vertex.BufferObj->Name;
+         params[0] = ctx->Array.ArrayObj->Vertex.BufferObj->Name;
          break;
       case GL_NORMAL_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXT1(ARB_vertex_buffer_object, "GetIntegerv");
-         params[0] = ctx->Array.Normal.BufferObj->Name;
+         params[0] = ctx->Array.ArrayObj->Normal.BufferObj->Name;
          break;
       case GL_COLOR_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXT1(ARB_vertex_buffer_object, "GetIntegerv");
-         params[0] = ctx->Array.Color.BufferObj->Name;
+         params[0] = ctx->Array.ArrayObj->Color.BufferObj->Name;
          break;
       case GL_INDEX_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXT1(ARB_vertex_buffer_object, "GetIntegerv");
-         params[0] = ctx->Array.Index.BufferObj->Name;
+         params[0] = ctx->Array.ArrayObj->Index.BufferObj->Name;
          break;
       case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXT1(ARB_vertex_buffer_object, "GetIntegerv");
-         params[0] = ctx->Array.TexCoord[ctx->Array.ActiveTexture].BufferObj->Name;
+         params[0] = ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].BufferObj->Name;
          break;
       case GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXT1(ARB_vertex_buffer_object, "GetIntegerv");
-         params[0] = ctx->Array.EdgeFlag.BufferObj->Name;
+         params[0] = ctx->Array.ArrayObj->EdgeFlag.BufferObj->Name;
          break;
       case GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXT1(ARB_vertex_buffer_object, "GetIntegerv");
-         params[0] = ctx->Array.SecondaryColor.BufferObj->Name;
+         params[0] = ctx->Array.ArrayObj->SecondaryColor.BufferObj->Name;
          break;
       case GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXT1(ARB_vertex_buffer_object, "GetIntegerv");
-         params[0] = ctx->Array.FogCoord.BufferObj->Name;
+         params[0] = ctx->Array.ArrayObj->FogCoord.BufferObj->Name;
          break;
       case GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXT1(ARB_vertex_buffer_object, "GetIntegerv");
@@ -5463,6 +5487,9 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
       case GL_STENCIL_BACK_VALUE_MASK:
          params[0] = ctx->Stencil.ValueMask[1];
          break;
+      case GL_STENCIL_BACK_WRITEMASK:
+         params[0] = ctx->Stencil.WriteMask[1];
+         break;
       case GL_STENCIL_BACK_REF:
          params[0] = ctx->Stencil.Ref[1];
          break;
@@ -5493,7 +5520,7 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
          break;
       case GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB:
          CHECK_EXT1(ARB_fragment_shader, "GetIntegerv");
-         params[0] = MAX_FRAGMENT_UNIFORM_COMPONENTS;
+         params[0] = ctx->Const.FragmentProgram.MaxUniformComponents;
          break;
       case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB:
          CHECK_EXT1(ARB_fragment_shader, "GetIntegerv");
@@ -5501,15 +5528,15 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
          break;
       case GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB:
          CHECK_EXT1(ARB_vertex_shader, "GetIntegerv");
-         params[0] = MAX_VERTEX_UNIFORM_COMPONENTS;
+         params[0] = ctx->Const.VertexProgram.MaxUniformComponents;
          break;
       case GL_MAX_VARYING_FLOATS_ARB:
          CHECK_EXT1(ARB_vertex_shader, "GetIntegerv");
-         params[0] = MAX_VARYING_FLOATS;
+         params[0] = ctx->Const.MaxVaryingFloats;
          break;
       case GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB:
          CHECK_EXT1(ARB_vertex_shader, "GetIntegerv");
-         params[0] = MAX_VERTEX_TEXTURE_IMAGE_UNITS;
+         params[0] = ctx->Const.MaxVertexTextureImageUnits;
          break;
       case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB:
          CHECK_EXT1(ARB_vertex_shader, "GetIntegerv");