15df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/* 25df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * Mesa 3-D graphics library 35df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * Version: 4.1 45df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * 55df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. 65df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * 75df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * Permission is hereby granted, free of charge, to any person obtaining a 85df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * copy of this software and associated documentation files (the "Software"), 95df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * to deal in the Software without restriction, including without limitation 105df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * the rights to use, copy, modify, merge, publish, distribute, sublicense, 115df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * and/or sell copies of the Software, and to permit persons to whom the 125df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * Software is furnished to do so, subject to the following conditions: 135df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * 145df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * The above copyright notice and this permission notice shall be included 155df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * in all copies or substantial portions of the Software. 165df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * 175df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 185df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 195df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 205df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 215df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 225df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 235df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * 245df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * Authors: 255df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * Keith Whitwell <keith@tungstengraphics.com> 265df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul */ 275df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 285df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#ifndef LOCALVARS 295df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LOCALVARS 305df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#endif 315df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 325df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#undef TCL_DEBUG 335df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#ifndef TCL_DEBUG 345df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TCL_DEBUG 0 355df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#endif 365df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 37f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergstatic void TAG(emit)( struct gl_context *ctx, 385df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul GLuint start, GLuint end, 395df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul void *dest ) 405df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul{ 415df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul LOCALVARS 4257c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb; 435df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul GLuint (*tc0)[4], (*tc1)[4], (*tc2)[4]; 4457c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell GLfloat (*col)[4], (*spec)[4]; 455df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul GLfloat (*fog)[4]; 465df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul GLuint (*norm)[4]; 475df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul GLuint tc0_stride, tc1_stride, col_stride, spec_stride, fog_stride; 485df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul GLuint tc2_stride, norm_stride; 4957c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell GLuint fill_tex = 0; 50a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger GLuint rqcoordsnoswap = 0; 515df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul GLuint (*coord)[4]; 525df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul GLuint coord_stride; /* object coordinates */ 535df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul int i; 545df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 555df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul union emit_union *v = (union emit_union *)dest; 565df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 574e0d99a63588c67a955f797733da32d04e6f4ee6Pauli Nieminen radeon_print(RADEON_SWRENDER, RADEON_VERBOSE, "%s\n", __FUNCTION__); 585df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 59165b860da6f16ef4817a4959774a57f57ba3756dEric Anholt coord = (GLuint (*)[4])VB->AttribPtr[_TNL_ATTRIB_POS]->data; 60165b860da6f16ef4817a4959774a57f57ba3756dEric Anholt coord_stride = VB->AttribPtr[_TNL_ATTRIB_POS]->stride; 615df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 625df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_TEX2) { 63df582ca767a38f185f9b4c449e7ed4266c414ae2Eric Anholt if (VB->AttribPtr[_TNL_ATTRIB_TEX2]) { 6457c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell const GLuint t2 = GET_TEXSOURCE(2); 65df582ca767a38f185f9b4c449e7ed4266c414ae2Eric Anholt tc2 = (GLuint (*)[4])VB->AttribPtr[_TNL_ATTRIB_TEX0 + t2]->data; 66df582ca767a38f185f9b4c449e7ed4266c414ae2Eric Anholt tc2_stride = VB->AttribPtr[_TNL_ATTRIB_TEX0 + t2]->stride; 67df582ca767a38f185f9b4c449e7ed4266c414ae2Eric Anholt if (DO_PTEX && VB->AttribPtr[_TNL_ATTRIB_TEX0 + t2]->size < 3) { 6857c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell fill_tex |= (1<<2); 695df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 70df582ca767a38f185f9b4c449e7ed4266c414ae2Eric Anholt else if (DO_PTEX && VB->AttribPtr[_TNL_ATTRIB_TEX0 + t2]->size < 4) { 71a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger rqcoordsnoswap |= (1<<2); 72a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger } 7357c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell } else { 7457c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell tc2 = (GLuint (*)[4])&ctx->Current.Attrib[VERT_ATTRIB_TEX2]; 7557c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell tc2_stride = 0; 765df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 775df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 785df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 795df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_TEX1) { 80df582ca767a38f185f9b4c449e7ed4266c414ae2Eric Anholt if (VB->AttribPtr[_TNL_ATTRIB_TEX1]) { 815df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul const GLuint t1 = GET_TEXSOURCE(1); 82df582ca767a38f185f9b4c449e7ed4266c414ae2Eric Anholt tc1 = (GLuint (*)[4])VB->AttribPtr[_TNL_ATTRIB_TEX0 + t1]->data; 83df582ca767a38f185f9b4c449e7ed4266c414ae2Eric Anholt tc1_stride = VB->AttribPtr[_TNL_ATTRIB_TEX0 + t1]->stride; 84df582ca767a38f185f9b4c449e7ed4266c414ae2Eric Anholt if (DO_PTEX && VB->AttribPtr[_TNL_ATTRIB_TEX0 + t1]->size < 3) { 8557c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell fill_tex |= (1<<1); 865df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 87df582ca767a38f185f9b4c449e7ed4266c414ae2Eric Anholt else if (DO_PTEX && VB->AttribPtr[_TNL_ATTRIB_TEX0 + t1]->size < 4) { 88a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger rqcoordsnoswap |= (1<<1); 89a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger } 905df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } else { 9157c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell tc1 = (GLuint (*)[4])&ctx->Current.Attrib[VERT_ATTRIB_TEX1]; 925df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul tc1_stride = 0; 935df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 945df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 955df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 965df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_TEX0) { 97df582ca767a38f185f9b4c449e7ed4266c414ae2Eric Anholt if (VB->AttribPtr[_TNL_ATTRIB_TEX0]) { 985df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul const GLuint t0 = GET_TEXSOURCE(0); 99df582ca767a38f185f9b4c449e7ed4266c414ae2Eric Anholt tc0_stride = VB->AttribPtr[_TNL_ATTRIB_TEX0 + t0]->stride; 100df582ca767a38f185f9b4c449e7ed4266c414ae2Eric Anholt tc0 = (GLuint (*)[4])VB->AttribPtr[_TNL_ATTRIB_TEX0 + t0]->data; 101df582ca767a38f185f9b4c449e7ed4266c414ae2Eric Anholt if (DO_PTEX && VB->AttribPtr[_TNL_ATTRIB_TEX0 + t0]->size < 3) { 10257c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell fill_tex |= (1<<0); 1035df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 104df582ca767a38f185f9b4c449e7ed4266c414ae2Eric Anholt else if (DO_PTEX && VB->AttribPtr[_TNL_ATTRIB_TEX0 + t0]->size < 4) { 105a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger rqcoordsnoswap |= (1<<0); 106a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger } 1075df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } else { 10857c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell tc0 = (GLuint (*)[4])&ctx->Current.Attrib[VERT_ATTRIB_TEX0]; 1095df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul tc0_stride = 0; 1105df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 1115df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1125df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 1135df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1145df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_NORM) { 11522bcb59a95ec833cfd73b300376c918eb6a658f2Eric Anholt if (VB->AttribPtr[_TNL_ATTRIB_NORMAL]) { 11622bcb59a95ec833cfd73b300376c918eb6a658f2Eric Anholt norm_stride = VB->AttribPtr[_TNL_ATTRIB_NORMAL]->stride; 11722bcb59a95ec833cfd73b300376c918eb6a658f2Eric Anholt norm = (GLuint (*)[4])VB->AttribPtr[_TNL_ATTRIB_NORMAL]->data; 1185df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } else { 1195df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul norm_stride = 0; 1205df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul norm = (GLuint (*)[4])&ctx->Current.Attrib[VERT_ATTRIB_NORMAL]; 1215df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 1225df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 1235df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1245df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_RGBA) { 1250a9187801505130738ae947c69cafa8a1dd118d1Eric Anholt if (VB->AttribPtr[_TNL_ATTRIB_COLOR0]) { 1260a9187801505130738ae947c69cafa8a1dd118d1Eric Anholt col = VB->AttribPtr[_TNL_ATTRIB_COLOR0]->data; 1270a9187801505130738ae947c69cafa8a1dd118d1Eric Anholt col_stride = VB->AttribPtr[_TNL_ATTRIB_COLOR0]->stride; 1285df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } else { 12957c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell col = (GLfloat (*)[4])ctx->Current.Attrib[VERT_ATTRIB_COLOR0]; 1305df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul col_stride = 0; 1315df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 1325df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 1335df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1342d61d301171620efe624d83a5457f4094eb49cbaRoland Scheidegger if (DO_SPEC_OR_FOG) { 1350a9187801505130738ae947c69cafa8a1dd118d1Eric Anholt if (VB->AttribPtr[_TNL_ATTRIB_COLOR1]) { 1360a9187801505130738ae947c69cafa8a1dd118d1Eric Anholt spec = VB->AttribPtr[_TNL_ATTRIB_COLOR1]->data; 1370a9187801505130738ae947c69cafa8a1dd118d1Eric Anholt spec_stride = VB->AttribPtr[_TNL_ATTRIB_COLOR1]->stride; 1385df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } else { 13957c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell spec = (GLfloat (*)[4])ctx->Current.Attrib[VERT_ATTRIB_COLOR1]; 1405df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul spec_stride = 0; 1415df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 1425df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 1435df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1442d61d301171620efe624d83a5457f4094eb49cbaRoland Scheidegger if (DO_SPEC_OR_FOG) { 14537c79d4d765b10a79e0cf217cc1e70d3fbb7a0c5Eric Anholt if (VB->AttribPtr[_TNL_ATTRIB_FOG]) { 14637c79d4d765b10a79e0cf217cc1e70d3fbb7a0c5Eric Anholt fog = VB->AttribPtr[_TNL_ATTRIB_FOG]->data; 14737c79d4d765b10a79e0cf217cc1e70d3fbb7a0c5Eric Anholt fog_stride = VB->AttribPtr[_TNL_ATTRIB_FOG]->stride; 1485df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } else { 1492d61d301171620efe624d83a5457f4094eb49cbaRoland Scheidegger fog = (GLfloat (*)[4])ctx->Current.Attrib[VERT_ATTRIB_FOG]; 1505df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul fog_stride = 0; 1515df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 1525df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 1535df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1545df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 15557c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell if (start) { 15657c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell coord = (GLuint (*)[4])((GLubyte *)coord + start * coord_stride); 15757c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell if (DO_TEX0) 15857c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell tc0 = (GLuint (*)[4])((GLubyte *)tc0 + start * tc0_stride); 15957c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell if (DO_TEX1) 16057c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell tc1 = (GLuint (*)[4])((GLubyte *)tc1 + start * tc1_stride); 16157c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell if (DO_TEX2) 16257c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell tc2 = (GLuint (*)[4])((GLubyte *)tc2 + start * tc2_stride); 16357c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell if (DO_NORM) 16457c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell norm = (GLuint (*)[4])((GLubyte *)norm + start * norm_stride); 16557c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell if (DO_RGBA) 16657c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell STRIDE_4F(col, start * col_stride); 16757c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell if (DO_SPEC) 16857c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell STRIDE_4F(spec, start * spec_stride); 16957c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell if (DO_FOG) 17057c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell STRIDE_4F(fog, start * fog_stride); 17157c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell } 1725df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 17357c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell 17457c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell { 1755df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul for (i=start; i < end; i++) { 17657c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell 1775df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v[0].ui = coord[0][0]; 1785df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v[1].ui = coord[0][1]; 1795df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v[2].ui = coord[0][2]; 1805df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_W) { 1815df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v[3].ui = coord[0][3]; 1825df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v += 4; 1835df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 1845df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul else 1855df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v += 3; 1865df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul coord = (GLuint (*)[4])((GLubyte *)coord + coord_stride); 1875df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1885df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_NORM) { 1895df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v[0].ui = norm[0][0]; 1905df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v[1].ui = norm[0][1]; 1915df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v[2].ui = norm[0][2]; 1925df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v += 3; 1935df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul norm = (GLuint (*)[4])((GLubyte *)norm + norm_stride); 1945df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 1955df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_RGBA) { 19657c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell UNCLAMPED_FLOAT_TO_UBYTE(v[0].rgba.red, col[0][0]); 19757c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell UNCLAMPED_FLOAT_TO_UBYTE(v[0].rgba.green, col[0][1]); 19857c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell UNCLAMPED_FLOAT_TO_UBYTE(v[0].rgba.blue, col[0][2]); 19957c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell UNCLAMPED_FLOAT_TO_UBYTE(v[0].rgba.alpha, col[0][3]); 20057c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell STRIDE_4F(col, col_stride); 2015df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v++; 2025df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2032d61d301171620efe624d83a5457f4094eb49cbaRoland Scheidegger if (DO_SPEC_OR_FOG) { 2045df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_SPEC) { 20557c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell UNCLAMPED_FLOAT_TO_UBYTE(v[0].rgba.red, spec[0][0]); 20657c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell UNCLAMPED_FLOAT_TO_UBYTE(v[0].rgba.green, spec[0][1]); 20757c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell UNCLAMPED_FLOAT_TO_UBYTE(v[0].rgba.blue, spec[0][2]); 20857c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell STRIDE_4F(spec, spec_stride); 2095df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2105df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_FOG) { 2112d61d301171620efe624d83a5457f4094eb49cbaRoland Scheidegger UNCLAMPED_FLOAT_TO_UBYTE(v[0].rgba.alpha, radeonComputeFogBlendFactor(ctx, fog[0][0])); 2122d61d301171620efe624d83a5457f4094eb49cbaRoland Scheidegger STRIDE_4F(fog, fog_stride); 2135df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2145df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (TCL_DEBUG) fprintf(stderr, "%x ", v[0].ui); 2155df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v++; 2165df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2175df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_TEX0) { 2185df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v[0].ui = tc0[0][0]; 2195df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v[1].ui = tc0[0][1]; 2205df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (TCL_DEBUG) fprintf(stderr, "t0: %.2f %.2f ", v[0].f, v[1].f); 2215df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_PTEX) { 22257c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell if (fill_tex & (1<<0)) 22357c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell v[2].f = 1.0; 224a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger else if (rqcoordsnoswap & (1<<0)) 225a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger v[2].ui = tc0[0][2]; 22657c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell else 22757c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell v[2].ui = tc0[0][3]; 2285df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (TCL_DEBUG) fprintf(stderr, "%.2f ", v[2].f); 2295df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v += 3; 2305df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2315df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul else 2325df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v += 2; 2335df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul tc0 = (GLuint (*)[4])((GLubyte *)tc0 + tc0_stride); 2345df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2355df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_TEX1) { 2365df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v[0].ui = tc1[0][0]; 2375df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v[1].ui = tc1[0][1]; 2385df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (TCL_DEBUG) fprintf(stderr, "t1: %.2f %.2f ", v[0].f, v[1].f); 2395df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_PTEX) { 24057c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell if (fill_tex & (1<<1)) 24157c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell v[2].f = 1.0; 242a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger else if (rqcoordsnoswap & (1<<1)) 243a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger v[2].ui = tc1[0][2]; 24457c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell else 24557c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell v[2].ui = tc1[0][3]; 2465df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (TCL_DEBUG) fprintf(stderr, "%.2f ", v[2].f); 2475df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v += 3; 2485df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2495df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul else 2505df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v += 2; 2515df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul tc1 = (GLuint (*)[4])((GLubyte *)tc1 + tc1_stride); 2525df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2535df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_TEX2) { 2545df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v[0].ui = tc2[0][0]; 2555df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v[1].ui = tc2[0][1]; 25630daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger if (TCL_DEBUG) fprintf(stderr, "t2: %.2f %.2f ", v[0].f, v[1].f); 2575df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_PTEX) { 25857c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell if (fill_tex & (1<<2)) 25957c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell v[2].f = 1.0; 260a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger else if (rqcoordsnoswap & (1<<2)) 261a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger v[2].ui = tc2[0][2]; 26257c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell else 26357c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell v[2].ui = tc2[0][3]; 26430daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger if (TCL_DEBUG) fprintf(stderr, "%.2f ", v[2].f); 2655df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v += 3; 2665df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2675df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul else 2685df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul v += 2; 2695df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul tc2 = (GLuint (*)[4])((GLubyte *)tc2 + tc2_stride); 2705df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2715df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (TCL_DEBUG) fprintf(stderr, "\n"); 2725df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2735df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2745df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul} 2755df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2765df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2775df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2785df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstatic void TAG(init)( void ) 2795df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul{ 2805df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul int sz = 3; 2815df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_W) sz++; 2825df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_NORM) sz += 3; 2835df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_RGBA) sz++; 2842d61d301171620efe624d83a5457f4094eb49cbaRoland Scheidegger if (DO_SPEC_OR_FOG) sz++; 2855df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_TEX0) sz += 2; 2865df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_TEX0 && DO_PTEX) sz++; 2875df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_TEX1) sz += 2; 2885df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_TEX1 && DO_PTEX) sz++; 2895df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_TEX2) sz += 2; 2905df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (DO_TEX2 && DO_PTEX) sz++; 2915df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2925df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul setup_tab[IDX].emit = TAG(emit); 2935df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul setup_tab[IDX].vertex_format = IND; 2945df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul setup_tab[IDX].vertex_size = sz; 2955df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul} 2965df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2975df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2985df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#undef IND 2995df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#undef TAG 3005df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#undef IDX 301