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