1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Mesa 3-D graphics library 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Version: 6.5 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright (C) 1999-2005 Brian Paul All Rights Reserved. 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * copy of this software and associated documentation files (the "Software"), 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * to deal in the Software without restriction, including without limitation 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the rights to use, copy, modify, merge, publish, distribute, sublicense, 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * and/or sell copies of the Software, and to permit persons to whom the 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Software is furnished to do so, subject to the following conditions: 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The above copyright notice and this permission notice shall be included 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * in all copies or substantial portions of the Software. 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Authors: 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Keith Whitwell <keith@tungstengraphics.com> 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef POSTFIX 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define POSTFIX 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef INIT 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INIT(x) 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef NEED_EDGEFLAG_SETUP 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NEED_EDGEFLAG_SETUP 0 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define EDGEFLAG_GET(a) 0 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define EDGEFLAG_SET(a,b) (void)b 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef RESET_STIPPLE 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RESET_STIPPLE 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef TEST_PRIM_END 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TEST_PRIM_END(prim) (flags & PRIM_END) 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TEST_PRIM_BEGIN(prim) (flags & PRIM_BEGIN) 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef ELT 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define ELT(x) x 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef RENDER_TAB_QUALIFIER 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RENDER_TAB_QUALIFIER static 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void TAG(render_points)( struct gl_context *ctx, 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint start, 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint count, 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint flags ) 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LOCAL_VARS; 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) flags; 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org INIT(GL_POINTS); 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RENDER_POINTS( start, count ); 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org POSTFIX; 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void TAG(render_lines)( struct gl_context *ctx, 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint start, 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint count, 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint flags ) 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint j; 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LOCAL_VARS; 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) flags; 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org INIT(GL_LINES); 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (j=start+1; j<count; j+=2 ) { 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RESET_STIPPLE; 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Light.ProvokingVertex == GL_LAST_VERTEX_CONVENTION_EXT) 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RENDER_LINE( ELT(j-1), ELT(j) ); 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RENDER_LINE( ELT(j), ELT(j-1) ); 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org POSTFIX; 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void TAG(render_line_strip)( struct gl_context *ctx, 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint start, 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint count, 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint flags ) 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint j; 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LOCAL_VARS; 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) flags; 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org INIT(GL_LINE_STRIP); 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (TEST_PRIM_BEGIN(flags)) { 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RESET_STIPPLE; 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (j=start+1; j<count; j++ ) { 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Light.ProvokingVertex == GL_LAST_VERTEX_CONVENTION_EXT) 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RENDER_LINE( ELT(j-1), ELT(j) ); 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RENDER_LINE( ELT(j), ELT(j-1) ); 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org POSTFIX; 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void TAG(render_line_loop)( struct gl_context *ctx, 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint start, 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint count, 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint flags ) 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint i; 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LOCAL_VARS; 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) flags; 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org INIT(GL_LINE_LOOP); 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (start+1 < count) { 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (TEST_PRIM_BEGIN(flags)) { 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RESET_STIPPLE; 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Light.ProvokingVertex == GL_LAST_VERTEX_CONVENTION_EXT) 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RENDER_LINE( ELT(start), ELT(start+1) ); 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RENDER_LINE( ELT(start+1), ELT(start) ); 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for ( i = start+2 ; i < count ; i++) { 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Light.ProvokingVertex == GL_LAST_VERTEX_CONVENTION_EXT) 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RENDER_LINE( ELT(i-1), ELT(i) ); 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RENDER_LINE( ELT(i), ELT(i-1) ); 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if ( TEST_PRIM_END(flags)) { 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Light.ProvokingVertex == GL_LAST_VERTEX_CONVENTION_EXT) 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RENDER_LINE( ELT(count-1), ELT(start) ); 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RENDER_LINE( ELT(start), ELT(count-1) ); 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org POSTFIX; 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void TAG(render_triangles)( struct gl_context *ctx, 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint start, 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint count, 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint flags ) 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint j; 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LOCAL_VARS; 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) flags; 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org INIT(GL_TRIANGLES); 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (NEED_EDGEFLAG_SETUP) { 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (j=start+2; j<count; j+=3) { 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Leave the edgeflags as supplied by the user. 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RESET_STIPPLE; 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Light.ProvokingVertex == GL_LAST_VERTEX_CONVENTION_EXT) 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RENDER_TRI( ELT(j-2), ELT(j-1), ELT(j) ); 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RENDER_TRI( ELT(j-1), ELT(j), ELT(j-2) ); 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else { 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (j=start+2; j<count; j+=3) { 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Light.ProvokingVertex == GL_LAST_VERTEX_CONVENTION_EXT) 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RENDER_TRI( ELT(j-2), ELT(j-1), ELT(j) ); 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RENDER_TRI( ELT(j-1), ELT(j), ELT(j-2) ); 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org POSTFIX; 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void TAG(render_tri_strip)( struct gl_context *ctx, 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint start, 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint count, 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint flags ) 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint j; 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint parity = 0; 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LOCAL_VARS; 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org INIT(GL_TRIANGLE_STRIP); 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (NEED_EDGEFLAG_SETUP) { 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (j=start+2;j<count;j++,parity^=1) { 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint ej2, ej1, ej; 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ef2, ef1, ef; 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Light.ProvokingVertex == GL_LAST_VERTEX_CONVENTION_EXT) { 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ej2 = ELT(j-2+parity); 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ej1 = ELT(j-1-parity); 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ej = ELT(j); 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ej2 = ELT(j-1+parity); 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ej1 = ELT(j-parity); 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ej = ELT(j-2); 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ef2 = EDGEFLAG_GET( ej2 ); 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ef1 = EDGEFLAG_GET( ej1 ); 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ef = EDGEFLAG_GET( ej ); 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (TEST_PRIM_BEGIN(flags)) { 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RESET_STIPPLE; 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EDGEFLAG_SET( ej2, GL_TRUE ); 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EDGEFLAG_SET( ej1, GL_TRUE ); 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EDGEFLAG_SET( ej, GL_TRUE ); 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RENDER_TRI( ej2, ej1, ej ); 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EDGEFLAG_SET( ej2, ef2 ); 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EDGEFLAG_SET( ej1, ef1 ); 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EDGEFLAG_SET( ej, ef ); 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else { 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (j=start+2; j<count ; j++, parity^=1) { 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Light.ProvokingVertex == GL_LAST_VERTEX_CONVENTION_EXT) 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RENDER_TRI( ELT(j-2+parity), ELT(j-1-parity), ELT(j) ); 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RENDER_TRI( ELT(j-1+parity), ELT(j-parity), ELT(j-2) ); 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org POSTFIX; 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void TAG(render_tri_fan)( struct gl_context *ctx, 243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint start, 244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint count, 245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint flags ) 246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint j; 248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LOCAL_VARS; 249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) flags; 250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org INIT(GL_TRIANGLE_FAN); 252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (NEED_EDGEFLAG_SETUP) { 253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (j=start+2;j<count;j++) { 254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* For trifans, all edges are boundary. 255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint ejs = ELT(start); 257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint ej1 = ELT(j-1); 258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint ej = ELT(j); 259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean efs = EDGEFLAG_GET( ejs ); 260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ef1 = EDGEFLAG_GET( ej1 ); 261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ef = EDGEFLAG_GET( ej ); 262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (TEST_PRIM_BEGIN(flags)) { 263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RESET_STIPPLE; 264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EDGEFLAG_SET( ejs, GL_TRUE ); 266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EDGEFLAG_SET( ej1, GL_TRUE ); 267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EDGEFLAG_SET( ej, GL_TRUE ); 268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Light.ProvokingVertex == GL_LAST_VERTEX_CONVENTION_EXT) 269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RENDER_TRI( ejs, ej1, ej); 270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RENDER_TRI( ej, ejs, ej1); 272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EDGEFLAG_SET( ejs, efs ); 273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EDGEFLAG_SET( ej1, ef1 ); 274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EDGEFLAG_SET( ej, ef ); 275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else { 277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (j=start+2;j<count;j++) { 278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Light.ProvokingVertex == GL_LAST_VERTEX_CONVENTION_EXT) 279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RENDER_TRI( ELT(start), ELT(j-1), ELT(j) ); 280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RENDER_TRI( ELT(j), ELT(start), ELT(j-1) ); 282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org POSTFIX; 286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void TAG(render_poly)( struct gl_context *ctx, 290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint start, 291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint count, 292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint flags ) 293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint j = start+2; 295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LOCAL_VARS; 296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) flags; 297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org INIT(GL_POLYGON); 299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (NEED_EDGEFLAG_SETUP) { 300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean efstart = EDGEFLAG_GET( ELT(start) ); 301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean efcount = EDGEFLAG_GET( ELT(count-1) ); 302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* If the primitive does not begin here, the first edge 304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * is non-boundary. 305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!TEST_PRIM_BEGIN(flags)) 307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EDGEFLAG_SET( ELT(start), GL_FALSE ); 308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RESET_STIPPLE; 310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* If the primitive does not end here, the final edge is 313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * non-boundary. 314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!TEST_PRIM_END(flags)) 316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EDGEFLAG_SET( ELT(count-1), GL_FALSE ); 317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Draw the first triangles (possibly zero) 319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (j+1<count) { 321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ef = EDGEFLAG_GET( ELT(j) ); 322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EDGEFLAG_SET( ELT(j), GL_FALSE ); 323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RENDER_TRI( ELT(j-1), ELT(j), ELT(start) ); 324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EDGEFLAG_SET( ELT(j), ef ); 325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org j++; 326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Don't render the first edge again: 328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EDGEFLAG_SET( ELT(start), GL_FALSE ); 330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (;j+1<count;j++) { 332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean efj = EDGEFLAG_GET( ELT(j) ); 333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EDGEFLAG_SET( ELT(j), GL_FALSE ); 334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RENDER_TRI( ELT(j-1), ELT(j), ELT(start) ); 335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EDGEFLAG_SET( ELT(j), efj ); 336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Draw the last or only triangle 340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (j < count) 342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RENDER_TRI( ELT(j-1), ELT(j), ELT(start) ); 343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Restore the first and last edgeflags: 345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EDGEFLAG_SET( ELT(count-1), efcount ); 347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EDGEFLAG_SET( ELT(start), efstart ); 348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (j=start+2;j<count;j++) { 352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RENDER_TRI( ELT(j-1), ELT(j), ELT(start) ); 353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org POSTFIX; 356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void TAG(render_quads)( struct gl_context *ctx, 359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint start, 360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint count, 361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint flags ) 362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint j; 364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LOCAL_VARS; 365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) flags; 366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org INIT(GL_QUADS); 368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (NEED_EDGEFLAG_SETUP) { 369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (j=start+3; j<count; j+=4) { 370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Use user-specified edgeflags for quads. 371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RESET_STIPPLE; 373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Light.ProvokingVertex == GL_LAST_VERTEX_CONVENTION_EXT || 374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org !ctx->Const.QuadsFollowProvokingVertexConvention) 375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RENDER_QUAD( ELT(j-3), ELT(j-2), ELT(j-1), ELT(j) ); 376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RENDER_QUAD( ELT(j-2), ELT(j-1), ELT(j), ELT(j-3) ); 378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else { 380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (j=start+3; j<count; j+=4) { 381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Light.ProvokingVertex == GL_LAST_VERTEX_CONVENTION_EXT || 382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org !ctx->Const.QuadsFollowProvokingVertexConvention) 383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RENDER_QUAD( ELT(j-3), ELT(j-2), ELT(j-1), ELT(j) ); 384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RENDER_QUAD( ELT(j-2), ELT(j-1), ELT(j), ELT(j-3) ); 386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org POSTFIX; 389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void TAG(render_quad_strip)( struct gl_context *ctx, 392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint start, 393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint count, 394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint flags ) 395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint j; 397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LOCAL_VARS; 398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) flags; 399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org INIT(GL_QUAD_STRIP); 401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (NEED_EDGEFLAG_SETUP) { 402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (j=start+3;j<count;j+=2) { 403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* All edges are boundary. Set edgeflags to 1, draw the 404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * quad, and restore them to the original values. 405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ef3 = EDGEFLAG_GET( ELT(j-3) ); 407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ef2 = EDGEFLAG_GET( ELT(j-2) ); 408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ef1 = EDGEFLAG_GET( ELT(j-1) ); 409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ef = EDGEFLAG_GET( ELT(j) ); 410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (TEST_PRIM_BEGIN(flags)) { 411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RESET_STIPPLE; 412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EDGEFLAG_SET( ELT(j-3), GL_TRUE ); 414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EDGEFLAG_SET( ELT(j-2), GL_TRUE ); 415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EDGEFLAG_SET( ELT(j-1), GL_TRUE ); 416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EDGEFLAG_SET( ELT(j), GL_TRUE ); 417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Light.ProvokingVertex == GL_LAST_VERTEX_CONVENTION_EXT || 418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org !ctx->Const.QuadsFollowProvokingVertexConvention) 419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RENDER_QUAD( ELT(j-1), ELT(j-3), ELT(j-2), ELT(j) ); 420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RENDER_QUAD( ELT(j-2), ELT(j), ELT(j-1), ELT(j-3) ); 422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EDGEFLAG_SET( ELT(j-3), ef3 ); 423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EDGEFLAG_SET( ELT(j-2), ef2 ); 424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EDGEFLAG_SET( ELT(j-1), ef1 ); 425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EDGEFLAG_SET( ELT(j), ef ); 426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else { 428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (j=start+3;j<count;j+=2) { 429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx->Light.ProvokingVertex == GL_LAST_VERTEX_CONVENTION_EXT || 430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org !ctx->Const.QuadsFollowProvokingVertexConvention) 431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RENDER_QUAD( ELT(j-1), ELT(j-3), ELT(j-2), ELT(j) ); 432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RENDER_QUAD( ELT(j-2), ELT(j), ELT(j-1), ELT(j-3) ); 434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org POSTFIX; 437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void TAG(render_noop)( struct gl_context *ctx, 440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint start, 441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint count, 442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint flags ) 443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void)(ctx && start && count && flags); 445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgRENDER_TAB_QUALIFIER void (*TAG(render_tab)[GL_POLYGON+2])(struct gl_context *, 448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint, 449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint, 450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint) = 451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TAG(render_points), 453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TAG(render_lines), 454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TAG(render_line_loop), 455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TAG(render_line_strip), 456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TAG(render_triangles), 457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TAG(render_tri_strip), 458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TAG(render_tri_fan), 459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TAG(render_quads), 460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TAG(render_quad_strip), 461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TAG(render_poly), 462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TAG(render_noop), 463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef PRESERVE_VB_DEFS 468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef RENDER_TRI 469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef RENDER_QUAD 470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef RENDER_LINE 471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef RENDER_POINTS 472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef LOCAL_VARS 473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef INIT 474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef POSTFIX 475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef RESET_STIPPLE 476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef DBG 477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef ELT 478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef RENDER_TAB_QUALIFIER 479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef PRESERVE_TAG 482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef TAG 483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef PRESERVE_VB_DEFS 486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef PRESERVE_TAG 487