radeon_maos_verts.c revision 5df82c82bd53db90eb72c5aad4dd20cf6f1116b1
15df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/* $XFree86$ */
25df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/**************************************************************************
35df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
45df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulCopyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and
55df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul                     Tungsten Graphics Inc., Austin, Texas.
65df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
75df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulAll Rights Reserved.
85df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
95df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulPermission is hereby granted, free of charge, to any person obtaining
105df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paula copy of this software and associated documentation files (the
115df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul"Software"), to deal in the Software without restriction, including
125df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulwithout limitation the rights to use, copy, modify, merge, publish,
135df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Pauldistribute, sublicense, and/or sell copies of the Software, and to
145df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulpermit persons to whom the Software is furnished to do so, subject to
155df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulthe following conditions:
165df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
175df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulThe above copyright notice and this permission notice (including the
185df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulnext paragraph) shall be included in all copies or substantial
195df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulportions of the Software.
205df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
215df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
225df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
235df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
245df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulIN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
255df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
265df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
275df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
285df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
295df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul**************************************************************************/
305df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
315df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/*
325df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * Authors:
335df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul *   Keith Whitwell <keith@tungstengraphics.com>
345df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul */
355df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
365df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "glheader.h"
375df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "imports.h"
385df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "mtypes.h"
395df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
405df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "array_cache/acache.h"
415df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "tnl/tnl.h"
425df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "tnl/t_pipeline.h"
435df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "tnl/t_imm_debug.h"
445df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
455df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_context.h"
465df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_state.h"
475df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_ioctl.h"
485df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_tex.h"
495df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_tcl.h"
505df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_swtcl.h"
515df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos.h"
525df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
535df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
545df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define RADEON_TCL_MAX_SETUP 13
555df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
565df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulunion emit_union { float f; GLuint ui; radeon_color_t specular; };
575df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
585df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstatic struct {
595df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   void   (*emit)( GLcontext *, GLuint, GLuint, void * );
605df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint vertex_size;
615df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint vertex_format;
625df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul} setup_tab[RADEON_TCL_MAX_SETUP];
635df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
645df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DO_W    (IND & RADEON_CP_VC_FRMT_W0)
655df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DO_RGBA (IND & RADEON_CP_VC_FRMT_PKCOLOR)
665df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DO_SPEC (IND & RADEON_CP_VC_FRMT_PKSPEC)
675df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DO_FOG  (IND & RADEON_CP_VC_FRMT_PKSPEC)
685df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DO_TEX0 (IND & RADEON_CP_VC_FRMT_ST0)
695df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DO_TEX1 (IND & RADEON_CP_VC_FRMT_ST1)
705df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DO_PTEX (IND & RADEON_CP_VC_FRMT_Q0)
715df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DO_NORM (IND & RADEON_CP_VC_FRMT_N0)
725df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
735df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DO_TEX2 0
745df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DO_TEX3 0
755df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
765df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define GET_TEXSOURCE(n)  n
775df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define GET_UBYTE_COLOR_STORE() &RADEON_CONTEXT(ctx)->UbyteColor
785df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define GET_UBYTE_SPEC_COLOR_STORE() &RADEON_CONTEXT(ctx)->UbyteSecondaryColor
795df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
805df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IMPORT_FLOAT_COLORS radeon_import_float_colors
815df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IMPORT_FLOAT_SPEC_COLORS radeon_import_float_spec_colors
825df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
835df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/***********************************************************************
845df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul *             Generate vertex emit functions               *
855df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul ***********************************************************************/
865df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
875df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
885df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/* Defined in order of increasing vertex size:
895df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul */
905df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 0
915df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY|		\
925df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_Z|		\
935df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_PKCOLOR)
945df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_rgba
955df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h"
965df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
975df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 1
985df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY|		\
995df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_Z|		\
1005df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_N0)
1015df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_n
1025df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h"
1035df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1045df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 2
1055df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY|		\
1065df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_Z|		\
1075df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_PKCOLOR|		\
1085df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_ST0)
1095df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_rgba_st
1105df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h"
1115df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1125df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 3
1135df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY|		\
1145df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_Z|		\
1155df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_PKCOLOR|		\
1165df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_N0)
1175df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_rgba_n
1185df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h"
1195df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1205df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 4
1215df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY|		\
1225df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_Z|		\
1235df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_ST0|		\
1245df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_N0)
1255df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_st_n
1265df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h"
1275df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1285df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 5
1295df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY|		\
1305df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_Z|		\
1315df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_PKCOLOR|		\
1325df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_ST0|		\
1335df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_ST1)
1345df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_rgba_st_st
1355df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h"
1365df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1375df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 6
1385df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY|		\
1395df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_Z|		\
1405df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_PKCOLOR|		\
1415df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_ST0|		\
1425df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_N0)
1435df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_rgba_st_n
1445df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h"
1455df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1465df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 7
1475df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY|		\
1485df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_Z|		\
1495df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_PKCOLOR|		\
1505df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_PKSPEC|		\
1515df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_ST0|		\
1525df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_ST1)
1535df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_rgba_spec_st_st
1545df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h"
1555df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1565df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 8
1575df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY|		\
1585df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_Z|		\
1595df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_ST0|		\
1605df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_ST1|		\
1615df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_N0)
1625df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_st_st_n
1635df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h"
1645df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1655df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 9
1665df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY|		\
1675df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_Z|		\
1685df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_PKCOLOR|		\
1695df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_PKSPEC|		\
1705df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_ST0|		\
1715df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_ST1|		\
1725df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_N0)
1735df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_rgpa_spec_st_st_n
1745df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h"
1755df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1765df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 10
1775df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY|		\
1785df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_Z|		\
1795df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_PKCOLOR|		\
1805df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_ST0|		\
1815df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_Q0)
1825df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_rgba_stq
1835df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h"
1845df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1855df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 11
1865df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY|		\
1875df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_Z|		\
1885df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_PKCOLOR|		\
1895df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_ST1|		\
1905df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_Q1|		\
1915df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_ST0|		\
1925df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_Q0)
1935df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_rgba_stq_stq
1945df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h"
1955df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1965df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 12
1975df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY|		\
1985df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_Z|		\
1995df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_W0|		\
2005df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_PKCOLOR|		\
2015df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_PKSPEC|		\
2025df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_ST0|		\
2035df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_Q0|		\
2045df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_ST1|		\
2055df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_Q1|		\
2065df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	     RADEON_CP_VC_FRMT_N0)
2075df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_w_rgpa_spec_stq_stq_n
2085df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h"
2095df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
2105df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
2115df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
2125df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
2135df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
2145df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/***********************************************************************
2155df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul *                         Initialization
2165df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul ***********************************************************************/
2175df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
2185df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
2195df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstatic void init_tcl_verts( void )
2205df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul{
2215df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   init_rgba();
2225df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   init_n();
2235df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   init_rgba_n();
2245df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   init_rgba_st();
2255df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   init_st_n();
2265df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   init_rgba_st_st();
2275df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   init_rgba_st_n();
2285df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   init_rgba_spec_st_st();
2295df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   init_st_st_n();
2305df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   init_rgpa_spec_st_st_n();
2315df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   init_rgba_stq();
2325df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   init_rgba_stq_stq();
2335df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   init_w_rgpa_spec_stq_stq_n();
2345df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul}
2355df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
2365df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
2375df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulvoid radeonEmitArrays( GLcontext *ctx, GLuint inputs )
2385df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul{
2395df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   radeonContextPtr rmesa = RADEON_CONTEXT(ctx);
2405df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
2415df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint req = 0;
2425df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint vtx = (rmesa->hw.tcl.cmd[TCL_OUTPUT_VTXFMT] &
2435df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul		 ~(RADEON_TCL_VTX_Q0|RADEON_TCL_VTX_Q1));
2445df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   int i;
2455df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   static int firsttime = 1;
2465df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
2475df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   if (firsttime) {
2485df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul      init_tcl_verts();
2495df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul      firsttime = 0;
2505df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   }
2515df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
2525df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   if (1) {
2535df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul      req |= RADEON_CP_VC_FRMT_Z;
2545df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul      if (VB->ObjPtr->size == 4) {
2555df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	 req |= RADEON_CP_VC_FRMT_W0;
2565df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul      }
2575df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   }
2585df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
2595df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   if (inputs & VERT_BIT_NORMAL) {
2605df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul      req |= RADEON_CP_VC_FRMT_N0;
2615df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   }
2625df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
2635df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   if (inputs & VERT_BIT_COLOR0) {
2645df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul      req |= RADEON_CP_VC_FRMT_PKCOLOR;
2655df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   }
2665df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
2675df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   if (inputs & VERT_BIT_COLOR1) {
2685df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul      req |= RADEON_CP_VC_FRMT_PKSPEC;
2695df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   }
2705df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
2715df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   if (inputs & VERT_BIT_TEX0) {
2725df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul      req |= RADEON_CP_VC_FRMT_ST0;
2735df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
2745df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul      if (VB->TexCoordPtr[0]->size == 4) {
2755df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	 req |= RADEON_CP_VC_FRMT_Q0;
2765df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	 vtx |= RADEON_TCL_VTX_Q0;
2775df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul      }
2785df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   }
2795df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
2805df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   if (inputs & VERT_BIT_TEX1) {
2815df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul      req |= RADEON_CP_VC_FRMT_ST1;
2825df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
2835df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul      if (VB->TexCoordPtr[1]->size == 4) {
2845df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	 req |= RADEON_CP_VC_FRMT_Q1;
2855df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	 vtx |= RADEON_TCL_VTX_Q1;
2865df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul      }
2875df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   }
2885df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
2895df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   if (vtx != rmesa->hw.tcl.cmd[TCL_OUTPUT_VTXFMT]) {
2905df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul      RADEON_STATECHANGE( rmesa, tcl );
2915df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul      rmesa->hw.tcl.cmd[TCL_OUTPUT_VTXFMT] = vtx;
2925df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   }
2935df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
2945df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   for (i = 0 ; i < RADEON_TCL_MAX_SETUP ; i++)
2955df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul      if ((setup_tab[i].vertex_format & req) == req)
2965df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul	 break;
2975df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
2985df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   if (rmesa->tcl.vertex_format == setup_tab[i].vertex_format &&
2995df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul       rmesa->tcl.indexed_verts.buf)
3005df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul      return;
3015df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
3025df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   if (rmesa->tcl.indexed_verts.buf)
3035df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul      radeonReleaseArrays( ctx, ~0 );
3045df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
3055df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   radeonAllocDmaRegionVerts( rmesa,
3065df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul			      &rmesa->tcl.indexed_verts,
3075df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul			      VB->Count,
3085df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul			      setup_tab[i].vertex_size * 4,
3095df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul			      4);
3105df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
3115df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   setup_tab[i].emit( ctx, 0, VB->Count,
3125df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul		      rmesa->tcl.indexed_verts.address +
3135df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul		      rmesa->tcl.indexed_verts.start );
3145df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
3155df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   rmesa->tcl.vertex_format = setup_tab[i].vertex_format;
3165df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   rmesa->tcl.indexed_verts.aos_start = GET_START( &rmesa->tcl.indexed_verts );
3175df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   rmesa->tcl.indexed_verts.aos_size = setup_tab[i].vertex_size;
3185df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   rmesa->tcl.indexed_verts.aos_stride = setup_tab[i].vertex_size;
3195df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
3205df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   rmesa->tcl.aos_components[0] = &rmesa->tcl.indexed_verts;
3215df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   rmesa->tcl.nr_aos_components = 1;
3225df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul}
3235df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
3245df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
3255df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
3265df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulvoid radeonReleaseArrays( GLcontext *ctx, GLuint newinputs )
3275df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul{
3285df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   radeonContextPtr rmesa = RADEON_CONTEXT( ctx );
3295df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
3305df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   if (RADEON_DEBUG & DEBUG_VERTS)
3315df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul      _tnl_print_vert_flags( __FUNCTION__, newinputs );
3325df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
3335df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   if (newinputs)
3345df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul     radeonReleaseDmaRegion( rmesa, &rmesa->tcl.indexed_verts, __FUNCTION__ );
3355df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul}
336