1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \file enable.c 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Enable/disable/query GL capabilities. 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Mesa 3-D graphics library 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * copy of this software and associated documentation files (the "Software"), 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * to deal in the Software without restriction, including without limitation 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the rights to use, copy, modify, merge, publish, distribute, sublicense, 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * and/or sell copies of the Software, and to permit persons to whom the 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Software is furnished to do so, subject to the following conditions: 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The above copyright notice and this permission notice shall be included 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * in all copies or substantial portions of the Software. 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "glheader.h" 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "clip.h" 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "context.h" 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "enable.h" 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "light.h" 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "simple_list.h" 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "mfeatures.h" 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "mtypes.h" 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "enums.h" 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "api_arrayelt.h" 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "texstate.h" 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "drivers/common/meta.h" 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define CHECK_EXTENSION(EXTNAME, CAP) \ 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!ctx->Extensions.EXTNAME) { \ 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; \ 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Helper to enable/disable client-side state. 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclient_state(struct gl_context *ctx, GLenum cap, GLboolean state) 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_array_object *arrayObj = ctx->Array.ArrayObj; 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield64 flag; 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean *var; 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (cap) { 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_ARRAY: 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org var = &arrayObj->VertexAttrib[VERT_ATTRIB_POS].Enabled; 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org flag = VERT_BIT_POS; 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_NORMAL_ARRAY: 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org var = &arrayObj->VertexAttrib[VERT_ATTRIB_NORMAL].Enabled; 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org flag = VERT_BIT_NORMAL; 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COLOR_ARRAY: 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org var = &arrayObj->VertexAttrib[VERT_ATTRIB_COLOR0].Enabled; 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org flag = VERT_BIT_COLOR0; 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INDEX_ARRAY: 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org var = &arrayObj->VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Enabled; 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org flag = VERT_BIT_COLOR_INDEX; 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_COORD_ARRAY: 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org var = &arrayObj->VertexAttrib[VERT_ATTRIB_TEX(ctx->Array.ActiveTexture)].Enabled; 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org flag = VERT_BIT_TEX(ctx->Array.ActiveTexture); 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_EDGE_FLAG_ARRAY: 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org var = &arrayObj->VertexAttrib[VERT_ATTRIB_EDGEFLAG].Enabled; 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org flag = VERT_BIT_EDGEFLAG; 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FOG_COORDINATE_ARRAY_EXT: 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org var = &arrayObj->VertexAttrib[VERT_ATTRIB_FOG].Enabled; 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org flag = VERT_BIT_FOG; 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SECONDARY_COLOR_ARRAY_EXT: 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org var = &arrayObj->VertexAttrib[VERT_ATTRIB_COLOR1].Enabled; 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org flag = VERT_BIT_COLOR1; 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if FEATURE_point_size_array 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_POINT_SIZE_ARRAY_OES: 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org var = &arrayObj->VertexAttrib[VERT_ATTRIB_POINT_SIZE].Enabled; 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org flag = VERT_BIT_POINT_SIZE; 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if FEATURE_NV_vertex_program 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_ATTRIB_ARRAY0_NV: 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_ATTRIB_ARRAY1_NV: 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_ATTRIB_ARRAY2_NV: 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_ATTRIB_ARRAY3_NV: 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_ATTRIB_ARRAY4_NV: 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_ATTRIB_ARRAY5_NV: 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_ATTRIB_ARRAY6_NV: 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_ATTRIB_ARRAY7_NV: 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_ATTRIB_ARRAY8_NV: 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_ATTRIB_ARRAY9_NV: 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_ATTRIB_ARRAY10_NV: 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_ATTRIB_ARRAY11_NV: 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_ATTRIB_ARRAY12_NV: 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_ATTRIB_ARRAY13_NV: 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_ATTRIB_ARRAY14_NV: 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_ATTRIB_ARRAY15_NV: 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION(NV_vertex_program, cap); 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint n = (GLint) cap - GL_VERTEX_ATTRIB_ARRAY0_NV; 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT(VERT_ATTRIB_GENERIC(n) < Elements(arrayObj->VertexAttrib)); 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org var = &arrayObj->VertexAttrib[VERT_ATTRIB_GENERIC(n)].Enabled; 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org flag = VERT_BIT_GENERIC(n); 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif /* FEATURE_NV_vertex_program */ 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL_NV_primitive_restart */ 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_PRIMITIVE_RESTART_NV: 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!ctx->Extensions.NV_primitive_restart) { 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org var = &ctx->Array.PrimitiveRestart; 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org flag = 0; 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (*var == state) 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_ARRAY); 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _ae_invalidate_state(ctx, _NEW_ARRAY); 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *var = state; 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (state) 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org arrayObj->_Enabled |= flag; 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org arrayObj->_Enabled &= ~flag; 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org arrayObj->NewArrays |= flag; 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Driver.Enable) { 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Driver.Enable( ctx, cap, state ); 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orginvalid_enum_error: 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_error(ctx, GL_INVALID_ENUM, "gl%sClientState(%s)", 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org state ? "Enable" : "Disable", _mesa_lookup_enum_by_nr(cap)); 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Enable GL capability. 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param cap state to enable/disable. 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Get's the current context, assures that we're outside glBegin()/glEnd() and 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * calls client_state(). 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid GLAPIENTRY 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_EnableClientState( GLenum cap ) 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_CURRENT_CONTEXT(ctx); 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT_OUTSIDE_BEGIN_END(ctx); 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org client_state( ctx, cap, GL_TRUE ); 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Disable GL capability. 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param cap state to enable/disable. 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Get's the current context, assures that we're outside glBegin()/glEnd() and 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * calls client_state(). 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid GLAPIENTRY 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_DisableClientState( GLenum cap ) 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_CURRENT_CONTEXT(ctx); 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT_OUTSIDE_BEGIN_END(ctx); 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org client_state( ctx, cap, GL_FALSE ); 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef CHECK_EXTENSION 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define CHECK_EXTENSION(EXTNAME, CAP) \ 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!ctx->Extensions.EXTNAME) { \ 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; \ 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define CHECK_EXTENSION2(EXT1, EXT2, CAP) \ 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!ctx->Extensions.EXT1 && !ctx->Extensions.EXT2) { \ 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; \ 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Return pointer to current texture unit for setting/getting coordinate 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * state. 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Note that we'll set GL_INVALID_OPERATION and return NULL if the active 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * texture unit is higher than the number of supported coordinate units. 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct gl_texture_unit * 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgget_texcoord_unit(struct gl_context *ctx) 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Texture.CurrentUnit >= ctx->Const.MaxTextureCoordUnits) { 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_error(ctx, GL_INVALID_OPERATION, "glEnable/Disable(texcoord unit)"); 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Helper function to enable or disable a texture target. 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param bit one of the TEXTURE_x_BIT values 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \return GL_TRUE if state is changing or GL_FALSE if no change 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLboolean 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgenable_texture(struct gl_context *ctx, GLboolean state, GLbitfield texBit) 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_texture_unit *texUnit = _mesa_get_current_tex_unit(ctx); 241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const GLbitfield newenabled = state 242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ? (texUnit->Enabled | texBit) : (texUnit->Enabled & ~texBit); 243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (texUnit->Enabled == newenabled) 245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_TEXTURE); 248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org texUnit->Enabled = newenabled; 249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_TRUE; 250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Helper function to enable or disable state. 255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param ctx GL context. 257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param cap the state to enable/disable 258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param state whether to enable or disable the specified capability. 259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Updates the current context and flushes the vertices as needed. For 261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * capabilities associated with extensions it verifies that those extensions 262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * are effectivly present before updating. Notifies the driver via 263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * dd_function_table::Enable. 264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state) 267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (MESA_VERBOSE & VERBOSE_API) 269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_debug(ctx, "%s %s (newstate is %x)\n", 270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org state ? "glEnable" : "glDisable", 271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_lookup_enum_by_nr(cap), 272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->NewState); 273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (cap) { 275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA_TEST: 276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) 277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Color.AlphaEnabled == state) 279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_COLOR); 281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Color.AlphaEnabled = state; 282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_AUTO_NORMAL: 284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Eval.AutoNormal == state) 287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_EVAL); 289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Eval.AutoNormal = state; 290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BLEND: 292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield newEnabled = 294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org state * ((1 << ctx->Const.MaxDrawBuffers) - 1); 295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (newEnabled != ctx->Color.BlendEnabled) { 296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_COLOR); 297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Color.BlendEnabled = newEnabled; 298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if FEATURE_userclip 302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_CLIP_DISTANCE0: 303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_CLIP_DISTANCE1: 304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_CLIP_DISTANCE2: 305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_CLIP_DISTANCE3: 306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_CLIP_DISTANCE4: 307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_CLIP_DISTANCE5: 308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_CLIP_DISTANCE6: 309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_CLIP_DISTANCE7: 310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const GLuint p = cap - GL_CLIP_DISTANCE0; 312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (p >= ctx->Const.MaxClipPlanes) 314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if ((ctx->Transform.ClipPlanesEnabled & (1 << p)) 317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org == ((GLuint) state << p)) 318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_TRANSFORM); 321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (state) { 323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Transform.ClipPlanesEnabled |= (1 << p); 324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_update_clip_plane(ctx, p); 325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Transform.ClipPlanesEnabled &= ~(1 << p); 328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COLOR_MATERIAL: 333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) 334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Light.ColorMaterialEnabled == state) 336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_LIGHT); 338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_CURRENT(ctx, 0); 339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Light.ColorMaterialEnabled = state; 340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (state) { 341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_update_color_material( ctx, 342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Current.Attrib[VERT_ATTRIB_COLOR0] ); 343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_CULL_FACE: 346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Polygon.CullFlag == state) 347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_POLYGON); 349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Polygon.CullFlag = state; 350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEPTH_TEST: 352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Depth.Test == state) 353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_DEPTH); 355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Depth.Test = state; 356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB: 358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_is_desktop_gl(ctx)) 359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Debug.SyncOutput = state; 361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DITHER: 363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Color.DitherFlag == state) 364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_COLOR); 366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Color.DitherFlag = state; 367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FOG: 369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) 370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Fog.Enabled == state) 372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_FOG); 374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Fog.Enabled = state; 375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LIGHT0: 377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LIGHT1: 378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LIGHT2: 379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LIGHT3: 380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LIGHT4: 381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LIGHT5: 382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LIGHT6: 383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LIGHT7: 384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) 385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Light.Light[cap-GL_LIGHT0].Enabled == state) 387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_LIGHT); 389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Light.Light[cap-GL_LIGHT0].Enabled = state; 390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (state) { 391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org insert_at_tail(&ctx->Light.EnabledList, 392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &ctx->Light.Light[cap-GL_LIGHT0]); 393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org remove_from_list(&ctx->Light.Light[cap-GL_LIGHT0]); 396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LIGHTING: 399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) 400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Light.Enabled == state) 402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_LIGHT); 404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Light.Enabled = state; 405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Light.Enabled && ctx->Light.Model.TwoSide) 406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->_TriangleCaps |= DD_TRI_LIGHT_TWOSIDE; 407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->_TriangleCaps &= ~DD_TRI_LIGHT_TWOSIDE; 409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LINE_SMOOTH: 411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES) 412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Line.SmoothFlag == state) 414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_LINE); 416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Line.SmoothFlag = state; 417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->_TriangleCaps ^= DD_LINE_SMOOTH; 418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LINE_STIPPLE: 420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Line.StippleFlag == state) 423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_LINE); 425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Line.StippleFlag = state; 426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->_TriangleCaps ^= DD_LINE_STIPPLE; 427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INDEX_LOGIC_OP: 429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Color.IndexLogicOpEnabled == state) 432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_COLOR); 434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Color.IndexLogicOpEnabled = state; 435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COLOR_LOGIC_OP: 437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES) 438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Color.ColorLogicOpEnabled == state) 440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_COLOR); 442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Color.ColorLogicOpEnabled = state; 443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_COLOR_4: 445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Eval.Map1Color4 == state) 448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_EVAL); 450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Eval.Map1Color4 = state; 451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_INDEX: 453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Eval.Map1Index == state) 456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_EVAL); 458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Eval.Map1Index = state; 459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_NORMAL: 461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Eval.Map1Normal == state) 464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_EVAL); 466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Eval.Map1Normal = state; 467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_TEXTURE_COORD_1: 469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Eval.Map1TextureCoord1 == state) 472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_EVAL); 474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Eval.Map1TextureCoord1 = state; 475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_TEXTURE_COORD_2: 477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Eval.Map1TextureCoord2 == state) 480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_EVAL); 482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Eval.Map1TextureCoord2 = state; 483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_TEXTURE_COORD_3: 485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Eval.Map1TextureCoord3 == state) 488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_EVAL); 490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Eval.Map1TextureCoord3 = state; 491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_TEXTURE_COORD_4: 493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Eval.Map1TextureCoord4 == state) 496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_EVAL); 498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Eval.Map1TextureCoord4 = state; 499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_3: 501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Eval.Map1Vertex3 == state) 504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_EVAL); 506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Eval.Map1Vertex3 = state; 507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_4: 509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Eval.Map1Vertex4 == state) 512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_EVAL); 514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Eval.Map1Vertex4 = state; 515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_COLOR_4: 517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Eval.Map2Color4 == state) 520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_EVAL); 522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Eval.Map2Color4 = state; 523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_INDEX: 525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Eval.Map2Index == state) 528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_EVAL); 530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Eval.Map2Index = state; 531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_NORMAL: 533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Eval.Map2Normal == state) 536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_EVAL); 538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Eval.Map2Normal = state; 539f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 540f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_TEXTURE_COORD_1: 541f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 542f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 543f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Eval.Map2TextureCoord1 == state) 544f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 545f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_EVAL); 546f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Eval.Map2TextureCoord1 = state; 547f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 548f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_TEXTURE_COORD_2: 549f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 550f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 551f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Eval.Map2TextureCoord2 == state) 552f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 553f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_EVAL); 554f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Eval.Map2TextureCoord2 = state; 555f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 556f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_TEXTURE_COORD_3: 557f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 558f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 559f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Eval.Map2TextureCoord3 == state) 560f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 561f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_EVAL); 562f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Eval.Map2TextureCoord3 = state; 563f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 564f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_TEXTURE_COORD_4: 565f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 566f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 567f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Eval.Map2TextureCoord4 == state) 568f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 569f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_EVAL); 570f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Eval.Map2TextureCoord4 = state; 571f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 572f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_3: 573f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 574f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 575f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Eval.Map2Vertex3 == state) 576f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 577f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_EVAL); 578f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Eval.Map2Vertex3 = state; 579f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 580f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_4: 581f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 582f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 583f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Eval.Map2Vertex4 == state) 584f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 585f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_EVAL); 586f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Eval.Map2Vertex4 = state; 587f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 588f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_NORMALIZE: 589f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) 590f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 591f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Transform.Normalize == state) 592f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 593f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_TRANSFORM); 594f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Transform.Normalize = state; 595f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 596f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_POINT_SMOOTH: 597f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) 598f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 599f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Point.SmoothFlag == state) 600f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 601f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_POINT); 602f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Point.SmoothFlag = state; 603f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->_TriangleCaps ^= DD_POINT_SMOOTH; 604f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 605f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_POLYGON_SMOOTH: 606f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_is_desktop_gl(ctx)) 607f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 608f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Polygon.SmoothFlag == state) 609f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 610f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_POLYGON); 611f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Polygon.SmoothFlag = state; 612f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->_TriangleCaps ^= DD_TRI_SMOOTH; 613f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 614f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_POLYGON_STIPPLE: 615f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 616f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 617f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Polygon.StippleFlag == state) 618f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 619f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_POLYGON); 620f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Polygon.StippleFlag = state; 621f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->_TriangleCaps ^= DD_TRI_STIPPLE; 622f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 623f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_POLYGON_OFFSET_POINT: 624f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_is_desktop_gl(ctx)) 625f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 626f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Polygon.OffsetPoint == state) 627f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 628f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_POLYGON); 629f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Polygon.OffsetPoint = state; 630f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 631f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_POLYGON_OFFSET_LINE: 632f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_is_desktop_gl(ctx)) 633f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 634f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Polygon.OffsetLine == state) 635f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 636f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_POLYGON); 637f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Polygon.OffsetLine = state; 638f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 639f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_POLYGON_OFFSET_FILL: 640f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Polygon.OffsetFill == state) 641f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 642f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_POLYGON); 643f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Polygon.OffsetFill = state; 644f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 645f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RESCALE_NORMAL_EXT: 646f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) 647f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 648f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Transform.RescaleNormals == state) 649f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 650f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_TRANSFORM); 651f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Transform.RescaleNormals = state; 652f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 653f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SCISSOR_TEST: 654f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Scissor.Enabled == state) 655f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 656f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_SCISSOR); 657f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Scissor.Enabled = state; 658f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 659f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_STENCIL_TEST: 660f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Stencil.Enabled == state) 661f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 662f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_STENCIL); 663f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Stencil.Enabled = state; 664f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 665f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_1D: 666f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 667f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 668f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!enable_texture(ctx, state, TEXTURE_1D_BIT)) { 669f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 670f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 671f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 672f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_2D: 673f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) 674f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 675f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!enable_texture(ctx, state, TEXTURE_2D_BIT)) { 676f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 677f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 678f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 679f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_3D: 680f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) 681f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 682f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!enable_texture(ctx, state, TEXTURE_3D_BIT)) { 683f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 684f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 685f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 686f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_GEN_S: 687f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_GEN_T: 688f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_GEN_R: 689f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_GEN_Q: 690f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 691f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_texture_unit *texUnit = get_texcoord_unit(ctx); 692f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 693f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 694f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 695f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 696f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (texUnit) { 697f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield coordBit = S_BIT << (cap - GL_TEXTURE_GEN_S); 698f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield newenabled = texUnit->TexGenEnabled & ~coordBit; 699f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (state) 700f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org newenabled |= coordBit; 701f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (texUnit->TexGenEnabled == newenabled) 702f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 703f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_TEXTURE); 704f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org texUnit->TexGenEnabled = newenabled; 705f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 706f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 707f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 708f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 709f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if FEATURE_ES1 710f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_GEN_STR_OES: 711f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* disable S, T, and R at the same time */ 712f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 713f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_texture_unit *texUnit = get_texcoord_unit(ctx); 714f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 715f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGLES) 716f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 717f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 718f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (texUnit) { 719f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint newenabled = 720f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org texUnit->TexGenEnabled & ~STR_BITS; 721f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (state) 722f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org newenabled |= STR_BITS; 723f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (texUnit->TexGenEnabled == newenabled) 724f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 725f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_TEXTURE); 726f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org texUnit->TexGenEnabled = newenabled; 727f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 728f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 729f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 730f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 731f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 732f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* client-side state */ 733f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_ARRAY: 734f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_NORMAL_ARRAY: 735f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COLOR_ARRAY: 736f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INDEX_ARRAY: 737f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_COORD_ARRAY: 738f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_EDGE_FLAG_ARRAY: 739f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FOG_COORDINATE_ARRAY_EXT: 740f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SECONDARY_COLOR_ARRAY_EXT: 741f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_POINT_SIZE_ARRAY_OES: 742f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org client_state( ctx, cap, state ); 743f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 744f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 745f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL_ARB_texture_cube_map */ 746f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_CUBE_MAP_ARB: 747f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) 748f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 749f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION(ARB_texture_cube_map, cap); 750f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!enable_texture(ctx, state, TEXTURE_CUBE_BIT)) { 751f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 752f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 753f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 754f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 755f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL_EXT_secondary_color */ 756f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COLOR_SUM_EXT: 757f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 758f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 759f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION2(EXT_secondary_color, ARB_vertex_program, cap); 760f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Fog.ColorSumEnabled == state) 761f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 762f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_FOG); 763f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Fog.ColorSumEnabled = state; 764f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 765f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 766f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL_ARB_multisample */ 767f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MULTISAMPLE_ARB: 768f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES) 769f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 770f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Multisample.Enabled == state) 771f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 772f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_MULTISAMPLE); 773f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Multisample.Enabled = state; 774f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 775f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SAMPLE_ALPHA_TO_COVERAGE_ARB: 776f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Multisample.SampleAlphaToCoverage == state) 777f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 778f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_MULTISAMPLE); 779f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Multisample.SampleAlphaToCoverage = state; 780f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 781f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SAMPLE_ALPHA_TO_ONE_ARB: 782f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES) 783f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 784f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Multisample.SampleAlphaToOne == state) 785f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 786f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_MULTISAMPLE); 787f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Multisample.SampleAlphaToOne = state; 788f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 789f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SAMPLE_COVERAGE_ARB: 790f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Multisample.SampleCoverage == state) 791f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 792f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_MULTISAMPLE); 793f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Multisample.SampleCoverage = state; 794f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 795f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SAMPLE_COVERAGE_INVERT_ARB: 796f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_is_desktop_gl(ctx)) 797f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 798f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Multisample.SampleCoverageInvert == state) 799f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 800f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_MULTISAMPLE); 801f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Multisample.SampleCoverageInvert = state; 802f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 803f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 804f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL_IBM_rasterpos_clip */ 805f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RASTER_POSITION_UNCLIPPED_IBM: 806f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 807f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 808f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION(IBM_rasterpos_clip, cap); 809f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Transform.RasterPositionUnclipped == state) 810f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 811f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_TRANSFORM); 812f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Transform.RasterPositionUnclipped = state; 813f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 814f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 815f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL_NV_point_sprite */ 816f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_POINT_SPRITE_NV: 817f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) 818f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 819f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION2(NV_point_sprite, ARB_point_sprite, cap); 820f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Point.PointSprite == state) 821f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 822f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_POINT); 823f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Point.PointSprite = state; 824f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 825f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 826f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if FEATURE_NV_vertex_program || FEATURE_ARB_vertex_program 827f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_PROGRAM_ARB: 828f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 829f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 830f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION2(ARB_vertex_program, NV_vertex_program, cap); 831f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->VertexProgram.Enabled == state) 832f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 833f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_PROGRAM); 834f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->VertexProgram.Enabled = state; 835f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 836f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_PROGRAM_POINT_SIZE_ARB: 837f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* This was added with ARB_vertex_program, but it is also used with 838f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLSL vertex shaders on desktop. 839f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 840f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_is_desktop_gl(ctx)) 841f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 842f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION2(ARB_vertex_program, NV_vertex_program, cap); 843f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->VertexProgram.PointSizeEnabled == state) 844f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 845f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_PROGRAM); 846f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->VertexProgram.PointSizeEnabled = state; 847f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 848f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_PROGRAM_TWO_SIDE_ARB: 849f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 850f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 851f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION2(ARB_vertex_program, NV_vertex_program, cap); 852f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->VertexProgram.TwoSideEnabled == state) 853f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 854f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_PROGRAM); 855f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->VertexProgram.TwoSideEnabled = state; 856f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 857f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 858f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if FEATURE_NV_vertex_program 859f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_ATTRIB0_4_NV: 860f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_ATTRIB1_4_NV: 861f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_ATTRIB2_4_NV: 862f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_ATTRIB3_4_NV: 863f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_ATTRIB4_4_NV: 864f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_ATTRIB5_4_NV: 865f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_ATTRIB6_4_NV: 866f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_ATTRIB7_4_NV: 867f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_ATTRIB8_4_NV: 868f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_ATTRIB9_4_NV: 869f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_ATTRIB10_4_NV: 870f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_ATTRIB11_4_NV: 871f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_ATTRIB12_4_NV: 872f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_ATTRIB13_4_NV: 873f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_ATTRIB14_4_NV: 874f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_ATTRIB15_4_NV: 875f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 876f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 877f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION(NV_vertex_program, cap); 878f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 879f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const GLuint map = (GLuint) (cap - GL_MAP1_VERTEX_ATTRIB0_4_NV); 880f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_EVAL); 881f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Eval.Map1Attrib[map] = state; 882f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 883f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 884f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_ATTRIB0_4_NV: 885f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_ATTRIB1_4_NV: 886f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_ATTRIB2_4_NV: 887f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_ATTRIB3_4_NV: 888f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_ATTRIB4_4_NV: 889f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_ATTRIB5_4_NV: 890f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_ATTRIB6_4_NV: 891f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_ATTRIB7_4_NV: 892f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_ATTRIB8_4_NV: 893f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_ATTRIB9_4_NV: 894f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_ATTRIB10_4_NV: 895f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_ATTRIB11_4_NV: 896f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_ATTRIB12_4_NV: 897f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_ATTRIB13_4_NV: 898f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_ATTRIB14_4_NV: 899f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_ATTRIB15_4_NV: 900f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 901f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 902f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION(NV_vertex_program, cap); 903f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 904f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const GLuint map = (GLuint) (cap - GL_MAP2_VERTEX_ATTRIB0_4_NV); 905f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_EVAL); 906f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Eval.Map2Attrib[map] = state; 907f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 908f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 909f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif /* FEATURE_NV_vertex_program */ 910f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 911f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if FEATURE_NV_fragment_program 912f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FRAGMENT_PROGRAM_NV: 913f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 914f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 915f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION(NV_fragment_program, cap); 916f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->FragmentProgram.Enabled == state) 917f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 918f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_PROGRAM); 919f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->FragmentProgram.Enabled = state; 920f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 921f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif /* FEATURE_NV_fragment_program */ 922f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 923f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL_NV_texture_rectangle */ 924f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_RECTANGLE_NV: 925f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 926f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 927f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION(NV_texture_rectangle, cap); 928f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!enable_texture(ctx, state, TEXTURE_RECT_BIT)) { 929f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 930f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 931f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 932f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 933f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL_EXT_stencil_two_side */ 934f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_STENCIL_TEST_TWO_SIDE_EXT: 935f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 936f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 937f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION(EXT_stencil_two_side, cap); 938f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Stencil.TestTwoSide == state) 939f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 940f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_STENCIL); 941f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Stencil.TestTwoSide = state; 942f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (state) { 943f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Stencil._BackFace = 2; 944f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else { 945f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Stencil._BackFace = 1; 946f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 947f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 948f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 949f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if FEATURE_ARB_fragment_program 950f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FRAGMENT_PROGRAM_ARB: 951f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 952f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 953f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION(ARB_fragment_program, cap); 954f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->FragmentProgram.Enabled == state) 955f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 956f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_PROGRAM); 957f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->FragmentProgram.Enabled = state; 958f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 959f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif /* FEATURE_ARB_fragment_program */ 960f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 961f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL_EXT_depth_bounds_test */ 962f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEPTH_BOUNDS_TEST_EXT: 963f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_is_desktop_gl(ctx)) 964f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 965f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION(EXT_depth_bounds_test, cap); 966f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Depth.BoundsTest == state) 967f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 968f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_DEPTH); 969f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Depth.BoundsTest = state; 970f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 971f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 972f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEPTH_CLAMP: 973f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_is_desktop_gl(ctx)) 974f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 975f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION(ARB_depth_clamp, cap); 976f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Transform.DepthClamp == state) 977f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 978f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_TRANSFORM); 979f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Transform.DepthClamp = state; 980f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 981f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 982f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if FEATURE_ATI_fragment_shader 983f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FRAGMENT_SHADER_ATI: 984f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 985f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 986f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION(ATI_fragment_shader, cap); 987f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->ATIFragmentShader.Enabled == state) 988f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 989f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_PROGRAM); 990f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->ATIFragmentShader.Enabled = state; 991f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 992f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 993f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 994f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL_MESA_texture_array */ 995f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_1D_ARRAY_EXT: 996f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 997f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 998f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION(MESA_texture_array, cap); 999f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!enable_texture(ctx, state, TEXTURE_1D_ARRAY_BIT)) { 1000f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 1001f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1002f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1003f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1004f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_2D_ARRAY_EXT: 1005f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1006f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1007f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION(MESA_texture_array, cap); 1008f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!enable_texture(ctx, state, TEXTURE_2D_ARRAY_BIT)) { 1009f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 1010f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1011f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1012f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1013f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_CUBE_MAP_SEAMLESS: 1014f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_is_desktop_gl(ctx)) 1015f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1016f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION(ARB_seamless_cube_map, cap); 1017f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Texture.CubeMapSeamless != state) { 1018f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_TEXTURE); 1019f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Texture.CubeMapSeamless = state; 1020f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1021f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1022f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1023f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if FEATURE_EXT_transform_feedback 1024f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RASTERIZER_DISCARD: 1025f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx)) 1026f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1027f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION(EXT_transform_feedback, cap); 1028f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->RasterDiscard != state) { 1029f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_RASTERIZER_DISCARD); 1030f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->RasterDiscard = state; 1031f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1032f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1033f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 1034f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1035f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL 3.1 primitive restart. Note: this enum is different from 1036f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GL_PRIMITIVE_RESTART_NV (which is client state). 1037f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1038f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_PRIMITIVE_RESTART: 1039f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_is_desktop_gl(ctx) || ctx->Version < 31) { 1040f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1041f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1042f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Array.PrimitiveRestart != state) { 1043f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_TRANSFORM); 1044f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Array.PrimitiveRestart = state; 1045f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1046f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1047f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1048f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL3.0 - GL_framebuffer_sRGB */ 1049f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FRAMEBUFFER_SRGB_EXT: 1050f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx)) 1051f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1052f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION(EXT_framebuffer_sRGB, cap); 1053f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_BUFFERS); 1054f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Color.sRGBEnabled = state; 1055f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1056f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1057f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL_OES_EGL_image_external */ 1058f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_EXTERNAL_OES: 1059f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_is_gles(ctx)) 1060f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1061f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION(OES_EGL_image_external, cap); 1062f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!enable_texture(ctx, state, TEXTURE_EXTERNAL_BIT)) { 1063f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 1064f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1065f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1066f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1067f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 1068f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1069f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1070f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1071f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Driver.Enable) { 1072f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Driver.Enable( ctx, cap, state ); 1073f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1074f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1075f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 1076f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1077f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orginvalid_enum_error: 1078f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_error(ctx, GL_INVALID_ENUM, "gl%s(%s)", 1079f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org state ? "Enable" : "Disable", _mesa_lookup_enum_by_nr(cap)); 1080f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1081f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1082f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1083f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1084f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Enable GL capability. Called by glEnable() 1085f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param cap state to enable. 1086f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1087f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid GLAPIENTRY 1088f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_Enable( GLenum cap ) 1089f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1090f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_CURRENT_CONTEXT(ctx); 1091f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT_OUTSIDE_BEGIN_END(ctx); 1092f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1093f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_set_enable( ctx, cap, GL_TRUE ); 1094f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1095f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1096f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1097f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1098f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Disable GL capability. Called by glDisable() 1099f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param cap state to disable. 1100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid GLAPIENTRY 1102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_Disable( GLenum cap ) 1103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_CURRENT_CONTEXT(ctx); 1105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT_OUTSIDE_BEGIN_END(ctx); 1106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_set_enable( ctx, cap, GL_FALSE ); 1108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Enable/disable an indexed state var. 1114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 1116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_set_enablei(struct gl_context *ctx, GLenum cap, 1117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint index, GLboolean state) 1118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT(state == 0 || state == 1); 1120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (cap) { 1121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BLEND: 1122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!ctx->Extensions.EXT_draw_buffers2) { 1123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (index >= ctx->Const.MaxDrawBuffers) { 1126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_error(ctx, GL_INVALID_VALUE, "%s(index=%u)", 1127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org state ? "glEnableIndexed" : "glDisableIndexed", index); 1128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 1129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (((ctx->Color.BlendEnabled >> index) & 1) != state) { 1131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FLUSH_VERTICES(ctx, _NEW_COLOR); 1132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (state) 1133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Color.BlendEnabled |= (1 << index); 1134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 1135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Color.BlendEnabled &= ~(1 << index); 1136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 1139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 1142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orginvalid_enum_error: 1144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_error(ctx, GL_INVALID_ENUM, "%s(cap=%s)", 1145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org state ? "glEnablei" : "glDisablei", 1146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_lookup_enum_by_nr(cap)); 1147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid GLAPIENTRY 1151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_DisableIndexed( GLenum cap, GLuint index ) 1152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_CURRENT_CONTEXT(ctx); 1154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT_OUTSIDE_BEGIN_END(ctx); 1155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_set_enablei(ctx, cap, index, GL_FALSE); 1156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid GLAPIENTRY 1160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_EnableIndexed( GLenum cap, GLuint index ) 1161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_CURRENT_CONTEXT(ctx); 1163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT_OUTSIDE_BEGIN_END(ctx); 1164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_set_enablei(ctx, cap, index, GL_TRUE); 1165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgGLboolean GLAPIENTRY 1169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_IsEnabledIndexed( GLenum cap, GLuint index ) 1170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_CURRENT_CONTEXT(ctx); 1172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, 0); 1173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (cap) { 1174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BLEND: 1175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (index >= ctx->Const.MaxDrawBuffers) { 1176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_error(ctx, GL_INVALID_VALUE, "glIsEnabledIndexed(index=%u)", 1177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org index); 1178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 1179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (ctx->Color.BlendEnabled >> index) & 1; 1181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 1182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_error(ctx, GL_INVALID_ENUM, "glIsEnabledIndexed(cap=%s)", 1183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_lookup_enum_by_nr(cap)); 1184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 1185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef CHECK_EXTENSION 1192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define CHECK_EXTENSION(EXTNAME) \ 1193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!ctx->Extensions.EXTNAME) { \ 1194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; \ 1195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef CHECK_EXTENSION2 1198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define CHECK_EXTENSION2(EXT1, EXT2) \ 1199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!ctx->Extensions.EXT1 && !ctx->Extensions.EXT2) { \ 1200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; \ 1201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Helper function to determine whether a texture target is enabled. 1206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLboolean 1208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgis_texture_enabled(struct gl_context *ctx, GLbitfield bit) 1209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct gl_texture_unit *const texUnit = 1211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; 1212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (texUnit->Enabled & bit) ? GL_TRUE : GL_FALSE; 1213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Return simple enable/disable state. 1218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 1219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param cap state variable to query. 1220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 1221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Returns the state of the specified capability from the current GL context. 1222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * For the capabilities associated with extensions verifies that those 1223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * extensions are effectively present before reporting. 1224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgGLboolean GLAPIENTRY 1226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_IsEnabled( GLenum cap ) 1227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GET_CURRENT_CONTEXT(ctx); 1229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, 0); 1230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (cap) { 1232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_ALPHA_TEST: 1233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) 1234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Color.AlphaEnabled; 1236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_AUTO_NORMAL: 1237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Eval.AutoNormal; 1240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_BLEND: 1241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Color.BlendEnabled & 1; /* return state for buffer[0] */ 1242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_CLIP_DISTANCE0: 1243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_CLIP_DISTANCE1: 1244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_CLIP_DISTANCE2: 1245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_CLIP_DISTANCE3: 1246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_CLIP_DISTANCE4: 1247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_CLIP_DISTANCE5: 1248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_CLIP_DISTANCE6: 1249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_CLIP_DISTANCE7: { 1250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const GLuint p = cap - GL_CLIP_DISTANCE0; 1251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (p >= ctx->Const.MaxClipPlanes) 1253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (ctx->Transform.ClipPlanesEnabled >> p) & 1; 1256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COLOR_MATERIAL: 1258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) 1259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Light.ColorMaterialEnabled; 1261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_CULL_FACE: 1262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Polygon.CullFlag; 1263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB: 1264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_is_desktop_gl(ctx)) 1265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Debug.SyncOutput; 1267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEPTH_TEST: 1268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Depth.Test; 1269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DITHER: 1270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Color.DitherFlag; 1271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FOG: 1272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) 1273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Fog.Enabled; 1275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LIGHTING: 1276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) 1277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Light.Enabled; 1279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LIGHT0: 1280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LIGHT1: 1281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LIGHT2: 1282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LIGHT3: 1283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LIGHT4: 1284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LIGHT5: 1285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LIGHT6: 1286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LIGHT7: 1287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) 1288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Light.Light[cap-GL_LIGHT0].Enabled; 1290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LINE_SMOOTH: 1291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES) 1292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Line.SmoothFlag; 1294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_LINE_STIPPLE: 1295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Line.StippleFlag; 1298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INDEX_LOGIC_OP: 1299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Color.IndexLogicOpEnabled; 1302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COLOR_LOGIC_OP: 1303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES) 1304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Color.ColorLogicOpEnabled; 1306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_COLOR_4: 1307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Eval.Map1Color4; 1310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_INDEX: 1311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Eval.Map1Index; 1314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_NORMAL: 1315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Eval.Map1Normal; 1318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_TEXTURE_COORD_1: 1319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Eval.Map1TextureCoord1; 1322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_TEXTURE_COORD_2: 1323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Eval.Map1TextureCoord2; 1326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_TEXTURE_COORD_3: 1327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Eval.Map1TextureCoord3; 1330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_TEXTURE_COORD_4: 1331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Eval.Map1TextureCoord4; 1334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_3: 1335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Eval.Map1Vertex3; 1338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_4: 1339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Eval.Map1Vertex4; 1342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_COLOR_4: 1343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Eval.Map2Color4; 1346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_INDEX: 1347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Eval.Map2Index; 1350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_NORMAL: 1351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Eval.Map2Normal; 1354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_TEXTURE_COORD_1: 1355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Eval.Map2TextureCoord1; 1358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_TEXTURE_COORD_2: 1359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Eval.Map2TextureCoord2; 1362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_TEXTURE_COORD_3: 1363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Eval.Map2TextureCoord3; 1366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_TEXTURE_COORD_4: 1367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Eval.Map2TextureCoord4; 1370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_3: 1371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Eval.Map2Vertex3; 1374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_4: 1375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Eval.Map2Vertex4; 1378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_NORMALIZE: 1379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) 1380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Transform.Normalize; 1382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_POINT_SMOOTH: 1383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) 1384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Point.SmoothFlag; 1386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_POLYGON_SMOOTH: 1387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_is_desktop_gl(ctx)) 1388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Polygon.SmoothFlag; 1390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_POLYGON_STIPPLE: 1391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Polygon.StippleFlag; 1394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_POLYGON_OFFSET_POINT: 1395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_is_desktop_gl(ctx)) 1396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Polygon.OffsetPoint; 1398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_POLYGON_OFFSET_LINE: 1399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_is_desktop_gl(ctx)) 1400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Polygon.OffsetLine; 1402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_POLYGON_OFFSET_FILL: 1403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Polygon.OffsetFill; 1404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RESCALE_NORMAL_EXT: 1405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) 1406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Transform.RescaleNormals; 1408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SCISSOR_TEST: 1409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Scissor.Enabled; 1410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_STENCIL_TEST: 1411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Stencil.Enabled; 1412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_1D: 1413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return is_texture_enabled(ctx, TEXTURE_1D_BIT); 1416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_2D: 1417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) 1418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return is_texture_enabled(ctx, TEXTURE_2D_BIT); 1420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_3D: 1421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) 1422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return is_texture_enabled(ctx, TEXTURE_3D_BIT); 1424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_GEN_S: 1425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_GEN_T: 1426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_GEN_R: 1427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_GEN_Q: 1428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 1429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct gl_texture_unit *texUnit = get_texcoord_unit(ctx); 1430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (texUnit) { 1435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield coordBit = S_BIT << (cap - GL_TEXTURE_GEN_S); 1436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (texUnit->TexGenEnabled & coordBit) ? GL_TRUE : GL_FALSE; 1437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 1440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if FEATURE_ES1 1441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_GEN_STR_OES: 1442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 1443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct gl_texture_unit *texUnit = get_texcoord_unit(ctx); 1444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGLES) 1446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (texUnit) { 1449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (texUnit->TexGenEnabled & STR_BITS) == STR_BITS 1450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ? GL_TRUE : GL_FALSE; 1451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 1454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* client-side state */ 1456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_ARRAY: 1457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) 1458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_POS].Enabled != 0); 1460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_NORMAL_ARRAY: 1461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) 1462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_NORMAL].Enabled != 0); 1464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COLOR_ARRAY: 1465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) 1466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR0].Enabled != 0); 1468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_INDEX_ARRAY: 1469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Enabled != 0); 1472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_COORD_ARRAY: 1473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) 1474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_TEX(ctx->Array.ActiveTexture)] 1476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org .Enabled != 0); 1477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_EDGE_FLAG_ARRAY: 1478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_EDGEFLAG].Enabled != 0); 1481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FOG_COORDINATE_ARRAY_EXT: 1482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION(EXT_fog_coord); 1485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_FOG].Enabled != 0); 1486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SECONDARY_COLOR_ARRAY_EXT: 1487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION(EXT_secondary_color); 1490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR1].Enabled != 0); 1491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if FEATURE_point_size_array 1492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_POINT_SIZE_ARRAY_OES: 1493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGLES) 1494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_POINT_SIZE].Enabled != 0); 1496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 1497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL_ARB_texture_cube_map */ 1499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_CUBE_MAP_ARB: 1500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION(ARB_texture_cube_map); 1501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return is_texture_enabled(ctx, TEXTURE_CUBE_BIT); 1502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL_EXT_secondary_color */ 1504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_COLOR_SUM_EXT: 1505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION2(EXT_secondary_color, ARB_vertex_program); 1508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Fog.ColorSumEnabled; 1509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL_ARB_multisample */ 1511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MULTISAMPLE_ARB: 1512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES) 1513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Multisample.Enabled; 1515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SAMPLE_ALPHA_TO_COVERAGE_ARB: 1516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Multisample.SampleAlphaToCoverage; 1517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SAMPLE_ALPHA_TO_ONE_ARB: 1518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES) 1519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Multisample.SampleAlphaToOne; 1521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SAMPLE_COVERAGE_ARB: 1522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Multisample.SampleCoverage; 1523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_SAMPLE_COVERAGE_INVERT_ARB: 1524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_is_desktop_gl(ctx)) 1525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Multisample.SampleCoverageInvert; 1527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL_IBM_rasterpos_clip */ 1529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RASTER_POSITION_UNCLIPPED_IBM: 1530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION(IBM_rasterpos_clip); 1533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Transform.RasterPositionUnclipped; 1534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL_NV_point_sprite */ 1536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_POINT_SPRITE_NV: 1537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) 1538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1539f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION2(NV_point_sprite, ARB_point_sprite) 1540f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Point.PointSprite; 1541f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1542f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if FEATURE_NV_vertex_program || FEATURE_ARB_vertex_program 1543f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_PROGRAM_ARB: 1544f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1545f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1546f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION2(ARB_vertex_program, NV_vertex_program); 1547f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->VertexProgram.Enabled; 1548f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_PROGRAM_POINT_SIZE_ARB: 1549f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* This was added with ARB_vertex_program, but it is also used with 1550f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLSL vertex shaders on desktop. 1551f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1552f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_is_desktop_gl(ctx)) 1553f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1554f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION2(ARB_vertex_program, NV_vertex_program); 1555f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->VertexProgram.PointSizeEnabled; 1556f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_PROGRAM_TWO_SIDE_ARB: 1557f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1558f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1559f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION2(ARB_vertex_program, NV_vertex_program); 1560f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->VertexProgram.TwoSideEnabled; 1561f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 1562f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if FEATURE_NV_vertex_program 1563f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_ATTRIB_ARRAY0_NV: 1564f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_ATTRIB_ARRAY1_NV: 1565f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_ATTRIB_ARRAY2_NV: 1566f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_ATTRIB_ARRAY3_NV: 1567f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_ATTRIB_ARRAY4_NV: 1568f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_ATTRIB_ARRAY5_NV: 1569f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_ATTRIB_ARRAY6_NV: 1570f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_ATTRIB_ARRAY7_NV: 1571f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_ATTRIB_ARRAY8_NV: 1572f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_ATTRIB_ARRAY9_NV: 1573f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_ATTRIB_ARRAY10_NV: 1574f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_ATTRIB_ARRAY11_NV: 1575f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_ATTRIB_ARRAY12_NV: 1576f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_ATTRIB_ARRAY13_NV: 1577f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_ATTRIB_ARRAY14_NV: 1578f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_VERTEX_ATTRIB_ARRAY15_NV: 1579f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1580f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1581f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION(NV_vertex_program); 1582f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 1583f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint n = (GLint) cap - GL_VERTEX_ATTRIB_ARRAY0_NV; 1584f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT(VERT_ATTRIB_GENERIC(n) < Elements(ctx->Array.ArrayObj->VertexAttrib)); 1585f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_GENERIC(n)].Enabled != 0); 1586f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1587f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_ATTRIB0_4_NV: 1588f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_ATTRIB1_4_NV: 1589f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_ATTRIB2_4_NV: 1590f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_ATTRIB3_4_NV: 1591f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_ATTRIB4_4_NV: 1592f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_ATTRIB5_4_NV: 1593f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_ATTRIB6_4_NV: 1594f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_ATTRIB7_4_NV: 1595f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_ATTRIB8_4_NV: 1596f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_ATTRIB9_4_NV: 1597f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_ATTRIB10_4_NV: 1598f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_ATTRIB11_4_NV: 1599f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_ATTRIB12_4_NV: 1600f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_ATTRIB13_4_NV: 1601f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_ATTRIB14_4_NV: 1602f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP1_VERTEX_ATTRIB15_4_NV: 1603f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1604f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1605f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION(NV_vertex_program); 1606f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 1607f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const GLuint map = (GLuint) (cap - GL_MAP1_VERTEX_ATTRIB0_4_NV); 1608f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Eval.Map1Attrib[map]; 1609f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1610f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_ATTRIB0_4_NV: 1611f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_ATTRIB1_4_NV: 1612f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_ATTRIB2_4_NV: 1613f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_ATTRIB3_4_NV: 1614f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_ATTRIB4_4_NV: 1615f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_ATTRIB5_4_NV: 1616f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_ATTRIB6_4_NV: 1617f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_ATTRIB7_4_NV: 1618f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_ATTRIB8_4_NV: 1619f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_ATTRIB9_4_NV: 1620f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_ATTRIB10_4_NV: 1621f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_ATTRIB11_4_NV: 1622f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_ATTRIB12_4_NV: 1623f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_ATTRIB13_4_NV: 1624f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_ATTRIB14_4_NV: 1625f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_MAP2_VERTEX_ATTRIB15_4_NV: 1626f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1627f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1628f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION(NV_vertex_program); 1629f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 1630f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const GLuint map = (GLuint) (cap - GL_MAP2_VERTEX_ATTRIB0_4_NV); 1631f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Eval.Map2Attrib[map]; 1632f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1633f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif /* FEATURE_NV_vertex_program */ 1634f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1635f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if FEATURE_NV_fragment_program 1636f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FRAGMENT_PROGRAM_NV: 1637f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1638f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1639f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION(NV_fragment_program); 1640f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->FragmentProgram.Enabled; 1641f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif /* FEATURE_NV_fragment_program */ 1642f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1643f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL_NV_texture_rectangle */ 1644f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_RECTANGLE_NV: 1645f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1646f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1647f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION(NV_texture_rectangle); 1648f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return is_texture_enabled(ctx, TEXTURE_RECT_BIT); 1649f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1650f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL_EXT_stencil_two_side */ 1651f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_STENCIL_TEST_TWO_SIDE_EXT: 1652f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1653f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1654f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION(EXT_stencil_two_side); 1655f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Stencil.TestTwoSide; 1656f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1657f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if FEATURE_ARB_fragment_program 1658f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FRAGMENT_PROGRAM_ARB: 1659f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1660f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1661f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->FragmentProgram.Enabled; 1662f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif /* FEATURE_ARB_fragment_program */ 1663f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1664f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL_EXT_depth_bounds_test */ 1665f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEPTH_BOUNDS_TEST_EXT: 1666f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_is_desktop_gl(ctx)) 1667f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1668f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION(EXT_depth_bounds_test); 1669f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Depth.BoundsTest; 1670f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1671f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL_ARB_depth_clamp */ 1672f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_DEPTH_CLAMP: 1673f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_is_desktop_gl(ctx)) 1674f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1675f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION(ARB_depth_clamp); 1676f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Transform.DepthClamp; 1677f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1678f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if FEATURE_ATI_fragment_shader 1679f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FRAGMENT_SHADER_ATI: 1680f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL) 1681f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1682f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION(ATI_fragment_shader); 1683f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->ATIFragmentShader.Enabled; 1684f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif /* FEATURE_ATI_fragment_shader */ 1685f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1686f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_CUBE_MAP_SEAMLESS: 1687f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_is_desktop_gl(ctx)) 1688f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1689f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION(ARB_seamless_cube_map); 1690f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Texture.CubeMapSeamless; 1691f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1692f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if FEATURE_EXT_transform_feedback 1693f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_RASTERIZER_DISCARD: 1694f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx)) 1695f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1696f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION(EXT_transform_feedback); 1697f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->RasterDiscard; 1698f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 1699f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1700f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL_NV_primitive_restart */ 1701f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_PRIMITIVE_RESTART_NV: 1702f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->API != API_OPENGL || !ctx->Extensions.NV_primitive_restart) { 1703f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1704f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1705f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Array.PrimitiveRestart; 1706f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1707f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL 3.1 primitive restart */ 1708f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_PRIMITIVE_RESTART: 1709f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_is_desktop_gl(ctx) || ctx->Version < 31) { 1710f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1711f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1712f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Array.PrimitiveRestart; 1713f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1714f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL3.0 - GL_framebuffer_sRGB */ 1715f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_FRAMEBUFFER_SRGB_EXT: 1716f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx)) 1717f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1718f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION(EXT_framebuffer_sRGB); 1719f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ctx->Color.sRGBEnabled; 1720f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1721f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* GL_OES_EGL_image_external */ 1722f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GL_TEXTURE_EXTERNAL_OES: 1723f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_is_gles(ctx)) 1724f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1725f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CHECK_EXTENSION(OES_EGL_image_external); 1726f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return is_texture_enabled(ctx, TEXTURE_EXTERNAL_BIT); 1727f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1728f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 1729f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto invalid_enum_error; 1730f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1731f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1732f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 1733f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1734f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orginvalid_enum_error: 1735f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_error(ctx, GL_INVALID_ENUM, "glIsEnabled(%s)", 1736f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_lookup_enum_by_nr(cap)); 1737f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 1738f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1739