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