15df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/************************************************************************** 25df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 35df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulCopyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and 45df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul Tungsten Graphics Inc., Austin, Texas. 55df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 65df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulAll Rights Reserved. 75df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 85df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulPermission is hereby granted, free of charge, to any person obtaining 95df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paula copy of this software and associated documentation files (the 105df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul"Software"), to deal in the Software without restriction, including 115df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulwithout limitation the rights to use, copy, modify, merge, publish, 125df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Pauldistribute, sublicense, and/or sell copies of the Software, and to 135df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulpermit persons to whom the Software is furnished to do so, subject to 145df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulthe following conditions: 155df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 165df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulThe above copyright notice and this permission notice (including the 175df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulnext paragraph) shall be included in all copies or substantial 185df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulportions of the Software. 195df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 205df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 215df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 225df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 235df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulIN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE 245df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 255df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 265df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 275df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 285df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul**************************************************************************/ 295df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 305df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/* 315df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * Authors: 325df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * Keith Whitwell <keith@tungstengraphics.com> 335df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul */ 345df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 35ecadb51bbcb972a79f3ed79e65a7986b9396e757Brian Paul#include "main/glheader.h" 36ecadb51bbcb972a79f3ed79e65a7986b9396e757Brian Paul#include "main/imports.h" 37ecadb51bbcb972a79f3ed79e65a7986b9396e757Brian Paul#include "main/mtypes.h" 385df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 3980c88304fc9d09531b2530b74973821e47b46753Keith Whitwell#include "vbo/vbo.h" 4077d240858e83cdaae799ef95188f59b7f2eda464Brian Paul#include "math/m_translate.h" 415df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "tnl/tnl.h" 425df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "tnl/t_pipeline.h" 435df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_context.h" 445df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_state.h" 455df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_ioctl.h" 465df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_tex.h" 475df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_tcl.h" 485df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_swtcl.h" 495df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos.h" 5094556f359450acebe87d6c9b4f4fd8ccf78589d8Alex Deucher#include "radeon_fog.h" 515df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 5230daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger#define RADEON_TCL_MAX_SETUP 19 535df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 5457c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwellunion emit_union { float f; GLuint ui; radeon_color_t rgba; }; 555df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 565df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstatic struct { 57f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg void (*emit)( struct gl_context *, GLuint, GLuint, void * ); 585df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul GLuint vertex_size; 595df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul GLuint vertex_format; 605df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul} setup_tab[RADEON_TCL_MAX_SETUP]; 615df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 625df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DO_W (IND & RADEON_CP_VC_FRMT_W0) 635df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DO_RGBA (IND & RADEON_CP_VC_FRMT_PKCOLOR) 642d61d301171620efe624d83a5457f4094eb49cbaRoland Scheidegger#define DO_SPEC_OR_FOG (IND & RADEON_CP_VC_FRMT_PKSPEC) 652d61d301171620efe624d83a5457f4094eb49cbaRoland Scheidegger#define DO_SPEC ((IND & RADEON_CP_VC_FRMT_PKSPEC) && \ 662d61d301171620efe624d83a5457f4094eb49cbaRoland Scheidegger (ctx->_TriangleCaps & DD_SEPARATE_SPECULAR)) 672d61d301171620efe624d83a5457f4094eb49cbaRoland Scheidegger#define DO_FOG ((IND & RADEON_CP_VC_FRMT_PKSPEC) && ctx->Fog.Enabled && \ 682d61d301171620efe624d83a5457f4094eb49cbaRoland Scheidegger (ctx->Fog.FogCoordinateSource == GL_FOG_COORD)) 695df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DO_TEX0 (IND & RADEON_CP_VC_FRMT_ST0) 705df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DO_TEX1 (IND & RADEON_CP_VC_FRMT_ST1) 7130daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger#define DO_TEX2 (IND & RADEON_CP_VC_FRMT_ST2) 725df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DO_PTEX (IND & RADEON_CP_VC_FRMT_Q0) 735df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DO_NORM (IND & RADEON_CP_VC_FRMT_N0) 745df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 755df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DO_TEX3 0 765df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 775df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define GET_TEXSOURCE(n) n 785df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 795df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/*********************************************************************** 805df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * Generate vertex emit functions * 815df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul ***********************************************************************/ 825df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 835df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 845df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/* Defined in order of increasing vertex size: 855df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul */ 865df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 0 875df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY| \ 885df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Z| \ 895df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_PKCOLOR) 905df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_rgba 915df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h" 925df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 935df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 1 945df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY| \ 955df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Z| \ 965df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_N0) 975df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_n 985df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h" 995df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1005df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 2 1015df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY| \ 1025df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Z| \ 1035df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_PKCOLOR| \ 1045df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_ST0) 1055df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_rgba_st 1065df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h" 1075df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1085df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 3 1095df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY| \ 1105df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Z| \ 1115df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_PKCOLOR| \ 1125df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_N0) 1135df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_rgba_n 1145df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h" 1155df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1165df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 4 1175df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY| \ 1185df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Z| \ 1195df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_ST0| \ 1205df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_N0) 1215df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_st_n 1225df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h" 1235df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1245df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 5 1255df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY| \ 1265df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Z| \ 1275df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_PKCOLOR| \ 1285df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_ST0| \ 1295df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_ST1) 1305df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_rgba_st_st 1315df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h" 1325df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1335df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 6 1345df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY| \ 1355df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Z| \ 1365df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_PKCOLOR| \ 1375df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_ST0| \ 1385df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_N0) 1395df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_rgba_st_n 1405df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h" 1415df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1425df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 7 1435df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY| \ 1445df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Z| \ 1455df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_PKCOLOR| \ 1465df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_PKSPEC| \ 1475df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_ST0| \ 1485df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_ST1) 1495df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_rgba_spec_st_st 1505df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h" 1515df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1525df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 8 1535df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY| \ 1545df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Z| \ 1555df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_ST0| \ 1565df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_ST1| \ 1575df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_N0) 1585df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_st_st_n 1595df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h" 1605df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1615df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 9 1625df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY| \ 1635df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Z| \ 1645df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_PKCOLOR| \ 1655df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_PKSPEC| \ 1665df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_ST0| \ 1675df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_ST1| \ 1685df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_N0) 16943be8ee414369f2745de0cf936f9767ee31df991Alan Hourihane#define TAG(x) x##_rgba_spec_st_st_n 1705df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h" 1715df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1725df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 10 1735df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY| \ 1745df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Z| \ 1755df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_PKCOLOR| \ 1765df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_ST0| \ 1775df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Q0) 1785df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_rgba_stq 1795df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h" 1805df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1815df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 11 1825df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY| \ 1835df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Z| \ 1845df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_PKCOLOR| \ 1855df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_ST1| \ 1865df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Q1| \ 1875df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_ST0| \ 1885df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Q0) 1895df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_rgba_stq_stq 1905df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h" 1915df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1925df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 12 1935df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY| \ 1945df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Z| \ 1955df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_W0| \ 1965df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_PKCOLOR| \ 1975df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_PKSPEC| \ 1985df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_ST0| \ 1995df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Q0| \ 2005df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_ST1| \ 2015df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Q1| \ 2025df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_N0) 20343be8ee414369f2745de0cf936f9767ee31df991Alan Hourihane#define TAG(x) x##_w_rgba_spec_stq_stq_n 2045df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h" 2055df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 20630daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger#define IDX 13 20730daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger#define IND (RADEON_CP_VC_FRMT_XY| \ 20830daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_Z| \ 20930daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_PKCOLOR| \ 21030daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_ST0| \ 21130daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_ST1| \ 21230daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_ST2) 21330daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger#define TAG(x) x##_rgba_st_st_st 21430daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger#include "radeon_maos_vbtmp.h" 21530daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger 21630daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger#define IDX 14 21730daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger#define IND (RADEON_CP_VC_FRMT_XY| \ 21830daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_Z| \ 21930daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_PKCOLOR| \ 22030daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_PKSPEC| \ 22130daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_ST0| \ 22230daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_ST1| \ 22330daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_ST2) 22430daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger#define TAG(x) x##_rgba_spec_st_st_st 22530daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger#include "radeon_maos_vbtmp.h" 22630daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger 22730daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger#define IDX 15 22830daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger#define IND (RADEON_CP_VC_FRMT_XY| \ 22930daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_Z| \ 23030daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_ST0| \ 23130daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_ST1| \ 23230daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_ST2| \ 23330daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_N0) 23430daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger#define TAG(x) x##_st_st_st_n 23530daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger#include "radeon_maos_vbtmp.h" 23630daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger 23730daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger#define IDX 16 23830daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger#define IND (RADEON_CP_VC_FRMT_XY| \ 23930daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_Z| \ 24030daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_PKCOLOR| \ 24130daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_PKSPEC| \ 24230daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_ST0| \ 24330daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_ST1| \ 24430daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_ST2| \ 24530daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_N0) 24630daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger#define TAG(x) x##_rgba_spec_st_st_st_n 24730daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger#include "radeon_maos_vbtmp.h" 24830daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger 24930daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger#define IDX 17 25030daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger#define IND (RADEON_CP_VC_FRMT_XY| \ 25130daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_Z| \ 25230daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_PKCOLOR| \ 25330daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_ST0| \ 25430daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_Q0| \ 25530daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_ST1| \ 25630daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_Q1| \ 25730daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_ST2| \ 25830daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_Q2) 25930daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger#define TAG(x) x##_rgba_stq_stq_stq 26030daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger#include "radeon_maos_vbtmp.h" 26130daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger 26230daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger#define IDX 18 26330daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger#define IND (RADEON_CP_VC_FRMT_XY| \ 26430daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_Z| \ 26530daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_W0| \ 26630daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_PKCOLOR| \ 26730daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_PKSPEC| \ 26830daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_ST0| \ 26930daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_Q0| \ 27030daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_ST1| \ 27130daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_Q1| \ 27230daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_ST2| \ 27330daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_Q2| \ 27430daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger RADEON_CP_VC_FRMT_N0) 27530daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger#define TAG(x) x##_w_rgba_spec_stq_stq_stq_n 27630daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger#include "radeon_maos_vbtmp.h" 2775df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2785df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2795df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2805df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2815df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/*********************************************************************** 2825df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * Initialization 2835df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul ***********************************************************************/ 2845df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2855df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2865df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstatic void init_tcl_verts( void ) 2875df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul{ 2885df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul init_rgba(); 2895df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul init_n(); 2905df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul init_rgba_n(); 2915df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul init_rgba_st(); 2925df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul init_st_n(); 2935df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul init_rgba_st_st(); 2945df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul init_rgba_st_n(); 2955df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul init_rgba_spec_st_st(); 2965df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul init_st_st_n(); 29743be8ee414369f2745de0cf936f9767ee31df991Alan Hourihane init_rgba_spec_st_st_n(); 2985df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul init_rgba_stq(); 2995df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul init_rgba_stq_stq(); 30043be8ee414369f2745de0cf936f9767ee31df991Alan Hourihane init_w_rgba_spec_stq_stq_n(); 30130daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger init_rgba_st_st_st(); 30230daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger init_rgba_spec_st_st_st(); 30330daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger init_st_st_st_n(); 30430daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger init_rgba_spec_st_st_st_n(); 30530daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger init_rgba_stq_stq_stq(); 30630daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger init_w_rgba_spec_stq_stq_stq_n(); 3075df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul} 3085df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 3095df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 310f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergvoid radeonEmitArrays( struct gl_context *ctx, GLuint inputs ) 3115df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul{ 3124637235183b80963536f2364e4d50fcb894886ddDave Airlie r100ContextPtr rmesa = R100_CONTEXT(ctx); 3135df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb; 3145df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul GLuint req = 0; 31530daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger GLuint unit; 3165df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul GLuint vtx = (rmesa->hw.tcl.cmd[TCL_OUTPUT_VTXFMT] & 31730daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger ~(RADEON_TCL_VTX_Q0|RADEON_TCL_VTX_Q1|RADEON_TCL_VTX_Q2)); 3185df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul int i; 3195df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul static int firsttime = 1; 3205df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 3215df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (firsttime) { 3225df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul init_tcl_verts(); 3235df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul firsttime = 0; 3245df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 325a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger 3265df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (1) { 3275df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul req |= RADEON_CP_VC_FRMT_Z; 328165b860da6f16ef4817a4959774a57f57ba3756dEric Anholt if (VB->AttribPtr[_TNL_ATTRIB_POS]->size == 4) { 3295df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul req |= RADEON_CP_VC_FRMT_W0; 3305df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 3315df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 3325df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 3335df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (inputs & VERT_BIT_NORMAL) { 3345df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul req |= RADEON_CP_VC_FRMT_N0; 3355df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 336a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger 3375df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (inputs & VERT_BIT_COLOR0) { 3385df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul req |= RADEON_CP_VC_FRMT_PKCOLOR; 3395df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 3405df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 3412d61d301171620efe624d83a5457f4094eb49cbaRoland Scheidegger if (inputs & (VERT_BIT_COLOR1|VERT_BIT_FOG)) { 3425df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul req |= RADEON_CP_VC_FRMT_PKSPEC; 3435df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 3445df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 34530daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger for (unit = 0; unit < ctx->Const.MaxTextureUnits; unit++) { 34630daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger if (inputs & VERT_BIT_TEX(unit)) { 34730daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger req |= RADEON_ST_BIT(unit); 34830daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger /* assume we need the 3rd coord if texgen is active for r/q OR at least 34930daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger 3 coords are submitted. This may not be 100% correct */ 350df582ca767a38f185f9b4c449e7ed4266c414ae2Eric Anholt if (VB->AttribPtr[_TNL_ATTRIB_TEX0 + unit]->size >= 3) { 35130daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger req |= RADEON_Q_BIT(unit); 35230daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger vtx |= RADEON_Q_BIT(unit); 35330daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger } 35430daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger if ( (ctx->Texture.Unit[unit].TexGenEnabled & (R_BIT | Q_BIT)) ) 35530daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger vtx |= RADEON_Q_BIT(unit); 356df582ca767a38f185f9b4c449e7ed4266c414ae2Eric Anholt else if ((VB->AttribPtr[_TNL_ATTRIB_TEX0 + unit]->size >= 3) && 357247f3b3e81fffa86c50531070fab573e26ffb452Roland Scheidegger ((ctx->Texture.Unit[unit]._ReallyEnabled & (TEXTURE_CUBE_BIT)) == 0)) { 358df582ca767a38f185f9b4c449e7ed4266c414ae2Eric Anholt GLuint swaptexmatcol = (VB->AttribPtr[_TNL_ATTRIB_TEX0 + unit]->size - 3); 35930daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger if (((rmesa->NeedTexMatrix >> unit) & 1) && 36030daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger (swaptexmatcol != ((rmesa->TexMatColSwap >> unit) & 1))) 36130daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger radeonUploadTexMatrix( rmesa, unit, swaptexmatcol ) ; 36230daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger } 363a3c8de2fa7fba22647e5b3e8cfb05c85d1a5a980Roland Scheidegger } 3645df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 3655df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 3665df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (vtx != rmesa->hw.tcl.cmd[TCL_OUTPUT_VTXFMT]) { 3675df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_STATECHANGE( rmesa, tcl ); 3685df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul rmesa->hw.tcl.cmd[TCL_OUTPUT_VTXFMT] = vtx; 3695df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 3705df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 3715df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul for (i = 0 ; i < RADEON_TCL_MAX_SETUP ; i++) 3725df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if ((setup_tab[i].vertex_format & req) == req) 3735df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul break; 3745df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 3755df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (rmesa->tcl.vertex_format == setup_tab[i].vertex_format && 376e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie rmesa->radeon.tcl.aos[0].bo) 3775df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul return; 3785df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 379e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie if (rmesa->radeon.tcl.aos[0].bo) 3805df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul radeonReleaseArrays( ctx, ~0 ); 3815df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 382b584b0728d3a001a142f76dde22f9e8ed7d2dd16Dave Airlie radeonAllocDmaRegion( &rmesa->radeon, 383e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie &rmesa->radeon.tcl.aos[0].bo, 384e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie &rmesa->radeon.tcl.aos[0].offset, 385d084c3d4dcabf58cef921b50ab60d1287563cd43Roland Scheidegger VB->Count * setup_tab[i].vertex_size * 4, 386d084c3d4dcabf58cef921b50ab60d1287563cd43Roland Scheidegger 4); 3875df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 38857c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell /* The vertex code expects Obj to be clean to element 3. To fix 38957c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell * this, add more vertex code (for obj-2, obj-3) or preferably move 39057c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell * to maos. 39157c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell */ 392165b860da6f16ef4817a4959774a57f57ba3756dEric Anholt if (VB->AttribPtr[_TNL_ATTRIB_POS]->size < 3 || 393165b860da6f16ef4817a4959774a57f57ba3756dEric Anholt (VB->AttribPtr[_TNL_ATTRIB_POS]->size == 3 && 39457c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell (setup_tab[i].vertex_format & RADEON_CP_VC_FRMT_W0))) { 39557c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell 39657c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell _math_trans_4f( rmesa->tcl.ObjClean.data, 397165b860da6f16ef4817a4959774a57f57ba3756dEric Anholt VB->AttribPtr[_TNL_ATTRIB_POS]->data, 398165b860da6f16ef4817a4959774a57f57ba3756dEric Anholt VB->AttribPtr[_TNL_ATTRIB_POS]->stride, 39957c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell GL_FLOAT, 400165b860da6f16ef4817a4959774a57f57ba3756dEric Anholt VB->AttribPtr[_TNL_ATTRIB_POS]->size, 40157c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell 0, 40257c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell VB->Count ); 40357c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell 404165b860da6f16ef4817a4959774a57f57ba3756dEric Anholt switch (VB->AttribPtr[_TNL_ATTRIB_POS]->size) { 40557c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell case 1: 40657c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell _mesa_vector4f_clean_elem(&rmesa->tcl.ObjClean, VB->Count, 1); 40757c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell case 2: 40857c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell _mesa_vector4f_clean_elem(&rmesa->tcl.ObjClean, VB->Count, 2); 40957c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell case 3: 41057c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell if (setup_tab[i].vertex_format & RADEON_CP_VC_FRMT_W0) { 41157c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell _mesa_vector4f_clean_elem(&rmesa->tcl.ObjClean, VB->Count, 3); 41257c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell } 41357c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell case 4: 41457c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell default: 41557c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell break; 41657c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell } 41757c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell 418165b860da6f16ef4817a4959774a57f57ba3756dEric Anholt VB->AttribPtr[_TNL_ATTRIB_POS] = &rmesa->tcl.ObjClean; 41957c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell } 42057c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell 42157c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell 422bd13e6e5e2403ada2098e3a07c0af4b4ba989ab7Dave Airlie radeon_bo_map(rmesa->radeon.tcl.aos[0].bo, 1); 4235df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul setup_tab[i].emit( ctx, 0, VB->Count, 424e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie rmesa->radeon.tcl.aos[0].bo->ptr + rmesa->radeon.tcl.aos[0].offset); 425bd13e6e5e2403ada2098e3a07c0af4b4ba989ab7Dave Airlie radeon_bo_unmap(rmesa->radeon.tcl.aos[0].bo); 426e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie // rmesa->radeon.tcl.aos[0].size = setup_tab[i].vertex_size; 427e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie rmesa->radeon.tcl.aos[0].stride = setup_tab[i].vertex_size; 4285df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul rmesa->tcl.vertex_format = setup_tab[i].vertex_format; 429e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie rmesa->radeon.tcl.aos_count = 1; 4305df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul} 4315df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 4325df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 433