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"
41d638da23d2ec2e9c52655b1ea138249e7f8bcccbPaul Berry#include "drivers/common/meta.h"
423c63452e64df7e10aa073c6c3b9492b1d7dabbb8Brian Paul
43afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
44afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
4502c03ef6b4762adf33b73528c9fd672ef4697763Brian Paul#define CHECK_EXTENSION(EXTNAME, CAP)					\
4686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul   if (!ctx->Extensions.EXTNAME) {					\
47f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul      goto invalid_enum_error;						\
4886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul   }
4986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul
5086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul
518dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian/**
528dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian * Helper to enable/disable client-side state.
538dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian */
54cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwellstatic void
55f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergclient_state(struct gl_context *ctx, GLenum cap, GLboolean state)
56cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell{
5758a4328e96160ad6c529edb321cdc5ea929a3f02Brian Paul   struct gl_array_object *arrayObj = ctx->Array.ArrayObj;
58f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich   GLbitfield64 flag;
5999efde461d3b8615863bdb7308e05289e0db0422Keith Whitwell   GLboolean *var;
60cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
61cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   switch (cap) {
6286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ARRAY:
63762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         var = &arrayObj->VertexAttrib[VERT_ATTRIB_POS].Enabled;
64104b81def4c09f3012e44778d104f00ff87dd4f0Mathias Fröhlich         flag = VERT_BIT_POS;
6586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
6686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_NORMAL_ARRAY:
67762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         var = &arrayObj->VertexAttrib[VERT_ATTRIB_NORMAL].Enabled;
68104b81def4c09f3012e44778d104f00ff87dd4f0Mathias Fröhlich         flag = VERT_BIT_NORMAL;
6986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
7086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_COLOR_ARRAY:
71762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         var = &arrayObj->VertexAttrib[VERT_ATTRIB_COLOR0].Enabled;
72104b81def4c09f3012e44778d104f00ff87dd4f0Mathias Fröhlich         flag = VERT_BIT_COLOR0;
7386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
7486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_INDEX_ARRAY:
75762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         var = &arrayObj->VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Enabled;
76104b81def4c09f3012e44778d104f00ff87dd4f0Mathias Fröhlich         flag = VERT_BIT_COLOR_INDEX;
7786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
7886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_TEXTURE_COORD_ARRAY:
79762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         var = &arrayObj->VertexAttrib[VERT_ATTRIB_TEX(ctx->Array.ActiveTexture)].Enabled;
80104b81def4c09f3012e44778d104f00ff87dd4f0Mathias Fröhlich         flag = VERT_BIT_TEX(ctx->Array.ActiveTexture);
8186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
8286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_EDGE_FLAG_ARRAY:
83762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         var = &arrayObj->VertexAttrib[VERT_ATTRIB_EDGEFLAG].Enabled;
84104b81def4c09f3012e44778d104f00ff87dd4f0Mathias Fröhlich         flag = VERT_BIT_EDGEFLAG;
8586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
8686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_FOG_COORDINATE_ARRAY_EXT:
87762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         var = &arrayObj->VertexAttrib[VERT_ATTRIB_FOG].Enabled;
88104b81def4c09f3012e44778d104f00ff87dd4f0Mathias Fröhlich         flag = VERT_BIT_FOG;
8986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
9086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_SECONDARY_COLOR_ARRAY_EXT:
91762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         var = &arrayObj->VertexAttrib[VERT_ATTRIB_COLOR1].Enabled;
92104b81def4c09f3012e44778d104f00ff87dd4f0Mathias Fröhlich         flag = VERT_BIT_COLOR1;
9386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
9486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul
951cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul#if FEATURE_point_size_array
961cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul      case GL_POINT_SIZE_ARRAY_OES:
97762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         var = &arrayObj->VertexAttrib[VERT_ATTRIB_POINT_SIZE].Enabled;
98104b81def4c09f3012e44778d104f00ff87dd4f0Mathias Fröhlich         flag = VERT_BIT_POINT_SIZE;
991cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul         break;
1001cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul#endif
1011cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul
1028dfc5b9863f08a713177fd92847573e17febbac9Brian Paul#if FEATURE_NV_vertex_program
10386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY0_NV:
10486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY1_NV:
10586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY2_NV:
10686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY3_NV:
10786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY4_NV:
10886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY5_NV:
10986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY6_NV:
11086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY7_NV:
11186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY8_NV:
11286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY9_NV:
11386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY10_NV:
11486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY11_NV:
11586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY12_NV:
11686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY13_NV:
11786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY14_NV:
11886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY15_NV:
11902c03ef6b4762adf33b73528c9fd672ef4697763Brian Paul         CHECK_EXTENSION(NV_vertex_program, cap);
12086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         {
12186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            GLint n = (GLint) cap - GL_VERTEX_ATTRIB_ARRAY0_NV;
1229b9c7da966a4f5182461be90dd6615fbe0399e3cBrian Paul            ASSERT(VERT_ATTRIB_GENERIC(n) < Elements(arrayObj->VertexAttrib));
123762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich            var = &arrayObj->VertexAttrib[VERT_ATTRIB_GENERIC(n)].Enabled;
124104b81def4c09f3012e44778d104f00ff87dd4f0Mathias Fröhlich            flag = VERT_BIT_GENERIC(n);
12586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         }
12686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
1278dfc5b9863f08a713177fd92847573e17febbac9Brian Paul#endif /* FEATURE_NV_vertex_program */
1288dfc5b9863f08a713177fd92847573e17febbac9Brian Paul
1297f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul      /* GL_NV_primitive_restart */
1307f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul      case GL_PRIMITIVE_RESTART_NV:
1317f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul	 if (!ctx->Extensions.NV_primitive_restart) {
1327f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul            goto invalid_enum_error;
1337f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul         }
1347f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul         var = &ctx->Array.PrimitiveRestart;
1352701eb342b358da638b8c0f281c791c2b16b300bBrian Paul         flag = 0;
1367f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul         break;
1377f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul
13886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      default:
139f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul         goto invalid_enum_error;
140cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   }
141cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
14268c48df2bf8dd57ce96db430fff1b69f40a793ceAlan Hourihane   if (*var == state)
143cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell      return;
144cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
145cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   FLUSH_VERTICES(ctx, _NEW_ARRAY);
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
156b0e048f0b955ef79e2de794172de053d27d7d8faBrian Paul   arrayObj->NewArrays |= flag;
157b0e048f0b955ef79e2de794172de053d27d7d8faBrian Paul
158cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   if (ctx->Driver.Enable) {
1598dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian      ctx->Driver.Enable( ctx, cap, state );
160cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   }
161f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul
162f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul   return;
163f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul
164f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paulinvalid_enum_error:
165dcf1dafa9ec93f9300ecffe5bddfd2b131bc218fBrian Paul   _mesa_error(ctx, GL_INVALID_ENUM, "gl%sClientState(%s)",
166dcf1dafa9ec93f9300ecffe5bddfd2b131bc218fBrian Paul               state ? "Enable" : "Disable", _mesa_lookup_enum_by_nr(cap));
167cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell}
168cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
169cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
1706dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**
1716dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * Enable GL capability.
1728dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian * \param cap  state to enable/disable.
1736dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell *
1746dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * Get's the current context, assures that we're outside glBegin()/glEnd() and
1756dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * calls client_state().
1766dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */
177c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY
178cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell_mesa_EnableClientState( GLenum cap )
179cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell{
180cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   GET_CURRENT_CONTEXT(ctx);
181cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   ASSERT_OUTSIDE_BEGIN_END(ctx);
182cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   client_state( ctx, cap, GL_TRUE );
183cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell}
184cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
185cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
1866dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**
1876dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * Disable GL capability.
1888dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian * \param cap  state to enable/disable.
1896dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell *
1906dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * Get's the current context, assures that we're outside glBegin()/glEnd() and
1916dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * calls client_state().
1926dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */
193c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY
194cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell_mesa_DisableClientState( GLenum cap )
195cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell{
196cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   GET_CURRENT_CONTEXT(ctx);
197cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   ASSERT_OUTSIDE_BEGIN_END(ctx);
198cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   client_state( ctx, cap, GL_FALSE );
199cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell}
200cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
201afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
20286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul#undef CHECK_EXTENSION
20302c03ef6b4762adf33b73528c9fd672ef4697763Brian Paul#define CHECK_EXTENSION(EXTNAME, CAP)					\
20402c03ef6b4762adf33b73528c9fd672ef4697763Brian Paul   if (!ctx->Extensions.EXTNAME) {					\
205f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul      goto invalid_enum_error;						\
20686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul   }
20786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul
208efb2ade520f47187ac70abe57185358017b63caaBrian Paul#define CHECK_EXTENSION2(EXT1, EXT2, CAP)				\
209efb2ade520f47187ac70abe57185358017b63caaBrian Paul   if (!ctx->Extensions.EXT1 && !ctx->Extensions.EXT2) {		\
210f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul      goto invalid_enum_error;						\
211efb2ade520f47187ac70abe57185358017b63caaBrian Paul   }
212efb2ade520f47187ac70abe57185358017b63caaBrian 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:
27608be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES)
27708be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
27886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Color.AlphaEnabled == state)
27986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
28086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_COLOR);
28186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Color.AlphaEnabled = state;
28286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
28386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_AUTO_NORMAL:
28408be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
28508be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
28686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.AutoNormal == state)
28786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
28886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
28986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.AutoNormal = state;
29086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
29186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_BLEND:
2923728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul         {
293d0d767ad4c6ee13c72577b072b24aa06841f6357Brian Paul            GLbitfield newEnabled =
294d0d767ad4c6ee13c72577b072b24aa06841f6357Brian Paul               state * ((1 << ctx->Const.MaxDrawBuffers) - 1);
2953728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul            if (newEnabled != ctx->Color.BlendEnabled) {
2963728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul               FLUSH_VERTICES(ctx, _NEW_COLOR);
2973728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul               ctx->Color.BlendEnabled = newEnabled;
2983728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul            }
2993728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul         }
30086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
3016dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell#if FEATURE_userclip
3022d686fe911a89fa477ee3848da41ebfb100500bfPaul Berry      case GL_CLIP_DISTANCE0:
3032d686fe911a89fa477ee3848da41ebfb100500bfPaul Berry      case GL_CLIP_DISTANCE1:
3042d686fe911a89fa477ee3848da41ebfb100500bfPaul Berry      case GL_CLIP_DISTANCE2:
3052d686fe911a89fa477ee3848da41ebfb100500bfPaul Berry      case GL_CLIP_DISTANCE3:
3062d686fe911a89fa477ee3848da41ebfb100500bfPaul Berry      case GL_CLIP_DISTANCE4:
3072d686fe911a89fa477ee3848da41ebfb100500bfPaul Berry      case GL_CLIP_DISTANCE5:
3082d686fe911a89fa477ee3848da41ebfb100500bfPaul Berry      case GL_CLIP_DISTANCE6:
3092d686fe911a89fa477ee3848da41ebfb100500bfPaul Berry      case GL_CLIP_DISTANCE7:
31086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         {
311b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry            const GLuint p = cap - GL_CLIP_DISTANCE0;
312b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry
313b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry            if (p >= ctx->Const.MaxClipPlanes)
314b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry               goto invalid_enum_error;
31586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul
316d0d767ad4c6ee13c72577b072b24aa06841f6357Brian Paul            if ((ctx->Transform.ClipPlanesEnabled & (1 << p))
317d0d767ad4c6ee13c72577b072b24aa06841f6357Brian Paul                == ((GLuint) state << p))
31886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul               return;
31986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul
32086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            FLUSH_VERTICES(ctx, _NEW_TRANSFORM);
32186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul
32286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            if (state) {
323103bc0f75c00dfcf671dc50d8d9666f88a42a59dBrian Paul               ctx->Transform.ClipPlanesEnabled |= (1 << p);
324ec4a21b0e21e8c706f26db5308fb267b6979b631Brian Paul               _mesa_update_clip_plane(ctx, p);
32586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            }
326f66de793654e20704a8180538207a4736ada7996Brian Paul            else {
327103bc0f75c00dfcf671dc50d8d9666f88a42a59dBrian Paul               ctx->Transform.ClipPlanesEnabled &= ~(1 << p);
328f66de793654e20704a8180538207a4736ada7996Brian Paul            }
32986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         }
33086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
3316dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell#endif
33286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_COLOR_MATERIAL:
33308be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES)
33408be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
33586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Light.ColorMaterialEnabled == state)
33686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
33786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_LIGHT);
338d40f9fa0ec4699627aad37f0c06409ead5ee002aBrian Paul         FLUSH_CURRENT(ctx, 0);
33986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Light.ColorMaterialEnabled = state;
34086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (state) {
34186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            _mesa_update_color_material( ctx,
34286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul                                  ctx->Current.Attrib[VERT_ATTRIB_COLOR0] );
34386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         }
34486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
34586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_CULL_FACE:
34686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Polygon.CullFlag == state)
34786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
34886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_POLYGON);
34986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Polygon.CullFlag = state;
35086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
35186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_DEPTH_TEST:
3528dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian         if (ctx->Depth.Test == state)
35386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
35486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_DEPTH);
35586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Depth.Test = state;
35686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
357ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled      case GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB:
35808be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx))
35908be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
360ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled         ctx->Debug.SyncOutput = state;
361ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled         break;
36286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_DITHER:
3638dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian         if (ctx->Color.DitherFlag == state)
36486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
36586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_COLOR);
36686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Color.DitherFlag = state;
36786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
36886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_FOG:
36908be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES)
37008be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
3718dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian         if (ctx->Fog.Enabled == state)
37286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
37386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_FOG);
37486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Fog.Enabled = state;
37586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
37686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_LIGHT0:
37786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_LIGHT1:
37886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_LIGHT2:
37986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_LIGHT3:
38086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_LIGHT4:
38186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_LIGHT5:
38286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_LIGHT6:
38386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_LIGHT7:
38408be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES)
38508be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
38686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Light.Light[cap-GL_LIGHT0].Enabled == state)
38786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
38886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_LIGHT);
38986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Light.Light[cap-GL_LIGHT0].Enabled = state;
39086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (state) {
39186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            insert_at_tail(&ctx->Light.EnabledList,
39286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul                           &ctx->Light.Light[cap-GL_LIGHT0]);
39386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         }
39486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         else {
39586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            remove_from_list(&ctx->Light.Light[cap-GL_LIGHT0]);
39686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         }
39786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
39886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_LIGHTING:
39908be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES)
40008be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
40186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Light.Enabled == state)
40286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
403454043c4ae20a92ff0a56f41fdb6aa7a75af00c8Brian         FLUSH_VERTICES(ctx, _NEW_LIGHT);
404454043c4ae20a92ff0a56f41fdb6aa7a75af00c8Brian         ctx->Light.Enabled = state;
405ed6d5ff6f8fdd34aaaa126119dbd8e1e321859d8Brian         if (ctx->Light.Enabled && ctx->Light.Model.TwoSide)
406ed6d5ff6f8fdd34aaaa126119dbd8e1e321859d8Brian            ctx->_TriangleCaps |= DD_TRI_LIGHT_TWOSIDE;
407ed6d5ff6f8fdd34aaaa126119dbd8e1e321859d8Brian         else
408ed6d5ff6f8fdd34aaaa126119dbd8e1e321859d8Brian            ctx->_TriangleCaps &= ~DD_TRI_LIGHT_TWOSIDE;
40986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
41086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_LINE_SMOOTH:
41108be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES)
41208be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
41386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Line.SmoothFlag == state)
41486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
41586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_LINE);
41686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Line.SmoothFlag = state;
417ed6d5ff6f8fdd34aaaa126119dbd8e1e321859d8Brian         ctx->_TriangleCaps ^= DD_LINE_SMOOTH;
41886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
41986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_LINE_STIPPLE:
42008be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
42108be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
42286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Line.StippleFlag == state)
42386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
42486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_LINE);
42586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Line.StippleFlag = state;
426ed6d5ff6f8fdd34aaaa126119dbd8e1e321859d8Brian         ctx->_TriangleCaps ^= DD_LINE_STIPPLE;
42786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
42886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_INDEX_LOGIC_OP:
42908be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
43008be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
43186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Color.IndexLogicOpEnabled == state)
43286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
43386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_COLOR);
43486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Color.IndexLogicOpEnabled = state;
43586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
43686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_COLOR_LOGIC_OP:
43708be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES)
43808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
43986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Color.ColorLogicOpEnabled == state)
44086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
44186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_COLOR);
44286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Color.ColorLogicOpEnabled = state;
44386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
44486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_COLOR_4:
44508be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
44608be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
44786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map1Color4 == state)
44886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
44986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
45086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map1Color4 = state;
45186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
45286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_INDEX:
45308be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
45408be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
45586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map1Index == state)
45686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
45786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
45886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map1Index = state;
45986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
46086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_NORMAL:
46108be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
46208be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
46386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map1Normal == state)
46486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
46586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
46686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map1Normal = state;
46786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
46886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_TEXTURE_COORD_1:
46908be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
47008be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
47186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map1TextureCoord1 == state)
47286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
47386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
47486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map1TextureCoord1 = state;
47586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
47686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_TEXTURE_COORD_2:
47708be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
47808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
47986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map1TextureCoord2 == state)
48086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
48186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
48286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map1TextureCoord2 = state;
48386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
48486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_TEXTURE_COORD_3:
48508be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
48608be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
48786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map1TextureCoord3 == state)
48886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
48986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
49086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map1TextureCoord3 = state;
49186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
49286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_TEXTURE_COORD_4:
49308be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
49408be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
49586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map1TextureCoord4 == state)
49686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
49786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
49886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map1TextureCoord4 = state;
49986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
50086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_3:
50108be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
50208be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
50386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map1Vertex3 == state)
50486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
50586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
50686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map1Vertex3 = state;
50786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
50886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_4:
50908be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
51008be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
51186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map1Vertex4 == state)
51286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
51386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
51486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map1Vertex4 = state;
51586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
51686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_COLOR_4:
51708be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
51808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
51986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map2Color4 == state)
52086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
52186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
52286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map2Color4 = state;
52386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
52486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_INDEX:
52508be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
52608be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
52786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map2Index == state)
52886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
52986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
53086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map2Index = state;
53186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
53286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_NORMAL:
53308be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
53408be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
53586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map2Normal == state)
53686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
53786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
53886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map2Normal = state;
53986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
54086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_TEXTURE_COORD_1:
54108be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
54208be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
54386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map2TextureCoord1 == state)
54486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
54586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
54686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map2TextureCoord1 = state;
54786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
54886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_TEXTURE_COORD_2:
54908be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
55008be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
55186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map2TextureCoord2 == state)
55286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
55386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
55486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map2TextureCoord2 = state;
55586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
55686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_TEXTURE_COORD_3:
55708be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
55808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
55986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map2TextureCoord3 == state)
56086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
56186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
56286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map2TextureCoord3 = state;
56386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
56486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_TEXTURE_COORD_4:
56508be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
56608be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
56786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map2TextureCoord4 == state)
56886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
56986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
57086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map2TextureCoord4 = state;
57186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
57286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_3:
57308be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
57408be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
57586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map2Vertex3 == state)
57686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
57786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
57886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map2Vertex3 = state;
57986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
58086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_4:
58108be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
58208be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
58386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map2Vertex4 == state)
58486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
58586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
58686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map2Vertex4 = state;
58786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
58886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_NORMALIZE:
58908be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES)
59008be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
59186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Transform.Normalize == state)
59286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
59386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_TRANSFORM);
59486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Transform.Normalize = state;
59586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
59686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_POINT_SMOOTH:
59708be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES)
59808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
5998dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian         if (ctx->Point.SmoothFlag == state)
60086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
60186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_POINT);
60286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Point.SmoothFlag = state;
603ed6d5ff6f8fdd34aaaa126119dbd8e1e321859d8Brian         ctx->_TriangleCaps ^= DD_POINT_SMOOTH;
60486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
60586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_POLYGON_SMOOTH:
60608be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx))
60708be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
6088dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian         if (ctx->Polygon.SmoothFlag == state)
60986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
61086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_POLYGON);
61186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Polygon.SmoothFlag = state;
612ed6d5ff6f8fdd34aaaa126119dbd8e1e321859d8Brian         ctx->_TriangleCaps ^= DD_TRI_SMOOTH;
61386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
61486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_POLYGON_STIPPLE:
61508be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
61608be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
6178dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian         if (ctx->Polygon.StippleFlag == state)
61886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
61986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_POLYGON);
62086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Polygon.StippleFlag = state;
621ed6d5ff6f8fdd34aaaa126119dbd8e1e321859d8Brian         ctx->_TriangleCaps ^= DD_TRI_STIPPLE;
62286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
62386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_POLYGON_OFFSET_POINT:
62408be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx))
62508be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
6268dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian         if (ctx->Polygon.OffsetPoint == state)
62786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
62886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_POLYGON);
62986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Polygon.OffsetPoint = state;
63086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
63186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_POLYGON_OFFSET_LINE:
63208be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx))
63308be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
6348dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian         if (ctx->Polygon.OffsetLine == state)
63586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
63686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_POLYGON);
63786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Polygon.OffsetLine = state;
63886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
63986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_POLYGON_OFFSET_FILL:
6408dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian         if (ctx->Polygon.OffsetFill == state)
64186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
64286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_POLYGON);
64386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Polygon.OffsetFill = state;
64486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
64586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_RESCALE_NORMAL_EXT:
64608be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES)
64708be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
64886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Transform.RescaleNormals == state)
64986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
65086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_TRANSFORM);
65186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Transform.RescaleNormals = state;
65286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
65386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_SCISSOR_TEST:
6548dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian         if (ctx->Scissor.Enabled == state)
65586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
65686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_SCISSOR);
65786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Scissor.Enabled = state;
65886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
65986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_STENCIL_TEST:
6608dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian         if (ctx->Stencil.Enabled == state)
66186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
66286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_STENCIL);
66386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Stencil.Enabled = state;
66486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
66558dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick      case GL_TEXTURE_1D:
66608be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
66708be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
66858dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         if (!enable_texture(ctx, state, TEXTURE_1D_BIT)) {
66986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
67058dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         }
67186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
67258dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick      case GL_TEXTURE_2D:
67308be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES)
67408be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
67558dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         if (!enable_texture(ctx, state, TEXTURE_2D_BIT)) {
67686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
67758dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         }
67886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
67958dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick      case GL_TEXTURE_3D:
68008be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES)
68108be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
68258dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         if (!enable_texture(ctx, state, TEXTURE_3D_BIT)) {
68386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
68458dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         }
68586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
686e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul      case GL_TEXTURE_GEN_S:
687e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul      case GL_TEXTURE_GEN_T:
688933b99f113c97588b616daad2fb19456eece96e2Brian Paul      case GL_TEXTURE_GEN_R:
689933b99f113c97588b616daad2fb19456eece96e2Brian Paul      case GL_TEXTURE_GEN_Q:
690e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul         {
691e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul            struct gl_texture_unit *texUnit = get_texcoord_unit(ctx);
69208be1d288f216232d3974f5997b266a8dd720928Ian Romanick
69308be1d288f216232d3974f5997b266a8dd720928Ian Romanick            if (ctx->API != API_OPENGL)
69408be1d288f216232d3974f5997b266a8dd720928Ian Romanick               goto invalid_enum_error;
69508be1d288f216232d3974f5997b266a8dd720928Ian Romanick
696e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul            if (texUnit) {
697933b99f113c97588b616daad2fb19456eece96e2Brian Paul               GLbitfield coordBit = S_BIT << (cap - GL_TEXTURE_GEN_S);
698933b99f113c97588b616daad2fb19456eece96e2Brian Paul               GLbitfield newenabled = texUnit->TexGenEnabled & ~coordBit;
699e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul               if (state)
700933b99f113c97588b616daad2fb19456eece96e2Brian Paul                  newenabled |= coordBit;
701e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul               if (texUnit->TexGenEnabled == newenabled)
702e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul                  return;
703e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul               FLUSH_VERTICES(ctx, _NEW_TEXTURE);
704e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul               texUnit->TexGenEnabled = newenabled;
705e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul            }
706e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul         }
70786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
70886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul
70908fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg#if FEATURE_ES1
71008fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg      case GL_TEXTURE_GEN_STR_OES:
71108fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg	 /* disable S, T, and R at the same time */
71208fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg	 {
71308fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg            struct gl_texture_unit *texUnit = get_texcoord_unit(ctx);
71408be1d288f216232d3974f5997b266a8dd720928Ian Romanick
71508be1d288f216232d3974f5997b266a8dd720928Ian Romanick            if (ctx->API != API_OPENGLES)
71608be1d288f216232d3974f5997b266a8dd720928Ian Romanick               goto invalid_enum_error;
71708be1d288f216232d3974f5997b266a8dd720928Ian Romanick
71808fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg            if (texUnit) {
71908fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg               GLuint newenabled =
72008fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg		  texUnit->TexGenEnabled & ~STR_BITS;
72108fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg               if (state)
72208fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg                  newenabled |= STR_BITS;
72308fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg               if (texUnit->TexGenEnabled == newenabled)
72408fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg                  return;
72508fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg               FLUSH_VERTICES(ctx, _NEW_TEXTURE);
72608fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg               texUnit->TexGenEnabled = newenabled;
72708fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg            }
72808fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg         }
72908fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg         break;
73008fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg#endif
73108fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg
732192baaac0fc4701e82dcc3e19b3033f81dd82a62Brian Paul      /* client-side state */
73386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ARRAY:
73486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_NORMAL_ARRAY:
73586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_COLOR_ARRAY:
73686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_INDEX_ARRAY:
73786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_TEXTURE_COORD_ARRAY:
73886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_EDGE_FLAG_ARRAY:
73986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_FOG_COORDINATE_ARRAY_EXT:
74086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_SECONDARY_COLOR_ARRAY_EXT:
7411cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul      case GL_POINT_SIZE_ARRAY_OES:
74286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         client_state( ctx, cap, state );
74386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         return;
744afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
74586fc370d399167ec9bb978d053d4a72215c86c16Brian Paul      /* GL_ARB_texture_cube_map */
74686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_TEXTURE_CUBE_MAP_ARB:
74708be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES)
74808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
74958dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         CHECK_EXTENSION(ARB_texture_cube_map, cap);
75058dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         if (!enable_texture(ctx, state, TEXTURE_CUBE_BIT)) {
75158dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick            return;
75286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         }
75386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
75446b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell
75586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      /* GL_EXT_secondary_color */
75686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_COLOR_SUM_EXT:
75708be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
75808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
759da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger         CHECK_EXTENSION2(EXT_secondary_color, ARB_vertex_program, cap);
76086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Fog.ColorSumEnabled == state)
76186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
76286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_FOG);
76386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Fog.ColorSumEnabled = state;
76486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
76506d05afdd687fcd1d59d46c6a86c2e5707e1859bBrian Paul
766736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul      /* GL_ARB_multisample */
76786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MULTISAMPLE_ARB:
768055093e33fc90705c429e948caefedf0e0fb82afBrian Paul         if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES)
76908be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
77086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Multisample.Enabled == state)
77186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
77286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_MULTISAMPLE);
77386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Multisample.Enabled = state;
77486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
77586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_SAMPLE_ALPHA_TO_COVERAGE_ARB:
77686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Multisample.SampleAlphaToCoverage == state)
77786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
77886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_MULTISAMPLE);
77986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Multisample.SampleAlphaToCoverage = state;
78086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
78186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_SAMPLE_ALPHA_TO_ONE_ARB:
78208be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES)
78308be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
78486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Multisample.SampleAlphaToOne == state)
78586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
78686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_MULTISAMPLE);
78786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Multisample.SampleAlphaToOne = state;
78886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
78986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_SAMPLE_COVERAGE_ARB:
79086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Multisample.SampleCoverage == state)
79186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
79286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_MULTISAMPLE);
79386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Multisample.SampleCoverage = state;
79486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
79586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_SAMPLE_COVERAGE_INVERT_ARB:
79608be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx))
79708be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
79886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Multisample.SampleCoverageInvert == state)
79986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
80086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_MULTISAMPLE);
80186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Multisample.SampleCoverageInvert = state;
80286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
8038c2f6c5059a60d845716277973c826f4069926e6Brian Paul
8048c2f6c5059a60d845716277973c826f4069926e6Brian Paul      /* GL_IBM_rasterpos_clip */
80586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_RASTER_POSITION_UNCLIPPED_IBM:
80608be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
80708be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
80802c03ef6b4762adf33b73528c9fd672ef4697763Brian Paul         CHECK_EXTENSION(IBM_rasterpos_clip, cap);
80986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Transform.RasterPositionUnclipped == state)
81086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
81186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_TRANSFORM);
81286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Transform.RasterPositionUnclipped = state;
81386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
814736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul
8156c408b46678637959dba04663fbc34eb9c4bc397Brian Paul      /* GL_NV_point_sprite */
8166c408b46678637959dba04663fbc34eb9c4bc397Brian Paul      case GL_POINT_SPRITE_NV:
81708be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES)
81808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
81963736723678ef30e7f90835cfbd48c520e39bf11Ian Romanick         CHECK_EXTENSION2(NV_point_sprite, ARB_point_sprite, cap);
8206c408b46678637959dba04663fbc34eb9c4bc397Brian Paul         if (ctx->Point.PointSprite == state)
82186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
82286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_POINT);
8236c408b46678637959dba04663fbc34eb9c4bc397Brian Paul         ctx->Point.PointSprite = state;
82486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
82586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul
82693da673904d4c520d3fbd2210e53777bf1598ac6Roland Scheidegger#if FEATURE_NV_vertex_program || FEATURE_ARB_vertex_program
827e1e03b32ab651e992f7b979eba046fdc84fedf2eRoland Scheidegger      case GL_VERTEX_PROGRAM_ARB:
82808be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
82908be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
830e1e03b32ab651e992f7b979eba046fdc84fedf2eRoland Scheidegger         CHECK_EXTENSION2(ARB_vertex_program, NV_vertex_program, cap);
83186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->VertexProgram.Enabled == state)
83286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
8333abf746a7eae52220485cd031aecec2ca9e6103eKeith Whitwell         FLUSH_VERTICES(ctx, _NEW_PROGRAM);
83486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->VertexProgram.Enabled = state;
83586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
836e1e03b32ab651e992f7b979eba046fdc84fedf2eRoland Scheidegger      case GL_VERTEX_PROGRAM_POINT_SIZE_ARB:
83708be1d288f216232d3974f5997b266a8dd720928Ian Romanick         /* This was added with ARB_vertex_program, but it is also used with
83808be1d288f216232d3974f5997b266a8dd720928Ian Romanick          * GLSL vertex shaders on desktop.
83908be1d288f216232d3974f5997b266a8dd720928Ian Romanick          */
84008be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx))
84108be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
842e1e03b32ab651e992f7b979eba046fdc84fedf2eRoland Scheidegger         CHECK_EXTENSION2(ARB_vertex_program, NV_vertex_program, cap);
84386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->VertexProgram.PointSizeEnabled == state)
84486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
8453abf746a7eae52220485cd031aecec2ca9e6103eKeith Whitwell         FLUSH_VERTICES(ctx, _NEW_PROGRAM);
84686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->VertexProgram.PointSizeEnabled = state;
84786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
848e1e03b32ab651e992f7b979eba046fdc84fedf2eRoland Scheidegger      case GL_VERTEX_PROGRAM_TWO_SIDE_ARB:
84908be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
85008be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
851e1e03b32ab651e992f7b979eba046fdc84fedf2eRoland Scheidegger         CHECK_EXTENSION2(ARB_vertex_program, NV_vertex_program, cap);
85286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->VertexProgram.TwoSideEnabled == state)
85386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
8543abf746a7eae52220485cd031aecec2ca9e6103eKeith Whitwell         FLUSH_VERTICES(ctx, _NEW_PROGRAM);
85586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->VertexProgram.TwoSideEnabled = state;
85686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
85793da673904d4c520d3fbd2210e53777bf1598ac6Roland Scheidegger#endif
85893da673904d4c520d3fbd2210e53777bf1598ac6Roland Scheidegger#if FEATURE_NV_vertex_program
85986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB0_4_NV:
86086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB1_4_NV:
86186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB2_4_NV:
86286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB3_4_NV:
86386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB4_4_NV:
86486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB5_4_NV:
86586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB6_4_NV:
86686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB7_4_NV:
86786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB8_4_NV:
86886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB9_4_NV:
86986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB10_4_NV:
87086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB11_4_NV:
87186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB12_4_NV:
87286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB13_4_NV:
87386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB14_4_NV:
87486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB15_4_NV:
87508be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
87608be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
87702c03ef6b4762adf33b73528c9fd672ef4697763Brian Paul         CHECK_EXTENSION(NV_vertex_program, cap);
878bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         {
879bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            const GLuint map = (GLuint) (cap - GL_MAP1_VERTEX_ATTRIB0_4_NV);
880bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            FLUSH_VERTICES(ctx, _NEW_EVAL);
881bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            ctx->Eval.Map1Attrib[map] = state;
882bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         }
88386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
88486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB0_4_NV:
88586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB1_4_NV:
88686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB2_4_NV:
88786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB3_4_NV:
88886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB4_4_NV:
88986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB5_4_NV:
89086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB6_4_NV:
89186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB7_4_NV:
89286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB8_4_NV:
89386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB9_4_NV:
89486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB10_4_NV:
89586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB11_4_NV:
89686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB12_4_NV:
89786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB13_4_NV:
89886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB14_4_NV:
89986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB15_4_NV:
90008be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
90108be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
90202c03ef6b4762adf33b73528c9fd672ef4697763Brian Paul         CHECK_EXTENSION(NV_vertex_program, cap);
903bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         {
904bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            const GLuint map = (GLuint) (cap - GL_MAP2_VERTEX_ATTRIB0_4_NV);
905bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            FLUSH_VERTICES(ctx, _NEW_EVAL);
906bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            ctx->Eval.Map2Attrib[map] = state;
907bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         }
90886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
9098dfc5b9863f08a713177fd92847573e17febbac9Brian Paul#endif /* FEATURE_NV_vertex_program */
910cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
911610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul#if FEATURE_NV_fragment_program
912610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul      case GL_FRAGMENT_PROGRAM_NV:
91308be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
91408be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
915610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul         CHECK_EXTENSION(NV_fragment_program, cap);
916610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul         if (ctx->FragmentProgram.Enabled == state)
917610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul            return;
9183abf746a7eae52220485cd031aecec2ca9e6103eKeith Whitwell         FLUSH_VERTICES(ctx, _NEW_PROGRAM);
919610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul         ctx->FragmentProgram.Enabled = state;
920610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul         break;
921610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul#endif /* FEATURE_NV_fragment_program */
922610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul
9238afe7de8deaf3c9613fd68b344de8c52b02b1879Brian Paul      /* GL_NV_texture_rectangle */
9248afe7de8deaf3c9613fd68b344de8c52b02b1879Brian Paul      case GL_TEXTURE_RECTANGLE_NV:
92508be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
92608be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
9275f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul         CHECK_EXTENSION(NV_texture_rectangle, cap);
92858dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         if (!enable_texture(ctx, state, TEXTURE_RECT_BIT)) {
92958dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick            return;
9308afe7de8deaf3c9613fd68b344de8c52b02b1879Brian Paul         }
9318afe7de8deaf3c9613fd68b344de8c52b02b1879Brian Paul         break;
9328afe7de8deaf3c9613fd68b344de8c52b02b1879Brian Paul
9335f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul      /* GL_EXT_stencil_two_side */
9345f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul      case GL_STENCIL_TEST_TWO_SIDE_EXT:
93508be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
93608be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
9375f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul         CHECK_EXTENSION(EXT_stencil_two_side, cap);
9385f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul         if (ctx->Stencil.TestTwoSide == state)
9395f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul            return;
9405f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul         FLUSH_VERTICES(ctx, _NEW_STENCIL);
9415f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul         ctx->Stencil.TestTwoSide = state;
942dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick         if (state) {
943dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick            ctx->Stencil._BackFace = 2;
944dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick         } else {
945dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick            ctx->Stencil._BackFace = 1;
946dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick         }
9475f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul         break;
9485f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul
94977eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul#if FEATURE_ARB_fragment_program
95077eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul      case GL_FRAGMENT_PROGRAM_ARB:
95108be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
95208be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
95377eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul         CHECK_EXTENSION(ARB_fragment_program, cap);
95477eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul         if (ctx->FragmentProgram.Enabled == state)
95577eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul            return;
9563abf746a7eae52220485cd031aecec2ca9e6103eKeith Whitwell         FLUSH_VERTICES(ctx, _NEW_PROGRAM);
95777eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul         ctx->FragmentProgram.Enabled = state;
95877eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul         break;
95977eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul#endif /* FEATURE_ARB_fragment_program */
96077eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul
961e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul      /* GL_EXT_depth_bounds_test */
962e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul      case GL_DEPTH_BOUNDS_TEST_EXT:
96308be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx))
96408be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
965e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul         CHECK_EXTENSION(EXT_depth_bounds_test, cap);
966e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul         if (ctx->Depth.BoundsTest == state)
967e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul            return;
968e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul         FLUSH_VERTICES(ctx, _NEW_DEPTH);
969e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul         ctx->Depth.BoundsTest = state;
970e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul         break;
971e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul
972b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt      case GL_DEPTH_CLAMP:
97308be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx))
97408be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
97508be1d288f216232d3974f5997b266a8dd720928Ian Romanick	 CHECK_EXTENSION(ARB_depth_clamp, cap);
976b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt         if (ctx->Transform.DepthClamp == state)
977b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt            return;
978b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt         FLUSH_VERTICES(ctx, _NEW_TRANSFORM);
979b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt	 ctx->Transform.DepthClamp = state;
980b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt	 break;
981b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt
9827f752fed993e5e9423abac200dd59141edbada56Dave Airlie#if FEATURE_ATI_fragment_shader
9837f752fed993e5e9423abac200dd59141edbada56Dave Airlie      case GL_FRAGMENT_SHADER_ATI:
98408be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
98508be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
9867f752fed993e5e9423abac200dd59141edbada56Dave Airlie        CHECK_EXTENSION(ATI_fragment_shader, cap);
9877f752fed993e5e9423abac200dd59141edbada56Dave Airlie	if (ctx->ATIFragmentShader.Enabled == state)
9887f752fed993e5e9423abac200dd59141edbada56Dave Airlie	  return;
9897f752fed993e5e9423abac200dd59141edbada56Dave Airlie	FLUSH_VERTICES(ctx, _NEW_PROGRAM);
9907f752fed993e5e9423abac200dd59141edbada56Dave Airlie	ctx->ATIFragmentShader.Enabled = state;
9917f752fed993e5e9423abac200dd59141edbada56Dave Airlie        break;
9927f752fed993e5e9423abac200dd59141edbada56Dave Airlie#endif
993bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick
994bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick      /* GL_MESA_texture_array */
995bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick      case GL_TEXTURE_1D_ARRAY_EXT:
99608be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
99708be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
998bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick         CHECK_EXTENSION(MESA_texture_array, cap);
999bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick         if (!enable_texture(ctx, state, TEXTURE_1D_ARRAY_BIT)) {
1000bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick            return;
1001bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick         }
1002bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick         break;
1003bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick
1004bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick      case GL_TEXTURE_2D_ARRAY_EXT:
100508be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
100608be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1007bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick         CHECK_EXTENSION(MESA_texture_array, cap);
1008bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick         if (!enable_texture(ctx, state, TEXTURE_2D_ARRAY_BIT)) {
1009bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick            return;
1010bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick         }
1011bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick         break;
1012bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick
10139d5bb3c6f820a5a99e1f55b2fd14d250761fcddcIan Romanick      case GL_TEXTURE_CUBE_MAP_SEAMLESS:
101408be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx))
101508be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
10169d5bb3c6f820a5a99e1f55b2fd14d250761fcddcIan Romanick	 CHECK_EXTENSION(ARB_seamless_cube_map, cap);
1017aafbaa9e6a87cecb336f2704b799430d74c60456Marek Olšák	 if (ctx->Texture.CubeMapSeamless != state) {
1018aafbaa9e6a87cecb336f2704b799430d74c60456Marek Olšák	    FLUSH_VERTICES(ctx, _NEW_TEXTURE);
1019aafbaa9e6a87cecb336f2704b799430d74c60456Marek Olšák	    ctx->Texture.CubeMapSeamless = state;
1020aafbaa9e6a87cecb336f2704b799430d74c60456Marek Olšák	 }
10219d5bb3c6f820a5a99e1f55b2fd14d250761fcddcIan Romanick	 break;
10229d5bb3c6f820a5a99e1f55b2fd14d250761fcddcIan Romanick
102386a1ea31ed6afdb9789671ca3fdd79709ea9f112Brian Paul#if FEATURE_EXT_transform_feedback
102486a1ea31ed6afdb9789671ca3fdd79709ea9f112Brian Paul      case GL_RASTERIZER_DISCARD:
102508be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx))
102608be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
102786a1ea31ed6afdb9789671ca3fdd79709ea9f112Brian Paul	 CHECK_EXTENSION(EXT_transform_feedback, cap);
1028aee96806f049c17384a8edc11acce76257d98a57Paul Berry         if (ctx->RasterDiscard != state) {
1029d44878e754e65550c0725feb76fe0cbab0ae5d93Paul Berry            FLUSH_VERTICES(ctx, _NEW_RASTERIZER_DISCARD);
1030aee96806f049c17384a8edc11acce76257d98a57Paul Berry            ctx->RasterDiscard = state;
103186a1ea31ed6afdb9789671ca3fdd79709ea9f112Brian Paul         }
103286a1ea31ed6afdb9789671ca3fdd79709ea9f112Brian Paul         break;
103386a1ea31ed6afdb9789671ca3fdd79709ea9f112Brian Paul#endif
103486a1ea31ed6afdb9789671ca3fdd79709ea9f112Brian Paul
10357f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul      /* GL 3.1 primitive restart.  Note: this enum is different from
10367f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul       * GL_PRIMITIVE_RESTART_NV (which is client state).
10377f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul       */
1038a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul      case GL_PRIMITIVE_RESTART:
103908be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx) || ctx->Version < 31) {
1040a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul            goto invalid_enum_error;
1041a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul         }
1042a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul         if (ctx->Array.PrimitiveRestart != state) {
1043a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul            FLUSH_VERTICES(ctx, _NEW_TRANSFORM);
1044a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul            ctx->Array.PrimitiveRestart = state;
1045a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul         }
1046a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul         break;
1047a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul
1048a637280e42b9a2f4ccbb5e7b209c5645073f584eDave Airlie      /* GL3.0 - GL_framebuffer_sRGB */
1049a637280e42b9a2f4ccbb5e7b209c5645073f584eDave Airlie      case GL_FRAMEBUFFER_SRGB_EXT:
105008be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx))
105108be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
105288ffa9ce5b8e5fe2b93238f8b9a7a888be28324eDave Airlie         CHECK_EXTENSION(EXT_framebuffer_sRGB, cap);
105388ffa9ce5b8e5fe2b93238f8b9a7a888be28324eDave Airlie         FLUSH_VERTICES(ctx, _NEW_BUFFERS);
105488ffa9ce5b8e5fe2b93238f8b9a7a888be28324eDave Airlie         ctx->Color.sRGBEnabled = state;
105588ffa9ce5b8e5fe2b93238f8b9a7a888be28324eDave Airlie         break;
1056a637280e42b9a2f4ccbb5e7b209c5645073f584eDave Airlie
10570c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu      /* GL_OES_EGL_image_external */
10580c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu      case GL_TEXTURE_EXTERNAL_OES:
105908be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_gles(ctx))
106008be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
10610c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu         CHECK_EXTENSION(OES_EGL_image_external, cap);
10620c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu         if (!enable_texture(ctx, state, TEXTURE_EXTERNAL_BIT)) {
10630c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu            return;
10640c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu         }
10650c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu         break;
10660c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu
106786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      default:
1068f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul         goto invalid_enum_error;
1069afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
1070afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
1071afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   if (ctx->Driver.Enable) {
10728dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian      ctx->Driver.Enable( ctx, cap, state );
1073afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
1074f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul
1075f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul   return;
1076f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul
1077f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paulinvalid_enum_error:
1078dcf1dafa9ec93f9300ecffe5bddfd2b131bc218fBrian Paul   _mesa_error(ctx, GL_INVALID_ENUM, "gl%s(%s)",
1079dcf1dafa9ec93f9300ecffe5bddfd2b131bc218fBrian Paul               state ? "Enable" : "Disable", _mesa_lookup_enum_by_nr(cap));
1080afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
1081afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
1082afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
10836dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**
10848dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian * Enable GL capability.  Called by glEnable()
10858dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian * \param cap  state to enable.
10866dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */
1087c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY
1088fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_Enable( GLenum cap )
1089afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
1090fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   GET_CURRENT_CONTEXT(ctx);
1091376d022e4a5a56f81f089a13a34438981fe83178Keith Whitwell   ASSERT_OUTSIDE_BEGIN_END(ctx);
1092376d022e4a5a56f81f089a13a34438981fe83178Keith Whitwell
1093fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   _mesa_set_enable( ctx, cap, GL_TRUE );
1094afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
1095afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
1096afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
10976dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**
10988dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian * Disable GL capability.  Called by glDisable()
10998dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian * \param cap  state to disable.
11006dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */
1101c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY
1102fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_Disable( GLenum cap )
1103afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
1104fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   GET_CURRENT_CONTEXT(ctx);
1105376d022e4a5a56f81f089a13a34438981fe83178Keith Whitwell   ASSERT_OUTSIDE_BEGIN_END(ctx);
1106376d022e4a5a56f81f089a13a34438981fe83178Keith Whitwell
1107fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   _mesa_set_enable( ctx, cap, GL_FALSE );
1108afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
1109afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
1110afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
11113728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul
11123728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul/**
11133728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul * Enable/disable an indexed state var.
11143728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul */
11153728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paulvoid
1116d0d767ad4c6ee13c72577b072b24aa06841f6357Brian Paul_mesa_set_enablei(struct gl_context *ctx, GLenum cap,
1117d0d767ad4c6ee13c72577b072b24aa06841f6357Brian Paul                  GLuint index, GLboolean state)
11183728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul{
11193728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   ASSERT(state == 0 || state == 1);
11203728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   switch (cap) {
11213728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   case GL_BLEND:
11228f6f1124634cf659dde4c75549b84e35505d892dBrian Paul      if (!ctx->Extensions.EXT_draw_buffers2) {
1123f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul         goto invalid_enum_error;
11248f6f1124634cf659dde4c75549b84e35505d892dBrian Paul      }
11253728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul      if (index >= ctx->Const.MaxDrawBuffers) {
11263728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul         _mesa_error(ctx, GL_INVALID_VALUE, "%s(index=%u)",
11273728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul                     state ? "glEnableIndexed" : "glDisableIndexed", index);
11283728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul         return;
11293728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul      }
11303728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul      if (((ctx->Color.BlendEnabled >> index) & 1) != state) {
11313728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul         FLUSH_VERTICES(ctx, _NEW_COLOR);
11323728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul         if (state)
11333728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul            ctx->Color.BlendEnabled |= (1 << index);
11343728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul         else
11353728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul            ctx->Color.BlendEnabled &= ~(1 << index);
11363728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul      }
11373728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul      break;
11383728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   default:
1139f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul      goto invalid_enum_error;
11403728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   }
11418f6f1124634cf659dde4c75549b84e35505d892dBrian Paul   return;
11428f6f1124634cf659dde4c75549b84e35505d892dBrian Paul
1143f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paulinvalid_enum_error:
11448f6f1124634cf659dde4c75549b84e35505d892dBrian Paul    _mesa_error(ctx, GL_INVALID_ENUM, "%s(cap=%s)",
11458f6f1124634cf659dde4c75549b84e35505d892dBrian Paul                state ? "glEnablei" : "glDisablei",
11468f6f1124634cf659dde4c75549b84e35505d892dBrian Paul                _mesa_lookup_enum_by_nr(cap));
11473728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul}
11483728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul
11493728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul
11503728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paulvoid GLAPIENTRY
11513728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul_mesa_DisableIndexed( GLenum cap, GLuint index )
11523728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul{
11533728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   GET_CURRENT_CONTEXT(ctx);
11543728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   ASSERT_OUTSIDE_BEGIN_END(ctx);
11553728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   _mesa_set_enablei(ctx, cap, index, GL_FALSE);
11563728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul}
11573728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul
11583728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul
11593728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paulvoid GLAPIENTRY
11603728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul_mesa_EnableIndexed( GLenum cap, GLuint index )
11613728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul{
11623728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   GET_CURRENT_CONTEXT(ctx);
11633728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   ASSERT_OUTSIDE_BEGIN_END(ctx);
11643728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   _mesa_set_enablei(ctx, cap, index, GL_TRUE);
11653728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul}
11663728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul
11673728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul
11683728673bd1b974e54858fbab6ff62d3607b0d3f0Brian PaulGLboolean GLAPIENTRY
11693728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul_mesa_IsEnabledIndexed( GLenum cap, GLuint index )
11703728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul{
11713728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   GET_CURRENT_CONTEXT(ctx);
1172386ec5e80e34e1164d749eee2078f2dfc8ff2b57Brian Paul   ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, 0);
11733728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   switch (cap) {
11743728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   case GL_BLEND:
11753728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul      if (index >= ctx->Const.MaxDrawBuffers) {
11763728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul         _mesa_error(ctx, GL_INVALID_VALUE, "glIsEnabledIndexed(index=%u)",
11773728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul                     index);
11783728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul         return GL_FALSE;
11793728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul      }
11803728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul      return (ctx->Color.BlendEnabled >> index) & 1;
11813728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   default:
11823728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul      _mesa_error(ctx, GL_INVALID_ENUM, "glIsEnabledIndexed(cap=%s)",
11833728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul                  _mesa_lookup_enum_by_nr(cap));
11843728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul      return GL_FALSE;
11853728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   }
11863728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul}
11873728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul
11883728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul
11893728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul
11903728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul
119186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul#undef CHECK_EXTENSION
119286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul#define CHECK_EXTENSION(EXTNAME)			\
119386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul   if (!ctx->Extensions.EXTNAME) {			\
1194f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul      goto invalid_enum_error;				\
119586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul   }
119686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul
1197da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger#undef CHECK_EXTENSION2
1198da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger#define CHECK_EXTENSION2(EXT1, EXT2)				\
1199da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger   if (!ctx->Extensions.EXT1 && !ctx->Extensions.EXT2) {	\
1200f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul      goto invalid_enum_error;					\
1201da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger   }
1202afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
12038dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian
12046dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**
120558dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick * Helper function to determine whether a texture target is enabled.
120658dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick */
120758dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanickstatic GLboolean
1208f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergis_texture_enabled(struct gl_context *ctx, GLbitfield bit)
120958dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick{
121058dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick   const struct gl_texture_unit *const texUnit =
121158dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick       &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
121258dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick   return (texUnit->Enabled & bit) ? GL_TRUE : GL_FALSE;
121358dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick}
121458dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick
121558dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick
121658dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick/**
12178dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian * Return simple enable/disable state.
12186dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell *
12198dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian * \param cap  state variable to query.
12206dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell *
12216dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * Returns the state of the specified capability from the current GL context.
12226dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * For the capabilities associated with extensions verifies that those
12236dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * extensions are effectively present before reporting.
12246dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */
1225c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall BennettGLboolean GLAPIENTRY
1226fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_IsEnabled( GLenum cap )
1227afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
1228fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   GET_CURRENT_CONTEXT(ctx);
12296a9880224368a016dfb1a9f5b5dfa9284a7dc6cfYuanhan Liu   ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, 0);
12306a9880224368a016dfb1a9f5b5dfa9284a7dc6cfYuanhan Liu
1231afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   switch (cap) {
1232afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_ALPHA_TEST:
123308be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES)
123408be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1235afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         return ctx->Color.AlphaEnabled;
1236afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_AUTO_NORMAL:
123708be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
123808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1239afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.AutoNormal;
1240afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_BLEND:
12413728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul         return ctx->Color.BlendEnabled & 1;  /* return state for buffer[0] */
1242b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry      case GL_CLIP_DISTANCE0:
1243b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry      case GL_CLIP_DISTANCE1:
1244b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry      case GL_CLIP_DISTANCE2:
1245b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry      case GL_CLIP_DISTANCE3:
1246b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry      case GL_CLIP_DISTANCE4:
1247b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry      case GL_CLIP_DISTANCE5:
1248b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry      case GL_CLIP_DISTANCE6:
1249b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry      case GL_CLIP_DISTANCE7: {
1250b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry         const GLuint p = cap - GL_CLIP_DISTANCE0;
1251b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry
1252b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry         if (p >= ctx->Const.MaxClipPlanes)
1253b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry            goto invalid_enum_error;
1254b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry
1255b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry	 return (ctx->Transform.ClipPlanesEnabled >> p) & 1;
1256b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry      }
1257afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_COLOR_MATERIAL:
125808be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES)
125908be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1260afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Light.ColorMaterialEnabled;
1261afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_CULL_FACE:
1262afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         return ctx->Polygon.CullFlag;
1263ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled      case GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB:
126408be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx))
126508be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1266ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled         return ctx->Debug.SyncOutput;
1267afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_DEPTH_TEST:
1268afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         return ctx->Depth.Test;
1269afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_DITHER:
1270afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Color.DitherFlag;
1271afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_FOG:
127208be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES)
127308be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1274afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Fog.Enabled;
1275afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_LIGHTING:
127608be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES)
127708be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1278afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         return ctx->Light.Enabled;
1279afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_LIGHT0:
1280afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_LIGHT1:
1281afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_LIGHT2:
1282afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_LIGHT3:
1283afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_LIGHT4:
1284afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_LIGHT5:
1285afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_LIGHT6:
1286afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_LIGHT7:
128708be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES)
128808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1289afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         return ctx->Light.Light[cap-GL_LIGHT0].Enabled;
1290afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_LINE_SMOOTH:
129108be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES)
129208be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1293afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Line.SmoothFlag;
1294afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_LINE_STIPPLE:
129508be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
129608be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1297afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Line.StippleFlag;
1298afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_INDEX_LOGIC_OP:
129908be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
130008be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1301afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Color.IndexLogicOpEnabled;
1302afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_COLOR_LOGIC_OP:
130308be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES)
130408be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1305afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Color.ColorLogicOpEnabled;
1306afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_MAP1_COLOR_4:
130708be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
130808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1309afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map1Color4;
1310afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_MAP1_INDEX:
131108be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
131208be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1313afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map1Index;
1314afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_MAP1_NORMAL:
131508be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
131608be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1317afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map1Normal;
1318afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_MAP1_TEXTURE_COORD_1:
131908be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
132008be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1321afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map1TextureCoord1;
1322afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_MAP1_TEXTURE_COORD_2:
132308be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
132408be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1325afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map1TextureCoord2;
1326afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_MAP1_TEXTURE_COORD_3:
132708be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
132808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1329afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map1TextureCoord3;
1330afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_MAP1_TEXTURE_COORD_4:
133108be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
133208be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1333afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map1TextureCoord4;
1334afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_MAP1_VERTEX_3:
133508be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
133608be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1337afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map1Vertex3;
1338afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_MAP1_VERTEX_4:
133908be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
134008be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1341afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map1Vertex4;
1342afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_MAP2_COLOR_4:
134308be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
134408be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1345afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map2Color4;
1346afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_MAP2_INDEX:
134708be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
134808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1349afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map2Index;
1350afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_MAP2_NORMAL:
135108be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
135208be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1353afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map2Normal;
13545e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen      case GL_MAP2_TEXTURE_COORD_1:
135508be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
135608be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1357afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map2TextureCoord1;
1358afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_MAP2_TEXTURE_COORD_2:
135908be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
136008be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1361afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map2TextureCoord2;
1362afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_MAP2_TEXTURE_COORD_3:
136308be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
136408be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1365afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map2TextureCoord3;
1366afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_MAP2_TEXTURE_COORD_4:
136708be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
136808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1369afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map2TextureCoord4;
1370afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_MAP2_VERTEX_3:
137108be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
137208be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1373afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map2Vertex3;
1374afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_MAP2_VERTEX_4:
137508be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
137608be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1377afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Eval.Map2Vertex4;
1378afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_NORMALIZE:
137908be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES)
138008be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1381afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Transform.Normalize;
1382afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_POINT_SMOOTH:
138308be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES)
138408be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1385afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Point.SmoothFlag;
1386afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_POLYGON_SMOOTH:
138708be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx))
138808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1389afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Polygon.SmoothFlag;
1390afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_POLYGON_STIPPLE:
139108be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
139208be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1393afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Polygon.StippleFlag;
1394afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_POLYGON_OFFSET_POINT:
139508be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx))
139608be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1397afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Polygon.OffsetPoint;
1398afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_POLYGON_OFFSET_LINE:
139908be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx))
140008be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1401afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Polygon.OffsetLine;
1402afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_POLYGON_OFFSET_FILL:
1403afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Polygon.OffsetFill;
1404afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_RESCALE_NORMAL_EXT:
140508be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES)
140608be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1407afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         return ctx->Transform.RescaleNormals;
1408afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_SCISSOR_TEST:
1409afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Scissor.Enabled;
1410afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_STENCIL_TEST:
1411afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	 return ctx->Stencil.Enabled;
1412afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_TEXTURE_1D:
141308be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
141408be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
141558dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         return is_texture_enabled(ctx, TEXTURE_1D_BIT);
1416afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_TEXTURE_2D:
141708be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES)
141808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
141958dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         return is_texture_enabled(ctx, TEXTURE_2D_BIT);
1420afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_TEXTURE_3D:
142108be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES)
142208be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1423c9e723e5013443df984cb3987ffa3a9ba3384b89Ian Romanick         return is_texture_enabled(ctx, TEXTURE_3D_BIT);
1424afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_TEXTURE_GEN_S:
1425afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_TEXTURE_GEN_T:
1426933b99f113c97588b616daad2fb19456eece96e2Brian Paul      case GL_TEXTURE_GEN_R:
1427933b99f113c97588b616daad2fb19456eece96e2Brian Paul      case GL_TEXTURE_GEN_Q:
1428afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         {
1429e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul            const struct gl_texture_unit *texUnit = get_texcoord_unit(ctx);
143008be1d288f216232d3974f5997b266a8dd720928Ian Romanick
143108be1d288f216232d3974f5997b266a8dd720928Ian Romanick            if (ctx->API != API_OPENGL)
143208be1d288f216232d3974f5997b266a8dd720928Ian Romanick               goto invalid_enum_error;
143308be1d288f216232d3974f5997b266a8dd720928Ian Romanick
1434e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul            if (texUnit) {
1435933b99f113c97588b616daad2fb19456eece96e2Brian Paul               GLbitfield coordBit = S_BIT << (cap - GL_TEXTURE_GEN_S);
1436933b99f113c97588b616daad2fb19456eece96e2Brian Paul               return (texUnit->TexGenEnabled & coordBit) ? GL_TRUE : GL_FALSE;
1437e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul            }
1438afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         }
1439e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul         return GL_FALSE;
144008fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg#if FEATURE_ES1
144108fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg      case GL_TEXTURE_GEN_STR_OES:
144208fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg	 {
144308fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg            const struct gl_texture_unit *texUnit = get_texcoord_unit(ctx);
144408be1d288f216232d3974f5997b266a8dd720928Ian Romanick
144508be1d288f216232d3974f5997b266a8dd720928Ian Romanick            if (ctx->API != API_OPENGLES)
144608be1d288f216232d3974f5997b266a8dd720928Ian Romanick               goto invalid_enum_error;
144708be1d288f216232d3974f5997b266a8dd720928Ian Romanick
144808fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg            if (texUnit) {
1449d0d767ad4c6ee13c72577b072b24aa06841f6357Brian Paul               return (texUnit->TexGenEnabled & STR_BITS) == STR_BITS
1450d0d767ad4c6ee13c72577b072b24aa06841f6357Brian Paul                  ? GL_TRUE : GL_FALSE;
145108fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg            }
145208fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg         }
145308fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg#endif
1454afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
1455192baaac0fc4701e82dcc3e19b3033f81dd82a62Brian Paul      /* client-side state */
1456afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_VERTEX_ARRAY:
145708be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES)
145808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1459762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_POS].Enabled != 0);
1460afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_NORMAL_ARRAY:
146108be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES)
146208be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1463762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_NORMAL].Enabled != 0);
1464afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_COLOR_ARRAY:
146508be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES)
146608be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1467762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR0].Enabled != 0);
1468afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_INDEX_ARRAY:
146908be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
147008be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1471762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Enabled != 0);
1472afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_TEXTURE_COORD_ARRAY:
147308be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES)
147408be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1475762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_TEX(ctx->Array.ActiveTexture)]
1476d0d767ad4c6ee13c72577b072b24aa06841f6357Brian Paul                 .Enabled != 0);
1477afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      case GL_EDGE_FLAG_ARRAY:
147808be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
147908be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1480762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_EDGEFLAG].Enabled != 0);
14816ee7a02852e45efbfe2843c450dd72243f703430Brian Paul      case GL_FOG_COORDINATE_ARRAY_EXT:
148208be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
148308be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
14846ee7a02852e45efbfe2843c450dd72243f703430Brian Paul         CHECK_EXTENSION(EXT_fog_coord);
1485762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_FOG].Enabled != 0);
14866ee7a02852e45efbfe2843c450dd72243f703430Brian Paul      case GL_SECONDARY_COLOR_ARRAY_EXT:
148708be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
148808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
14896ee7a02852e45efbfe2843c450dd72243f703430Brian Paul         CHECK_EXTENSION(EXT_secondary_color);
1490762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR1].Enabled != 0);
14911cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul#if FEATURE_point_size_array
14921cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul      case GL_POINT_SIZE_ARRAY_OES:
149308be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGLES)
149408be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1495762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich         return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_POINT_SIZE].Enabled != 0);
14961cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul#endif
14971b2ff69f468d609a88b1cd31041df2b81931816bBrian Paul
149886fc370d399167ec9bb978d053d4a72215c86c16Brian Paul      /* GL_ARB_texture_cube_map */
149986fc370d399167ec9bb978d053d4a72215c86c16Brian Paul      case GL_TEXTURE_CUBE_MAP_ARB:
150086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         CHECK_EXTENSION(ARB_texture_cube_map);
150158dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         return is_texture_enabled(ctx, TEXTURE_CUBE_BIT);
150286fc370d399167ec9bb978d053d4a72215c86c16Brian Paul
1503da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger      /* GL_EXT_secondary_color */
1504da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger      case GL_COLOR_SUM_EXT:
150508be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
150608be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1507da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger         CHECK_EXTENSION2(EXT_secondary_color, ARB_vertex_program);
1508da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger         return ctx->Fog.ColorSumEnabled;
1509da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger
1510736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul      /* GL_ARB_multisample */
1511736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul      case GL_MULTISAMPLE_ARB:
151208be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES)
151308be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
151486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         return ctx->Multisample.Enabled;
1515736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul      case GL_SAMPLE_ALPHA_TO_COVERAGE_ARB:
151686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         return ctx->Multisample.SampleAlphaToCoverage;
1517736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul      case GL_SAMPLE_ALPHA_TO_ONE_ARB:
151808be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES)
151908be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
152086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         return ctx->Multisample.SampleAlphaToOne;
1521736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul      case GL_SAMPLE_COVERAGE_ARB:
152286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         return ctx->Multisample.SampleCoverage;
1523736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul      case GL_SAMPLE_COVERAGE_INVERT_ARB:
152408be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx))
152508be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
152686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         return ctx->Multisample.SampleCoverageInvert;
1527736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul
15288c2f6c5059a60d845716277973c826f4069926e6Brian Paul      /* GL_IBM_rasterpos_clip */
15298c2f6c5059a60d845716277973c826f4069926e6Brian Paul      case GL_RASTER_POSITION_UNCLIPPED_IBM:
153008be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
153108be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
153286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         CHECK_EXTENSION(IBM_rasterpos_clip);
153386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         return ctx->Transform.RasterPositionUnclipped;
15348c2f6c5059a60d845716277973c826f4069926e6Brian Paul
15356c408b46678637959dba04663fbc34eb9c4bc397Brian Paul      /* GL_NV_point_sprite */
15366c408b46678637959dba04663fbc34eb9c4bc397Brian Paul      case GL_POINT_SPRITE_NV:
153708be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES)
153808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1539da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger         CHECK_EXTENSION2(NV_point_sprite, ARB_point_sprite)
15406c408b46678637959dba04663fbc34eb9c4bc397Brian Paul         return ctx->Point.PointSprite;
154106d05afdd687fcd1d59d46c6a86c2e5707e1859bBrian Paul
154293da673904d4c520d3fbd2210e53777bf1598ac6Roland Scheidegger#if FEATURE_NV_vertex_program || FEATURE_ARB_vertex_program
1543da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger      case GL_VERTEX_PROGRAM_ARB:
154408be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
154508be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1546da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger         CHECK_EXTENSION2(ARB_vertex_program, NV_vertex_program);
154786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         return ctx->VertexProgram.Enabled;
1548da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger      case GL_VERTEX_PROGRAM_POINT_SIZE_ARB:
154908be1d288f216232d3974f5997b266a8dd720928Ian Romanick         /* This was added with ARB_vertex_program, but it is also used with
155008be1d288f216232d3974f5997b266a8dd720928Ian Romanick          * GLSL vertex shaders on desktop.
155108be1d288f216232d3974f5997b266a8dd720928Ian Romanick          */
155208be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx))
155308be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1554da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger         CHECK_EXTENSION2(ARB_vertex_program, NV_vertex_program);
155586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         return ctx->VertexProgram.PointSizeEnabled;
1556da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger      case GL_VERTEX_PROGRAM_TWO_SIDE_ARB:
155708be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
155808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1559da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger         CHECK_EXTENSION2(ARB_vertex_program, NV_vertex_program);
156086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         return ctx->VertexProgram.TwoSideEnabled;
156193da673904d4c520d3fbd2210e53777bf1598ac6Roland Scheidegger#endif
156293da673904d4c520d3fbd2210e53777bf1598ac6Roland Scheidegger#if FEATURE_NV_vertex_program
156386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY0_NV:
156486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY1_NV:
156586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY2_NV:
156686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY3_NV:
156786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY4_NV:
156886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY5_NV:
156986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY6_NV:
157086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY7_NV:
157186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY8_NV:
157286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY9_NV:
157386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY10_NV:
157486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY11_NV:
157586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY12_NV:
157686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY13_NV:
157786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY14_NV:
157886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ATTRIB_ARRAY15_NV:
157908be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
158008be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
158186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         CHECK_EXTENSION(NV_vertex_program);
158286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         {
158386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            GLint n = (GLint) cap - GL_VERTEX_ATTRIB_ARRAY0_NV;
1584762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich            ASSERT(VERT_ATTRIB_GENERIC(n) < Elements(ctx->Array.ArrayObj->VertexAttrib));
1585762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich            return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_GENERIC(n)].Enabled != 0);
158686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         }
158786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB0_4_NV:
158886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB1_4_NV:
158986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB2_4_NV:
159086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB3_4_NV:
159186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB4_4_NV:
159286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB5_4_NV:
159386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB6_4_NV:
159486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB7_4_NV:
159586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB8_4_NV:
159686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB9_4_NV:
159786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB10_4_NV:
159886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB11_4_NV:
159986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB12_4_NV:
160086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB13_4_NV:
160186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB14_4_NV:
160286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_ATTRIB15_4_NV:
160308be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
160408be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
160586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         CHECK_EXTENSION(NV_vertex_program);
1606bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         {
1607bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            const GLuint map = (GLuint) (cap - GL_MAP1_VERTEX_ATTRIB0_4_NV);
1608bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            return ctx->Eval.Map1Attrib[map];
1609bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         }
161086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB0_4_NV:
161186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB1_4_NV:
161286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB2_4_NV:
161386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB3_4_NV:
161486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB4_4_NV:
161586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB5_4_NV:
161686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB6_4_NV:
161786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB7_4_NV:
161886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB8_4_NV:
161986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB9_4_NV:
162086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB10_4_NV:
162186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB11_4_NV:
162286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB12_4_NV:
162386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB13_4_NV:
162486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB14_4_NV:
162586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_ATTRIB15_4_NV:
162608be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
162708be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
162886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         CHECK_EXTENSION(NV_vertex_program);
1629bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         {
1630bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            const GLuint map = (GLuint) (cap - GL_MAP2_VERTEX_ATTRIB0_4_NV);
1631bc42c19f22c3b719712529d86faea818f34150a2Brian Paul            return ctx->Eval.Map2Attrib[map];
1632bc42c19f22c3b719712529d86faea818f34150a2Brian Paul         }
16338dfc5b9863f08a713177fd92847573e17febbac9Brian Paul#endif /* FEATURE_NV_vertex_program */
163486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul
1635610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul#if FEATURE_NV_fragment_program
1636610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul      case GL_FRAGMENT_PROGRAM_NV:
163708be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
163808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1639610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul         CHECK_EXTENSION(NV_fragment_program);
1640610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul         return ctx->FragmentProgram.Enabled;
1641610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul#endif /* FEATURE_NV_fragment_program */
1642610d59981a9f43fefe29b34ef19c184d28e2bef5Brian Paul
16438afe7de8deaf3c9613fd68b344de8c52b02b1879Brian Paul      /* GL_NV_texture_rectangle */
16448afe7de8deaf3c9613fd68b344de8c52b02b1879Brian Paul      case GL_TEXTURE_RECTANGLE_NV:
164508be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
164608be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
16478afe7de8deaf3c9613fd68b344de8c52b02b1879Brian Paul         CHECK_EXTENSION(NV_texture_rectangle);
164858dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         return is_texture_enabled(ctx, TEXTURE_RECT_BIT);
16498afe7de8deaf3c9613fd68b344de8c52b02b1879Brian Paul
16505f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul      /* GL_EXT_stencil_two_side */
16515f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul      case GL_STENCIL_TEST_TWO_SIDE_EXT:
165208be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
165308be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
16545f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul         CHECK_EXTENSION(EXT_stencil_two_side);
16555f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul         return ctx->Stencil.TestTwoSide;
16565f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul
165777eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul#if FEATURE_ARB_fragment_program
165877eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul      case GL_FRAGMENT_PROGRAM_ARB:
165908be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
166008be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
166177eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul         return ctx->FragmentProgram.Enabled;
166277eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul#endif /* FEATURE_ARB_fragment_program */
166377eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul
1664e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul      /* GL_EXT_depth_bounds_test */
1665e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul      case GL_DEPTH_BOUNDS_TEST_EXT:
166608be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx))
166708be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1668e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul         CHECK_EXTENSION(EXT_depth_bounds_test);
1669e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul         return ctx->Depth.BoundsTest;
1670e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul
1671b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt      /* GL_ARB_depth_clamp */
1672b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt      case GL_DEPTH_CLAMP:
167308be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx))
167408be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1675b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt         CHECK_EXTENSION(ARB_depth_clamp);
1676b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt         return ctx->Transform.DepthClamp;
1677b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt
16787f752fed993e5e9423abac200dd59141edbada56Dave Airlie#if FEATURE_ATI_fragment_shader
16797f752fed993e5e9423abac200dd59141edbada56Dave Airlie      case GL_FRAGMENT_SHADER_ATI:
168008be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL)
168108be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
16827f752fed993e5e9423abac200dd59141edbada56Dave Airlie	 CHECK_EXTENSION(ATI_fragment_shader);
16837f752fed993e5e9423abac200dd59141edbada56Dave Airlie	 return ctx->ATIFragmentShader.Enabled;
16847f752fed993e5e9423abac200dd59141edbada56Dave Airlie#endif /* FEATURE_ATI_fragment_shader */
16859d5bb3c6f820a5a99e1f55b2fd14d250761fcddcIan Romanick
16869d5bb3c6f820a5a99e1f55b2fd14d250761fcddcIan Romanick      case GL_TEXTURE_CUBE_MAP_SEAMLESS:
168708be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx))
168808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
16899d5bb3c6f820a5a99e1f55b2fd14d250761fcddcIan Romanick	 CHECK_EXTENSION(ARB_seamless_cube_map);
16909d5bb3c6f820a5a99e1f55b2fd14d250761fcddcIan Romanick	 return ctx->Texture.CubeMapSeamless;
16919d5bb3c6f820a5a99e1f55b2fd14d250761fcddcIan Romanick
169286a1ea31ed6afdb9789671ca3fdd79709ea9f112Brian Paul#if FEATURE_EXT_transform_feedback
169386a1ea31ed6afdb9789671ca3fdd79709ea9f112Brian Paul      case GL_RASTERIZER_DISCARD:
169408be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx))
169508be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
169686a1ea31ed6afdb9789671ca3fdd79709ea9f112Brian Paul	 CHECK_EXTENSION(EXT_transform_feedback);
1697aee96806f049c17384a8edc11acce76257d98a57Paul Berry         return ctx->RasterDiscard;
169886a1ea31ed6afdb9789671ca3fdd79709ea9f112Brian Paul#endif
169986a1ea31ed6afdb9789671ca3fdd79709ea9f112Brian Paul
17007f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul      /* GL_NV_primitive_restart */
17017f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul      case GL_PRIMITIVE_RESTART_NV:
170208be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGL || !ctx->Extensions.NV_primitive_restart) {
17037f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul            goto invalid_enum_error;
17047f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul         }
17057f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul         return ctx->Array.PrimitiveRestart;
17067f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul
1707a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul      /* GL 3.1 primitive restart */
1708a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul      case GL_PRIMITIVE_RESTART:
170908be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx) || ctx->Version < 31) {
1710a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul            goto invalid_enum_error;
1711a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul         }
1712a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul         return ctx->Array.PrimitiveRestart;
1713a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul
1714a637280e42b9a2f4ccbb5e7b209c5645073f584eDave Airlie      /* GL3.0 - GL_framebuffer_sRGB */
1715a637280e42b9a2f4ccbb5e7b209c5645073f584eDave Airlie      case GL_FRAMEBUFFER_SRGB_EXT:
171608be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx))
171708be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1718a637280e42b9a2f4ccbb5e7b209c5645073f584eDave Airlie	 CHECK_EXTENSION(EXT_framebuffer_sRGB);
1719a637280e42b9a2f4ccbb5e7b209c5645073f584eDave Airlie	 return ctx->Color.sRGBEnabled;
1720a637280e42b9a2f4ccbb5e7b209c5645073f584eDave Airlie
17210c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu      /* GL_OES_EGL_image_external */
17220c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu      case GL_TEXTURE_EXTERNAL_OES:
172308be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_gles(ctx))
172408be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
17250c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu	 CHECK_EXTENSION(OES_EGL_image_external);
17260c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu         return is_texture_enabled(ctx, TEXTURE_EXTERNAL_BIT);
17270c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu
1728afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      default:
1729f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul         goto invalid_enum_error;
1730afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
1731f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul
1732f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul   return GL_FALSE;
1733f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul
1734f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paulinvalid_enum_error:
1735dcf1dafa9ec93f9300ecffe5bddfd2b131bc218fBrian Paul   _mesa_error(ctx, GL_INVALID_ENUM, "glIsEnabled(%s)",
1736dcf1dafa9ec93f9300ecffe5bddfd2b131bc218fBrian Paul               _mesa_lookup_enum_by_nr(cap));
1737f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul   return GL_FALSE;
1738afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
1739