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