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