1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**************************************************************************
2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgCopyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and
4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                     Tungsten Graphics Inc., Austin, Texas.
5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgAll Rights Reserved.
7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPermission is hereby granted, free of charge, to any person obtaining
9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orga copy of this software and associated documentation files (the
10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org"Software"), to deal in the Software without restriction, including
11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgwithout limitation the rights to use, copy, modify, merge, publish,
12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdistribute, sublicense, and/or sell copies of the Software, and to
13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgpermit persons to whom the Software is furnished to do so, subject to
14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgthe following conditions:
15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgThe above copyright notice and this permission notice (including the
17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnext paragraph) shall be included in all copies or substantial
18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgportions of the Software.
19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgIN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org**************************************************************************/
29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*
31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Authors:
32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *   Keith Whitwell <keith@tungstengraphics.com>
33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/glheader.h"
36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/imports.h"
37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/mtypes.h"
38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "vbo/vbo.h"
40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "math/m_translate.h"
41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "tnl/tnl.h"
42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "tnl/t_pipeline.h"
43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_context.h"
44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_state.h"
45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_ioctl.h"
46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_tex.h"
47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_tcl.h"
48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_swtcl.h"
49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos.h"
50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_fog.h"
51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RADEON_TCL_MAX_SETUP 19
53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgunion emit_union { float f; GLuint ui; radeon_color_t rgba; };
55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct {
57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void   (*emit)( struct gl_context *, GLuint, GLuint, void * );
58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint vertex_size;
59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint vertex_format;
60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} setup_tab[RADEON_TCL_MAX_SETUP];
61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DO_W    (IND & RADEON_CP_VC_FRMT_W0)
63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DO_RGBA (IND & RADEON_CP_VC_FRMT_PKCOLOR)
64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DO_SPEC_OR_FOG (IND & RADEON_CP_VC_FRMT_PKSPEC)
65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DO_SPEC ((IND & RADEON_CP_VC_FRMT_PKSPEC) && \
66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		 (ctx->_TriangleCaps & DD_SEPARATE_SPECULAR))
67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DO_FOG  ((IND & RADEON_CP_VC_FRMT_PKSPEC) && ctx->Fog.Enabled && \
68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		 (ctx->Fog.FogCoordinateSource == GL_FOG_COORD))
69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DO_TEX0 (IND & RADEON_CP_VC_FRMT_ST0)
70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DO_TEX1 (IND & RADEON_CP_VC_FRMT_ST1)
71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DO_TEX2 (IND & RADEON_CP_VC_FRMT_ST2)
72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DO_PTEX (IND & RADEON_CP_VC_FRMT_Q0)
73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DO_NORM (IND & RADEON_CP_VC_FRMT_N0)
74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DO_TEX3 0
76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GET_TEXSOURCE(n)  n
78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/***********************************************************************
80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *             Generate vertex emit functions               *
81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ***********************************************************************/
82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Defined in order of increasing vertex size:
85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 0
87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY|		\
88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_Z|		\
89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_PKCOLOR)
90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_rgba
91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h"
92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 1
94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY|		\
95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_Z|		\
96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_N0)
97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_n
98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h"
99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 2
101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY|		\
102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_Z|		\
103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_PKCOLOR|		\
104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_ST0)
105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_rgba_st
106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h"
107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 3
109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY|		\
110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_Z|		\
111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_PKCOLOR|		\
112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_N0)
113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_rgba_n
114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h"
115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 4
117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY|		\
118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_Z|		\
119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_ST0|		\
120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_N0)
121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_st_n
122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h"
123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 5
125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY|		\
126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_Z|		\
127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_PKCOLOR|		\
128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_ST0|		\
129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_ST1)
130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_rgba_st_st
131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h"
132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 6
134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY|		\
135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_Z|		\
136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_PKCOLOR|		\
137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_ST0|		\
138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_N0)
139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_rgba_st_n
140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h"
141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 7
143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY|		\
144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_Z|		\
145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_PKCOLOR|		\
146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_PKSPEC|		\
147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_ST0|		\
148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_ST1)
149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_rgba_spec_st_st
150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h"
151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 8
153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY|		\
154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_Z|		\
155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_ST0|		\
156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_ST1|		\
157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_N0)
158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_st_st_n
159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h"
160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 9
162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY|		\
163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_Z|		\
164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_PKCOLOR|		\
165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_PKSPEC|		\
166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_ST0|		\
167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_ST1|		\
168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_N0)
169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_rgba_spec_st_st_n
170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h"
171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 10
173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY|		\
174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_Z|		\
175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_PKCOLOR|		\
176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_ST0|		\
177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_Q0)
178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_rgba_stq
179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h"
180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 11
182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY|		\
183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_Z|		\
184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_PKCOLOR|		\
185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_ST1|		\
186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_Q1|		\
187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_ST0|		\
188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_Q0)
189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_rgba_stq_stq
190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h"
191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 12
193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY|		\
194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_Z|		\
195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_W0|		\
196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_PKCOLOR|		\
197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_PKSPEC|		\
198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_ST0|		\
199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_Q0|		\
200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_ST1|		\
201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_Q1|		\
202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_N0)
203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_w_rgba_spec_stq_stq_n
204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h"
205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 13
207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY|		\
208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_Z|		\
209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_PKCOLOR|		\
210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_ST0|		\
211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_ST1|		\
212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_ST2)
213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_rgba_st_st_st
214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h"
215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 14
217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY|		\
218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_Z|		\
219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_PKCOLOR|		\
220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_PKSPEC|		\
221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_ST0|		\
222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_ST1|		\
223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_ST2)
224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_rgba_spec_st_st_st
225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h"
226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 15
228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY|		\
229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_Z|		\
230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_ST0|		\
231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_ST1|		\
232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_ST2|		\
233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_N0)
234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_st_st_st_n
235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h"
236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 16
238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY|		\
239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_Z|		\
240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_PKCOLOR|		\
241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_PKSPEC|		\
242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_ST0|		\
243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_ST1|		\
244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_ST2|		\
245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_N0)
246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_rgba_spec_st_st_st_n
247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h"
248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 17
250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY|		\
251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_Z|		\
252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_PKCOLOR|		\
253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_ST0|		\
254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_Q0|		\
255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_ST1|		\
256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_Q1|		\
257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_ST2|		\
258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_Q2)
259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_rgba_stq_stq_stq
260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h"
261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 18
263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY|		\
264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_Z|		\
265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_W0|		\
266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_PKCOLOR|		\
267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_PKSPEC|		\
268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_ST0|		\
269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_Q0|		\
270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_ST1|		\
271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_Q1|		\
272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_ST2|		\
273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_Q2|		\
274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	     RADEON_CP_VC_FRMT_N0)
275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_w_rgba_spec_stq_stq_stq_n
276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h"
277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/***********************************************************************
282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *                         Initialization
283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ***********************************************************************/
284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void init_tcl_verts( void )
287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   init_rgba();
289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   init_n();
290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   init_rgba_n();
291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   init_rgba_st();
292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   init_st_n();
293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   init_rgba_st_st();
294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   init_rgba_st_n();
295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   init_rgba_spec_st_st();
296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   init_st_st_n();
297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   init_rgba_spec_st_st_n();
298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   init_rgba_stq();
299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   init_rgba_stq_stq();
300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   init_w_rgba_spec_stq_stq_n();
301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   init_rgba_st_st_st();
302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   init_rgba_spec_st_st_st();
303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   init_st_st_st_n();
304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   init_rgba_spec_st_st_st_n();
305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   init_rgba_stq_stq_stq();
306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   init_w_rgba_spec_stq_stq_stq_n();
307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid radeonEmitArrays( struct gl_context *ctx, GLuint inputs )
311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   r100ContextPtr rmesa = R100_CONTEXT(ctx);
313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint req = 0;
315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint unit;
316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint vtx = (rmesa->hw.tcl.cmd[TCL_OUTPUT_VTXFMT] &
317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		 ~(RADEON_TCL_VTX_Q0|RADEON_TCL_VTX_Q1|RADEON_TCL_VTX_Q2));
318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   int i;
319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   static int firsttime = 1;
320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (firsttime) {
322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      init_tcl_verts();
323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      firsttime = 0;
324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (1) {
327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      req |= RADEON_CP_VC_FRMT_Z;
328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (VB->AttribPtr[_TNL_ATTRIB_POS]->size == 4) {
329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 req |= RADEON_CP_VC_FRMT_W0;
330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (inputs & VERT_BIT_NORMAL) {
334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      req |= RADEON_CP_VC_FRMT_N0;
335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (inputs & VERT_BIT_COLOR0) {
338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      req |= RADEON_CP_VC_FRMT_PKCOLOR;
339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (inputs & (VERT_BIT_COLOR1|VERT_BIT_FOG)) {
342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      req |= RADEON_CP_VC_FRMT_PKSPEC;
343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   for (unit = 0; unit < ctx->Const.MaxTextureUnits; unit++) {
346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (inputs & VERT_BIT_TEX(unit)) {
347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 req |= RADEON_ST_BIT(unit);
348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 /* assume we need the 3rd coord if texgen is active for r/q OR at least
349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	    3 coords are submitted. This may not be 100% correct */
350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 if (VB->AttribPtr[_TNL_ATTRIB_TEX0 + unit]->size >= 3) {
351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	    req |= RADEON_Q_BIT(unit);
352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	    vtx |= RADEON_Q_BIT(unit);
353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 }
354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 if ( (ctx->Texture.Unit[unit].TexGenEnabled & (R_BIT | Q_BIT)) )
355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	    vtx |= RADEON_Q_BIT(unit);
356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 else if ((VB->AttribPtr[_TNL_ATTRIB_TEX0 + unit]->size >= 3) &&
357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	          ((ctx->Texture.Unit[unit]._ReallyEnabled & (TEXTURE_CUBE_BIT)) == 0)) {
358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	    GLuint swaptexmatcol = (VB->AttribPtr[_TNL_ATTRIB_TEX0 + unit]->size - 3);
359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	    if (((rmesa->NeedTexMatrix >> unit) & 1) &&
360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		 (swaptexmatcol != ((rmesa->TexMatColSwap >> unit) & 1)))
361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	       radeonUploadTexMatrix( rmesa, unit, swaptexmatcol ) ;
362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 }
363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (vtx != rmesa->hw.tcl.cmd[TCL_OUTPUT_VTXFMT]) {
367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      RADEON_STATECHANGE( rmesa, tcl );
368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      rmesa->hw.tcl.cmd[TCL_OUTPUT_VTXFMT] = vtx;
369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   for (i = 0 ; i < RADEON_TCL_MAX_SETUP ; i++)
372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if ((setup_tab[i].vertex_format & req) == req)
373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 break;
374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (rmesa->tcl.vertex_format == setup_tab[i].vertex_format &&
376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       rmesa->radeon.tcl.aos[0].bo)
377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return;
378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (rmesa->radeon.tcl.aos[0].bo)
380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      radeonReleaseArrays( ctx, ~0 );
381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   radeonAllocDmaRegion( &rmesa->radeon,
383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			 &rmesa->radeon.tcl.aos[0].bo,
384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			 &rmesa->radeon.tcl.aos[0].offset,
385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			 VB->Count * setup_tab[i].vertex_size * 4,
386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			 4);
387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* The vertex code expects Obj to be clean to element 3.  To fix
389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * this, add more vertex code (for obj-2, obj-3) or preferably move
390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * to maos.
391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    */
392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (VB->AttribPtr[_TNL_ATTRIB_POS]->size < 3 ||
393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       (VB->AttribPtr[_TNL_ATTRIB_POS]->size == 3 &&
394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	(setup_tab[i].vertex_format & RADEON_CP_VC_FRMT_W0))) {
395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      _math_trans_4f( rmesa->tcl.ObjClean.data,
397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		      VB->AttribPtr[_TNL_ATTRIB_POS]->data,
398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		      VB->AttribPtr[_TNL_ATTRIB_POS]->stride,
399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		      GL_FLOAT,
400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		      VB->AttribPtr[_TNL_ATTRIB_POS]->size,
401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		      0,
402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		      VB->Count );
403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      switch (VB->AttribPtr[_TNL_ATTRIB_POS]->size) {
405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      case 1:
406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	    _mesa_vector4f_clean_elem(&rmesa->tcl.ObjClean, VB->Count, 1);
407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      case 2:
408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	    _mesa_vector4f_clean_elem(&rmesa->tcl.ObjClean, VB->Count, 2);
409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      case 3:
410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 if (setup_tab[i].vertex_format & RADEON_CP_VC_FRMT_W0) {
411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	    _mesa_vector4f_clean_elem(&rmesa->tcl.ObjClean, VB->Count, 3);
412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 }
413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      case 4:
414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      default:
415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 break;
416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      VB->AttribPtr[_TNL_ATTRIB_POS] = &rmesa->tcl.ObjClean;
419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   radeon_bo_map(rmesa->radeon.tcl.aos[0].bo, 1);
423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   setup_tab[i].emit( ctx, 0, VB->Count,
424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		      rmesa->radeon.tcl.aos[0].bo->ptr + rmesa->radeon.tcl.aos[0].offset);
425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   radeon_bo_unmap(rmesa->radeon.tcl.aos[0].bo);
426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   //   rmesa->radeon.tcl.aos[0].size = setup_tab[i].vertex_size;
427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   rmesa->radeon.tcl.aos[0].stride = setup_tab[i].vertex_size;
428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   rmesa->tcl.vertex_format = setup_tab[i].vertex_format;
429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   rmesa->radeon.tcl.aos_count = 1;
430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
433