16dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**
26dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * \file enable.c
36dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * Enable/disable/query GL capabilities.
46dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */
56dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell
6afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/*
7afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Mesa 3-D graphics library
85e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen *
9454043c4ae20a92ff0a56f41fdb6aa7a75af00c8Brian Paul * Copyright (C) 1999-2007  Brian Paul   All Rights Reserved.
105e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen *
11afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Permission is hereby granted, free of charge, to any person obtaining a
12afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * copy of this software and associated documentation files (the "Software"),
13afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * to deal in the Software without restriction, including without limitation
14afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * the rights to use, copy, modify, merge, publish, distribute, sublicense,
15afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * and/or sell copies of the Software, and to permit persons to whom the
16afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Software is furnished to do so, subject to the following conditions:
175e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen *
18afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * The above copyright notice and this permission notice shall be included
19afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * in all copies or substantial portions of the Software.
205e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen *
21afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
22afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
243d8d5b298a268b119d840bc9bae0ee9e0c9244a9Kenneth Graunke * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
253d8d5b298a268b119d840bc9bae0ee9e0c9244a9Kenneth Graunke * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
263d8d5b298a268b119d840bc9bae0ee9e0c9244a9Kenneth Graunke * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
273d8d5b298a268b119d840bc9bae0ee9e0c9244a9Kenneth Graunke * OTHER DEALINGS IN THE SOFTWARE.
28afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */
29afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
30afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
31fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul#include "glheader.h"
32ec4a21b0e21e8c706f26db5308fb267b6979b631Brian Paul#include "clip.h"
33afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach#include "context.h"
345fdbfb8d6fa2e1521cf2f60e80ac571a37ab22a2Brian Paul#include "debug_output.h"
35afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach#include "enable.h"
366e8d04ac3e9074bffe25a1ef9e6b198caaa30385Brian Paul#include "errors.h"
37afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach#include "light.h"
385e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen#include "mtypes.h"
39afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach#include "enums.h"
406f4fd3a4322a3d7c63207999e08b07ba46b0fc66Krzysztof Czurylo#include "api_arrayelt.h"
41eb82373abb08171d7fcb15b5f4f229fc9ca9aa91Brian Paul#include "texstate.h"
423c63452e64df7e10aa073c6c3b9492b1d7dabbb8Brian Paul
43afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
44afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
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
5142ed81a7c3eec215a543c47239cc30536f284adaIan Romanickstatic void
5242ed81a7c3eec215a543c47239cc30536f284adaIan Romanickupdate_derived_primitive_restart_state(struct gl_context *ctx)
5342ed81a7c3eec215a543c47239cc30536f284adaIan Romanick{
5442ed81a7c3eec215a543c47239cc30536f284adaIan Romanick   /* Update derived primitive restart state.
5542ed81a7c3eec215a543c47239cc30536f284adaIan Romanick    */
5642ed81a7c3eec215a543c47239cc30536f284adaIan Romanick   ctx->Array._PrimitiveRestart = ctx->Array.PrimitiveRestart
5742ed81a7c3eec215a543c47239cc30536f284adaIan Romanick      || ctx->Array.PrimitiveRestartFixedIndex;
5842ed81a7c3eec215a543c47239cc30536f284adaIan Romanick}
5942ed81a7c3eec215a543c47239cc30536f284adaIan Romanick
608dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian Paul/**
618dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian Paul * Helper to enable/disable client-side state.
628dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian Paul */
63cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwellstatic void
64f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergclient_state(struct gl_context *ctx, GLenum cap, GLboolean state)
65cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell{
66aac1415b66fafedc50c4346dae2d652723156ed9Kenneth Graunke   struct gl_vertex_array_object *vao = ctx->Array.VAO;
67f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich   GLbitfield64 flag;
6899efde461d3b8615863bdb7308e05289e0db0422Keith Whitwell   GLboolean *var;
69cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
70cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   switch (cap) {
7186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ARRAY:
7294e07c196075a494642d5617f96e36996c58d116Kenneth Graunke         var = &vao->VertexAttrib[VERT_ATTRIB_POS].Enabled;
73104b81def4c09f3012e44778d104f00ff87dd4f0Mathias Fröhlich         flag = VERT_BIT_POS;
7486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
7586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_NORMAL_ARRAY:
7694e07c196075a494642d5617f96e36996c58d116Kenneth Graunke         var = &vao->VertexAttrib[VERT_ATTRIB_NORMAL].Enabled;
77104b81def4c09f3012e44778d104f00ff87dd4f0Mathias Fröhlich         flag = VERT_BIT_NORMAL;
7886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
7986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_COLOR_ARRAY:
8094e07c196075a494642d5617f96e36996c58d116Kenneth Graunke         var = &vao->VertexAttrib[VERT_ATTRIB_COLOR0].Enabled;
81104b81def4c09f3012e44778d104f00ff87dd4f0Mathias Fröhlich         flag = VERT_BIT_COLOR0;
8286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
8386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_INDEX_ARRAY:
8494e07c196075a494642d5617f96e36996c58d116Kenneth Graunke         var = &vao->VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Enabled;
85104b81def4c09f3012e44778d104f00ff87dd4f0Mathias Fröhlich         flag = VERT_BIT_COLOR_INDEX;
8686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
8786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_TEXTURE_COORD_ARRAY:
8894e07c196075a494642d5617f96e36996c58d116Kenneth Graunke         var = &vao->VertexAttrib[VERT_ATTRIB_TEX(ctx->Array.ActiveTexture)].Enabled;
89104b81def4c09f3012e44778d104f00ff87dd4f0Mathias Fröhlich         flag = VERT_BIT_TEX(ctx->Array.ActiveTexture);
9086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
9186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_EDGE_FLAG_ARRAY:
9294e07c196075a494642d5617f96e36996c58d116Kenneth Graunke         var = &vao->VertexAttrib[VERT_ATTRIB_EDGEFLAG].Enabled;
93104b81def4c09f3012e44778d104f00ff87dd4f0Mathias Fröhlich         flag = VERT_BIT_EDGEFLAG;
9486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
9586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_FOG_COORDINATE_ARRAY_EXT:
9694e07c196075a494642d5617f96e36996c58d116Kenneth Graunke         var = &vao->VertexAttrib[VERT_ATTRIB_FOG].Enabled;
97104b81def4c09f3012e44778d104f00ff87dd4f0Mathias Fröhlich         flag = VERT_BIT_FOG;
9886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
9986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_SECONDARY_COLOR_ARRAY_EXT:
10094e07c196075a494642d5617f96e36996c58d116Kenneth Graunke         var = &vao->VertexAttrib[VERT_ATTRIB_COLOR1].Enabled;
101104b81def4c09f3012e44778d104f00ff87dd4f0Mathias Fröhlich         flag = VERT_BIT_COLOR1;
10286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
10386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul
1041cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul      case GL_POINT_SIZE_ARRAY_OES:
10594e07c196075a494642d5617f96e36996c58d116Kenneth Graunke         var = &vao->VertexAttrib[VERT_ATTRIB_POINT_SIZE].Enabled;
106104b81def4c09f3012e44778d104f00ff87dd4f0Mathias Fröhlich         flag = VERT_BIT_POINT_SIZE;
1079d9965c06f18f7d609933e511b98514570e85909Plamena Manolova         FLUSH_VERTICES(ctx, _NEW_PROGRAM);
1089d9965c06f18f7d609933e511b98514570e85909Plamena Manolova         ctx->VertexProgram.PointSizeEnabled = state;
1091cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul         break;
1101cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul
1117f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul      /* GL_NV_primitive_restart */
1127f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul      case GL_PRIMITIVE_RESTART_NV:
1137f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul	 if (!ctx->Extensions.NV_primitive_restart) {
1147f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul            goto invalid_enum_error;
1157f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul         }
1167f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul         var = &ctx->Array.PrimitiveRestart;
1172701eb342b358da638b8c0f281c791c2b16b300bBrian Paul         flag = 0;
1187f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul         break;
1197f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul
12086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      default:
121f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul         goto invalid_enum_error;
122cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   }
123cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
12468c48df2bf8dd57ce96db430fff1b69f40a793ceAlan Hourihane   if (*var == state)
125cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell      return;
126cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
127cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   FLUSH_VERTICES(ctx, _NEW_ARRAY);
1286f4fd3a4322a3d7c63207999e08b07ba46b0fc66Krzysztof Czurylo
1296f4fd3a4322a3d7c63207999e08b07ba46b0fc66Krzysztof Czurylo   _ae_invalidate_state(ctx, _NEW_ARRAY);
1306f4fd3a4322a3d7c63207999e08b07ba46b0fc66Krzysztof Czurylo
131cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   *var = state;
132cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
13342ed81a7c3eec215a543c47239cc30536f284adaIan Romanick   update_derived_primitive_restart_state(ctx);
13442ed81a7c3eec215a543c47239cc30536f284adaIan Romanick
13522144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes   if (state)
13694e07c196075a494642d5617f96e36996c58d116Kenneth Graunke      vao->_Enabled |= flag;
137cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   else
13894e07c196075a494642d5617f96e36996c58d116Kenneth Graunke      vao->_Enabled &= ~flag;
139cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
14094e07c196075a494642d5617f96e36996c58d116Kenneth Graunke   vao->NewArrays |= flag;
1416a650fa787d8762762712049879897d7e257001eFredrik Höglund
142cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   if (ctx->Driver.Enable) {
1438dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian Paul      ctx->Driver.Enable( ctx, cap, state );
144cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   }
145f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul
146f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul   return;
147f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul
148f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paulinvalid_enum_error:
149dcf1dafa9ec93f9300ecffe5bddfd2b131bc218fBrian Paul   _mesa_error(ctx, GL_INVALID_ENUM, "gl%sClientState(%s)",
1502f11e92cef51c88a09bc778e2ceca4ab50cf0017Kenneth Graunke               state ? "Enable" : "Disable", _mesa_enum_to_string(cap));
151cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell}
152cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
153cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
1546dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**
1556dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * Enable GL capability.
1568dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian Paul * \param cap  state to enable/disable.
1576dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell *
1586dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * Get's the current context, assures that we're outside glBegin()/glEnd() and
1596dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * calls client_state().
1606dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */
161c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY
162cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell_mesa_EnableClientState( GLenum cap )
163cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell{
164cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   GET_CURRENT_CONTEXT(ctx);
165cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   client_state( ctx, cap, GL_TRUE );
166cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell}
167cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
168cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
1696dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**
1706dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * Disable GL capability.
1718dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian Paul * \param cap  state to enable/disable.
1726dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell *
1736dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * Get's the current context, assures that we're outside glBegin()/glEnd() and
1746dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * calls client_state().
1756dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */
176c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY
177cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell_mesa_DisableClientState( GLenum cap )
178cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell{
179cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   GET_CURRENT_CONTEXT(ctx);
180cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell   client_state( ctx, cap, GL_FALSE );
181cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell}
182cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell
183afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
18486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul#undef CHECK_EXTENSION
18502c03ef6b4762adf33b73528c9fd672ef4697763Brian Paul#define CHECK_EXTENSION(EXTNAME, CAP)					\
18602c03ef6b4762adf33b73528c9fd672ef4697763Brian Paul   if (!ctx->Extensions.EXTNAME) {					\
187f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul      goto invalid_enum_error;						\
18886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul   }
18986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul
190efb2ade520f47187ac70abe57185358017b63caaBrian Paul#define CHECK_EXTENSION2(EXT1, EXT2, CAP)				\
191efb2ade520f47187ac70abe57185358017b63caaBrian Paul   if (!ctx->Extensions.EXT1 && !ctx->Extensions.EXT2) {		\
192f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul      goto invalid_enum_error;						\
193efb2ade520f47187ac70abe57185358017b63caaBrian Paul   }
194efb2ade520f47187ac70abe57185358017b63caaBrian Paul
195e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul/**
196e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul * Return pointer to current texture unit for setting/getting coordinate
197e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul * state.
198d0d767ad4c6ee13c72577b072b24aa06841f6357Brian Paul * Note that we'll set GL_INVALID_OPERATION and return NULL if the active
199d0d767ad4c6ee13c72577b072b24aa06841f6357Brian Paul * texture unit is higher than the number of supported coordinate units.
200e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul */
201e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paulstatic struct gl_texture_unit *
202f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergget_texcoord_unit(struct gl_context *ctx)
203e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul{
204e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul   if (ctx->Texture.CurrentUnit >= ctx->Const.MaxTextureCoordUnits) {
205e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul      _mesa_error(ctx, GL_INVALID_OPERATION, "glEnable/Disable(texcoord unit)");
206e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul      return NULL;
207e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul   }
208e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul   else {
209e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul      return &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
210e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul   }
211e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul}
212e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul
213e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul
21458dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick/**
21558dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick * Helper function to enable or disable a texture target.
216c0d3761c167c2d952e92c46cf3a0e26461985adaBrian Paul * \param bit  one of the TEXTURE_x_BIT values
217c0d3761c167c2d952e92c46cf3a0e26461985adaBrian Paul * \return GL_TRUE if state is changing or GL_FALSE if no change
21858dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick */
21958dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanickstatic GLboolean
220f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergenable_texture(struct gl_context *ctx, GLboolean state, GLbitfield texBit)
22158dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick{
222eb82373abb08171d7fcb15b5f4f229fc9ca9aa91Brian Paul   struct gl_texture_unit *texUnit = _mesa_get_current_tex_unit(ctx);
223c0d3761c167c2d952e92c46cf3a0e26461985adaBrian Paul   const GLbitfield newenabled = state
224c0d3761c167c2d952e92c46cf3a0e26461985adaBrian Paul      ? (texUnit->Enabled | texBit) : (texUnit->Enabled & ~texBit);
22558dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick
226adfa778c8ea436d6e62c37327b44f6ff359ed63fBrian Paul   if (texUnit->Enabled == newenabled)
22758dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick       return GL_FALSE;
22858dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick
22958dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick   FLUSH_VERTICES(ctx, _NEW_TEXTURE);
23058dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick   texUnit->Enabled = newenabled;
23158dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick   return GL_TRUE;
23258dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick}
23358dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick
23486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul
2356dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**
236a29a4566354af53e3bdc4a925eddc0d7af2bf384Paul Berry * Helper function to enable or disable GL_MULTISAMPLE, skipping the check for
237a29a4566354af53e3bdc4a925eddc0d7af2bf384Paul Berry * whether the API supports it (GLES doesn't).
238a29a4566354af53e3bdc4a925eddc0d7af2bf384Paul Berry */
239a29a4566354af53e3bdc4a925eddc0d7af2bf384Paul Berryvoid
240a29a4566354af53e3bdc4a925eddc0d7af2bf384Paul Berry_mesa_set_multisample(struct gl_context *ctx, GLboolean state)
241a29a4566354af53e3bdc4a925eddc0d7af2bf384Paul Berry{
242a29a4566354af53e3bdc4a925eddc0d7af2bf384Paul Berry   if (ctx->Multisample.Enabled == state)
243a29a4566354af53e3bdc4a925eddc0d7af2bf384Paul Berry      return;
244a29a4566354af53e3bdc4a925eddc0d7af2bf384Paul Berry   FLUSH_VERTICES(ctx, _NEW_MULTISAMPLE);
245a29a4566354af53e3bdc4a925eddc0d7af2bf384Paul Berry   ctx->Multisample.Enabled = state;
246a29a4566354af53e3bdc4a925eddc0d7af2bf384Paul Berry
247a29a4566354af53e3bdc4a925eddc0d7af2bf384Paul Berry   if (ctx->Driver.Enable) {
248a29a4566354af53e3bdc4a925eddc0d7af2bf384Paul Berry      ctx->Driver.Enable(ctx, GL_MULTISAMPLE, state);
249a29a4566354af53e3bdc4a925eddc0d7af2bf384Paul Berry   }
250a29a4566354af53e3bdc4a925eddc0d7af2bf384Paul Berry}
251a29a4566354af53e3bdc4a925eddc0d7af2bf384Paul Berry
252a29a4566354af53e3bdc4a925eddc0d7af2bf384Paul Berry/**
2538faa79764c394ce5ec87c5376afb5643f99c53e7Paul Berry * Helper function to enable or disable GL_FRAMEBUFFER_SRGB, skipping the
2548faa79764c394ce5ec87c5376afb5643f99c53e7Paul Berry * check for whether the API supports it (GLES doesn't).
2558faa79764c394ce5ec87c5376afb5643f99c53e7Paul Berry */
2568faa79764c394ce5ec87c5376afb5643f99c53e7Paul Berryvoid
2578faa79764c394ce5ec87c5376afb5643f99c53e7Paul Berry_mesa_set_framebuffer_srgb(struct gl_context *ctx, GLboolean state)
2588faa79764c394ce5ec87c5376afb5643f99c53e7Paul Berry{
2598faa79764c394ce5ec87c5376afb5643f99c53e7Paul Berry   if (ctx->Color.sRGBEnabled == state)
2608faa79764c394ce5ec87c5376afb5643f99c53e7Paul Berry      return;
2618faa79764c394ce5ec87c5376afb5643f99c53e7Paul Berry   FLUSH_VERTICES(ctx, _NEW_BUFFERS);
2628faa79764c394ce5ec87c5376afb5643f99c53e7Paul Berry   ctx->Color.sRGBEnabled = state;
2638faa79764c394ce5ec87c5376afb5643f99c53e7Paul Berry
2648faa79764c394ce5ec87c5376afb5643f99c53e7Paul Berry   if (ctx->Driver.Enable) {
2658faa79764c394ce5ec87c5376afb5643f99c53e7Paul Berry      ctx->Driver.Enable(ctx, GL_FRAMEBUFFER_SRGB, state);
2668faa79764c394ce5ec87c5376afb5643f99c53e7Paul Berry   }
2678faa79764c394ce5ec87c5376afb5643f99c53e7Paul Berry}
2688faa79764c394ce5ec87c5376afb5643f99c53e7Paul Berry
2698faa79764c394ce5ec87c5376afb5643f99c53e7Paul Berry/**
2708dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian Paul * Helper function to enable or disable state.
2716dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell *
2726dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * \param ctx GL context.
2738dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian Paul * \param cap  the state to enable/disable
2746dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * \param state whether to enable or disable the specified capability.
2756dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell *
2766dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * Updates the current context and flushes the vertices as needed. For
2776dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * capabilities associated with extensions it verifies that those extensions
2786dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * are effectivly present before updating. Notifies the driver via
2796dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * dd_function_table::Enable.
280afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */
2818dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian Paulvoid
282f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg_mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)
283afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
2845e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen   if (MESA_VERBOSE & VERBOSE_API)
2854753d60dd070bb08d0116076bcc08025c86ce857Brian Paul      _mesa_debug(ctx, "%s %s (newstate is %x)\n",
2869a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paul                  state ? "glEnable" : "glDisable",
2872f11e92cef51c88a09bc778e2ceca4ab50cf0017Kenneth Graunke                  _mesa_enum_to_string(cap),
2889a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paul                  ctx->NewState);
289afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
290afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   switch (cap) {
29186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_ALPHA_TEST:
292dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
29308be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
29486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Color.AlphaEnabled == state)
29586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
29686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_COLOR);
29786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Color.AlphaEnabled = state;
29886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
29986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_AUTO_NORMAL:
300dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
30108be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
30286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.AutoNormal == state)
30386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
30486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
30586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.AutoNormal = state;
30686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
30786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_BLEND:
3083728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul         {
309d0d767ad4c6ee13c72577b072b24aa06841f6357Brian Paul            GLbitfield newEnabled =
310d0d767ad4c6ee13c72577b072b24aa06841f6357Brian Paul               state * ((1 << ctx->Const.MaxDrawBuffers) - 1);
3113728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul            if (newEnabled != ctx->Color.BlendEnabled) {
3123728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul               FLUSH_VERTICES(ctx, _NEW_COLOR);
3133728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul               ctx->Color.BlendEnabled = newEnabled;
3143728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul            }
3153728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul         }
31686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
317288f8876228d2d61dca309b832105488daf5b0e8Brian Paul      case GL_CLIP_DISTANCE0: /* aka GL_CLIP_PLANE0 */
3182d686fe911a89fa477ee3848da41ebfb100500bfPaul Berry      case GL_CLIP_DISTANCE1:
3192d686fe911a89fa477ee3848da41ebfb100500bfPaul Berry      case GL_CLIP_DISTANCE2:
3202d686fe911a89fa477ee3848da41ebfb100500bfPaul Berry      case GL_CLIP_DISTANCE3:
3212d686fe911a89fa477ee3848da41ebfb100500bfPaul Berry      case GL_CLIP_DISTANCE4:
3222d686fe911a89fa477ee3848da41ebfb100500bfPaul Berry      case GL_CLIP_DISTANCE5:
3232d686fe911a89fa477ee3848da41ebfb100500bfPaul Berry      case GL_CLIP_DISTANCE6:
3242d686fe911a89fa477ee3848da41ebfb100500bfPaul Berry      case GL_CLIP_DISTANCE7:
32586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         {
326b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry            const GLuint p = cap - GL_CLIP_DISTANCE0;
327b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry
328b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry            if (p >= ctx->Const.MaxClipPlanes)
329b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry               goto invalid_enum_error;
33086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul
331d0d767ad4c6ee13c72577b072b24aa06841f6357Brian Paul            if ((ctx->Transform.ClipPlanesEnabled & (1 << p))
332d0d767ad4c6ee13c72577b072b24aa06841f6357Brian Paul                == ((GLuint) state << p))
33386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul               return;
33486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul
33586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            FLUSH_VERTICES(ctx, _NEW_TRANSFORM);
33686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul
33786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            if (state) {
338103bc0f75c00dfcf671dc50d8d9666f88a42a59dBrian Paul               ctx->Transform.ClipPlanesEnabled |= (1 << p);
339ec4a21b0e21e8c706f26db5308fb267b6979b631Brian Paul               _mesa_update_clip_plane(ctx, p);
34086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            }
341f66de793654e20704a8180538207a4736ada7996Brian Paul            else {
342103bc0f75c00dfcf671dc50d8d9666f88a42a59dBrian Paul               ctx->Transform.ClipPlanesEnabled &= ~(1 << p);
343f66de793654e20704a8180538207a4736ada7996Brian Paul            }
34486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         }
34586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
34686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_COLOR_MATERIAL:
347dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
34808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
34986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Light.ColorMaterialEnabled == state)
35086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
35186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_LIGHT);
352d40f9fa0ec4699627aad37f0c06409ead5ee002aBrian Paul         FLUSH_CURRENT(ctx, 0);
35386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Light.ColorMaterialEnabled = state;
35486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (state) {
35586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            _mesa_update_color_material( ctx,
35686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul                                  ctx->Current.Attrib[VERT_ATTRIB_COLOR0] );
35786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         }
35886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
35986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_CULL_FACE:
36086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Polygon.CullFlag == state)
36186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
36286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_POLYGON);
36386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Polygon.CullFlag = state;
36486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
36586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_DEPTH_TEST:
3668dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian Paul         if (ctx->Depth.Test == state)
36786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
36886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_DEPTH);
36986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Depth.Test = state;
37086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
371b5c4795f386976830370f56d1fa5a1c4099d88e2Timothy Arceri      case GL_DEBUG_OUTPUT:
372ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled      case GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB:
373ab7294668cb245fbe8c925be6fd6f0242bdd6a0fBoyan Ding         _mesa_set_debug_state_int(ctx, cap, state);
374ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled         break;
37586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_DITHER:
3768dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian Paul         if (ctx->Color.DitherFlag == state)
37786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
37886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_COLOR);
37986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Color.DitherFlag = state;
38086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
38186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_FOG:
382dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
38308be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
3848dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian Paul         if (ctx->Fog.Enabled == state)
38586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
38686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_FOG);
38786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Fog.Enabled = state;
38886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
38986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_LIGHT0:
39086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_LIGHT1:
39186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_LIGHT2:
39286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_LIGHT3:
39386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_LIGHT4:
39486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_LIGHT5:
39586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_LIGHT6:
39686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_LIGHT7:
397dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
39808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
39986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Light.Light[cap-GL_LIGHT0].Enabled == state)
40086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
40186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_LIGHT);
40286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Light.Light[cap-GL_LIGHT0].Enabled = state;
40386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (state) {
404b60c7302357c2ceb0297d5ef2f748c9b686dbad5Mathias Fröhlich            ctx->Light._EnabledLights |= 1u << (cap - GL_LIGHT0);
40586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         }
40686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         else {
407b60c7302357c2ceb0297d5ef2f748c9b686dbad5Mathias Fröhlich            ctx->Light._EnabledLights &= ~(1u << (cap - GL_LIGHT0));
40886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         }
40986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
41086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_LIGHTING:
411dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
41208be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
41386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Light.Enabled == state)
41486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
415454043c4ae20a92ff0a56f41fdb6aa7a75af00c8Brian Paul         FLUSH_VERTICES(ctx, _NEW_LIGHT);
416454043c4ae20a92ff0a56f41fdb6aa7a75af00c8Brian Paul         ctx->Light.Enabled = state;
41786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
41886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_LINE_SMOOTH:
41908be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES)
42008be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
42186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Line.SmoothFlag == state)
42286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
42386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_LINE);
42486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Line.SmoothFlag = state;
42586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
42686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_LINE_STIPPLE:
427dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
42808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
42986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Line.StippleFlag == state)
43086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
43186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_LINE);
43286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Line.StippleFlag = state;
43386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
43486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_INDEX_LOGIC_OP:
435dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
43608be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
43786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Color.IndexLogicOpEnabled == state)
43886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
43986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_COLOR);
44086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Color.IndexLogicOpEnabled = state;
44186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
442039d836d6ea5621ede88ff3504be841a6dd865c6Lionel Landwerlin      case GL_CONSERVATIVE_RASTERIZATION_INTEL:
443300d96a4335b842256c2586a8472f0fbadb594f4Lionel Landwerlin         if (!_mesa_has_INTEL_conservative_rasterization(ctx))
444039d836d6ea5621ede88ff3504be841a6dd865c6Lionel Landwerlin            goto invalid_enum_error;
445039d836d6ea5621ede88ff3504be841a6dd865c6Lionel Landwerlin         if (ctx->IntelConservativeRasterization == state)
446039d836d6ea5621ede88ff3504be841a6dd865c6Lionel Landwerlin            return;
4479854a3ba8bd34b36737753f2ec7c61b06d64da4cLionel Landwerlin         FLUSH_VERTICES(ctx, 0);
4489854a3ba8bd34b36737753f2ec7c61b06d64da4cLionel Landwerlin         ctx->NewDriverState |=
4499854a3ba8bd34b36737753f2ec7c61b06d64da4cLionel Landwerlin            ctx->DriverFlags.NewIntelConservativeRasterization;
450039d836d6ea5621ede88ff3504be841a6dd865c6Lionel Landwerlin         ctx->IntelConservativeRasterization = state;
451039d836d6ea5621ede88ff3504be841a6dd865c6Lionel Landwerlin         break;
45286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_COLOR_LOGIC_OP:
45308be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES)
45408be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
45586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Color.ColorLogicOpEnabled == state)
45686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
45786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_COLOR);
45886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Color.ColorLogicOpEnabled = state;
45986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
46086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_COLOR_4:
461dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
46208be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
46386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map1Color4 == state)
46486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
46586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
46686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map1Color4 = state;
46786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
46886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_INDEX:
469dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
47008be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
47186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map1Index == state)
47286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
47386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
47486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map1Index = state;
47586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
47686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_NORMAL:
477dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
47808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
47986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map1Normal == state)
48086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
48186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
48286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map1Normal = state;
48386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
48486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_TEXTURE_COORD_1:
485dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
48608be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
48786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map1TextureCoord1 == state)
48886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
48986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
49086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map1TextureCoord1 = state;
49186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
49286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_TEXTURE_COORD_2:
493dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
49408be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
49586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map1TextureCoord2 == state)
49686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
49786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
49886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map1TextureCoord2 = state;
49986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
50086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_TEXTURE_COORD_3:
501dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
50208be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
50386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map1TextureCoord3 == state)
50486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
50586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
50686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map1TextureCoord3 = state;
50786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
50886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_TEXTURE_COORD_4:
509dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
51008be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
51186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map1TextureCoord4 == state)
51286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
51386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
51486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map1TextureCoord4 = state;
51586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
51686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_3:
517dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
51808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
51986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map1Vertex3 == state)
52086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
52186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
52286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map1Vertex3 = state;
52386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
52486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP1_VERTEX_4:
525dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
52608be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
52786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map1Vertex4 == state)
52886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
52986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
53086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map1Vertex4 = state;
53186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
53286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_COLOR_4:
533dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
53408be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
53586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map2Color4 == state)
53686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
53786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
53886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map2Color4 = state;
53986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
54086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_INDEX:
541dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
54208be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
54386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map2Index == state)
54486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
54586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
54686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map2Index = state;
54786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
54886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_NORMAL:
549dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
55008be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
55186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map2Normal == state)
55286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
55386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
55486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map2Normal = state;
55586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
55686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_TEXTURE_COORD_1:
557dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
55808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
55986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map2TextureCoord1 == state)
56086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
56186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
56286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map2TextureCoord1 = state;
56386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
56486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_TEXTURE_COORD_2:
565dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
56608be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
56786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map2TextureCoord2 == state)
56886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
56986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
57086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map2TextureCoord2 = state;
57186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
57286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_TEXTURE_COORD_3:
573dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
57408be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
57586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map2TextureCoord3 == state)
57686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
57786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
57886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map2TextureCoord3 = state;
57986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
58086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_TEXTURE_COORD_4:
581dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
58208be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
58386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map2TextureCoord4 == state)
58486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
58586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
58686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map2TextureCoord4 = state;
58786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
58886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_3:
589dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
59008be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
59186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map2Vertex3 == state)
59286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
59386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
59486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map2Vertex3 = state;
59586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
59686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MAP2_VERTEX_4:
597dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
59808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
59986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Eval.Map2Vertex4 == state)
60086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
60186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_EVAL);
60286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Eval.Map2Vertex4 = state;
60386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
60486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_NORMALIZE:
605dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
60608be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
60786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Transform.Normalize == state)
60886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
60986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_TRANSFORM);
61086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Transform.Normalize = state;
61186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
61286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_POINT_SMOOTH:
613dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
61408be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
6158dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian Paul         if (ctx->Point.SmoothFlag == state)
61686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
61786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_POINT);
61886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Point.SmoothFlag = state;
61986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
62086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_POLYGON_SMOOTH:
62108be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx))
62208be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
6238dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian Paul         if (ctx->Polygon.SmoothFlag == state)
62486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
62586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_POLYGON);
62686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Polygon.SmoothFlag = state;
62786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
62886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_POLYGON_STIPPLE:
629dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
63008be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
6318dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian Paul         if (ctx->Polygon.StippleFlag == state)
63286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
63386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_POLYGON);
63486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Polygon.StippleFlag = state;
63586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
63686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_POLYGON_OFFSET_POINT:
63708be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx))
63808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
6398dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian Paul         if (ctx->Polygon.OffsetPoint == state)
64086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
64186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_POLYGON);
64286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Polygon.OffsetPoint = state;
64386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
64486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_POLYGON_OFFSET_LINE:
64508be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx))
64608be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
6478dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian Paul         if (ctx->Polygon.OffsetLine == state)
64886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
64986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_POLYGON);
65086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Polygon.OffsetLine = state;
65186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
65286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_POLYGON_OFFSET_FILL:
6538dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian Paul         if (ctx->Polygon.OffsetFill == state)
65486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
65586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_POLYGON);
65686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Polygon.OffsetFill = state;
65786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
65886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_RESCALE_NORMAL_EXT:
659dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
66008be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
66186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Transform.RescaleNormals == state)
66286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
66386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_TRANSFORM);
66486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Transform.RescaleNormals = state;
66586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
66686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_SCISSOR_TEST:
667a9c73fb778a41b422a811c67b4aba806d4dfb7c8Courtney Goeltzenleuchter         {
668a9c73fb778a41b422a811c67b4aba806d4dfb7c8Courtney Goeltzenleuchter            /* Must expand glEnable to all scissors */
669a9c73fb778a41b422a811c67b4aba806d4dfb7c8Courtney Goeltzenleuchter            GLbitfield newEnabled =
670a9c73fb778a41b422a811c67b4aba806d4dfb7c8Courtney Goeltzenleuchter               state * ((1 << ctx->Const.MaxViewports) - 1);
671a9c73fb778a41b422a811c67b4aba806d4dfb7c8Courtney Goeltzenleuchter            if (newEnabled != ctx->Scissor.EnableFlags) {
672a9c73fb778a41b422a811c67b4aba806d4dfb7c8Courtney Goeltzenleuchter               FLUSH_VERTICES(ctx, _NEW_SCISSOR);
673a9c73fb778a41b422a811c67b4aba806d4dfb7c8Courtney Goeltzenleuchter               ctx->Scissor.EnableFlags = newEnabled;
674a9c73fb778a41b422a811c67b4aba806d4dfb7c8Courtney Goeltzenleuchter            }
675a9c73fb778a41b422a811c67b4aba806d4dfb7c8Courtney Goeltzenleuchter         }
67686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
67786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_STENCIL_TEST:
6788dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian Paul         if (ctx->Stencil.Enabled == state)
67986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
68086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_STENCIL);
68186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Stencil.Enabled = state;
68286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
68358dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick      case GL_TEXTURE_1D:
684dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
68508be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
68658dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         if (!enable_texture(ctx, state, TEXTURE_1D_BIT)) {
68786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
68858dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         }
68986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
69058dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick      case GL_TEXTURE_2D:
691dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
69208be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
69358dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         if (!enable_texture(ctx, state, TEXTURE_2D_BIT)) {
69486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
69558dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         }
69686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
69758dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick      case GL_TEXTURE_3D:
698dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
69908be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
70058dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         if (!enable_texture(ctx, state, TEXTURE_3D_BIT)) {
70186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
70258dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         }
70386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
704e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul      case GL_TEXTURE_GEN_S:
705e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul      case GL_TEXTURE_GEN_T:
706933b99f113c97588b616daad2fb19456eece96e2Brian Paul      case GL_TEXTURE_GEN_R:
707933b99f113c97588b616daad2fb19456eece96e2Brian Paul      case GL_TEXTURE_GEN_Q:
708e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul         {
709e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul            struct gl_texture_unit *texUnit = get_texcoord_unit(ctx);
71008be1d288f216232d3974f5997b266a8dd720928Ian Romanick
711dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry            if (ctx->API != API_OPENGL_COMPAT)
71208be1d288f216232d3974f5997b266a8dd720928Ian Romanick               goto invalid_enum_error;
71308be1d288f216232d3974f5997b266a8dd720928Ian Romanick
714e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul            if (texUnit) {
715933b99f113c97588b616daad2fb19456eece96e2Brian Paul               GLbitfield coordBit = S_BIT << (cap - GL_TEXTURE_GEN_S);
716933b99f113c97588b616daad2fb19456eece96e2Brian Paul               GLbitfield newenabled = texUnit->TexGenEnabled & ~coordBit;
717e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul               if (state)
718933b99f113c97588b616daad2fb19456eece96e2Brian Paul                  newenabled |= coordBit;
719e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul               if (texUnit->TexGenEnabled == newenabled)
720e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul                  return;
721e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul               FLUSH_VERTICES(ctx, _NEW_TEXTURE);
722e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul               texUnit->TexGenEnabled = newenabled;
723e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul            }
724e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul         }
72586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
72686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul
72708fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg      case GL_TEXTURE_GEN_STR_OES:
72808fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg	 /* disable S, T, and R at the same time */
72908fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg	 {
73008fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg            struct gl_texture_unit *texUnit = get_texcoord_unit(ctx);
73108be1d288f216232d3974f5997b266a8dd720928Ian Romanick
73208be1d288f216232d3974f5997b266a8dd720928Ian Romanick            if (ctx->API != API_OPENGLES)
73308be1d288f216232d3974f5997b266a8dd720928Ian Romanick               goto invalid_enum_error;
73408be1d288f216232d3974f5997b266a8dd720928Ian Romanick
73508fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg            if (texUnit) {
73608fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg               GLuint newenabled =
73708fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg		  texUnit->TexGenEnabled & ~STR_BITS;
73808fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg               if (state)
73908fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg                  newenabled |= STR_BITS;
74008fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg               if (texUnit->TexGenEnabled == newenabled)
74108fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg                  return;
74208fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg               FLUSH_VERTICES(ctx, _NEW_TEXTURE);
74308fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg               texUnit->TexGenEnabled = newenabled;
74408fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg            }
74508fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg         }
74608fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg         break;
74708fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg
748192baaac0fc4701e82dcc3e19b3033f81dd82a62Brian Paul      /* client-side state */
74986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_VERTEX_ARRAY:
75086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_NORMAL_ARRAY:
75186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_COLOR_ARRAY:
75286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_TEXTURE_COORD_ARRAY:
75355c19527a6c28e6a7d8984f6cb6d9ce9d553a5c3Brian Paul         if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
75455c19527a6c28e6a7d8984f6cb6d9ce9d553a5c3Brian Paul            goto invalid_enum_error;
75555c19527a6c28e6a7d8984f6cb6d9ce9d553a5c3Brian Paul         client_state( ctx, cap, state );
75655c19527a6c28e6a7d8984f6cb6d9ce9d553a5c3Brian Paul         return;
75755c19527a6c28e6a7d8984f6cb6d9ce9d553a5c3Brian Paul      case GL_INDEX_ARRAY:
75886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_EDGE_FLAG_ARRAY:
75986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_FOG_COORDINATE_ARRAY_EXT:
76086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_SECONDARY_COLOR_ARRAY_EXT:
76155c19527a6c28e6a7d8984f6cb6d9ce9d553a5c3Brian Paul         if (ctx->API != API_OPENGL_COMPAT)
76255c19527a6c28e6a7d8984f6cb6d9ce9d553a5c3Brian Paul            goto invalid_enum_error;
76355c19527a6c28e6a7d8984f6cb6d9ce9d553a5c3Brian Paul         client_state( ctx, cap, state );
76455c19527a6c28e6a7d8984f6cb6d9ce9d553a5c3Brian Paul         return;
7651cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul      case GL_POINT_SIZE_ARRAY_OES:
76655c19527a6c28e6a7d8984f6cb6d9ce9d553a5c3Brian Paul         if (ctx->API != API_OPENGLES)
76755c19527a6c28e6a7d8984f6cb6d9ce9d553a5c3Brian Paul            goto invalid_enum_error;
76886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         client_state( ctx, cap, state );
76986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         return;
770afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
77186fc370d399167ec9bb978d053d4a72215c86c16Brian Paul      /* GL_ARB_texture_cube_map */
7726a08673c5eb4d55522888c3c2fd6af6946ce1264Brian Paul      case GL_TEXTURE_CUBE_MAP:
773dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
77408be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
77558dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         CHECK_EXTENSION(ARB_texture_cube_map, cap);
77658dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         if (!enable_texture(ctx, state, TEXTURE_CUBE_BIT)) {
77758dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick            return;
77886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         }
77986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
78046b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell
78186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      /* GL_EXT_secondary_color */
78286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_COLOR_SUM_EXT:
783dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
78408be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
78586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Fog.ColorSumEnabled == state)
78686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
78786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_FOG);
78886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Fog.ColorSumEnabled = state;
78986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
79006d05afdd687fcd1d59d46c6a86c2e5707e1859bBrian Paul
791736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul      /* GL_ARB_multisample */
79286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_MULTISAMPLE_ARB:
793055093e33fc90705c429e948caefedf0e0fb82afBrian Paul         if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES)
79408be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
795a29a4566354af53e3bdc4a925eddc0d7af2bf384Paul Berry         _mesa_set_multisample(ctx, state);
796a29a4566354af53e3bdc4a925eddc0d7af2bf384Paul Berry         return;
79786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_SAMPLE_ALPHA_TO_COVERAGE_ARB:
79886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Multisample.SampleAlphaToCoverage == state)
79986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
80086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_MULTISAMPLE);
80186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Multisample.SampleAlphaToCoverage = state;
80286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
80386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_SAMPLE_ALPHA_TO_ONE_ARB:
80408be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES)
80508be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
80686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Multisample.SampleAlphaToOne == state)
80786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
80886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_MULTISAMPLE);
80986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Multisample.SampleAlphaToOne = state;
81086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
81186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_SAMPLE_COVERAGE_ARB:
81286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Multisample.SampleCoverage == state)
81386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
81486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_MULTISAMPLE);
81586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Multisample.SampleCoverage = state;
81686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
81786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_SAMPLE_COVERAGE_INVERT_ARB:
81808be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx))
81908be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
82086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Multisample.SampleCoverageInvert == state)
82186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
82286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_MULTISAMPLE);
82386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Multisample.SampleCoverageInvert = state;
82486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
8258c2f6c5059a60d845716277973c826f4069926e6Brian Paul
82677b440e42d8e7247c22959020bb087c63d298f2eAnuj Phogat      /* GL_ARB_sample_shading */
82777b440e42d8e7247c22959020bb087c63d298f2eAnuj Phogat      case GL_SAMPLE_SHADING:
828411a88accc8a2728abbdfbef4315addbc08cf5a3Ilia Mirkin         if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx))
82977b440e42d8e7247c22959020bb087c63d298f2eAnuj Phogat            goto invalid_enum_error;
83077b440e42d8e7247c22959020bb087c63d298f2eAnuj Phogat         CHECK_EXTENSION(ARB_sample_shading, cap);
83177b440e42d8e7247c22959020bb087c63d298f2eAnuj Phogat         if (ctx->Multisample.SampleShading == state)
83277b440e42d8e7247c22959020bb087c63d298f2eAnuj Phogat            return;
83377b440e42d8e7247c22959020bb087c63d298f2eAnuj Phogat         FLUSH_VERTICES(ctx, _NEW_MULTISAMPLE);
83477b440e42d8e7247c22959020bb087c63d298f2eAnuj Phogat         ctx->Multisample.SampleShading = state;
83577b440e42d8e7247c22959020bb087c63d298f2eAnuj Phogat         break;
83677b440e42d8e7247c22959020bb087c63d298f2eAnuj Phogat
8378c2f6c5059a60d845716277973c826f4069926e6Brian Paul      /* GL_IBM_rasterpos_clip */
83886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      case GL_RASTER_POSITION_UNCLIPPED_IBM:
839dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
84008be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
84186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->Transform.RasterPositionUnclipped == state)
84286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
84386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_TRANSFORM);
84486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->Transform.RasterPositionUnclipped = state;
84586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
846736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul
8476c408b46678637959dba04663fbc34eb9c4bc397Brian Paul      /* GL_NV_point_sprite */
8486c408b46678637959dba04663fbc34eb9c4bc397Brian Paul      case GL_POINT_SPRITE_NV:
849dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
85008be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
85163736723678ef30e7f90835cfbd48c520e39bf11Ian Romanick         CHECK_EXTENSION2(NV_point_sprite, ARB_point_sprite, cap);
8526c408b46678637959dba04663fbc34eb9c4bc397Brian Paul         if (ctx->Point.PointSprite == state)
85386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
85486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         FLUSH_VERTICES(ctx, _NEW_POINT);
8556c408b46678637959dba04663fbc34eb9c4bc397Brian Paul         ctx->Point.PointSprite = state;
85686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
85786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul
858e1e03b32ab651e992f7b979eba046fdc84fedf2eRoland Scheidegger      case GL_VERTEX_PROGRAM_ARB:
859dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
86008be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
8618b2fe73897b1d50fd99de3f66bf78fe3fc44bfeeEric Anholt         CHECK_EXTENSION(ARB_vertex_program, cap);
86286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->VertexProgram.Enabled == state)
86386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
8643abf746a7eae52220485cd031aecec2ca9e6103eKeith Whitwell         FLUSH_VERTICES(ctx, _NEW_PROGRAM);
86586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->VertexProgram.Enabled = state;
86686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
867e1e03b32ab651e992f7b979eba046fdc84fedf2eRoland Scheidegger      case GL_VERTEX_PROGRAM_POINT_SIZE_ARB:
86808be1d288f216232d3974f5997b266a8dd720928Ian Romanick         /* This was added with ARB_vertex_program, but it is also used with
86908be1d288f216232d3974f5997b266a8dd720928Ian Romanick          * GLSL vertex shaders on desktop.
87008be1d288f216232d3974f5997b266a8dd720928Ian Romanick          */
87108be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx))
87208be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
8738b2fe73897b1d50fd99de3f66bf78fe3fc44bfeeEric Anholt         CHECK_EXTENSION(ARB_vertex_program, cap);
87486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->VertexProgram.PointSizeEnabled == state)
87586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
8763abf746a7eae52220485cd031aecec2ca9e6103eKeith Whitwell         FLUSH_VERTICES(ctx, _NEW_PROGRAM);
87786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->VertexProgram.PointSizeEnabled = state;
87886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
879e1e03b32ab651e992f7b979eba046fdc84fedf2eRoland Scheidegger      case GL_VERTEX_PROGRAM_TWO_SIDE_ARB:
880dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
88108be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
8828b2fe73897b1d50fd99de3f66bf78fe3fc44bfeeEric Anholt         CHECK_EXTENSION(ARB_vertex_program, cap);
88386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         if (ctx->VertexProgram.TwoSideEnabled == state)
88486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul            return;
8853abf746a7eae52220485cd031aecec2ca9e6103eKeith Whitwell         FLUSH_VERTICES(ctx, _NEW_PROGRAM);
88686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         ctx->VertexProgram.TwoSideEnabled = state;
88786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         break;
888b7d15977f66bb3de9c475e3138c56ab1d4151382Oliver McFadden
8898afe7de8deaf3c9613fd68b344de8c52b02b1879Brian Paul      /* GL_NV_texture_rectangle */
8908afe7de8deaf3c9613fd68b344de8c52b02b1879Brian Paul      case GL_TEXTURE_RECTANGLE_NV:
891dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
89208be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
8935f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul         CHECK_EXTENSION(NV_texture_rectangle, cap);
89458dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         if (!enable_texture(ctx, state, TEXTURE_RECT_BIT)) {
89558dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick            return;
8968afe7de8deaf3c9613fd68b344de8c52b02b1879Brian Paul         }
8978afe7de8deaf3c9613fd68b344de8c52b02b1879Brian Paul         break;
8988afe7de8deaf3c9613fd68b344de8c52b02b1879Brian Paul
8995f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul      /* GL_EXT_stencil_two_side */
9005f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul      case GL_STENCIL_TEST_TWO_SIDE_EXT:
901dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
90208be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
9035f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul         CHECK_EXTENSION(EXT_stencil_two_side, cap);
9045f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul         if (ctx->Stencil.TestTwoSide == state)
9055f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul            return;
9065f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul         FLUSH_VERTICES(ctx, _NEW_STENCIL);
9075f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul         ctx->Stencil.TestTwoSide = state;
908dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick         if (state) {
909dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick            ctx->Stencil._BackFace = 2;
910dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick         } else {
911dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick            ctx->Stencil._BackFace = 1;
912dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick         }
9135f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul         break;
9145f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul
91577eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul      case GL_FRAGMENT_PROGRAM_ARB:
916dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
91708be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
91877eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul         CHECK_EXTENSION(ARB_fragment_program, cap);
91977eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul         if (ctx->FragmentProgram.Enabled == state)
92077eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul            return;
9213abf746a7eae52220485cd031aecec2ca9e6103eKeith Whitwell         FLUSH_VERTICES(ctx, _NEW_PROGRAM);
92277eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul         ctx->FragmentProgram.Enabled = state;
92377eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul         break;
92477eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul
925e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul      /* GL_EXT_depth_bounds_test */
926e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul      case GL_DEPTH_BOUNDS_TEST_EXT:
92708be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx))
92808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
929e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul         CHECK_EXTENSION(EXT_depth_bounds_test, cap);
930e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul         if (ctx->Depth.BoundsTest == state)
931e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul            return;
932e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul         FLUSH_VERTICES(ctx, _NEW_DEPTH);
933e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul         ctx->Depth.BoundsTest = state;
934e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul         break;
935e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul
936b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt      case GL_DEPTH_CLAMP:
93708be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx))
93808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
93908be1d288f216232d3974f5997b266a8dd720928Ian Romanick	 CHECK_EXTENSION(ARB_depth_clamp, cap);
940b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt         if (ctx->Transform.DepthClamp == state)
941b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt            return;
942b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt         FLUSH_VERTICES(ctx, _NEW_TRANSFORM);
943b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt	 ctx->Transform.DepthClamp = state;
944b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt	 break;
945b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt
9467f752fed993e5e9423abac200dd59141edbada56Dave Airlie      case GL_FRAGMENT_SHADER_ATI:
947dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
94808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
9497f752fed993e5e9423abac200dd59141edbada56Dave Airlie        CHECK_EXTENSION(ATI_fragment_shader, cap);
9507f752fed993e5e9423abac200dd59141edbada56Dave Airlie	if (ctx->ATIFragmentShader.Enabled == state)
9517f752fed993e5e9423abac200dd59141edbada56Dave Airlie	  return;
9527f752fed993e5e9423abac200dd59141edbada56Dave Airlie	FLUSH_VERTICES(ctx, _NEW_PROGRAM);
9537f752fed993e5e9423abac200dd59141edbada56Dave Airlie	ctx->ATIFragmentShader.Enabled = state;
9547f752fed993e5e9423abac200dd59141edbada56Dave Airlie        break;
955bb372f1c9bc08e8b0dca983cb4ba36b2f2f039fbIan Romanick
9569d5bb3c6f820a5a99e1f55b2fd14d250761fcddcIan Romanick      case GL_TEXTURE_CUBE_MAP_SEAMLESS:
95708be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx))
95808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
9599d5bb3c6f820a5a99e1f55b2fd14d250761fcddcIan Romanick	 CHECK_EXTENSION(ARB_seamless_cube_map, cap);
960aafbaa9e6a87cecb336f2704b799430d74c60456Marek Olšák	 if (ctx->Texture.CubeMapSeamless != state) {
961aafbaa9e6a87cecb336f2704b799430d74c60456Marek Olšák	    FLUSH_VERTICES(ctx, _NEW_TEXTURE);
962aafbaa9e6a87cecb336f2704b799430d74c60456Marek Olšák	    ctx->Texture.CubeMapSeamless = state;
963aafbaa9e6a87cecb336f2704b799430d74c60456Marek Olšák	 }
9649d5bb3c6f820a5a99e1f55b2fd14d250761fcddcIan Romanick	 break;
9659d5bb3c6f820a5a99e1f55b2fd14d250761fcddcIan Romanick
96686a1ea31ed6afdb9789671ca3fdd79709ea9f112Brian Paul      case GL_RASTERIZER_DISCARD:
96708be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx))
96808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
96986a1ea31ed6afdb9789671ca3fdd79709ea9f112Brian Paul	 CHECK_EXTENSION(EXT_transform_feedback, cap);
970aee96806f049c17384a8edc11acce76257d98a57Paul Berry         if (ctx->RasterDiscard != state) {
97199bd76d834e0c771274f327e1efe9b089ff273d4Marek Olšák            FLUSH_VERTICES(ctx, 0);
97299bd76d834e0c771274f327e1efe9b089ff273d4Marek Olšák            ctx->NewDriverState |= ctx->DriverFlags.NewRasterizerDiscard;
973aee96806f049c17384a8edc11acce76257d98a57Paul Berry            ctx->RasterDiscard = state;
97486a1ea31ed6afdb9789671ca3fdd79709ea9f112Brian Paul         }
97586a1ea31ed6afdb9789671ca3fdd79709ea9f112Brian Paul         break;
97686a1ea31ed6afdb9789671ca3fdd79709ea9f112Brian Paul
9777f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul      /* GL 3.1 primitive restart.  Note: this enum is different from
9787f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul       * GL_PRIMITIVE_RESTART_NV (which is client state).
9797f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul       */
980a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul      case GL_PRIMITIVE_RESTART:
98108be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx) || ctx->Version < 31) {
982a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul            goto invalid_enum_error;
983a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul         }
984a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul         if (ctx->Array.PrimitiveRestart != state) {
985a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul            FLUSH_VERTICES(ctx, _NEW_TRANSFORM);
986a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul            ctx->Array.PrimitiveRestart = state;
98742ed81a7c3eec215a543c47239cc30536f284adaIan Romanick            update_derived_primitive_restart_state(ctx);
98842ed81a7c3eec215a543c47239cc30536f284adaIan Romanick         }
98942ed81a7c3eec215a543c47239cc30536f284adaIan Romanick         break;
99042ed81a7c3eec215a543c47239cc30536f284adaIan Romanick
99142ed81a7c3eec215a543c47239cc30536f284adaIan Romanick      case GL_PRIMITIVE_RESTART_FIXED_INDEX:
99242ed81a7c3eec215a543c47239cc30536f284adaIan Romanick	 if (!_mesa_is_gles3(ctx) && !ctx->Extensions.ARB_ES3_compatibility)
99342ed81a7c3eec215a543c47239cc30536f284adaIan Romanick            goto invalid_enum_error;
99442ed81a7c3eec215a543c47239cc30536f284adaIan Romanick         if (ctx->Array.PrimitiveRestartFixedIndex != state) {
99542ed81a7c3eec215a543c47239cc30536f284adaIan Romanick            FLUSH_VERTICES(ctx, _NEW_TRANSFORM);
99642ed81a7c3eec215a543c47239cc30536f284adaIan Romanick            ctx->Array.PrimitiveRestartFixedIndex = state;
99742ed81a7c3eec215a543c47239cc30536f284adaIan Romanick            update_derived_primitive_restart_state(ctx);
998a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul         }
999a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul         break;
1000a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul
1001a637280e42b9a2f4ccbb5e7b209c5645073f584eDave Airlie      /* GL3.0 - GL_framebuffer_sRGB */
1002a637280e42b9a2f4ccbb5e7b209c5645073f584eDave Airlie      case GL_FRAMEBUFFER_SRGB_EXT:
1003112caa853d53467a9c0ef171f272505db0278c6aPaul Berry         if (!_mesa_is_desktop_gl(ctx))
100408be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
100588ffa9ce5b8e5fe2b93238f8b9a7a888be28324eDave Airlie         CHECK_EXTENSION(EXT_framebuffer_sRGB, cap);
10068faa79764c394ce5ec87c5376afb5643f99c53e7Paul Berry         _mesa_set_framebuffer_srgb(ctx, state);
10078faa79764c394ce5ec87c5376afb5643f99c53e7Paul Berry         return;
1008a637280e42b9a2f4ccbb5e7b209c5645073f584eDave Airlie
10090c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu      /* GL_OES_EGL_image_external */
10100c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu      case GL_TEXTURE_EXTERNAL_OES:
101108be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_gles(ctx))
101208be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
10130c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu         CHECK_EXTENSION(OES_EGL_image_external, cap);
10140c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu         if (!enable_texture(ctx, state, TEXTURE_EXTERNAL_BIT)) {
10150c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu            return;
10160c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu         }
10170c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu         break;
10180c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu
10191822496f3a7baf1c1726fda008cb89fbbade5c8dChris Forbes      /* ARB_texture_multisample */
10201822496f3a7baf1c1726fda008cb89fbbade5c8dChris Forbes      case GL_SAMPLE_MASK:
10214f8e4a95dbd806bc735bf93dda245be2bb2ea454Marta Lofstedt         if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles31(ctx))
10221822496f3a7baf1c1726fda008cb89fbbade5c8dChris Forbes            goto invalid_enum_error;
10231822496f3a7baf1c1726fda008cb89fbbade5c8dChris Forbes         CHECK_EXTENSION(ARB_texture_multisample, cap);
10241822496f3a7baf1c1726fda008cb89fbbade5c8dChris Forbes         if (ctx->Multisample.SampleMask == state)
10251822496f3a7baf1c1726fda008cb89fbbade5c8dChris Forbes            return;
10261822496f3a7baf1c1726fda008cb89fbbade5c8dChris Forbes         FLUSH_VERTICES(ctx, _NEW_MULTISAMPLE);
10271822496f3a7baf1c1726fda008cb89fbbade5c8dChris Forbes         ctx->Multisample.SampleMask = state;
10281822496f3a7baf1c1726fda008cb89fbbade5c8dChris Forbes         break;
10291822496f3a7baf1c1726fda008cb89fbbade5c8dChris Forbes
10301bf9b2a6008552f5fdb8908c24c446fd7261efddKenneth Graunke      case GL_BLEND_ADVANCED_COHERENT_KHR:
10311bf9b2a6008552f5fdb8908c24c446fd7261efddKenneth Graunke         CHECK_EXTENSION(KHR_blend_equation_advanced_coherent, cap);
10321bf9b2a6008552f5fdb8908c24c446fd7261efddKenneth Graunke         if (ctx->Color.BlendCoherent == state)
10331bf9b2a6008552f5fdb8908c24c446fd7261efddKenneth Graunke            return;
10341bf9b2a6008552f5fdb8908c24c446fd7261efddKenneth Graunke         FLUSH_VERTICES(ctx, _NEW_COLOR);
10351bf9b2a6008552f5fdb8908c24c446fd7261efddKenneth Graunke         ctx->Color.BlendCoherent = state;
10361bf9b2a6008552f5fdb8908c24c446fd7261efddKenneth Graunke         break;
10371bf9b2a6008552f5fdb8908c24c446fd7261efddKenneth Graunke
103886b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul      default:
1039f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul         goto invalid_enum_error;
1040afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   }
1041afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
1042afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   if (ctx->Driver.Enable) {
10438dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian Paul      ctx->Driver.Enable( ctx, cap, state );
1044afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   }
1045f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul
1046f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul   return;
1047f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul
1048f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paulinvalid_enum_error:
1049dcf1dafa9ec93f9300ecffe5bddfd2b131bc218fBrian Paul   _mesa_error(ctx, GL_INVALID_ENUM, "gl%s(%s)",
10502f11e92cef51c88a09bc778e2ceca4ab50cf0017Kenneth Graunke               state ? "Enable" : "Disable", _mesa_enum_to_string(cap));
1051afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
1052afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
1053afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
10546dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**
10558dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian Paul * Enable GL capability.  Called by glEnable()
10568dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian Paul * \param cap  state to enable.
10576dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */
1058c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY
1059fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_Enable( GLenum cap )
1060afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
1061fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   GET_CURRENT_CONTEXT(ctx);
1062376d022e4a5a56f81f089a13a34438981fe83178Keith Whitwell
1063fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   _mesa_set_enable( ctx, cap, GL_TRUE );
1064afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
1065afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
1066afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
10676dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**
10688dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian Paul * Disable GL capability.  Called by glDisable()
10698dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian Paul * \param cap  state to disable.
10706dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */
1071c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY
1072fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_Disable( GLenum cap )
1073afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
1074fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   GET_CURRENT_CONTEXT(ctx);
1075376d022e4a5a56f81f089a13a34438981fe83178Keith Whitwell
1076fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   _mesa_set_enable( ctx, cap, GL_FALSE );
1077afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
1078afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
1079afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
10803728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul
10813728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul/**
10823728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul * Enable/disable an indexed state var.
10833728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul */
10843728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paulvoid
1085d0d767ad4c6ee13c72577b072b24aa06841f6357Brian Paul_mesa_set_enablei(struct gl_context *ctx, GLenum cap,
1086d0d767ad4c6ee13c72577b072b24aa06841f6357Brian Paul                  GLuint index, GLboolean state)
10873728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul{
1088bfcdb843830bba0190e00e35e3c5c18c4bdb5de1Matt Turner   assert(state == 0 || state == 1);
10893728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   switch (cap) {
10903728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   case GL_BLEND:
10918f6f1124634cf659dde4c75549b84e35505d892dBrian Paul      if (!ctx->Extensions.EXT_draw_buffers2) {
1092f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul         goto invalid_enum_error;
10938f6f1124634cf659dde4c75549b84e35505d892dBrian Paul      }
10943728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul      if (index >= ctx->Const.MaxDrawBuffers) {
10953728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul         _mesa_error(ctx, GL_INVALID_VALUE, "%s(index=%u)",
10963728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul                     state ? "glEnableIndexed" : "glDisableIndexed", index);
10973728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul         return;
10983728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul      }
10993728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul      if (((ctx->Color.BlendEnabled >> index) & 1) != state) {
11003728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul         FLUSH_VERTICES(ctx, _NEW_COLOR);
11013728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul         if (state)
11023728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul            ctx->Color.BlendEnabled |= (1 << index);
11033728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul         else
11043728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul            ctx->Color.BlendEnabled &= ~(1 << index);
11053728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul      }
11063728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul      break;
1107a9c73fb778a41b422a811c67b4aba806d4dfb7c8Courtney Goeltzenleuchter   case GL_SCISSOR_TEST:
1108a9c73fb778a41b422a811c67b4aba806d4dfb7c8Courtney Goeltzenleuchter      if (index >= ctx->Const.MaxViewports) {
1109a9c73fb778a41b422a811c67b4aba806d4dfb7c8Courtney Goeltzenleuchter         _mesa_error(ctx, GL_INVALID_VALUE, "%s(index=%u)",
1110a9c73fb778a41b422a811c67b4aba806d4dfb7c8Courtney Goeltzenleuchter                     state ? "glEnablei" : "glDisablei", index);
1111a9c73fb778a41b422a811c67b4aba806d4dfb7c8Courtney Goeltzenleuchter         return;
1112a9c73fb778a41b422a811c67b4aba806d4dfb7c8Courtney Goeltzenleuchter      }
1113a9c73fb778a41b422a811c67b4aba806d4dfb7c8Courtney Goeltzenleuchter      if (((ctx->Scissor.EnableFlags >> index) & 1) != state) {
1114a9c73fb778a41b422a811c67b4aba806d4dfb7c8Courtney Goeltzenleuchter         FLUSH_VERTICES(ctx, _NEW_SCISSOR);
1115a9c73fb778a41b422a811c67b4aba806d4dfb7c8Courtney Goeltzenleuchter         if (state)
1116a9c73fb778a41b422a811c67b4aba806d4dfb7c8Courtney Goeltzenleuchter            ctx->Scissor.EnableFlags |= (1 << index);
1117a9c73fb778a41b422a811c67b4aba806d4dfb7c8Courtney Goeltzenleuchter         else
1118a9c73fb778a41b422a811c67b4aba806d4dfb7c8Courtney Goeltzenleuchter            ctx->Scissor.EnableFlags &= ~(1 << index);
1119a9c73fb778a41b422a811c67b4aba806d4dfb7c8Courtney Goeltzenleuchter      }
1120a9c73fb778a41b422a811c67b4aba806d4dfb7c8Courtney Goeltzenleuchter      break;
11213728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   default:
1122f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul      goto invalid_enum_error;
11233728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   }
11248f6f1124634cf659dde4c75549b84e35505d892dBrian Paul   return;
11258f6f1124634cf659dde4c75549b84e35505d892dBrian Paul
1126f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paulinvalid_enum_error:
11278f6f1124634cf659dde4c75549b84e35505d892dBrian Paul    _mesa_error(ctx, GL_INVALID_ENUM, "%s(cap=%s)",
11288f6f1124634cf659dde4c75549b84e35505d892dBrian Paul                state ? "glEnablei" : "glDisablei",
11292f11e92cef51c88a09bc778e2ceca4ab50cf0017Kenneth Graunke                _mesa_enum_to_string(cap));
11303728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul}
11313728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul
11323728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul
11333728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paulvoid GLAPIENTRY
11341a1db1746db82efc7f0643508886dfc78a15eb71Paul Berry_mesa_Disablei( GLenum cap, GLuint index )
11353728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul{
11363728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   GET_CURRENT_CONTEXT(ctx);
11373728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   _mesa_set_enablei(ctx, cap, index, GL_FALSE);
11383728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul}
11393728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul
11403728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul
11413728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paulvoid GLAPIENTRY
11421a1db1746db82efc7f0643508886dfc78a15eb71Paul Berry_mesa_Enablei( GLenum cap, GLuint index )
11433728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul{
11443728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   GET_CURRENT_CONTEXT(ctx);
11453728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   _mesa_set_enablei(ctx, cap, index, GL_TRUE);
11463728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul}
11473728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul
11483728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul
11493728673bd1b974e54858fbab6ff62d3607b0d3f0Brian PaulGLboolean GLAPIENTRY
11501a1db1746db82efc7f0643508886dfc78a15eb71Paul Berry_mesa_IsEnabledi( GLenum cap, GLuint index )
11513728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul{
11523728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   GET_CURRENT_CONTEXT(ctx);
1153386ec5e80e34e1164d749eee2078f2dfc8ff2b57Brian Paul   ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, 0);
11543728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   switch (cap) {
11553728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   case GL_BLEND:
11563728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul      if (index >= ctx->Const.MaxDrawBuffers) {
11573728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul         _mesa_error(ctx, GL_INVALID_VALUE, "glIsEnabledIndexed(index=%u)",
11583728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul                     index);
11593728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul         return GL_FALSE;
11603728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul      }
11613728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul      return (ctx->Color.BlendEnabled >> index) & 1;
1162917db0bc3dfdec1536018d96aab261e485b8d872Courtney Goeltzenleuchter   case GL_SCISSOR_TEST:
1163917db0bc3dfdec1536018d96aab261e485b8d872Courtney Goeltzenleuchter      if (index >= ctx->Const.MaxViewports) {
1164917db0bc3dfdec1536018d96aab261e485b8d872Courtney Goeltzenleuchter         _mesa_error(ctx, GL_INVALID_VALUE, "glIsEnabledIndexed(index=%u)",
1165917db0bc3dfdec1536018d96aab261e485b8d872Courtney Goeltzenleuchter                     index);
1166917db0bc3dfdec1536018d96aab261e485b8d872Courtney Goeltzenleuchter         return GL_FALSE;
1167917db0bc3dfdec1536018d96aab261e485b8d872Courtney Goeltzenleuchter      }
1168917db0bc3dfdec1536018d96aab261e485b8d872Courtney Goeltzenleuchter      return (ctx->Scissor.EnableFlags >> index) & 1;
11693728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   default:
11703728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul      _mesa_error(ctx, GL_INVALID_ENUM, "glIsEnabledIndexed(cap=%s)",
11712f11e92cef51c88a09bc778e2ceca4ab50cf0017Kenneth Graunke                  _mesa_enum_to_string(cap));
11723728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul      return GL_FALSE;
11733728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul   }
11743728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul}
11753728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul
11763728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul
11773728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul
11783728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul
117986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul#undef CHECK_EXTENSION
118086b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul#define CHECK_EXTENSION(EXTNAME)			\
118186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul   if (!ctx->Extensions.EXTNAME) {			\
1182f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul      goto invalid_enum_error;				\
118386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul   }
118486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul
1185da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger#undef CHECK_EXTENSION2
1186da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger#define CHECK_EXTENSION2(EXT1, EXT2)				\
1187da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger   if (!ctx->Extensions.EXT1 && !ctx->Extensions.EXT2) {	\
1188f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul      goto invalid_enum_error;					\
1189da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger   }
1190afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
11918dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian Paul
11926dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**
119358dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick * Helper function to determine whether a texture target is enabled.
119458dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick */
119558dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanickstatic GLboolean
1196f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergis_texture_enabled(struct gl_context *ctx, GLbitfield bit)
119758dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick{
119858dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick   const struct gl_texture_unit *const texUnit =
119958dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick       &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
120058dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick   return (texUnit->Enabled & bit) ? GL_TRUE : GL_FALSE;
120158dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick}
120258dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick
120358dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick
120458dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick/**
12058dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian Paul * Return simple enable/disable state.
12066dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell *
12078dcfcad7a2598ba835930aac8f3fd6576e464c1cBrian Paul * \param cap  state variable to query.
12086dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell *
12096dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * Returns the state of the specified capability from the current GL context.
12106dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * For the capabilities associated with extensions verifies that those
12116dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell * extensions are effectively present before reporting.
12126dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell */
1213c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall BennettGLboolean GLAPIENTRY
1214fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul_mesa_IsEnabled( GLenum cap )
1215afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
1216fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul   GET_CURRENT_CONTEXT(ctx);
12176a9880224368a016dfb1a9f5b5dfa9284a7dc6cfYuanhan Liu   ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, 0);
12186a9880224368a016dfb1a9f5b5dfa9284a7dc6cfYuanhan Liu
1219afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   switch (cap) {
1220afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_ALPHA_TEST:
1221dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
122208be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1223afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach         return ctx->Color.AlphaEnabled;
1224afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_AUTO_NORMAL:
1225dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
122608be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1227afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 return ctx->Eval.AutoNormal;
1228afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_BLEND:
12293728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul         return ctx->Color.BlendEnabled & 1;  /* return state for buffer[0] */
1230288f8876228d2d61dca309b832105488daf5b0e8Brian Paul      case GL_CLIP_DISTANCE0: /* aka GL_CLIP_PLANE0 */
1231b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry      case GL_CLIP_DISTANCE1:
1232b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry      case GL_CLIP_DISTANCE2:
1233b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry      case GL_CLIP_DISTANCE3:
1234b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry      case GL_CLIP_DISTANCE4:
1235b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry      case GL_CLIP_DISTANCE5:
1236b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry      case GL_CLIP_DISTANCE6:
1237b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry      case GL_CLIP_DISTANCE7: {
1238b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry         const GLuint p = cap - GL_CLIP_DISTANCE0;
1239b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry
1240b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry         if (p >= ctx->Const.MaxClipPlanes)
1241b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry            goto invalid_enum_error;
1242b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry
1243b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry	 return (ctx->Transform.ClipPlanesEnabled >> p) & 1;
1244b565e62a4499aad445bdbc0ba3a8bbc1c61e68abPaul Berry      }
1245afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_COLOR_MATERIAL:
1246dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
124708be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1248afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 return ctx->Light.ColorMaterialEnabled;
1249afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_CULL_FACE:
1250afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach         return ctx->Polygon.CullFlag;
1251b5c4795f386976830370f56d1fa5a1c4099d88e2Timothy Arceri      case GL_DEBUG_OUTPUT:
1252ed087ee49808a692ce8a0389fcf6c9da27f99d8enobled      case GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB:
1253ab7294668cb245fbe8c925be6fd6f0242bdd6a0fBoyan Ding         return (GLboolean) _mesa_get_debug_state_int(ctx, cap);
1254afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_DEPTH_TEST:
1255afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach         return ctx->Depth.Test;
1256afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_DITHER:
1257afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 return ctx->Color.DitherFlag;
1258afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_FOG:
1259dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
126008be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1261afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 return ctx->Fog.Enabled;
1262afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_LIGHTING:
1263dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
126408be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1265afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach         return ctx->Light.Enabled;
1266afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_LIGHT0:
1267afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_LIGHT1:
1268afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_LIGHT2:
1269afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_LIGHT3:
1270afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_LIGHT4:
1271afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_LIGHT5:
1272afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_LIGHT6:
1273afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_LIGHT7:
1274dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
127508be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1276afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach         return ctx->Light.Light[cap-GL_LIGHT0].Enabled;
1277afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_LINE_SMOOTH:
127808be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES)
127908be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1280afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 return ctx->Line.SmoothFlag;
1281afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_LINE_STIPPLE:
1282dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
128308be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1284afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 return ctx->Line.StippleFlag;
1285afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_INDEX_LOGIC_OP:
1286dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
128708be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1288afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 return ctx->Color.IndexLogicOpEnabled;
1289afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_COLOR_LOGIC_OP:
129008be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES)
129108be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1292afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 return ctx->Color.ColorLogicOpEnabled;
1293afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_MAP1_COLOR_4:
1294dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
129508be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1296afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 return ctx->Eval.Map1Color4;
1297afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_MAP1_INDEX:
1298dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
129908be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1300afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 return ctx->Eval.Map1Index;
1301afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_MAP1_NORMAL:
1302dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
130308be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1304afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 return ctx->Eval.Map1Normal;
1305afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_MAP1_TEXTURE_COORD_1:
1306dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
130708be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1308afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 return ctx->Eval.Map1TextureCoord1;
1309afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_MAP1_TEXTURE_COORD_2:
1310dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
131108be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1312afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 return ctx->Eval.Map1TextureCoord2;
1313afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_MAP1_TEXTURE_COORD_3:
1314dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
131508be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1316afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 return ctx->Eval.Map1TextureCoord3;
1317afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_MAP1_TEXTURE_COORD_4:
1318dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
131908be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1320afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 return ctx->Eval.Map1TextureCoord4;
1321afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_MAP1_VERTEX_3:
1322dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
132308be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1324afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 return ctx->Eval.Map1Vertex3;
1325afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_MAP1_VERTEX_4:
1326dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
132708be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1328afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 return ctx->Eval.Map1Vertex4;
1329afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_MAP2_COLOR_4:
1330dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
133108be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1332afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 return ctx->Eval.Map2Color4;
1333afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_MAP2_INDEX:
1334dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
133508be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1336afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 return ctx->Eval.Map2Index;
1337afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_MAP2_NORMAL:
1338dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
133908be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1340afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 return ctx->Eval.Map2Normal;
13415e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen      case GL_MAP2_TEXTURE_COORD_1:
1342dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
134308be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1344afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 return ctx->Eval.Map2TextureCoord1;
1345afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_MAP2_TEXTURE_COORD_2:
1346dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
134708be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1348afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 return ctx->Eval.Map2TextureCoord2;
1349afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_MAP2_TEXTURE_COORD_3:
1350dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
135108be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1352afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 return ctx->Eval.Map2TextureCoord3;
1353afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_MAP2_TEXTURE_COORD_4:
1354dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
135508be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1356afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 return ctx->Eval.Map2TextureCoord4;
1357afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_MAP2_VERTEX_3:
1358dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
135908be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1360afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 return ctx->Eval.Map2Vertex3;
1361afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_MAP2_VERTEX_4:
1362dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
136308be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1364afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 return ctx->Eval.Map2Vertex4;
1365afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_NORMALIZE:
1366dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
136708be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1368afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 return ctx->Transform.Normalize;
1369afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_POINT_SMOOTH:
1370dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
137108be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1372afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 return ctx->Point.SmoothFlag;
1373afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_POLYGON_SMOOTH:
137408be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx))
137508be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1376afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 return ctx->Polygon.SmoothFlag;
1377afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_POLYGON_STIPPLE:
1378dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
137908be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1380afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 return ctx->Polygon.StippleFlag;
1381afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_POLYGON_OFFSET_POINT:
138208be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx))
138308be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1384afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 return ctx->Polygon.OffsetPoint;
1385afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_POLYGON_OFFSET_LINE:
138608be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx))
138708be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1388afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 return ctx->Polygon.OffsetLine;
1389afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_POLYGON_OFFSET_FILL:
1390afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 return ctx->Polygon.OffsetFill;
1391afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_RESCALE_NORMAL_EXT:
1392dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
139308be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1394afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach         return ctx->Transform.RescaleNormals;
1395afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_SCISSOR_TEST:
1396a9c73fb778a41b422a811c67b4aba806d4dfb7c8Courtney Goeltzenleuchter	 return ctx->Scissor.EnableFlags & 1;  /* return state for index 0 */
1397afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_STENCIL_TEST:
1398afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach	 return ctx->Stencil.Enabled;
1399afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_TEXTURE_1D:
1400dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
140108be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
140258dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         return is_texture_enabled(ctx, TEXTURE_1D_BIT);
1403afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_TEXTURE_2D:
1404dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
140508be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
140658dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         return is_texture_enabled(ctx, TEXTURE_2D_BIT);
1407afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_TEXTURE_3D:
1408dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
140908be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1410c9e723e5013443df984cb3987ffa3a9ba3384b89Ian Romanick         return is_texture_enabled(ctx, TEXTURE_3D_BIT);
1411afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_TEXTURE_GEN_S:
1412afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_TEXTURE_GEN_T:
1413933b99f113c97588b616daad2fb19456eece96e2Brian Paul      case GL_TEXTURE_GEN_R:
1414933b99f113c97588b616daad2fb19456eece96e2Brian Paul      case GL_TEXTURE_GEN_Q:
1415afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach         {
1416e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul            const struct gl_texture_unit *texUnit = get_texcoord_unit(ctx);
141708be1d288f216232d3974f5997b266a8dd720928Ian Romanick
1418dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry            if (ctx->API != API_OPENGL_COMPAT)
141908be1d288f216232d3974f5997b266a8dd720928Ian Romanick               goto invalid_enum_error;
142008be1d288f216232d3974f5997b266a8dd720928Ian Romanick
1421e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul            if (texUnit) {
1422933b99f113c97588b616daad2fb19456eece96e2Brian Paul               GLbitfield coordBit = S_BIT << (cap - GL_TEXTURE_GEN_S);
1423933b99f113c97588b616daad2fb19456eece96e2Brian Paul               return (texUnit->TexGenEnabled & coordBit) ? GL_TRUE : GL_FALSE;
1424e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul            }
1425afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach         }
1426e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul         return GL_FALSE;
142708fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg      case GL_TEXTURE_GEN_STR_OES:
142808fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg	 {
142908fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg            const struct gl_texture_unit *texUnit = get_texcoord_unit(ctx);
143008be1d288f216232d3974f5997b266a8dd720928Ian Romanick
143108be1d288f216232d3974f5997b266a8dd720928Ian Romanick            if (ctx->API != API_OPENGLES)
143208be1d288f216232d3974f5997b266a8dd720928Ian Romanick               goto invalid_enum_error;
143308be1d288f216232d3974f5997b266a8dd720928Ian Romanick
143408fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg            if (texUnit) {
1435d0d767ad4c6ee13c72577b072b24aa06841f6357Brian Paul               return (texUnit->TexGenEnabled & STR_BITS) == STR_BITS
1436d0d767ad4c6ee13c72577b072b24aa06841f6357Brian Paul                  ? GL_TRUE : GL_FALSE;
143708fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg            }
143808fae07f5246052dccdd89689e27dc8820a24ff7Kristian Høgsberg         }
1439afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
1440192baaac0fc4701e82dcc3e19b3033f81dd82a62Brian Paul      /* client-side state */
1441afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_VERTEX_ARRAY:
1442dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
144308be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
14440dfe50f1a6cc5e1f979ac65cca4ed9359d18869dKenneth Graunke         return ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_POS].Enabled;
1445afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_NORMAL_ARRAY:
1446dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
144708be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
14480dfe50f1a6cc5e1f979ac65cca4ed9359d18869dKenneth Graunke         return ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_NORMAL].Enabled;
1449afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_COLOR_ARRAY:
1450dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
145108be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
14520dfe50f1a6cc5e1f979ac65cca4ed9359d18869dKenneth Graunke         return ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_COLOR0].Enabled;
1453afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_INDEX_ARRAY:
1454dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
145508be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
14560dfe50f1a6cc5e1f979ac65cca4ed9359d18869dKenneth Graunke         return ctx->Array.VAO->
145759b01ca252bd6706f08cd80a864819d71dfe741cFredrik Höglund            VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Enabled;
1458afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_TEXTURE_COORD_ARRAY:
1459dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
146008be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
14610dfe50f1a6cc5e1f979ac65cca4ed9359d18869dKenneth Graunke         return ctx->Array.VAO->
146259b01ca252bd6706f08cd80a864819d71dfe741cFredrik Höglund            VertexAttrib[VERT_ATTRIB_TEX(ctx->Array.ActiveTexture)].Enabled;
1463afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      case GL_EDGE_FLAG_ARRAY:
1464dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
146508be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
14660dfe50f1a6cc5e1f979ac65cca4ed9359d18869dKenneth Graunke         return ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_EDGEFLAG].Enabled;
14676ee7a02852e45efbfe2843c450dd72243f703430Brian Paul      case GL_FOG_COORDINATE_ARRAY_EXT:
1468dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
146908be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
14700dfe50f1a6cc5e1f979ac65cca4ed9359d18869dKenneth Graunke         return ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_FOG].Enabled;
14716ee7a02852e45efbfe2843c450dd72243f703430Brian Paul      case GL_SECONDARY_COLOR_ARRAY_EXT:
1472dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
147308be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
14740dfe50f1a6cc5e1f979ac65cca4ed9359d18869dKenneth Graunke         return ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_COLOR1].Enabled;
14751cf2c8a04313b80a01ef23b06993586ce62281a4Brian Paul      case GL_POINT_SIZE_ARRAY_OES:
147608be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (ctx->API != API_OPENGLES)
147708be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
14780dfe50f1a6cc5e1f979ac65cca4ed9359d18869dKenneth Graunke         return ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_POINT_SIZE].Enabled;
14791b2ff69f468d609a88b1cd31041df2b81931816bBrian Paul
148086fc370d399167ec9bb978d053d4a72215c86c16Brian Paul      /* GL_ARB_texture_cube_map */
14816a08673c5eb4d55522888c3c2fd6af6946ce1264Brian Paul      case GL_TEXTURE_CUBE_MAP:
148286b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         CHECK_EXTENSION(ARB_texture_cube_map);
148358dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         return is_texture_enabled(ctx, TEXTURE_CUBE_BIT);
148486fc370d399167ec9bb978d053d4a72215c86c16Brian Paul
1485da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger      /* GL_EXT_secondary_color */
1486da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger      case GL_COLOR_SUM_EXT:
1487dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
148808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1489da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger         return ctx->Fog.ColorSumEnabled;
1490da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger
1491736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul      /* GL_ARB_multisample */
1492736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul      case GL_MULTISAMPLE_ARB:
149308be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES)
149408be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
149586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         return ctx->Multisample.Enabled;
1496736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul      case GL_SAMPLE_ALPHA_TO_COVERAGE_ARB:
149786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         return ctx->Multisample.SampleAlphaToCoverage;
1498736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul      case GL_SAMPLE_ALPHA_TO_ONE_ARB:
149908be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES)
150008be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
150186b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         return ctx->Multisample.SampleAlphaToOne;
1502736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul      case GL_SAMPLE_COVERAGE_ARB:
150386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         return ctx->Multisample.SampleCoverage;
1504736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul      case GL_SAMPLE_COVERAGE_INVERT_ARB:
150508be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx))
150608be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
150786b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         return ctx->Multisample.SampleCoverageInvert;
1508736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul
15098c2f6c5059a60d845716277973c826f4069926e6Brian Paul      /* GL_IBM_rasterpos_clip */
15108c2f6c5059a60d845716277973c826f4069926e6Brian Paul      case GL_RASTER_POSITION_UNCLIPPED_IBM:
1511dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
151208be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
151386b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         return ctx->Transform.RasterPositionUnclipped;
15148c2f6c5059a60d845716277973c826f4069926e6Brian Paul
15156c408b46678637959dba04663fbc34eb9c4bc397Brian Paul      /* GL_NV_point_sprite */
15166c408b46678637959dba04663fbc34eb9c4bc397Brian Paul      case GL_POINT_SPRITE_NV:
1517dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
151808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1519da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger         CHECK_EXTENSION2(NV_point_sprite, ARB_point_sprite)
15206c408b46678637959dba04663fbc34eb9c4bc397Brian Paul         return ctx->Point.PointSprite;
152106d05afdd687fcd1d59d46c6a86c2e5707e1859bBrian Paul
1522da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger      case GL_VERTEX_PROGRAM_ARB:
1523dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
152408be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
15258b2fe73897b1d50fd99de3f66bf78fe3fc44bfeeEric Anholt         CHECK_EXTENSION(ARB_vertex_program);
152686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         return ctx->VertexProgram.Enabled;
1527da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger      case GL_VERTEX_PROGRAM_POINT_SIZE_ARB:
152808be1d288f216232d3974f5997b266a8dd720928Ian Romanick         /* This was added with ARB_vertex_program, but it is also used with
152908be1d288f216232d3974f5997b266a8dd720928Ian Romanick          * GLSL vertex shaders on desktop.
153008be1d288f216232d3974f5997b266a8dd720928Ian Romanick          */
153108be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx))
153208be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
15338b2fe73897b1d50fd99de3f66bf78fe3fc44bfeeEric Anholt         CHECK_EXTENSION(ARB_vertex_program);
153486b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         return ctx->VertexProgram.PointSizeEnabled;
1535da16813f432c5e328b5b2666d468f185c0678a98Roland Scheidegger      case GL_VERTEX_PROGRAM_TWO_SIDE_ARB:
1536dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
153708be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
15388b2fe73897b1d50fd99de3f66bf78fe3fc44bfeeEric Anholt         CHECK_EXTENSION(ARB_vertex_program);
153986b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul         return ctx->VertexProgram.TwoSideEnabled;
1540b7d15977f66bb3de9c475e3138c56ab1d4151382Oliver McFadden
15418afe7de8deaf3c9613fd68b344de8c52b02b1879Brian Paul      /* GL_NV_texture_rectangle */
15428afe7de8deaf3c9613fd68b344de8c52b02b1879Brian Paul      case GL_TEXTURE_RECTANGLE_NV:
1543dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
154408be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
15458afe7de8deaf3c9613fd68b344de8c52b02b1879Brian Paul         CHECK_EXTENSION(NV_texture_rectangle);
154658dacc8df1f05cf1d9983a3f45b574b0f20f54c6Ian Romanick         return is_texture_enabled(ctx, TEXTURE_RECT_BIT);
15478afe7de8deaf3c9613fd68b344de8c52b02b1879Brian Paul
15485f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul      /* GL_EXT_stencil_two_side */
15495f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul      case GL_STENCIL_TEST_TWO_SIDE_EXT:
1550dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
155108be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
15525f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul         CHECK_EXTENSION(EXT_stencil_two_side);
15535f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul         return ctx->Stencil.TestTwoSide;
15545f60a0b50ada1865d4fc6a724366e8ea0cc9a72fBrian Paul
155577eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul      case GL_FRAGMENT_PROGRAM_ARB:
1556dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
155708be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
155877eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul         return ctx->FragmentProgram.Enabled;
155977eec61e21cf1ff4ef3c95fcc42700ca4a0a2c4fBrian Paul
1560e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul      /* GL_EXT_depth_bounds_test */
1561e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul      case GL_DEPTH_BOUNDS_TEST_EXT:
156208be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx))
156308be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1564e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul         CHECK_EXTENSION(EXT_depth_bounds_test);
1565e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul         return ctx->Depth.BoundsTest;
1566e5b244ff7f984805c1bcc020342f1300f2639c71Brian Paul
1567b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt      /* GL_ARB_depth_clamp */
1568b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt      case GL_DEPTH_CLAMP:
156908be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx))
157008be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1571b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt         CHECK_EXTENSION(ARB_depth_clamp);
1572b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt         return ctx->Transform.DepthClamp;
1573b4922b533155cc139ebafb111502bb55d2ad2ccfEric Anholt
15747f752fed993e5e9423abac200dd59141edbada56Dave Airlie      case GL_FRAGMENT_SHADER_ATI:
1575dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT)
157608be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
15777f752fed993e5e9423abac200dd59141edbada56Dave Airlie	 CHECK_EXTENSION(ATI_fragment_shader);
15787f752fed993e5e9423abac200dd59141edbada56Dave Airlie	 return ctx->ATIFragmentShader.Enabled;
15799d5bb3c6f820a5a99e1f55b2fd14d250761fcddcIan Romanick
15809d5bb3c6f820a5a99e1f55b2fd14d250761fcddcIan Romanick      case GL_TEXTURE_CUBE_MAP_SEAMLESS:
158108be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx))
158208be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
15839d5bb3c6f820a5a99e1f55b2fd14d250761fcddcIan Romanick	 CHECK_EXTENSION(ARB_seamless_cube_map);
15849d5bb3c6f820a5a99e1f55b2fd14d250761fcddcIan Romanick	 return ctx->Texture.CubeMapSeamless;
15859d5bb3c6f820a5a99e1f55b2fd14d250761fcddcIan Romanick
158686a1ea31ed6afdb9789671ca3fdd79709ea9f112Brian Paul      case GL_RASTERIZER_DISCARD:
158708be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx))
158808be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
158986a1ea31ed6afdb9789671ca3fdd79709ea9f112Brian Paul	 CHECK_EXTENSION(EXT_transform_feedback);
1590aee96806f049c17384a8edc11acce76257d98a57Paul Berry         return ctx->RasterDiscard;
159186a1ea31ed6afdb9789671ca3fdd79709ea9f112Brian Paul
15927f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul      /* GL_NV_primitive_restart */
15937f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul      case GL_PRIMITIVE_RESTART_NV:
1594dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry         if (ctx->API != API_OPENGL_COMPAT || !ctx->Extensions.NV_primitive_restart) {
15957f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul            goto invalid_enum_error;
15967f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul         }
15977f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul         return ctx->Array.PrimitiveRestart;
15987f26ad80ba74b9c78a3735caee202e1868f6ff58Brian Paul
1599a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul      /* GL 3.1 primitive restart */
1600a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul      case GL_PRIMITIVE_RESTART:
160108be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_desktop_gl(ctx) || ctx->Version < 31) {
1602a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul            goto invalid_enum_error;
1603a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul         }
1604a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul         return ctx->Array.PrimitiveRestart;
1605a40e6f220ac7e41126b9815db27d362bda719bf6Brian Paul
160642ed81a7c3eec215a543c47239cc30536f284adaIan Romanick      case GL_PRIMITIVE_RESTART_FIXED_INDEX:
160742ed81a7c3eec215a543c47239cc30536f284adaIan Romanick	 if (!_mesa_is_gles3(ctx) && !ctx->Extensions.ARB_ES3_compatibility) {
160842ed81a7c3eec215a543c47239cc30536f284adaIan Romanick            goto invalid_enum_error;
160942ed81a7c3eec215a543c47239cc30536f284adaIan Romanick         }
161042ed81a7c3eec215a543c47239cc30536f284adaIan Romanick         return ctx->Array.PrimitiveRestartFixedIndex;
161142ed81a7c3eec215a543c47239cc30536f284adaIan Romanick
1612a637280e42b9a2f4ccbb5e7b209c5645073f584eDave Airlie      /* GL3.0 - GL_framebuffer_sRGB */
1613a637280e42b9a2f4ccbb5e7b209c5645073f584eDave Airlie      case GL_FRAMEBUFFER_SRGB_EXT:
1614112caa853d53467a9c0ef171f272505db0278c6aPaul Berry         if (!_mesa_is_desktop_gl(ctx))
161508be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
1616a637280e42b9a2f4ccbb5e7b209c5645073f584eDave Airlie	 CHECK_EXTENSION(EXT_framebuffer_sRGB);
1617a637280e42b9a2f4ccbb5e7b209c5645073f584eDave Airlie	 return ctx->Color.sRGBEnabled;
1618a637280e42b9a2f4ccbb5e7b209c5645073f584eDave Airlie
16190c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu      /* GL_OES_EGL_image_external */
16200c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu      case GL_TEXTURE_EXTERNAL_OES:
162108be1d288f216232d3974f5997b266a8dd720928Ian Romanick         if (!_mesa_is_gles(ctx))
162208be1d288f216232d3974f5997b266a8dd720928Ian Romanick            goto invalid_enum_error;
16230c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu	 CHECK_EXTENSION(OES_EGL_image_external);
16240c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu         return is_texture_enabled(ctx, TEXTURE_EXTERNAL_BIT);
16250c87f16817ff0bf1f05e0d634944fd47b097faeeChia-I Wu
16261822496f3a7baf1c1726fda008cb89fbbade5c8dChris Forbes      /* ARB_texture_multisample */
16271822496f3a7baf1c1726fda008cb89fbbade5c8dChris Forbes      case GL_SAMPLE_MASK:
16280fe81a25f7102d78dbe8f7e89d2b024b1741da1cMarta Lofstedt         if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles31(ctx))
16291822496f3a7baf1c1726fda008cb89fbbade5c8dChris Forbes            goto invalid_enum_error;
16301822496f3a7baf1c1726fda008cb89fbbade5c8dChris Forbes         CHECK_EXTENSION(ARB_texture_multisample);
16311822496f3a7baf1c1726fda008cb89fbbade5c8dChris Forbes         return ctx->Multisample.SampleMask;
16321822496f3a7baf1c1726fda008cb89fbbade5c8dChris Forbes
163377b440e42d8e7247c22959020bb087c63d298f2eAnuj Phogat      /* ARB_sample_shading */
163477b440e42d8e7247c22959020bb087c63d298f2eAnuj Phogat      case GL_SAMPLE_SHADING:
1635411a88accc8a2728abbdfbef4315addbc08cf5a3Ilia Mirkin         if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx))
163677b440e42d8e7247c22959020bb087c63d298f2eAnuj Phogat            goto invalid_enum_error;
163777b440e42d8e7247c22959020bb087c63d298f2eAnuj Phogat         CHECK_EXTENSION(ARB_sample_shading);
163877b440e42d8e7247c22959020bb087c63d298f2eAnuj Phogat         return ctx->Multisample.SampleShading;
163977b440e42d8e7247c22959020bb087c63d298f2eAnuj Phogat
16401bf9b2a6008552f5fdb8908c24c446fd7261efddKenneth Graunke      case GL_BLEND_ADVANCED_COHERENT_KHR:
16411bf9b2a6008552f5fdb8908c24c446fd7261efddKenneth Graunke         CHECK_EXTENSION(KHR_blend_equation_advanced_coherent);
16421bf9b2a6008552f5fdb8908c24c446fd7261efddKenneth Graunke         return ctx->Color.BlendCoherent;
16431bf9b2a6008552f5fdb8908c24c446fd7261efddKenneth Graunke
1644039d836d6ea5621ede88ff3504be841a6dd865c6Lionel Landwerlin      case GL_CONSERVATIVE_RASTERIZATION_INTEL:
1645039d836d6ea5621ede88ff3504be841a6dd865c6Lionel Landwerlin         CHECK_EXTENSION(INTEL_conservative_rasterization);
1646039d836d6ea5621ede88ff3504be841a6dd865c6Lionel Landwerlin         return ctx->IntelConservativeRasterization;
1647039d836d6ea5621ede88ff3504be841a6dd865c6Lionel Landwerlin
1648afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      default:
1649f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul         goto invalid_enum_error;
1650afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   }
1651f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul
1652f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul   return GL_FALSE;
1653f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul
1654f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paulinvalid_enum_error:
1655dcf1dafa9ec93f9300ecffe5bddfd2b131bc218fBrian Paul   _mesa_error(ctx, GL_INVALID_ENUM, "glIsEnabled(%s)",
16562f11e92cef51c88a09bc778e2ceca4ab50cf0017Kenneth Graunke               _mesa_enum_to_string(cap));
1657f4dcb5de4e46d7b511b530375ef77e9946b89ff0Brian Paul   return GL_FALSE;
1658afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
1659