enable.c revision ed087ee49808a692ce8a0389fcf6c9da27f99d8e
16dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**
26dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * \file enable.c
36dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * Enable/disable/query GL capabilities.
46dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */
56dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell
6afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/*
7afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Mesa 3-D graphics library
85e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen *
9454043c4ae20a92ff0a56f41fdb6aa7a75af00c8Brian * Copyright (C) 1999-2007  Brian Paul   All Rights Reserved.
105e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen *
11afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Permission is hereby granted, free of charge, to any person obtaining a
12afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * copy of this software and associated documentation files (the "Software"),
13afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * to deal in the Software without restriction, including without limitation
14afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * the rights to use, copy, modify, merge, publish, distribute, sublicense,
15afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * and/or sell copies of the Software, and to permit persons to whom the
16afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Software is furnished to do so, subject to the following conditions:
175e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen *
18afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * The above copyright notice and this permission notice shall be included
19afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * in all copies or substantial portions of the Software.
205e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen *
21afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
22afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
24afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
25afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
26afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */
28afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
29afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
30fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul#include "glheader.h"
31ec4a21b0e21e8c706f26db5308fb267b6979b631Brian Paul#include "clip.h"
32afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "context.h"
33afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "enable.h"
34afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "light.h"
35afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "simple_list.h"
36db61b9ce39bccc43140357652ceb78baaf2aea44Vinson Lee#include "mfeatures.h"
375e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen#include "mtypes.h"
38afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "enums.h"
396f4fd3a4322a3d7c63207999e08b07ba46b0fc66Krzysztof Czurylo#include "api_arrayelt.h"
40eb82373abb08171d7fcb15b5f4f229fc9ca9aa91Brian Paul#include "texstate.h"
413c63452e64df7e10aa073c6c3b9492b1d7dabbb8Brian Paul
42afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
43afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
4402c03ef6b4762adf33b73528c9fd672ef4697763Brian Paul#define CHECK_EXTENSION(EXTNAME, CAP)					\
4586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul   if (!ctx->Extensions.EXTNAME) {					\
46f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul      goto invalid_enum_error;						\
4786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul   }
4886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul
4986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul
508dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian/**
518dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian * Helper to enable/disable client-side state.
528dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian */
53cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwellstatic void
54f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergclient_state(struct gl_context *ctx, GLenum cap, GLboolean state)
55cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell{
5658a4328e96160ad6c529edb321cdc5ea929a3f02Brian Paul   struct gl_array_object *arrayObj = ctx->Array.ArrayObj;
57f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich   GLbitfield64 flag;
5899efde461d3b8615863bdb7308e05289e0db0422Keith Whitwell   GLboolean *var;
59cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
60cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   switch (cap) {
6186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ARRAY:
62762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         var = &arrayObj->VertexAttrib[VERT_ATTRIB_POS].Enabled;
63104b81def4c09f3012e44778d104f00ff87dd4f0Mathias Fröhlich         flag = VERT_BIT_POS;
6486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
6586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_NORMAL_ARRAY:
66762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         var = &arrayObj->VertexAttrib[VERT_ATTRIB_NORMAL].Enabled;
67104b81def4c09f3012e44778d104f00ff87dd4f0Mathias Fröhlich         flag = VERT_BIT_NORMAL;
6886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
6986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_COLOR_ARRAY:
70762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         var = &arrayObj->VertexAttrib[VERT_ATTRIB_COLOR0].Enabled;
71104b81def4c09f3012e44778d104f00ff87dd4f0Mathias Fröhlich         flag = VERT_BIT_COLOR0;
7286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
7386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_INDEX_ARRAY:
74762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         var = &arrayObj->VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Enabled;
75104b81def4c09f3012e44778d104f00ff87dd4f0Mathias Fröhlich         flag = VERT_BIT_COLOR_INDEX;
7686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
7786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_TEXTURE_COORD_ARRAY:
78762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         var = &arrayObj->VertexAttrib[VERT_ATTRIB_TEX(ctx->Array.ActiveTexture)].Enabled;
79104b81def4c09f3012e44778d104f00ff87dd4f0Mathias Fröhlich         flag = VERT_BIT_TEX(ctx->Array.ActiveTexture);
8086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
8186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_EDGE_FLAG_ARRAY:
82762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         var = &arrayObj->VertexAttrib[VERT_ATTRIB_EDGEFLAG].Enabled;
83104b81def4c09f3012e44778d104f00ff87dd4f0Mathias Fröhlich         flag = VERT_BIT_EDGEFLAG;
8486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
8586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_FOG_COORDINATE_ARRAY_EXT:
86762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         var = &arrayObj->VertexAttrib[VERT_ATTRIB_FOG].Enabled;
87104b81def4c09f3012e44778d104f00ff87dd4f0Mathias Fröhlich         flag = VERT_BIT_FOG;
8886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
8986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_SECONDARY_COLOR_ARRAY_EXT:
90762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         var = &arrayObj->VertexAttrib[VERT_ATTRIB_COLOR1].Enabled;
91104b81def4c09f3012e44778d104f00ff87dd4f0Mathias Fröhlich         flag = VERT_BIT_COLOR1;
9286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
9386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul
941cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul#if FEATURE_point_size_array
951cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul      case GL_POINT_SIZE_ARRAY_OES:
96762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         var = &arrayObj->VertexAttrib[VERT_ATTRIB_POINT_SIZE].Enabled;
97104b81def4c09f3012e44778d104f00ff87dd4f0Mathias Fröhlich         flag = VERT_BIT_POINT_SIZE;
981cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul         break;
991cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul#endif
1001cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul
1018dfc5b9863f08a713177fd92847573e17febbac9Brian Paul#if FEATURE_NV_vertex_program
10286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY0_NV:
10386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY1_NV:
10486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY2_NV:
10586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY3_NV:
10686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY4_NV:
10786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY5_NV:
10886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY6_NV:
10986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY7_NV:
11086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY8_NV:
11186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY9_NV:
11286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY10_NV:
11386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY11_NV:
11486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY12_NV:
11586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY13_NV:
11686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY14_NV:
11786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY15_NV:
11802c03ef6b4762adf33b73528c9fd672ef4697763Brian Paul         CHECK_EXTENSION(NV_vertex_program, cap);
11986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         {
12086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            GLint n = (GLint) cap - GL_VERTEX_ATTRIB_ARRAY0_NV;
1219b9c7da966a4f5182461be90dd6615fbe0399e3cBrian Paul            ASSERT(VERT_ATTRIB_GENERIC(n) < Elements(arrayObj->VertexAttrib));
122762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich            var = &arrayObj->VertexAttrib[VERT_ATTRIB_GENERIC(n)].Enabled;
123104b81def4c09f3012e44778d104f00ff87dd4f0Mathias Fröhlich            flag = VERT_BIT_GENERIC(n);
12486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         }
12586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
1268dfc5b9863f08a713177fd92847573e17febbac9Brian Paul#endif /* FEATURE_NV_vertex_program */
1278dfc5b9863f08a713177fd92847573e17febbac9Brian Paul
1287f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul      /* GL_NV_primitive_restart */
1297f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul      case GL_PRIMITIVE_RESTART_NV:
1307f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul	 if (!ctx->Extensions.NV_primitive_restart) {
1317f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul            goto invalid_enum_error;
1327f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul         }
1337f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul         var = &ctx->Array.PrimitiveRestart;
1342701eb342b358da638b8c0f281c791c2b16b300bBrian Paul         flag = 0;
1357f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul         break;
1367f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul
13786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      default:
138f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul         goto invalid_enum_error;
139cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   }
140cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
14168c48df2bf8dd57ce96db430fff1b69f40a793ceAlan Hourihane   if (*var == state)
142cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell      return;
143cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
144cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   FLUSH_VERTICES(ctx, _NEW_ARRAY);
145cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   ctx->Array.NewState |= flag;
1466f4fd3a4322a3d7c63207999e08b07ba46b0fc66Krzysztof Czurylo
1476f4fd3a4322a3d7c63207999e08b07ba46b0fc66Krzysztof Czurylo   _ae_invalidate_state(ctx, _NEW_ARRAY);
1486f4fd3a4322a3d7c63207999e08b07ba46b0fc66Krzysztof Czurylo
149cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   *var = state;
150cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
15122144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes   if (state)
1529b9c7da966a4f5182461be90dd6615fbe0399e3cBrian Paul      arrayObj->_Enabled |= flag;
153cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   else
1549b9c7da966a4f5182461be90dd6615fbe0399e3cBrian Paul      arrayObj->_Enabled &= ~flag;
155cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
156cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   if (ctx->Driver.Enable) {
1578dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian      ctx->Driver.Enable( ctx, cap, state );
158cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   }
159f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul
160f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul   return;
161f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul
162f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paulinvalid_enum_error:
163f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul   _mesa_error(ctx, GL_INVALID_ENUM, "gl%sClientState(0x%x)",
164f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul               state ? "Enable" : "Disable", cap);
165cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell}
166cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
167cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
1686dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**
1696dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * Enable GL capability.
1708dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian * \param cap  state to enable/disable.
1716dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell *
1726dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * Get's the current context, assures that we're outside glBegin()/glEnd() and
1736dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * calls client_state().
1746dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */
175c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY
176cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell_mesa_EnableClientState( GLenum cap )
177cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell{
178cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   GET_CURRENT_CONTEXT(ctx);
179cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   ASSERT_OUTSIDE_BEGIN_END(ctx);
180cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   client_state( ctx, cap, GL_TRUE );
181cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell}
182cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
183cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
1846dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**
1856dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * Disable GL capability.
1868dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian * \param cap  state to enable/disable.
1876dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell *
1886dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * Get's the current context, assures that we're outside glBegin()/glEnd() and
1896dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * calls client_state().
1906dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */
191c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY
192cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell_mesa_DisableClientState( GLenum cap )
193cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell{
194cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   GET_CURRENT_CONTEXT(ctx);
195cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   ASSERT_OUTSIDE_BEGIN_END(ctx);
196cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   client_state( ctx, cap, GL_FALSE );
197cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell}
198cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
199afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
20086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul#undef CHECK_EXTENSION
20102c03ef6b4762adf33b73528c9fd672ef4697763Brian Paul#define CHECK_EXTENSION(EXTNAME, CAP)					\
20202c03ef6b4762adf33b73528c9fd672ef4697763Brian Paul   if (!ctx->Extensions.EXTNAME) {					\
203f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul      goto invalid_enum_error;						\
20486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul   }
20586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul
206efb2ade520f47187ac70abe57185358017b63caaBrian Paul#define CHECK_EXTENSION2(EXT1, EXT2, CAP)				\
207efb2ade520f47187ac70abe57185358017b63caaBrian Paul   if (!ctx->Extensions.EXT1 && !ctx->Extensions.EXT2) {		\
208f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul      goto invalid_enum_error;						\
209efb2ade520f47187ac70abe57185358017b63caaBrian Paul   }
210efb2ade520f47187ac70abe57185358017b63caaBrian Paul
211efb2ade520f47187ac70abe57185358017b63caaBrian Paul
212e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul
213e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul/**
214e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul * Return pointer to current texture unit for setting/getting coordinate
215e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul * state.
216d0d767ad4c6ee13c72577b072b24aa06841f6357Brian Paul * Note that we'll set GL_INVALID_OPERATION and return NULL if the active
217d0d767ad4c6ee13c72577b072b24aa06841f6357Brian Paul * texture unit is higher than the number of supported coordinate units.
218e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul */
219e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paulstatic struct gl_texture_unit *
220f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergget_texcoord_unit(struct gl_context *ctx)
221e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul{
222e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul   if (ctx->Texture.CurrentUnit >= ctx->Const.MaxTextureCoordUnits) {
223e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul      _mesa_error(ctx, GL_INVALID_OPERATION, "glEnable/Disable(texcoord unit)");
224e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul      return NULL;
225e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul   }
226e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul   else {
227e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul      return &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
228e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul   }
229e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul}
230e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul
231e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul
23258dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick/**
23358dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick * Helper function to enable or disable a texture target.
234c0d3761c167c2d952e92c46cf3a0e26461985adaBrian Paul * \param bit  one of the TEXTURE_x_BIT values
235c0d3761c167c2d952e92c46cf3a0e26461985adaBrian Paul * \return GL_TRUE if state is changing or GL_FALSE if no change
23658dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick */
23758dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanickstatic GLboolean
238f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergenable_texture(struct gl_context *ctx, GLboolean state, GLbitfield texBit)
23958dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick{
240eb82373abb08171d7fcb15b5f4f229fc9ca9aa91Brian Paul   struct gl_texture_unit *texUnit = _mesa_get_current_tex_unit(ctx);
241c0d3761c167c2d952e92c46cf3a0e26461985adaBrian Paul   const GLbitfield newenabled = state
242c0d3761c167c2d952e92c46cf3a0e26461985adaBrian Paul      ? (texUnit->Enabled | texBit) : (texUnit->Enabled & ~texBit);
24358dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick
244adfa778c8ea436d6e62c37327b44f6ff359ed63fBrian Paul   if (texUnit->Enabled == newenabled)
24558dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick       return GL_FALSE;
24658dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick
24758dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick   FLUSH_VERTICES(ctx, _NEW_TEXTURE);
24858dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick   texUnit->Enabled = newenabled;
24958dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick   return GL_TRUE;
25058dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick}
25158dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick
25286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul
2536dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**
2548dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian * Helper function to enable or disable state.
2556dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell *
2566dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * \param ctx GL context.
2578dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian * \param cap  the state to enable/disable
2586dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * \param state whether to enable or disable the specified capability.
2596dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell *
2606dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * Updates the current context and flushes the vertices as needed. For
2616dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * capabilities associated with extensions it verifies that those extensions
2626dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * are effectivly present before updating. Notifies the driver via
2636dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * dd_function_table::Enable.
264afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */
2658dcfcad7a2598ba835930aac8f3fd6576e464c1cBrianvoid
266f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg_mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)
267afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
2685e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen   if (MESA_VERBOSE & VERBOSE_API)
2694753d60dd070bb08d0116076bcc08025c86ce857Brian Paul      _mesa_debug(ctx, "%s %s (newstate is %x)\n",
2709a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paul                  state ? "glEnable" : "glDisable",
2719a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paul                  _mesa_lookup_enum_by_nr(cap),
2729a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paul                  ctx->NewState);
273afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
274afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   switch (cap) {
27586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_ALPHA_TEST:
27686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Color.AlphaEnabled == state)
27786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
27886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_COLOR);
27986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Color.AlphaEnabled = state;
28086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
28186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_AUTO_NORMAL:
28286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.AutoNormal == state)
28386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
28486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
28586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.AutoNormal = state;
28686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
28786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_BLEND:
2883728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul         {
289d0d767ad4c6ee13c72577b072b24aa06841f6357Brian Paul            GLbitfield newEnabled =
290d0d767ad4c6ee13c72577b072b24aa06841f6357Brian Paul               state * ((1 << ctx->Const.MaxDrawBuffers) - 1);
2913728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul            if (newEnabled != ctx->Color.BlendEnabled) {
2923728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul               FLUSH_VERTICES(ctx, _NEW_COLOR);
2933728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul               ctx->Color.BlendEnabled = newEnabled;
2943728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul            }
2953728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul         }
29686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
2976dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell#if FEATURE_userclip
2982d686fe911a89fa477ee3848da41ebfb100500bfPaul Berry      case GL_CLIP_DISTANCE0:
2992d686fe911a89fa477ee3848da41ebfb100500bfPaul Berry      case GL_CLIP_DISTANCE1:
3002d686fe911a89fa477ee3848da41ebfb100500bfPaul Berry      case GL_CLIP_DISTANCE2:
3012d686fe911a89fa477ee3848da41ebfb100500bfPaul Berry      case GL_CLIP_DISTANCE3:
3022d686fe911a89fa477ee3848da41ebfb100500bfPaul Berry      case GL_CLIP_DISTANCE4:
3032d686fe911a89fa477ee3848da41ebfb100500bfPaul Berry      case GL_CLIP_DISTANCE5:
3042d686fe911a89fa477ee3848da41ebfb100500bfPaul Berry      case GL_CLIP_DISTANCE6:
3052d686fe911a89fa477ee3848da41ebfb100500bfPaul Berry      case GL_CLIP_DISTANCE7:
30686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         {
307b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry            const GLuint p = cap - GL_CLIP_DISTANCE0;
308b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry
309b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry            if (p >= ctx->Const.MaxClipPlanes)
310b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry               goto invalid_enum_error;
31186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul
312d0d767ad4c6ee13c72577b072b24aa06841f6357Brian Paul            if ((ctx->Transform.ClipPlanesEnabled & (1 << p))
313d0d767ad4c6ee13c72577b072b24aa06841f6357Brian Paul                == ((GLuint) state << p))
31486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul               return;
31586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul
31686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            FLUSH_VERTICES(ctx, _NEW_TRANSFORM);
31786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul
31886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            if (state) {
319103bc0f75c00dfcf671dc50d8d9666f88a42a59dBrian Paul               ctx->Transform.ClipPlanesEnabled |= (1 << p);
320ec4a21b0e21e8c706f26db5308fb267b6979b631Brian Paul               _mesa_update_clip_plane(ctx, p);
32186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            }
322f66de793654e20704a8180538207a4736ada7996Brian Paul            else {
323103bc0f75c00dfcf671dc50d8d9666f88a42a59dBrian Paul               ctx->Transform.ClipPlanesEnabled &= ~(1 << p);
324f66de793654e20704a8180538207a4736ada7996Brian Paul            }
32586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         }
32686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
3276dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell#endif
32886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_COLOR_MATERIAL:
32986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Light.ColorMaterialEnabled == state)
33086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
33186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_LIGHT);
332d40f9fa0ec4699627aad37f0c06409ead5ee002aBrian Paul         FLUSH_CURRENT(ctx, 0);
33386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Light.ColorMaterialEnabled = state;
33486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (state) {
33586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            _mesa_update_color_material( ctx,
33686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul                                  ctx->Current.Attrib[VERT_ATTRIB_COLOR0] );
33786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         }
33886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
33986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_CULL_FACE:
34086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Polygon.CullFlag == state)
34186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
34286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_POLYGON);
34386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Polygon.CullFlag = state;
34486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
34586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_DEPTH_TEST:
3468dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian         if (ctx->Depth.Test == state)
34786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
34886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_DEPTH);
34986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Depth.Test = state;
35086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
351ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled      case GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB:
352ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled         ctx->Debug.SyncOutput = state;
353ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled         break;
35486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_DITHER:
3558dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian         if (ctx->Color.DitherFlag == state)
35686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
35786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_COLOR);
35886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Color.DitherFlag = state;
35986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
36086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_FOG:
3618dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian         if (ctx->Fog.Enabled == state)
36286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
36386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_FOG);
36486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Fog.Enabled = state;
36586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
36686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_LIGHT0:
36786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_LIGHT1:
36886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_LIGHT2:
36986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_LIGHT3:
37086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_LIGHT4:
37186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_LIGHT5:
37286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_LIGHT6:
37386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_LIGHT7:
37486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Light.Light[cap-GL_LIGHT0].Enabled == state)
37586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
37686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_LIGHT);
37786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Light.Light[cap-GL_LIGHT0].Enabled = state;
37886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (state) {
37986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            insert_at_tail(&ctx->Light.EnabledList,
38086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul                           &ctx->Light.Light[cap-GL_LIGHT0]);
38186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         }
38286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         else {
38386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            remove_from_list(&ctx->Light.Light[cap-GL_LIGHT0]);
38486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         }
38586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
38686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_LIGHTING:
38786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Light.Enabled == state)
38886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
389454043c4ae20a92ff0a56f41fdb6aa7a75af00c8Brian         FLUSH_VERTICES(ctx, _NEW_LIGHT);
390454043c4ae20a92ff0a56f41fdb6aa7a75af00c8Brian         ctx->Light.Enabled = state;
391ed6d5ff6f8fdd34aaaa126119dbd8e1e321859d8Brian         if (ctx->Light.Enabled && ctx->Light.Model.TwoSide)
392ed6d5ff6f8fdd34aaaa126119dbd8e1e321859d8Brian            ctx->_TriangleCaps |= DD_TRI_LIGHT_TWOSIDE;
393ed6d5ff6f8fdd34aaaa126119dbd8e1e321859d8Brian         else
394ed6d5ff6f8fdd34aaaa126119dbd8e1e321859d8Brian            ctx->_TriangleCaps &= ~DD_TRI_LIGHT_TWOSIDE;
39586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
39686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_LINE_SMOOTH:
39786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Line.SmoothFlag == state)
39886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
39986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_LINE);
40086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Line.SmoothFlag = state;
401ed6d5ff6f8fdd34aaaa126119dbd8e1e321859d8Brian         ctx->_TriangleCaps ^= DD_LINE_SMOOTH;
40286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
40386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_LINE_STIPPLE:
40486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Line.StippleFlag == state)
40586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
40686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_LINE);
40786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Line.StippleFlag = state;
408ed6d5ff6f8fdd34aaaa126119dbd8e1e321859d8Brian         ctx->_TriangleCaps ^= DD_LINE_STIPPLE;
40986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
41086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_INDEX_LOGIC_OP:
41186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Color.IndexLogicOpEnabled == state)
41286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
41386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_COLOR);
41486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Color.IndexLogicOpEnabled = state;
41586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
41686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_COLOR_LOGIC_OP:
41786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Color.ColorLogicOpEnabled == state)
41886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
41986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_COLOR);
42086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Color.ColorLogicOpEnabled = state;
42186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
42286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_COLOR_4:
42386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map1Color4 == state)
42486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
42586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
42686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map1Color4 = state;
42786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
42886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_INDEX:
42986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map1Index == state)
43086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
43186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
43286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map1Index = state;
43386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
43486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_NORMAL:
43586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map1Normal == state)
43686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
43786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
43886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map1Normal = state;
43986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
44086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_TEXTURE_COORD_1:
44186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map1TextureCoord1 == state)
44286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
44386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
44486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map1TextureCoord1 = state;
44586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
44686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_TEXTURE_COORD_2:
44786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map1TextureCoord2 == state)
44886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
44986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
45086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map1TextureCoord2 = state;
45186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
45286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_TEXTURE_COORD_3:
45386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map1TextureCoord3 == state)
45486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
45586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
45686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map1TextureCoord3 = state;
45786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
45886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_TEXTURE_COORD_4:
45986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map1TextureCoord4 == state)
46086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
46186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
46286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map1TextureCoord4 = state;
46386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
46486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_3:
46586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map1Vertex3 == state)
46686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
46786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
46886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map1Vertex3 = state;
46986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
47086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_4:
47186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map1Vertex4 == state)
47286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
47386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
47486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map1Vertex4 = state;
47586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
47686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_COLOR_4:
47786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map2Color4 == state)
47886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
47986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
48086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map2Color4 = state;
48186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
48286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_INDEX:
48386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map2Index == state)
48486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
48586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
48686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map2Index = state;
48786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
48886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_NORMAL:
48986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map2Normal == state)
49086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
49186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
49286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map2Normal = state;
49386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
49486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_TEXTURE_COORD_1:
49586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map2TextureCoord1 == state)
49686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
49786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
49886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map2TextureCoord1 = state;
49986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
50086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_TEXTURE_COORD_2:
50186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map2TextureCoord2 == state)
50286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
50386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
50486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map2TextureCoord2 = state;
50586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
50686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_TEXTURE_COORD_3:
50786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map2TextureCoord3 == state)
50886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
50986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
51086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map2TextureCoord3 = state;
51186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
51286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_TEXTURE_COORD_4:
51386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map2TextureCoord4 == state)
51486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
51586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
51686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map2TextureCoord4 = state;
51786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
51886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_3:
51986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map2Vertex3 == state)
52086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
52186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
52286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map2Vertex3 = state;
52386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
52486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_4:
52586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map2Vertex4 == state)
52686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
52786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
52886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map2Vertex4 = state;
52986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
53086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_NORMALIZE:
53186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Transform.Normalize == state)
53286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
53386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_TRANSFORM);
53486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Transform.Normalize = state;
53586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
53686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_POINT_SMOOTH:
5378dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian         if (ctx->Point.SmoothFlag == state)
53886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
53986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_POINT);
54086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Point.SmoothFlag = state;
541ed6d5ff6f8fdd34aaaa126119dbd8e1e321859d8Brian         ctx->_TriangleCaps ^= DD_POINT_SMOOTH;
54286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
54386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_POLYGON_SMOOTH:
5448dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian         if (ctx->Polygon.SmoothFlag == state)
54586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
54686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_POLYGON);
54786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Polygon.SmoothFlag = state;
548ed6d5ff6f8fdd34aaaa126119dbd8e1e321859d8Brian         ctx->_TriangleCaps ^= DD_TRI_SMOOTH;
54986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
55086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_POLYGON_STIPPLE:
5518dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian         if (ctx->Polygon.StippleFlag == state)
55286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
55386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_POLYGON);
55486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Polygon.StippleFlag = state;
555ed6d5ff6f8fdd34aaaa126119dbd8e1e321859d8Brian         ctx->_TriangleCaps ^= DD_TRI_STIPPLE;
55686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
55786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_POLYGON_OFFSET_POINT:
5588dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian         if (ctx->Polygon.OffsetPoint == state)
55986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
56086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_POLYGON);
56186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Polygon.OffsetPoint = state;
56286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
56386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_POLYGON_OFFSET_LINE:
5648dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian         if (ctx->Polygon.OffsetLine == state)
56586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
56686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_POLYGON);
56786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Polygon.OffsetLine = state;
56886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
56986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_POLYGON_OFFSET_FILL:
5708dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian         if (ctx->Polygon.OffsetFill == state)
57186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
57286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_POLYGON);
57386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Polygon.OffsetFill = state;
57486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
57586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_RESCALE_NORMAL_EXT:
57686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Transform.RescaleNormals == state)
57786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
57886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_TRANSFORM);
57986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Transform.RescaleNormals = state;
58086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
58186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_SCISSOR_TEST:
5828dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian         if (ctx->Scissor.Enabled == state)
58386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
58486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_SCISSOR);
58586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Scissor.Enabled = state;
58686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
58786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_STENCIL_TEST:
5888dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian         if (ctx->Stencil.Enabled == state)
58986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
59086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_STENCIL);
59186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Stencil.Enabled = state;
59286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
59358dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick      case GL_TEXTURE_1D:
59458dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         if (!enable_texture(ctx, state, TEXTURE_1D_BIT)) {
59586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
59658dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         }
59786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
59858dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick      case GL_TEXTURE_2D:
59958dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         if (!enable_texture(ctx, state, TEXTURE_2D_BIT)) {
60086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
60158dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         }
60286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
60358dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick      case GL_TEXTURE_3D:
60458dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         if (!enable_texture(ctx, state, TEXTURE_3D_BIT)) {
60586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
60658dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         }
60786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
608e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul      case GL_TEXTURE_GEN_S:
609e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul      case GL_TEXTURE_GEN_T:
610933b99f113c97588b616daad2fb19456eece96e2Brian Paul      case GL_TEXTURE_GEN_R:
611933b99f113c97588b616daad2fb19456eece96e2Brian Paul      case GL_TEXTURE_GEN_Q:
612e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul         {
613e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul            struct gl_texture_unit *texUnit = get_texcoord_unit(ctx);
614e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul            if (texUnit) {
615933b99f113c97588b616daad2fb19456eece96e2Brian Paul               GLbitfield coordBit = S_BIT << (cap - GL_TEXTURE_GEN_S);
616933b99f113c97588b616daad2fb19456eece96e2Brian Paul               GLbitfield newenabled = texUnit->TexGenEnabled & ~coordBit;
617e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul               if (state)
618933b99f113c97588b616daad2fb19456eece96e2Brian Paul                  newenabled |= coordBit;
619e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul               if (texUnit->TexGenEnabled == newenabled)
620e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul                  return;
621e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul               FLUSH_VERTICES(ctx, _NEW_TEXTURE);
622e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul               texUnit->TexGenEnabled = newenabled;
623e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul            }
624e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul         }
62586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
62686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul
62708fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg#if FEATURE_ES1
62808fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg      case GL_TEXTURE_GEN_STR_OES:
62908fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg	 /* disable S, T, and R at the same time */
63008fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg	 {
63108fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg            struct gl_texture_unit *texUnit = get_texcoord_unit(ctx);
63208fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg            if (texUnit) {
63308fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg               GLuint newenabled =
63408fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg		  texUnit->TexGenEnabled & ~STR_BITS;
63508fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg               if (state)
63608fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg                  newenabled |= STR_BITS;
63708fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg               if (texUnit->TexGenEnabled == newenabled)
63808fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg                  return;
63908fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg               FLUSH_VERTICES(ctx, _NEW_TEXTURE);
64008fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg               texUnit->TexGenEnabled = newenabled;
64108fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg            }
64208fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg         }
64308fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg         break;
64408fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg#endif
64508fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg
646192baaac0fc4701e82dcc3e19b3033f81dd82a62Brian Paul      /* client-side state */
64786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ARRAY:
64886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_NORMAL_ARRAY:
64986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_COLOR_ARRAY:
65086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_INDEX_ARRAY:
65186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_TEXTURE_COORD_ARRAY:
65286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_EDGE_FLAG_ARRAY:
65386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_FOG_COORDINATE_ARRAY_EXT:
65486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_SECONDARY_COLOR_ARRAY_EXT:
6551cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul      case GL_POINT_SIZE_ARRAY_OES:
65686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         client_state( ctx, cap, state );
65786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         return;
658afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
65986fc370d399167ec9bb978d053d4a72215c86c16Brian Paul      /* GL_ARB_texture_cube_map */
66086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_TEXTURE_CUBE_MAP_ARB:
66158dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         CHECK_EXTENSION(ARB_texture_cube_map, cap);
66258dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         if (!enable_texture(ctx, state, TEXTURE_CUBE_BIT)) {
66358dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick            return;
66486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         }
66586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
66646b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell
66786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      /* GL_EXT_secondary_color */
66886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_COLOR_SUM_EXT:
669da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger         CHECK_EXTENSION2(EXT_secondary_color, ARB_vertex_program, cap);
67086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Fog.ColorSumEnabled == state)
67186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
67286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_FOG);
67386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Fog.ColorSumEnabled = state;
67486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
67506d05afdd687fcd1d59d46c6a86c2e5707e1859bBrian Paul
676736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul      /* GL_ARB_multisample */
67786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MULTISAMPLE_ARB:
67886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Multisample.Enabled == state)
67986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
68086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_MULTISAMPLE);
68186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Multisample.Enabled = state;
68286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
68386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_SAMPLE_ALPHA_TO_COVERAGE_ARB:
68486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Multisample.SampleAlphaToCoverage == state)
68586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
68686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_MULTISAMPLE);
68786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Multisample.SampleAlphaToCoverage = state;
68886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
68986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_SAMPLE_ALPHA_TO_ONE_ARB:
69086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Multisample.SampleAlphaToOne == state)
69186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
69286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_MULTISAMPLE);
69386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Multisample.SampleAlphaToOne = state;
69486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
69586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_SAMPLE_COVERAGE_ARB:
69686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Multisample.SampleCoverage == state)
69786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
69886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_MULTISAMPLE);
69986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Multisample.SampleCoverage = state;
70086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
70186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_SAMPLE_COVERAGE_INVERT_ARB:
70286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Multisample.SampleCoverageInvert == state)
70386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
70486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_MULTISAMPLE);
70586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Multisample.SampleCoverageInvert = state;
70686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
7078c2f6c5059a60d845716277973c826f4069926e6Brian Paul
7088c2f6c5059a60d845716277973c826f4069926e6Brian Paul      /* GL_IBM_rasterpos_clip */
70986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_RASTER_POSITION_UNCLIPPED_IBM:
71002c03ef6b4762adf33b73528c9fd672ef4697763Brian Paul         CHECK_EXTENSION(IBM_rasterpos_clip, cap);
71186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Transform.RasterPositionUnclipped == state)
71286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
71386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_TRANSFORM);
71486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Transform.RasterPositionUnclipped = state;
71586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
716736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul
7176c408b46678637959dba04663fbc34eb9c4bc397Brian Paul      /* GL_NV_point_sprite */
7186c408b46678637959dba04663fbc34eb9c4bc397Brian Paul      case GL_POINT_SPRITE_NV:
71963736723678ef30e7f90835cfbd48c520e39bf11Ian Romanick         CHECK_EXTENSION2(NV_point_sprite, ARB_point_sprite, cap);
7206c408b46678637959dba04663fbc34eb9c4bc397Brian Paul         if (ctx->Point.PointSprite == state)
72186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
72286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_POINT);
7236c408b46678637959dba04663fbc34eb9c4bc397Brian Paul         ctx->Point.PointSprite = state;
72486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
72586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul
72693da673904d4c520d3fbd2210e53777bf1598ac6Roland Scheidegger#if FEATURE_NV_vertex_program || FEATURE_ARB_vertex_program
727e1e03b32ab651e992f7b979eba046fdc84fedf2eRoland Scheidegger      case GL_VERTEX_PROGRAM_ARB:
728e1e03b32ab651e992f7b979eba046fdc84fedf2eRoland Scheidegger         CHECK_EXTENSION2(ARB_vertex_program, NV_vertex_program, cap);
72986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->VertexProgram.Enabled == state)
73086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
7313abf746a7eae52220485cd031aecec2ca9e6103eKeith Whitwell         FLUSH_VERTICES(ctx, _NEW_PROGRAM);
73286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->VertexProgram.Enabled = state;
73386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
734e1e03b32ab651e992f7b979eba046fdc84fedf2eRoland Scheidegger      case GL_VERTEX_PROGRAM_POINT_SIZE_ARB:
735e1e03b32ab651e992f7b979eba046fdc84fedf2eRoland Scheidegger         CHECK_EXTENSION2(ARB_vertex_program, NV_vertex_program, cap);
73686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->VertexProgram.PointSizeEnabled == state)
73786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
7383abf746a7eae52220485cd031aecec2ca9e6103eKeith Whitwell         FLUSH_VERTICES(ctx, _NEW_PROGRAM);
73986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->VertexProgram.PointSizeEnabled = state;
74086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
741e1e03b32ab651e992f7b979eba046fdc84fedf2eRoland Scheidegger      case GL_VERTEX_PROGRAM_TWO_SIDE_ARB:
742e1e03b32ab651e992f7b979eba046fdc84fedf2eRoland Scheidegger         CHECK_EXTENSION2(ARB_vertex_program, NV_vertex_program, cap);
74386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->VertexProgram.TwoSideEnabled == state)
74486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
7453abf746a7eae52220485cd031aecec2ca9e6103eKeith Whitwell         FLUSH_VERTICES(ctx, _NEW_PROGRAM);
74686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->VertexProgram.TwoSideEnabled = state;
74786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
74893da673904d4c520d3fbd2210e53777bf1598ac6Roland Scheidegger#endif
74993da673904d4c520d3fbd2210e53777bf1598ac6Roland Scheidegger#if FEATURE_NV_vertex_program
75086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB0_4_NV:
75186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB1_4_NV:
75286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB2_4_NV:
75386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB3_4_NV:
75486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB4_4_NV:
75586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB5_4_NV:
75686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB6_4_NV:
75786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB7_4_NV:
75886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB8_4_NV:
75986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB9_4_NV:
76086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB10_4_NV:
76186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB11_4_NV:
76286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB12_4_NV:
76386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB13_4_NV:
76486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB14_4_NV:
76586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB15_4_NV:
76602c03ef6b4762adf33b73528c9fd672ef4697763Brian Paul         CHECK_EXTENSION(NV_vertex_program, cap);
767bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         {
768bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            const GLuint map = (GLuint) (cap - GL_MAP1_VERTEX_ATTRIB0_4_NV);
769bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            FLUSH_VERTICES(ctx, _NEW_EVAL);
770bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            ctx->Eval.Map1Attrib[map] = state;
771bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         }
77286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
77386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB0_4_NV:
77486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB1_4_NV:
77586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB2_4_NV:
77686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB3_4_NV:
77786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB4_4_NV:
77886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB5_4_NV:
77986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB6_4_NV:
78086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB7_4_NV:
78186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB8_4_NV:
78286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB9_4_NV:
78386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB10_4_NV:
78486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB11_4_NV:
78586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB12_4_NV:
78686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB13_4_NV:
78786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB14_4_NV:
78886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB15_4_NV:
78902c03ef6b4762adf33b73528c9fd672ef4697763Brian Paul         CHECK_EXTENSION(NV_vertex_program, cap);
790bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         {
791bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            const GLuint map = (GLuint) (cap - GL_MAP2_VERTEX_ATTRIB0_4_NV);
792bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            FLUSH_VERTICES(ctx, _NEW_EVAL);
793bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            ctx->Eval.Map2Attrib[map] = state;
794bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         }
79586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
7968dfc5b9863f08a713177fd92847573e17febbac9Brian Paul#endif /* FEATURE_NV_vertex_program */
797cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
798610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul#if FEATURE_NV_fragment_program
799610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul      case GL_FRAGMENT_PROGRAM_NV:
800610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul         CHECK_EXTENSION(NV_fragment_program, cap);
801610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul         if (ctx->FragmentProgram.Enabled == state)
802610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul            return;
8033abf746a7eae52220485cd031aecec2ca9e6103eKeith Whitwell         FLUSH_VERTICES(ctx, _NEW_PROGRAM);
804610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul         ctx->FragmentProgram.Enabled = state;
805610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul         break;
806610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul#endif /* FEATURE_NV_fragment_program */
807610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul
8088afe7de8deaf3c9613fd68b344de8c52b02b1879Brian Paul      /* GL_NV_texture_rectangle */
8098afe7de8deaf3c9613fd68b344de8c52b02b1879Brian Paul      case GL_TEXTURE_RECTANGLE_NV:
8105f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul         CHECK_EXTENSION(NV_texture_rectangle, cap);
81158dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         if (!enable_texture(ctx, state, TEXTURE_RECT_BIT)) {
81258dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick            return;
8138afe7de8deaf3c9613fd68b344de8c52b02b1879Brian Paul         }
8148afe7de8deaf3c9613fd68b344de8c52b02b1879Brian Paul         break;
8158afe7de8deaf3c9613fd68b344de8c52b02b1879Brian Paul
8165f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul      /* GL_EXT_stencil_two_side */
8175f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul      case GL_STENCIL_TEST_TWO_SIDE_EXT:
8185f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul         CHECK_EXTENSION(EXT_stencil_two_side, cap);
8195f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul         if (ctx->Stencil.TestTwoSide == state)
8205f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul            return;
8215f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul         FLUSH_VERTICES(ctx, _NEW_STENCIL);
8225f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul         ctx->Stencil.TestTwoSide = state;
823dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick         if (state) {
824dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick            ctx->Stencil._BackFace = 2;
825ed6d5ff6f8fdd34aaaa126119dbd8e1e321859d8Brian            ctx->_TriangleCaps |= DD_TRI_TWOSTENCIL;
826dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick         } else {
827dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick            ctx->Stencil._BackFace = 1;
828ed6d5ff6f8fdd34aaaa126119dbd8e1e321859d8Brian            ctx->_TriangleCaps &= ~DD_TRI_TWOSTENCIL;
829dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick         }
8305f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul         break;
8315f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul
83277eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul#if FEATURE_ARB_fragment_program
83377eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul      case GL_FRAGMENT_PROGRAM_ARB:
83477eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul         CHECK_EXTENSION(ARB_fragment_program, cap);
83577eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul         if (ctx->FragmentProgram.Enabled == state)
83677eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul            return;
8373abf746a7eae52220485cd031aecec2ca9e6103eKeith Whitwell         FLUSH_VERTICES(ctx, _NEW_PROGRAM);
83877eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul         ctx->FragmentProgram.Enabled = state;
83977eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul         break;
84077eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul#endif /* FEATURE_ARB_fragment_program */
84177eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul
842e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul      /* GL_EXT_depth_bounds_test */
843e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul      case GL_DEPTH_BOUNDS_TEST_EXT:
844e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul         CHECK_EXTENSION(EXT_depth_bounds_test, cap);
845e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul         if (ctx->Depth.BoundsTest == state)
846e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul            return;
847e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul         FLUSH_VERTICES(ctx, _NEW_DEPTH);
848e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul         ctx->Depth.BoundsTest = state;
849e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul         break;
850e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul
851b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt      case GL_DEPTH_CLAMP:
852b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt         if (ctx->Transform.DepthClamp == state)
853b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt            return;
854b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt	 CHECK_EXTENSION(ARB_depth_clamp, cap);
855b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt         FLUSH_VERTICES(ctx, _NEW_TRANSFORM);
856b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt	 ctx->Transform.DepthClamp = state;
857b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt	 break;
858b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt
8597f752fed993e5e9423abac200dd59141edbada56Dave Airlie#if FEATURE_ATI_fragment_shader
8607f752fed993e5e9423abac200dd59141edbada56Dave Airlie      case GL_FRAGMENT_SHADER_ATI:
8617f752fed993e5e9423abac200dd59141edbada56Dave Airlie        CHECK_EXTENSION(ATI_fragment_shader, cap);
8627f752fed993e5e9423abac200dd59141edbada56Dave Airlie	if (ctx->ATIFragmentShader.Enabled == state)
8637f752fed993e5e9423abac200dd59141edbada56Dave Airlie	  return;
8647f752fed993e5e9423abac200dd59141edbada56Dave Airlie	FLUSH_VERTICES(ctx, _NEW_PROGRAM);
8657f752fed993e5e9423abac200dd59141edbada56Dave Airlie	ctx->ATIFragmentShader.Enabled = state;
8667f752fed993e5e9423abac200dd59141edbada56Dave Airlie        break;
8677f752fed993e5e9423abac200dd59141edbada56Dave Airlie#endif
868bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick
869bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick      /* GL_MESA_texture_array */
870bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick      case GL_TEXTURE_1D_ARRAY_EXT:
871bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick         CHECK_EXTENSION(MESA_texture_array, cap);
872bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick         if (!enable_texture(ctx, state, TEXTURE_1D_ARRAY_BIT)) {
873bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick            return;
874bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick         }
875bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick         break;
876bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick
877bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick      case GL_TEXTURE_2D_ARRAY_EXT:
878bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick         CHECK_EXTENSION(MESA_texture_array, cap);
879bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick         if (!enable_texture(ctx, state, TEXTURE_2D_ARRAY_BIT)) {
880bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick            return;
881bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick         }
882bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick         break;
883bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick
8849d5bb3c6f820a5a99e1f55b2fd14d250761fcddcIan Romanick      case GL_TEXTURE_CUBE_MAP_SEAMLESS:
8859d5bb3c6f820a5a99e1f55b2fd14d250761fcddcIan Romanick	 CHECK_EXTENSION(ARB_seamless_cube_map, cap);
886aafbaa9e6a87cecb336f2704b799430d74c60456Marek Olšák	 if (ctx->Texture.CubeMapSeamless != state) {
887aafbaa9e6a87cecb336f2704b799430d74c60456Marek Olšák	    FLUSH_VERTICES(ctx, _NEW_TEXTURE);
888aafbaa9e6a87cecb336f2704b799430d74c60456Marek Olšák	    ctx->Texture.CubeMapSeamless = state;
889aafbaa9e6a87cecb336f2704b799430d74c60456Marek Olšák	 }
8909d5bb3c6f820a5a99e1f55b2fd14d250761fcddcIan Romanick	 break;
8919d5bb3c6f820a5a99e1f55b2fd14d250761fcddcIan Romanick
89286a1ea31ed6afdb9789671ca3fdd79709ea9f112Brian Paul#if FEATURE_EXT_transform_feedback
89386a1ea31ed6afdb9789671ca3fdd79709ea9f112Brian Paul      case GL_RASTERIZER_DISCARD:
89486a1ea31ed6afdb9789671ca3fdd79709ea9f112Brian Paul	 CHECK_EXTENSION(EXT_transform_feedback, cap);
895aee96806f049c17384a8edc11acce76257d98a57Paul Berry         if (ctx->RasterDiscard != state) {
896d44878e754e65550c0725feb76fe0cbab0ae5d93Paul Berry            FLUSH_VERTICES(ctx, _NEW_RASTERIZER_DISCARD);
897aee96806f049c17384a8edc11acce76257d98a57Paul Berry            ctx->RasterDiscard = state;
89886a1ea31ed6afdb9789671ca3fdd79709ea9f112Brian Paul         }
89986a1ea31ed6afdb9789671ca3fdd79709ea9f112Brian Paul         break;
90086a1ea31ed6afdb9789671ca3fdd79709ea9f112Brian Paul#endif
90186a1ea31ed6afdb9789671ca3fdd79709ea9f112Brian Paul
9027f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul      /* GL 3.1 primitive restart.  Note: this enum is different from
9037f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul       * GL_PRIMITIVE_RESTART_NV (which is client state).
9047f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul       */
905a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul      case GL_PRIMITIVE_RESTART:
9067f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul         if (ctx->VersionMajor * 10 + ctx->VersionMinor < 31) {
907a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul            goto invalid_enum_error;
908a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul         }
909a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul         if (ctx->Array.PrimitiveRestart != state) {
910a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul            FLUSH_VERTICES(ctx, _NEW_TRANSFORM);
911a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul            ctx->Array.PrimitiveRestart = state;
912a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul         }
913a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul         break;
914a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul
915a637280e42b9a2f4ccbb5e7b209c5645073f584eDave Airlie      /* GL3.0 - GL_framebuffer_sRGB */
916a637280e42b9a2f4ccbb5e7b209c5645073f584eDave Airlie      case GL_FRAMEBUFFER_SRGB_EXT:
91788ffa9ce5b8e5fe2b93238f8b9a7a888be28324eDave Airlie         CHECK_EXTENSION(EXT_framebuffer_sRGB, cap);
91888ffa9ce5b8e5fe2b93238f8b9a7a888be28324eDave Airlie         FLUSH_VERTICES(ctx, _NEW_BUFFERS);
91988ffa9ce5b8e5fe2b93238f8b9a7a888be28324eDave Airlie         ctx->Color.sRGBEnabled = state;
92088ffa9ce5b8e5fe2b93238f8b9a7a888be28324eDave Airlie         break;
921a637280e42b9a2f4ccbb5e7b209c5645073f584eDave Airlie
9220c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu      /* GL_OES_EGL_image_external */
9230c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu      case GL_TEXTURE_EXTERNAL_OES:
9240c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu         CHECK_EXTENSION(OES_EGL_image_external, cap);
9250c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu         if (!enable_texture(ctx, state, TEXTURE_EXTERNAL_BIT)) {
9260c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu            return;
9270c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu         }
9280c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu         break;
9290c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu
93086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      default:
931f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul         goto invalid_enum_error;
932afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
933afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
934afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   if (ctx->Driver.Enable) {
9358dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian      ctx->Driver.Enable( ctx, cap, state );
936afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
937f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul
938f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul   return;
939f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul
940f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paulinvalid_enum_error:
941f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul   _mesa_error(ctx, GL_INVALID_ENUM, "gl%s(0x%x)",
942f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul               state ? "Enable" : "Disable", cap);
943afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
944afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
945afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
9466dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**
9478dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian * Enable GL capability.  Called by glEnable()
9488dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian * \param cap  state to enable.
9496dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */
950c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY
951fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_Enable( GLenum cap )
952afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
953fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   GET_CURRENT_CONTEXT(ctx);
954376d022e4a5a56f81f089a13a34438981fe83178Keith Whitwell   ASSERT_OUTSIDE_BEGIN_END(ctx);
955376d022e4a5a56f81f089a13a34438981fe83178Keith Whitwell
956fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   _mesa_set_enable( ctx, cap, GL_TRUE );
957afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
958afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
959afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
9606dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**
9618dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian * Disable GL capability.  Called by glDisable()
9628dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian * \param cap  state to disable.
9636dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */
964c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY
965fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_Disable( GLenum cap )
966afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
967fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   GET_CURRENT_CONTEXT(ctx);
968376d022e4a5a56f81f089a13a34438981fe83178Keith Whitwell   ASSERT_OUTSIDE_BEGIN_END(ctx);
969376d022e4a5a56f81f089a13a34438981fe83178Keith Whitwell
970fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   _mesa_set_enable( ctx, cap, GL_FALSE );
971afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
972afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
973afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
9743728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul
9753728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul/**
9763728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul * Enable/disable an indexed state var.
9773728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul */
9783728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paulvoid
979d0d767ad4c6ee13c72577b072b24aa06841f6357Brian Paul_mesa_set_enablei(struct gl_context *ctx, GLenum cap,
980d0d767ad4c6ee13c72577b072b24aa06841f6357Brian Paul                  GLuint index, GLboolean state)
9813728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul{
9823728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   ASSERT(state == 0 || state == 1);
9833728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   switch (cap) {
9843728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   case GL_BLEND:
9858f6f1124634cf659dde4c75549b84e35505d892dBrian Paul      if (!ctx->Extensions.EXT_draw_buffers2) {
986f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul         goto invalid_enum_error;
9878f6f1124634cf659dde4c75549b84e35505d892dBrian Paul      }
9883728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul      if (index >= ctx->Const.MaxDrawBuffers) {
9893728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul         _mesa_error(ctx, GL_INVALID_VALUE, "%s(index=%u)",
9903728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul                     state ? "glEnableIndexed" : "glDisableIndexed", index);
9913728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul         return;
9923728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul      }
9933728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul      if (((ctx->Color.BlendEnabled >> index) & 1) != state) {
9943728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul         FLUSH_VERTICES(ctx, _NEW_COLOR);
9953728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul         if (state)
9963728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul            ctx->Color.BlendEnabled |= (1 << index);
9973728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul         else
9983728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul            ctx->Color.BlendEnabled &= ~(1 << index);
9993728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul      }
10003728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul      break;
10013728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   default:
1002f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul      goto invalid_enum_error;
10033728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   }
10048f6f1124634cf659dde4c75549b84e35505d892dBrian Paul   return;
10058f6f1124634cf659dde4c75549b84e35505d892dBrian Paul
1006f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paulinvalid_enum_error:
10078f6f1124634cf659dde4c75549b84e35505d892dBrian Paul    _mesa_error(ctx, GL_INVALID_ENUM, "%s(cap=%s)",
10088f6f1124634cf659dde4c75549b84e35505d892dBrian Paul                state ? "glEnablei" : "glDisablei",
10098f6f1124634cf659dde4c75549b84e35505d892dBrian Paul                _mesa_lookup_enum_by_nr(cap));
10103728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul}
10113728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul
10123728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul
10133728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paulvoid GLAPIENTRY
10143728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul_mesa_DisableIndexed( GLenum cap, GLuint index )
10153728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul{
10163728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   GET_CURRENT_CONTEXT(ctx);
10173728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   ASSERT_OUTSIDE_BEGIN_END(ctx);
10183728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   _mesa_set_enablei(ctx, cap, index, GL_FALSE);
10193728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul}
10203728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul
10213728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul
10223728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paulvoid GLAPIENTRY
10233728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul_mesa_EnableIndexed( GLenum cap, GLuint index )
10243728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul{
10253728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   GET_CURRENT_CONTEXT(ctx);
10263728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   ASSERT_OUTSIDE_BEGIN_END(ctx);
10273728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   _mesa_set_enablei(ctx, cap, index, GL_TRUE);
10283728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul}
10293728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul
10303728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul
10313728673bd1b974e54858fbab6ff62d3607b0d3f0Brian PaulGLboolean GLAPIENTRY
10323728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul_mesa_IsEnabledIndexed( GLenum cap, GLuint index )
10333728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul{
10343728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   GET_CURRENT_CONTEXT(ctx);
1035386ec5e80e34e1164d749eee2078f2dfc8ff2b57Brian Paul   ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, 0);
10363728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   switch (cap) {
10373728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   case GL_BLEND:
10383728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul      if (index >= ctx->Const.MaxDrawBuffers) {
10393728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul         _mesa_error(ctx, GL_INVALID_VALUE, "glIsEnabledIndexed(index=%u)",
10403728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul                     index);
10413728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul         return GL_FALSE;
10423728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul      }
10433728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul      return (ctx->Color.BlendEnabled >> index) & 1;
10443728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   default:
10453728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul      _mesa_error(ctx, GL_INVALID_ENUM, "glIsEnabledIndexed(cap=%s)",
10463728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul                  _mesa_lookup_enum_by_nr(cap));
10473728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul      return GL_FALSE;
10483728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   }
10493728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul}
10503728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul
10513728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul
10523728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul
10533728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul
105486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul#undef CHECK_EXTENSION
105586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul#define CHECK_EXTENSION(EXTNAME)			\
105686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul   if (!ctx->Extensions.EXTNAME) {			\
1057f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul      goto invalid_enum_error;				\
105886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul   }
105986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul
1060da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger#undef CHECK_EXTENSION2
1061da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger#define CHECK_EXTENSION2(EXT1, EXT2)				\
1062da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger   if (!ctx->Extensions.EXT1 && !ctx->Extensions.EXT2) {	\
1063f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul      goto invalid_enum_error;					\
1064da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger   }
1065afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
10668dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian
10676dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**
106858dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick * Helper function to determine whether a texture target is enabled.
106958dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick */
107058dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanickstatic GLboolean
1071f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergis_texture_enabled(struct gl_context *ctx, GLbitfield bit)
107258dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick{
107358dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick   const struct gl_texture_unit *const texUnit =
107458dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick       &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
107558dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick   return (texUnit->Enabled & bit) ? GL_TRUE : GL_FALSE;
107658dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick}
107758dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick
107858dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick
107958dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick/**
10808dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian * Return simple enable/disable state.
10816dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell *
10828dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian * \param cap  state variable to query.
10836dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell *
10846dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * Returns the state of the specified capability from the current GL context.
10856dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * For the capabilities associated with extensions verifies that those
10866dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * extensions are effectively present before reporting.
10876dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */
1088c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall BennettGLboolean GLAPIENTRY
1089fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_IsEnabled( GLenum cap )
1090afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
1091fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   GET_CURRENT_CONTEXT(ctx);
10926a9880224368a016dfb1a9f5b5dfa9284a7dc6cfYuanhan Liu   ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, 0);
10936a9880224368a016dfb1a9f5b5dfa9284a7dc6cfYuanhan Liu
1094afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   switch (cap) {
1095afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_ALPHA_TEST:
1096afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         return ctx->Color.AlphaEnabled;
1097afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_AUTO_NORMAL:
1098afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.AutoNormal;
1099afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_BLEND:
11003728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul         return ctx->Color.BlendEnabled & 1;  /* return state for buffer[0] */
1101b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry      case GL_CLIP_DISTANCE0:
1102b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry      case GL_CLIP_DISTANCE1:
1103b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry      case GL_CLIP_DISTANCE2:
1104b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry      case GL_CLIP_DISTANCE3:
1105b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry      case GL_CLIP_DISTANCE4:
1106b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry      case GL_CLIP_DISTANCE5:
1107b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry      case GL_CLIP_DISTANCE6:
1108b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry      case GL_CLIP_DISTANCE7: {
1109b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry         const GLuint p = cap - GL_CLIP_DISTANCE0;
1110b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry
1111b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry         if (p >= ctx->Const.MaxClipPlanes)
1112b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry            goto invalid_enum_error;
1113b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry
1114b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry	 return (ctx->Transform.ClipPlanesEnabled >> p) & 1;
1115b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry      }
1116afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_COLOR_MATERIAL:
1117afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Light.ColorMaterialEnabled;
1118afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_CULL_FACE:
1119afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         return ctx->Polygon.CullFlag;
1120ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled      case GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB:
1121ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled         return ctx->Debug.SyncOutput;
1122afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_DEPTH_TEST:
1123afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         return ctx->Depth.Test;
1124afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_DITHER:
1125afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Color.DitherFlag;
1126afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_FOG:
1127afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Fog.Enabled;
1128afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_LIGHTING:
1129afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         return ctx->Light.Enabled;
1130afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_LIGHT0:
1131afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_LIGHT1:
1132afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_LIGHT2:
1133afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_LIGHT3:
1134afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_LIGHT4:
1135afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_LIGHT5:
1136afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_LIGHT6:
1137afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_LIGHT7:
1138afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         return ctx->Light.Light[cap-GL_LIGHT0].Enabled;
1139afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_LINE_SMOOTH:
1140afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Line.SmoothFlag;
1141afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_LINE_STIPPLE:
1142afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Line.StippleFlag;
1143afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_INDEX_LOGIC_OP:
1144afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Color.IndexLogicOpEnabled;
1145afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_COLOR_LOGIC_OP:
1146afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Color.ColorLogicOpEnabled;
1147afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_MAP1_COLOR_4:
1148afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map1Color4;
1149afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_MAP1_INDEX:
1150afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map1Index;
1151afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_MAP1_NORMAL:
1152afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map1Normal;
1153afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_MAP1_TEXTURE_COORD_1:
1154afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map1TextureCoord1;
1155afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_MAP1_TEXTURE_COORD_2:
1156afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map1TextureCoord2;
1157afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_MAP1_TEXTURE_COORD_3:
1158afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map1TextureCoord3;
1159afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_MAP1_TEXTURE_COORD_4:
1160afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map1TextureCoord4;
1161afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_MAP1_VERTEX_3:
1162afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map1Vertex3;
1163afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_MAP1_VERTEX_4:
1164afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map1Vertex4;
1165afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_MAP2_COLOR_4:
1166afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map2Color4;
1167afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_MAP2_INDEX:
1168afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map2Index;
1169afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_MAP2_NORMAL:
1170afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map2Normal;
11715e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen      case GL_MAP2_TEXTURE_COORD_1:
1172afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map2TextureCoord1;
1173afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_MAP2_TEXTURE_COORD_2:
1174afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map2TextureCoord2;
1175afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_MAP2_TEXTURE_COORD_3:
1176afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map2TextureCoord3;
1177afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_MAP2_TEXTURE_COORD_4:
1178afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map2TextureCoord4;
1179afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_MAP2_VERTEX_3:
1180afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map2Vertex3;
1181afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_MAP2_VERTEX_4:
1182afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map2Vertex4;
1183afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_NORMALIZE:
1184afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Transform.Normalize;
1185afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_POINT_SMOOTH:
1186afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Point.SmoothFlag;
1187afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_POLYGON_SMOOTH:
1188afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Polygon.SmoothFlag;
1189afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_POLYGON_STIPPLE:
1190afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Polygon.StippleFlag;
1191afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_POLYGON_OFFSET_POINT:
1192afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Polygon.OffsetPoint;
1193afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_POLYGON_OFFSET_LINE:
1194afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Polygon.OffsetLine;
1195afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_POLYGON_OFFSET_FILL:
1196afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Polygon.OffsetFill;
1197afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_RESCALE_NORMAL_EXT:
1198afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         return ctx->Transform.RescaleNormals;
1199afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_SCISSOR_TEST:
1200afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Scissor.Enabled;
1201afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_STENCIL_TEST:
1202afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Stencil.Enabled;
1203afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_TEXTURE_1D:
120458dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         return is_texture_enabled(ctx, TEXTURE_1D_BIT);
1205afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_TEXTURE_2D:
120658dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         return is_texture_enabled(ctx, TEXTURE_2D_BIT);
1207afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_TEXTURE_3D:
1208c9e723e5013443df984cb3987ffa3a9ba3384b89Ian Romanick         return is_texture_enabled(ctx, TEXTURE_3D_BIT);
1209afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_TEXTURE_GEN_S:
1210afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_TEXTURE_GEN_T:
1211933b99f113c97588b616daad2fb19456eece96e2Brian Paul      case GL_TEXTURE_GEN_R:
1212933b99f113c97588b616daad2fb19456eece96e2Brian Paul      case GL_TEXTURE_GEN_Q:
1213afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         {
1214e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul            const struct gl_texture_unit *texUnit = get_texcoord_unit(ctx);
1215e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul            if (texUnit) {
1216933b99f113c97588b616daad2fb19456eece96e2Brian Paul               GLbitfield coordBit = S_BIT << (cap - GL_TEXTURE_GEN_S);
1217933b99f113c97588b616daad2fb19456eece96e2Brian Paul               return (texUnit->TexGenEnabled & coordBit) ? GL_TRUE : GL_FALSE;
1218e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul            }
1219afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         }
1220e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul         return GL_FALSE;
122108fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg#if FEATURE_ES1
122208fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg      case GL_TEXTURE_GEN_STR_OES:
122308fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg	 {
122408fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg            const struct gl_texture_unit *texUnit = get_texcoord_unit(ctx);
122508fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg            if (texUnit) {
1226d0d767ad4c6ee13c72577b072b24aa06841f6357Brian Paul               return (texUnit->TexGenEnabled & STR_BITS) == STR_BITS
1227d0d767ad4c6ee13c72577b072b24aa06841f6357Brian Paul                  ? GL_TRUE : GL_FALSE;
122808fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg            }
122908fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg         }
123008fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg#endif
1231afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
1232192baaac0fc4701e82dcc3e19b3033f81dd82a62Brian Paul      /* client-side state */
1233afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_VERTEX_ARRAY:
1234762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_POS].Enabled != 0);
1235afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_NORMAL_ARRAY:
1236762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_NORMAL].Enabled != 0);
1237afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_COLOR_ARRAY:
1238762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR0].Enabled != 0);
1239afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_INDEX_ARRAY:
1240762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Enabled != 0);
1241afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_TEXTURE_COORD_ARRAY:
1242762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_TEX(ctx->Array.ActiveTexture)]
1243d0d767ad4c6ee13c72577b072b24aa06841f6357Brian Paul                 .Enabled != 0);
1244afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_EDGE_FLAG_ARRAY:
1245762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_EDGEFLAG].Enabled != 0);
12466ee7a02852e45efbfe2843c450dd72243f703430Brian Paul      case GL_FOG_COORDINATE_ARRAY_EXT:
12476ee7a02852e45efbfe2843c450dd72243f703430Brian Paul         CHECK_EXTENSION(EXT_fog_coord);
1248762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_FOG].Enabled != 0);
12496ee7a02852e45efbfe2843c450dd72243f703430Brian Paul      case GL_SECONDARY_COLOR_ARRAY_EXT:
12506ee7a02852e45efbfe2843c450dd72243f703430Brian Paul         CHECK_EXTENSION(EXT_secondary_color);
1251762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR1].Enabled != 0);
12521cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul#if FEATURE_point_size_array
12531cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul      case GL_POINT_SIZE_ARRAY_OES:
1254762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_POINT_SIZE].Enabled != 0);
12551cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul#endif
12561b2ff69f468d609a88b1cd31041df2b81931816bBrian Paul
125786fc370d399167ec9bb978d053d4a72215c86c16Brian Paul      /* GL_ARB_texture_cube_map */
125886fc370d399167ec9bb978d053d4a72215c86c16Brian Paul      case GL_TEXTURE_CUBE_MAP_ARB:
125986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         CHECK_EXTENSION(ARB_texture_cube_map);
126058dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         return is_texture_enabled(ctx, TEXTURE_CUBE_BIT);
126186fc370d399167ec9bb978d053d4a72215c86c16Brian Paul
1262da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger      /* GL_EXT_secondary_color */
1263da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger      case GL_COLOR_SUM_EXT:
1264da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger         CHECK_EXTENSION2(EXT_secondary_color, ARB_vertex_program);
1265da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger         return ctx->Fog.ColorSumEnabled;
1266da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger
1267736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul      /* GL_ARB_multisample */
1268736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul      case GL_MULTISAMPLE_ARB:
126986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         return ctx->Multisample.Enabled;
1270736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul      case GL_SAMPLE_ALPHA_TO_COVERAGE_ARB:
127186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         return ctx->Multisample.SampleAlphaToCoverage;
1272736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul      case GL_SAMPLE_ALPHA_TO_ONE_ARB:
127386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         return ctx->Multisample.SampleAlphaToOne;
1274736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul      case GL_SAMPLE_COVERAGE_ARB:
127586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         return ctx->Multisample.SampleCoverage;
1276736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul      case GL_SAMPLE_COVERAGE_INVERT_ARB:
127786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         return ctx->Multisample.SampleCoverageInvert;
1278736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul
12798c2f6c5059a60d845716277973c826f4069926e6Brian Paul      /* GL_IBM_rasterpos_clip */
12808c2f6c5059a60d845716277973c826f4069926e6Brian Paul      case GL_RASTER_POSITION_UNCLIPPED_IBM:
128186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         CHECK_EXTENSION(IBM_rasterpos_clip);
128286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         return ctx->Transform.RasterPositionUnclipped;
12838c2f6c5059a60d845716277973c826f4069926e6Brian Paul
12846c408b46678637959dba04663fbc34eb9c4bc397Brian Paul      /* GL_NV_point_sprite */
12856c408b46678637959dba04663fbc34eb9c4bc397Brian Paul      case GL_POINT_SPRITE_NV:
1286da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger         CHECK_EXTENSION2(NV_point_sprite, ARB_point_sprite)
12876c408b46678637959dba04663fbc34eb9c4bc397Brian Paul         return ctx->Point.PointSprite;
128806d05afdd687fcd1d59d46c6a86c2e5707e1859bBrian Paul
128993da673904d4c520d3fbd2210e53777bf1598ac6Roland Scheidegger#if FEATURE_NV_vertex_program || FEATURE_ARB_vertex_program
1290da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger      case GL_VERTEX_PROGRAM_ARB:
1291da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger         CHECK_EXTENSION2(ARB_vertex_program, NV_vertex_program);
129286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         return ctx->VertexProgram.Enabled;
1293da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger      case GL_VERTEX_PROGRAM_POINT_SIZE_ARB:
1294da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger         CHECK_EXTENSION2(ARB_vertex_program, NV_vertex_program);
129586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         return ctx->VertexProgram.PointSizeEnabled;
1296da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger      case GL_VERTEX_PROGRAM_TWO_SIDE_ARB:
1297da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger         CHECK_EXTENSION2(ARB_vertex_program, NV_vertex_program);
129886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         return ctx->VertexProgram.TwoSideEnabled;
129993da673904d4c520d3fbd2210e53777bf1598ac6Roland Scheidegger#endif
130093da673904d4c520d3fbd2210e53777bf1598ac6Roland Scheidegger#if FEATURE_NV_vertex_program
130186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY0_NV:
130286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY1_NV:
130386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY2_NV:
130486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY3_NV:
130586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY4_NV:
130686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY5_NV:
130786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY6_NV:
130886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY7_NV:
130986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY8_NV:
131086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY9_NV:
131186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY10_NV:
131286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY11_NV:
131386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY12_NV:
131486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY13_NV:
131586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY14_NV:
131686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY15_NV:
131786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         CHECK_EXTENSION(NV_vertex_program);
131886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         {
131986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            GLint n = (GLint) cap - GL_VERTEX_ATTRIB_ARRAY0_NV;
1320762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich            ASSERT(VERT_ATTRIB_GENERIC(n) < Elements(ctx->Array.ArrayObj->VertexAttrib));
1321762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich            return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_GENERIC(n)].Enabled != 0);
132286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         }
132386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB0_4_NV:
132486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB1_4_NV:
132586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB2_4_NV:
132686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB3_4_NV:
132786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB4_4_NV:
132886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB5_4_NV:
132986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB6_4_NV:
133086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB7_4_NV:
133186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB8_4_NV:
133286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB9_4_NV:
133386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB10_4_NV:
133486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB11_4_NV:
133586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB12_4_NV:
133686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB13_4_NV:
133786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB14_4_NV:
133886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB15_4_NV:
133986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         CHECK_EXTENSION(NV_vertex_program);
1340bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         {
1341bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            const GLuint map = (GLuint) (cap - GL_MAP1_VERTEX_ATTRIB0_4_NV);
1342bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            return ctx->Eval.Map1Attrib[map];
1343bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         }
134486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB0_4_NV:
134586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB1_4_NV:
134686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB2_4_NV:
134786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB3_4_NV:
134886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB4_4_NV:
134986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB5_4_NV:
135086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB6_4_NV:
135186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB7_4_NV:
135286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB8_4_NV:
135386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB9_4_NV:
135486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB10_4_NV:
135586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB11_4_NV:
135686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB12_4_NV:
135786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB13_4_NV:
135886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB14_4_NV:
135986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB15_4_NV:
136086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         CHECK_EXTENSION(NV_vertex_program);
1361bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         {
1362bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            const GLuint map = (GLuint) (cap - GL_MAP2_VERTEX_ATTRIB0_4_NV);
1363bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            return ctx->Eval.Map2Attrib[map];
1364bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         }
13658dfc5b9863f08a713177fd92847573e17febbac9Brian Paul#endif /* FEATURE_NV_vertex_program */
136686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul
1367610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul#if FEATURE_NV_fragment_program
1368610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul      case GL_FRAGMENT_PROGRAM_NV:
1369610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul         CHECK_EXTENSION(NV_fragment_program);
1370610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul         return ctx->FragmentProgram.Enabled;
1371610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul#endif /* FEATURE_NV_fragment_program */
1372610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul
13738afe7de8deaf3c9613fd68b344de8c52b02b1879Brian Paul      /* GL_NV_texture_rectangle */
13748afe7de8deaf3c9613fd68b344de8c52b02b1879Brian Paul      case GL_TEXTURE_RECTANGLE_NV:
13758afe7de8deaf3c9613fd68b344de8c52b02b1879Brian Paul         CHECK_EXTENSION(NV_texture_rectangle);
137658dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         return is_texture_enabled(ctx, TEXTURE_RECT_BIT);
13778afe7de8deaf3c9613fd68b344de8c52b02b1879Brian Paul
13785f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul      /* GL_EXT_stencil_two_side */
13795f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul      case GL_STENCIL_TEST_TWO_SIDE_EXT:
13805f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul         CHECK_EXTENSION(EXT_stencil_two_side);
13815f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul         return ctx->Stencil.TestTwoSide;
13825f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul
138377eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul#if FEATURE_ARB_fragment_program
138477eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul      case GL_FRAGMENT_PROGRAM_ARB:
138577eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul         return ctx->FragmentProgram.Enabled;
138677eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul#endif /* FEATURE_ARB_fragment_program */
138777eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul
1388e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul      /* GL_EXT_depth_bounds_test */
1389e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul      case GL_DEPTH_BOUNDS_TEST_EXT:
1390e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul         CHECK_EXTENSION(EXT_depth_bounds_test);
1391e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul         return ctx->Depth.BoundsTest;
1392e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul
1393b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt      /* GL_ARB_depth_clamp */
1394b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt      case GL_DEPTH_CLAMP:
1395b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt         CHECK_EXTENSION(ARB_depth_clamp);
1396b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt         return ctx->Transform.DepthClamp;
1397b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt
13987f752fed993e5e9423abac200dd59141edbada56Dave Airlie#if FEATURE_ATI_fragment_shader
13997f752fed993e5e9423abac200dd59141edbada56Dave Airlie      case GL_FRAGMENT_SHADER_ATI:
14007f752fed993e5e9423abac200dd59141edbada56Dave Airlie	 CHECK_EXTENSION(ATI_fragment_shader);
14017f752fed993e5e9423abac200dd59141edbada56Dave Airlie	 return ctx->ATIFragmentShader.Enabled;
14027f752fed993e5e9423abac200dd59141edbada56Dave Airlie#endif /* FEATURE_ATI_fragment_shader */
14039d5bb3c6f820a5a99e1f55b2fd14d250761fcddcIan Romanick
14049d5bb3c6f820a5a99e1f55b2fd14d250761fcddcIan Romanick      case GL_TEXTURE_CUBE_MAP_SEAMLESS:
14059d5bb3c6f820a5a99e1f55b2fd14d250761fcddcIan Romanick	 CHECK_EXTENSION(ARB_seamless_cube_map);
14069d5bb3c6f820a5a99e1f55b2fd14d250761fcddcIan Romanick	 return ctx->Texture.CubeMapSeamless;
14079d5bb3c6f820a5a99e1f55b2fd14d250761fcddcIan Romanick
140886a1ea31ed6afdb9789671ca3fdd79709ea9f112Brian Paul#if FEATURE_EXT_transform_feedback
140986a1ea31ed6afdb9789671ca3fdd79709ea9f112Brian Paul      case GL_RASTERIZER_DISCARD:
141086a1ea31ed6afdb9789671ca3fdd79709ea9f112Brian Paul	 CHECK_EXTENSION(EXT_transform_feedback);
1411aee96806f049c17384a8edc11acce76257d98a57Paul Berry         return ctx->RasterDiscard;
141286a1ea31ed6afdb9789671ca3fdd79709ea9f112Brian Paul#endif
141386a1ea31ed6afdb9789671ca3fdd79709ea9f112Brian Paul
14147f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul      /* GL_NV_primitive_restart */
14157f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul      case GL_PRIMITIVE_RESTART_NV:
14167f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul	 if (!ctx->Extensions.NV_primitive_restart) {
14177f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul            goto invalid_enum_error;
14187f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul         }
14197f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul         return ctx->Array.PrimitiveRestart;
14207f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul
1421a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul      /* GL 3.1 primitive restart */
1422a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul      case GL_PRIMITIVE_RESTART:
14237f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul         if (ctx->VersionMajor * 10 + ctx->VersionMinor < 31) {
1424a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul            goto invalid_enum_error;
1425a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul         }
1426a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul         return ctx->Array.PrimitiveRestart;
1427a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul
1428a637280e42b9a2f4ccbb5e7b209c5645073f584eDave Airlie      /* GL3.0 - GL_framebuffer_sRGB */
1429a637280e42b9a2f4ccbb5e7b209c5645073f584eDave Airlie      case GL_FRAMEBUFFER_SRGB_EXT:
1430a637280e42b9a2f4ccbb5e7b209c5645073f584eDave Airlie	 CHECK_EXTENSION(EXT_framebuffer_sRGB);
1431a637280e42b9a2f4ccbb5e7b209c5645073f584eDave Airlie	 return ctx->Color.sRGBEnabled;
1432a637280e42b9a2f4ccbb5e7b209c5645073f584eDave Airlie
14330c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu      /* GL_OES_EGL_image_external */
14340c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu      case GL_TEXTURE_EXTERNAL_OES:
14350c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu	 CHECK_EXTENSION(OES_EGL_image_external);
14360c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu         return is_texture_enabled(ctx, TEXTURE_EXTERNAL_BIT);
14370c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu
1438afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      default:
1439f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul         goto invalid_enum_error;
1440afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
1441f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul
1442f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul   return GL_FALSE;
1443f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul
1444f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paulinvalid_enum_error:
1445f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul   _mesa_error(ctx, GL_INVALID_ENUM, "glIsEnabled(0x%x)", (int) cap);
1446f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul   return GL_FALSE;
1447afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
1448