r200_state_init.c revision f8c2beccd4847836dec18849d2d58f3220ff81eb
1adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/*
2adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellCopyright (C) The Weather Channel, Inc.  2002.  All Rights Reserved.
3adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
4adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellThe Weather Channel (TM) funded Tungsten Graphics to develop the
5adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellinitial release of the Radeon 8500 driver under the XFree86 license.
6adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellThis notice must be preserved.
7adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
8adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellPermission is hereby granted, free of charge, to any person obtaining
9adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwella copy of this software and associated documentation files (the
10adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell"Software"), to deal in the Software without restriction, including
11adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellwithout limitation the rights to use, copy, modify, merge, publish,
12adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwelldistribute, sublicense, and/or sell copies of the Software, and to
13adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellpermit persons to whom the Software is furnished to do so, subject to
14adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellthe following conditions:
15adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
16adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellThe above copyright notice and this permission notice (including the
17adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellnext paragraph) shall be included in all copies or substantial
18adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellportions of the Software.
19adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
20adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
23adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellIN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
24adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell*/
28adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
29adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/*
30adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell * Authors:
31adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell *   Keith Whitwell <keith@tungstengraphics.com>
32adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
33adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
34ecadb51bbcb972a79f3ed79e65a7986b9396e757Brian Paul#include "main/glheader.h"
35ecadb51bbcb972a79f3ed79e65a7986b9396e757Brian Paul#include "main/imports.h"
36ecadb51bbcb972a79f3ed79e65a7986b9396e757Brian Paul#include "main/enums.h"
37ecadb51bbcb972a79f3ed79e65a7986b9396e757Brian Paul#include "main/colormac.h"
38ecadb51bbcb972a79f3ed79e65a7986b9396e757Brian Paul#include "main/api_arrayelt.h"
39adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
40adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "swrast/swrast.h"
4180c88304fc9d09531b2530b74973821e47b46753Keith Whitwell#include "vbo/vbo.h"
42adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "tnl/tnl.h"
43adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "tnl/t_pipeline.h"
44adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "swrast_setup/swrast_setup.h"
45adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
468cb16e6daff40bbfd7b63a43da72862226a4a164Dave Airlie#include "radeon_common.h"
4761bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie#include "radeon_mipmap_tree.h"
48adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "r200_context.h"
49adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "r200_ioctl.h"
50adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "r200_state.h"
51adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "r200_tcl.h"
52adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "r200_tex.h"
53adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "r200_swtcl.h"
54adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
55273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane#include "xmlpool.h"
56273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane
57ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie/* New (1.3) state mechanism.  3 commands (packet, scalar, vector) in
58ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie * 1.3 cmdbuffers allow all previous state to be updated as well as
59ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie * the tcl scalar and vector areas.
60ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie */
61ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airliestatic struct {
62ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	int start;
63ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	int len;
64ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	const char *name;
65ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie} packet[RADEON_MAX_STATE_PACKETS] = {
66ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_MISC, 7, "RADEON_PP_MISC"},
67ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_CNTL, 3, "RADEON_PP_CNTL"},
68ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_RB3D_COLORPITCH, 1, "RADEON_RB3D_COLORPITCH"},
69ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_RE_LINE_PATTERN, 2, "RADEON_RE_LINE_PATTERN"},
70ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_SE_LINE_WIDTH, 1, "RADEON_SE_LINE_WIDTH"},
71ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_LUM_MATRIX, 1, "RADEON_PP_LUM_MATRIX"},
72ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_ROT_MATRIX_0, 2, "RADEON_PP_ROT_MATRIX_0"},
73ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_RB3D_STENCILREFMASK, 3, "RADEON_RB3D_STENCILREFMASK"},
74ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_SE_VPORT_XSCALE, 6, "RADEON_SE_VPORT_XSCALE"},
75ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_SE_CNTL, 2, "RADEON_SE_CNTL"},
76ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_SE_CNTL_STATUS, 1, "RADEON_SE_CNTL_STATUS"},
77ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_RE_MISC, 1, "RADEON_RE_MISC"},
78ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_TXFILTER_0, 6, "RADEON_PP_TXFILTER_0"},
79ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_BORDER_COLOR_0, 1, "RADEON_PP_BORDER_COLOR_0"},
80ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_TXFILTER_1, 6, "RADEON_PP_TXFILTER_1"},
81ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_BORDER_COLOR_1, 1, "RADEON_PP_BORDER_COLOR_1"},
82ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_TXFILTER_2, 6, "RADEON_PP_TXFILTER_2"},
83ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_BORDER_COLOR_2, 1, "RADEON_PP_BORDER_COLOR_2"},
84ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_SE_ZBIAS_FACTOR, 2, "RADEON_SE_ZBIAS_FACTOR"},
85ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_SE_TCL_OUTPUT_VTX_FMT, 11, "RADEON_SE_TCL_OUTPUT_VTX_FMT"},
86ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_SE_TCL_MATERIAL_EMMISSIVE_RED, 17,
87ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie		    "RADEON_SE_TCL_MATERIAL_EMMISSIVE_RED"},
88ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXCBLEND_0, 4, "R200_PP_TXCBLEND_0"},
89ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXCBLEND_1, 4, "R200_PP_TXCBLEND_1"},
90ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXCBLEND_2, 4, "R200_PP_TXCBLEND_2"},
91ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXCBLEND_3, 4, "R200_PP_TXCBLEND_3"},
92ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXCBLEND_4, 4, "R200_PP_TXCBLEND_4"},
93ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXCBLEND_5, 4, "R200_PP_TXCBLEND_5"},
94ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXCBLEND_6, 4, "R200_PP_TXCBLEND_6"},
95ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXCBLEND_7, 4, "R200_PP_TXCBLEND_7"},
96ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_SE_TCL_LIGHT_MODEL_CTL_0, 6, "R200_SE_TCL_LIGHT_MODEL_CTL_0"},
97ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TFACTOR_0, 6, "R200_PP_TFACTOR_0"},
98ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_SE_VTX_FMT_0, 4, "R200_SE_VTX_FMT_0"},
99ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_SE_VAP_CNTL, 1, "R200_SE_VAP_CNTL"},
100ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_SE_TCL_MATRIX_SEL_0, 5, "R200_SE_TCL_MATRIX_SEL_0"},
101ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_SE_TCL_TEX_PROC_CTL_2, 5, "R200_SE_TCL_TEX_PROC_CTL_2"},
102ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_SE_TCL_UCP_VERT_BLEND_CTL, 1, "R200_SE_TCL_UCP_VERT_BLEND_CTL"},
103ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXFILTER_0, 6, "R200_PP_TXFILTER_0"},
104ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXFILTER_1, 6, "R200_PP_TXFILTER_1"},
105ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXFILTER_2, 6, "R200_PP_TXFILTER_2"},
106ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXFILTER_3, 6, "R200_PP_TXFILTER_3"},
107ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXFILTER_4, 6, "R200_PP_TXFILTER_4"},
108ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXFILTER_5, 6, "R200_PP_TXFILTER_5"},
109ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXOFFSET_0, 1, "R200_PP_TXOFFSET_0"},
110ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXOFFSET_1, 1, "R200_PP_TXOFFSET_1"},
111ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXOFFSET_2, 1, "R200_PP_TXOFFSET_2"},
112ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXOFFSET_3, 1, "R200_PP_TXOFFSET_3"},
113ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXOFFSET_4, 1, "R200_PP_TXOFFSET_4"},
114ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXOFFSET_5, 1, "R200_PP_TXOFFSET_5"},
115ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_SE_VTE_CNTL, 1, "R200_SE_VTE_CNTL"},
116ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_SE_TCL_OUTPUT_VTX_COMP_SEL, 1,
117ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	 "R200_SE_TCL_OUTPUT_VTX_COMP_SEL"},
118ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TAM_DEBUG3, 1, "R200_PP_TAM_DEBUG3"},
119ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_CNTL_X, 1, "R200_PP_CNTL_X"},
120ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_RB3D_DEPTHXY_OFFSET, 1, "R200_RB3D_DEPTHXY_OFFSET"},
121ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_RE_AUX_SCISSOR_CNTL, 1, "R200_RE_AUX_SCISSOR_CNTL"},
122ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_RE_SCISSOR_TL_0, 2, "R200_RE_SCISSOR_TL_0"},
123ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_RE_SCISSOR_TL_1, 2, "R200_RE_SCISSOR_TL_1"},
124ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_RE_SCISSOR_TL_2, 2, "R200_RE_SCISSOR_TL_2"},
125ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_SE_VAP_CNTL_STATUS, 1, "R200_SE_VAP_CNTL_STATUS"},
126ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_SE_VTX_STATE_CNTL, 1, "R200_SE_VTX_STATE_CNTL"},
127ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_RE_POINTSIZE, 1, "R200_RE_POINTSIZE"},
128ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_SE_TCL_INPUT_VTX_VECTOR_ADDR_0, 4,
129ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie		    "R200_SE_TCL_INPUT_VTX_VECTOR_ADDR_0"},
130ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_CUBIC_FACES_0, 1, "R200_PP_CUBIC_FACES_0"},	/* 61 */
131ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_CUBIC_OFFSET_F1_0, 5, "R200_PP_CUBIC_OFFSET_F1_0"}, /* 62 */
132ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_CUBIC_FACES_1, 1, "R200_PP_CUBIC_FACES_1"},
133ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_CUBIC_OFFSET_F1_1, 5, "R200_PP_CUBIC_OFFSET_F1_1"},
134ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_CUBIC_FACES_2, 1, "R200_PP_CUBIC_FACES_2"},
135ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_CUBIC_OFFSET_F1_2, 5, "R200_PP_CUBIC_OFFSET_F1_2"},
136ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_CUBIC_FACES_3, 1, "R200_PP_CUBIC_FACES_3"},
137ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_CUBIC_OFFSET_F1_3, 5, "R200_PP_CUBIC_OFFSET_F1_3"},
138ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_CUBIC_FACES_4, 1, "R200_PP_CUBIC_FACES_4"},
139ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_CUBIC_OFFSET_F1_4, 5, "R200_PP_CUBIC_OFFSET_F1_4"},
140ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_CUBIC_FACES_5, 1, "R200_PP_CUBIC_FACES_5"},
141ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_CUBIC_OFFSET_F1_5, 5, "R200_PP_CUBIC_OFFSET_F1_5"},
142ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_TEX_SIZE_0, 2, "RADEON_PP_TEX_SIZE_0"},
143ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_TEX_SIZE_1, 2, "RADEON_PP_TEX_SIZE_1"},
144ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_TEX_SIZE_2, 2, "RADEON_PP_TEX_SIZE_2"},
145ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_RB3D_BLENDCOLOR, 3, "R200_RB3D_BLENDCOLOR"},
146ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_SE_TCL_POINT_SPRITE_CNTL, 1, "R200_SE_TCL_POINT_SPRITE_CNTL"},
147ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_CUBIC_FACES_0, 1, "RADEON_PP_CUBIC_FACES_0"},
148ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_CUBIC_OFFSET_T0_0, 5, "RADEON_PP_CUBIC_OFFSET_T0_0"},
149ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_CUBIC_FACES_1, 1, "RADEON_PP_CUBIC_FACES_1"},
150ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_CUBIC_OFFSET_T1_0, 5, "RADEON_PP_CUBIC_OFFSET_T1_0"},
151ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_CUBIC_FACES_2, 1, "RADEON_PP_CUBIC_FACES_2"},
152ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_CUBIC_OFFSET_T2_0, 5, "RADEON_PP_CUBIC_OFFSET_T2_0"},
153ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TRI_PERF, 2, "R200_PP_TRI_PERF"},
154ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXCBLEND_8, 32, "R200_PP_AFS_0"},     /* 85 */
155ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXCBLEND_0, 32, "R200_PP_AFS_1"},
156ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TFACTOR_0, 8, "R200_ATF_TFACTOR"},
157ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXFILTER_0, 8, "R200_PP_TXCTLALL_0"},
158ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXFILTER_1, 8, "R200_PP_TXCTLALL_1"},
159ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXFILTER_2, 8, "R200_PP_TXCTLALL_2"},
160ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXFILTER_3, 8, "R200_PP_TXCTLALL_3"},
161ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXFILTER_4, 8, "R200_PP_TXCTLALL_4"},
162ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXFILTER_5, 8, "R200_PP_TXCTLALL_5"},
163ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_VAP_PVS_CNTL_1, 2, "R200_VAP_PVS_CNTL"},
164ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie};
165ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie
166adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* =============================================================
167adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell * State initialization
168adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
169adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
170adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellvoid r200PrintDirty( r200ContextPtr rmesa, const char *msg )
171adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell{
172b6e486906968d82c7b8a869d7ab51697a7cce80cDave Airlie   struct radeon_state_atom *l;
173adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
174adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   fprintf(stderr, msg);
175adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   fprintf(stderr, ": ");
176adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1771090d206de011a67d236d8c4ae32d2d42b2f6337Dave Airlie   foreach(l, &rmesa->radeon.hw.atomlist) {
1781090d206de011a67d236d8c4ae32d2d42b2f6337Dave Airlie      if (l->dirty || rmesa->radeon.hw.all_dirty)
1790c8f8d3dc9d60ed34eeca7f3606651420a81753cEric Anholt	 fprintf(stderr, "%s, ", l->name);
180adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   }
181adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
182adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   fprintf(stderr, "\n");
183adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell}
184adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
185474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airliestatic int cmdpkt( r200ContextPtr rmesa, int id )
186adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell{
187ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl   drm_radeon_cmd_header_t h;
188474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
189474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   if (rmesa->radeon.radeonScreen->kernel_mm) {
190474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     return CP_PACKET0(packet[id].start, packet[id].len - 1);
191474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   } else {
192474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     h.i = 0;
193474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     h.packet.cmd_type = RADEON_CMD_PACKET;
194474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     h.packet.packet_id = id;
195474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   }
196adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   return h.i;
197adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell}
198adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
199adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstatic int cmdvec( int offset, int stride, int count )
200adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell{
201ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl   drm_radeon_cmd_header_t h;
202adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.i = 0;
203adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.vectors.cmd_type = RADEON_CMD_VECTORS;
204adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.vectors.offset = offset;
205adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.vectors.stride = stride;
206adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.vectors.count = count;
207adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   return h.i;
208adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell}
209adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
21098c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger/* warning: the count here is divided by 4 compared to other cmds
21198c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   (so it doesn't exceed the char size)! */
21298c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheideggerstatic int cmdveclinear( int offset, int count )
21398c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger{
21498c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   drm_radeon_cmd_header_t h;
21598c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   h.i = 0;
21698c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   h.veclinear.cmd_type = RADEON_CMD_VECLINEAR;
21798c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   h.veclinear.addr_lo = offset & 0xff;
21898c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   h.veclinear.addr_hi = (offset & 0xff00) >> 8;
21998c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   h.veclinear.count = count;
22098c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   return h.i;
22198c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger}
22298c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger
223adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstatic int cmdscl( int offset, int stride, int count )
224adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell{
225ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl   drm_radeon_cmd_header_t h;
226adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.i = 0;
227adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.scalars.cmd_type = RADEON_CMD_SCALARS;
228adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.scalars.offset = offset;
229adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.scalars.stride = stride;
230adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.scalars.count = count;
231adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   return h.i;
232adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell}
233adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
234adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstatic int cmdscl2( int offset, int stride, int count )
235adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell{
236ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl   drm_radeon_cmd_header_t h;
237adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.i = 0;
238adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.scalars.cmd_type = RADEON_CMD_SCALARS2;
239adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.scalars.offset = offset - 0x100;
240adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.scalars.stride = stride;
241adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.scalars.count = count;
242adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   return h.i;
243adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell}
244adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
245adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CHECK( NM, FLAG )				\
2464637235183b80963536f2364e4d50fcb894886ddDave Airliestatic int check_##NM( GLcontext *ctx, struct radeon_state_atom *atom) \
247adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell{							\
24836603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger   r200ContextPtr rmesa = R200_CONTEXT(ctx);		\
24936603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger   (void) rmesa;					\
2500c0a55a21158e1f97cf140c0a1c0531c06751873Dave Airlie   return (FLAG) ? atom->cmd_size : 0;			\
251adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell}
252adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
253adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCL_CHECK( NM, FLAG )				\
2544637235183b80963536f2364e4d50fcb894886ddDave Airliestatic int check_##NM( GLcontext *ctx, struct radeon_state_atom *atom) \
2554637235183b80963536f2364e4d50fcb894886ddDave Airlie{									\
2564637235183b80963536f2364e4d50fcb894886ddDave Airlie   r200ContextPtr rmesa = R200_CONTEXT(ctx);				\
2570c0a55a21158e1f97cf140c0a1c0531c06751873Dave Airlie   return (!rmesa->radeon.TclFallback && !ctx->VertexProgram._Enabled && (FLAG)) ? atom->cmd_size : 0; \
25898c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger}
25998c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger
26098c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger#define TCL_OR_VP_CHECK( NM, FLAG )			\
2614637235183b80963536f2364e4d50fcb894886ddDave Airliestatic int check_##NM( GLcontext *ctx, struct radeon_state_atom *atom ) \
26298c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger{							\
26398c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   r200ContextPtr rmesa = R200_CONTEXT(ctx);		\
2640c0a55a21158e1f97cf140c0a1c0531c06751873Dave Airlie   return (!rmesa->radeon.TclFallback && (FLAG)) ? atom->cmd_size : 0;	\
265adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell}
266adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
26798c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger#define VP_CHECK( NM, FLAG )				\
2684637235183b80963536f2364e4d50fcb894886ddDave Airliestatic int check_##NM( GLcontext *ctx, struct radeon_state_atom *atom ) \
2694637235183b80963536f2364e4d50fcb894886ddDave Airlie{									\
2704637235183b80963536f2364e4d50fcb894886ddDave Airlie   r200ContextPtr rmesa = R200_CONTEXT(ctx);				\
2714637235183b80963536f2364e4d50fcb894886ddDave Airlie   (void) atom;								\
2720c0a55a21158e1f97cf140c0a1c0531c06751873Dave Airlie   return (!rmesa->radeon.TclFallback && ctx->VertexProgram._Enabled && (FLAG)) ? atom->cmd_size : 0; \
27398c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger}
274adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
275adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellCHECK( always, GL_TRUE )
276bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon SmirlCHECK( never, GL_FALSE )
277adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellCHECK( tex_any, ctx->Texture._EnabledUnits )
278f20917de5bd2b1fc152e74304d3649a1f6042422Roland ScheideggerCHECK( tf, (ctx->Texture._EnabledUnits && !ctx->ATIFragmentShader._Enabled) );
2794637235183b80963536f2364e4d50fcb894886ddDave AirlieCHECK( tex_pair, (rmesa->state.texture.unit[atom->idx].unitneeded | rmesa->state.texture.unit[atom->idx & ~1].unitneeded) )
2804637235183b80963536f2364e4d50fcb894886ddDave AirlieCHECK( tex, rmesa->state.texture.unit[atom->idx].unitneeded )
281f20917de5bd2b1fc152e74304d3649a1f6042422Roland ScheideggerCHECK( pix_zero, !ctx->ATIFragmentShader._Enabled )
2824637235183b80963536f2364e4d50fcb894886ddDave Airlie   CHECK( texenv, (rmesa->state.envneeded & (1 << (atom->idx)) && !ctx->ATIFragmentShader._Enabled) )
283f20917de5bd2b1fc152e74304d3649a1f6042422Roland ScheideggerCHECK( afs_pass1, (ctx->ATIFragmentShader._Enabled && (ctx->ATIFragmentShader.Current->NumPasses > 1)) )
284f20917de5bd2b1fc152e74304d3649a1f6042422Roland ScheideggerCHECK( afs, ctx->ATIFragmentShader._Enabled )
2854637235183b80963536f2364e4d50fcb894886ddDave AirlieCHECK( tex_cube, rmesa->state.texture.unit[atom->idx].unitneeded & TEXTURE_CUBE_BIT )
286014bfda235e5315baf84b1d47329be167dd2ec7fRoland ScheideggerTCL_CHECK( tcl_fog, ctx->Fog.Enabled )
287adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellTCL_CHECK( tcl, GL_TRUE )
2884637235183b80963536f2364e4d50fcb894886ddDave AirlieTCL_CHECK( tcl_tex, rmesa->state.texture.unit[atom->idx].unitneeded )
289adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellTCL_CHECK( tcl_lighting, ctx->Light.Enabled )
2904637235183b80963536f2364e4d50fcb894886ddDave AirlieTCL_CHECK( tcl_light, ctx->Light.Enabled && ctx->Light.Light[atom->idx].Enabled )
2914637235183b80963536f2364e4d50fcb894886ddDave AirlieTCL_OR_VP_CHECK( tcl_ucp, (ctx->Transform.ClipPlanesEnabled & (1 << (atom->idx))) )
29298c791b543c4ba86b8bb54488bd872b33b10b1aaRoland ScheideggerTCL_OR_VP_CHECK( tcl_or_vp, GL_TRUE )
29398c791b543c4ba86b8bb54488bd872b33b10b1aaRoland ScheideggerVP_CHECK( tcl_vp, GL_TRUE )
29498c791b543c4ba86b8bb54488bd872b33b10b1aaRoland ScheideggerVP_CHECK( tcl_vp_size, ctx->VertexProgram.Current->Base.NumNativeInstructions > 64 )
29598c791b543c4ba86b8bb54488bd872b33b10b1aaRoland ScheideggerVP_CHECK( tcl_vpp_size, ctx->VertexProgram.Current->Base.NumNativeParameters > 96 )
296adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
297474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie#define OUT_VEC(hdr, data) do {			\
298474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    drm_radeon_cmd_header_t h;					\
299474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    h.i = hdr;								\
300474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(CP_PACKET0(RADEON_SE_TCL_STATE_FLUSH, 0));		\
301474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(0);							\
302474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(CP_PACKET0(R200_SE_TCL_VECTOR_INDX_REG, 0));		\
303474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(h.vectors.offset | (h.vectors.stride << RADEON_VEC_INDX_OCTWORD_STRIDE_SHIFT)); \
304474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(CP_PACKET0_ONE(R200_SE_TCL_VECTOR_DATA_REG, h.vectors.count - 1));	\
305474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH_TABLE((data), h.vectors.count);				\
306474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie  } while(0)
307474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
308474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie#define OUT_VECLINEAR(hdr, data) do {			\
309474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    drm_radeon_cmd_header_t h;					\
310474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    uint32_t _start = h.veclinear.addr_lo | (h.veclinear.addr_hi << 8);	\
311474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    uint32_t _sz = h.veclinear.count * 4;				\
312474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    h.i = hdr;								\
313474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(CP_PACKET0(RADEON_SE_TCL_STATE_FLUSH, 0));		\
314474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(0);							\
315474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(CP_PACKET0(R200_SE_TCL_VECTOR_INDX_REG, 0));		\
316474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(_start | (1 << RADEON_VEC_INDX_OCTWORD_STRIDE_SHIFT));	\
317474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(CP_PACKET0_ONE(R200_SE_TCL_VECTOR_DATA_REG, _sz - 1));	\
318474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH_TABLE((data), _sz);					\
319474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie  } while(0)
320474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
321474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie#define OUT_SCL(hdr, data) do {					\
322474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    drm_radeon_cmd_header_t h;						\
323474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    h.i = hdr;								\
324474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(CP_PACKET0(R200_SE_TCL_SCALAR_INDX_REG, 0));		\
325474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH((h.scalars.offset) | (h.scalars.stride << RADEON_SCAL_INDX_DWORD_STRIDE_SHIFT)); \
326474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(CP_PACKET0_ONE(R200_SE_TCL_SCALAR_DATA_REG, h.scalars.count - 1));	\
327474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH_TABLE((data), h.scalars.count);				\
328474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie  } while(0)
329474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
330474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie#define OUT_SCL2(hdr, data) do {					\
331474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    drm_radeon_cmd_header_t h;						\
332474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    h.i = hdr;								\
333474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(CP_PACKET0(R200_SE_TCL_SCALAR_INDX_REG, 0));		\
334474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH((h.scalars.offset + 0x100) | (h.scalars.stride << RADEON_SCAL_INDX_DWORD_STRIDE_SHIFT)); \
335474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(CP_PACKET0_ONE(R200_SE_TCL_SCALAR_DATA_REG, h.scalars.count - 1));	\
336474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH_TABLE((data), h.scalars.count);				\
337474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie  } while(0)
338474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
339474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airliestatic void mtl_emit(GLcontext *ctx, struct radeon_state_atom *atom)
340474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie{
341474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   r200ContextPtr r200 = R200_CONTEXT(ctx);
342474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BATCH_LOCALS(&r200->radeon);
343474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   uint32_t dwords = atom->cmd_size;
344474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
345474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BEGIN_BATCH_NO_AUTOSTATE(dwords);
346474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_VEC(atom->cmd[MTL_CMD_0], (atom->cmd+1));
347474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_SCL2(atom->cmd[MTL_CMD_1], (atom->cmd + 18));
348474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   END_BATCH();
349474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie}
350474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
351474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airliestatic void lit_emit(GLcontext *ctx, struct radeon_state_atom *atom)
352474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie{
353474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   r200ContextPtr r200 = R200_CONTEXT(ctx);
354474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BATCH_LOCALS(&r200->radeon);
355474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   uint32_t dwords = atom->cmd_size;
356474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
357474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BEGIN_BATCH_NO_AUTOSTATE(dwords);
358474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_VEC(atom->cmd[LIT_CMD_0], atom->cmd+1);
359474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_VEC(atom->cmd[LIT_CMD_1], atom->cmd+LIT_CMD_1+1);
360474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   END_BATCH();
361474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie}
362474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
363474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airliestatic void ptp_emit(GLcontext *ctx, struct radeon_state_atom *atom)
364474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie{
365474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   r200ContextPtr r200 = R200_CONTEXT(ctx);
366474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BATCH_LOCALS(&r200->radeon);
367474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   uint32_t dwords = atom->cmd_size;
368474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
369474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BEGIN_BATCH_NO_AUTOSTATE(dwords);
370474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_VEC(atom->cmd[PTP_CMD_0], atom->cmd+1);
371474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_VEC(atom->cmd[PTP_CMD_1], atom->cmd+PTP_CMD_1+1);
372474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   END_BATCH();
373474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie}
374474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
375474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airliestatic void veclinear_emit(GLcontext *ctx, struct radeon_state_atom *atom)
376474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie{
377474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   r200ContextPtr r200 = R200_CONTEXT(ctx);
378474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BATCH_LOCALS(&r200->radeon);
379474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   uint32_t dwords = atom->cmd_size;
380474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
381474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BEGIN_BATCH_NO_AUTOSTATE(dwords);
382474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_VECLINEAR(atom->cmd[0], atom->cmd+1);
383474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   END_BATCH();
384474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie}
385474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
386474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airliestatic void scl_emit(GLcontext *ctx, struct radeon_state_atom *atom)
387474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie{
388474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   r200ContextPtr r200 = R200_CONTEXT(ctx);
389474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BATCH_LOCALS(&r200->radeon);
390474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   uint32_t dwords = atom->cmd_size;
391474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
392474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BEGIN_BATCH_NO_AUTOSTATE(dwords);
393474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_SCL(atom->cmd[0], atom->cmd+1);
394474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   END_BATCH();
395474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie}
396474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
397474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
398474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airliestatic void vec_emit(GLcontext *ctx, struct radeon_state_atom *atom)
399474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie{
400474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   r200ContextPtr r200 = R200_CONTEXT(ctx);
401474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BATCH_LOCALS(&r200->radeon);
402474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   uint32_t dwords = atom->cmd_size;
403474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
404474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BEGIN_BATCH_NO_AUTOSTATE(dwords);
405474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_VEC(atom->cmd[0], atom->cmd+1);
406474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   END_BATCH();
407474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie}
408adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
409d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airliestatic void ctx_emit(GLcontext *ctx, struct radeon_state_atom *atom)
410ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie{
411ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie   r200ContextPtr r200 = R200_CONTEXT(ctx);
412ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie   BATCH_LOCALS(&r200->radeon);
413ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie   struct radeon_renderbuffer *rrb;
414ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie   uint32_t cbpitch;
415d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie   uint32_t zbpitch;
416d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie   uint32_t dwords = atom->cmd_size;
417ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie   GLframebuffer *fb = r200->radeon.dri.drawable->driverPrivate;
418d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie
419d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie   /* output the first 7 bytes of context */
420ade3660942452985afa1bb67bbeab8fed734089dDave Airlie   BEGIN_BATCH_NO_AUTOSTATE(dwords+2+2);
421d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie   OUT_BATCH_TABLE(atom->cmd, 5);
422d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie
423d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie   rrb = r200->radeon.state.depth.rrb;
424d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie   if (!rrb) {
425474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     OUT_BATCH(0);
426474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     OUT_BATCH(0);
427d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie   } else {
428d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie     zbpitch = (rrb->pitch / rrb->cpp);
429d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie     OUT_BATCH_RELOC(0, rrb->bo, 0, 0, RADEON_GEM_DOMAIN_VRAM, 0);
430d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie     OUT_BATCH(zbpitch);
431d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie   }
432d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie
433d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie   OUT_BATCH(atom->cmd[CTX_RB3D_ZSTENCILCNTL]);
434d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie   OUT_BATCH(atom->cmd[CTX_CMD_1]);
435d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie   OUT_BATCH(atom->cmd[CTX_PP_CNTL]);
436d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie   OUT_BATCH(atom->cmd[CTX_RB3D_CNTL]);
437d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie
438ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie   rrb = r200->radeon.state.color.rrb;
439ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie   if (r200->radeon.radeonScreen->driScreen->dri2.enabled) {
440ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie      rrb = (struct radeon_renderbuffer *)fb->Attachment[BUFFER_BACK_LEFT].Renderbuffer;
441ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie   }
442ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie   if (!rrb || !rrb->bo) {
443d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie     OUT_BATCH(atom->cmd[CTX_RB3D_COLOROFFSET]);
444d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie   } else {
445d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie     OUT_BATCH_RELOC(0, rrb->bo, 0, 0, RADEON_GEM_DOMAIN_VRAM, 0);
446ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie   }
447ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie
448d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie   OUT_BATCH(atom->cmd[CTX_CMD_2]);
449d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie
450d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie   if (!rrb || !rrb->bo) {
451d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie     OUT_BATCH(atom->cmd[CTX_RB3D_COLORPITCH]);
452d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie   } else {
453d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie     cbpitch = (rrb->pitch / rrb->cpp);
454d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie     if (rrb->cpp == 4)
455d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie       ;
456d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie     else
457d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie       ;
458d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie     if (r200->radeon.sarea->tiling_enabled)
459d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie       cbpitch |= R200_COLOR_TILE_ENABLE;
460d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie     OUT_BATCH(cbpitch);
461d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie   }
462d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie
463d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie   if (atom->cmd_size == CTX_STATE_SIZE_NEWDRM)
464d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie     OUT_BATCH_TABLE((atom->cmd + 14), 4);
465d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie
466d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie   END_BATCH();
467474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie}
468474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
469474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airliestatic void ctx_emit_cs(GLcontext *ctx, struct radeon_state_atom *atom)
470474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie{
471474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   r200ContextPtr r200 = R200_CONTEXT(ctx);
472474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BATCH_LOCALS(&r200->radeon);
473474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   struct radeon_renderbuffer *rrb, *drb;
474474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   uint32_t cbpitch = 0;
475474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   uint32_t zbpitch = 0;
476474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   uint32_t dwords = atom->cmd_size;
477474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   GLframebuffer *fb = r200->radeon.dri.drawable->driverPrivate;
478474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
479474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rrb = r200->radeon.state.color.rrb;
480474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   if (r200->radeon.radeonScreen->driScreen->dri2.enabled) {
481474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rrb = (struct radeon_renderbuffer *)fb->Attachment[BUFFER_BACK_LEFT].Renderbuffer;
482474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   }
483474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   if (rrb) {
484474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     assert(rrb->bo != NULL);
485474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     cbpitch = (rrb->pitch / rrb->cpp);
486474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     if (r200->radeon.sarea->tiling_enabled)
487474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie       cbpitch |= R200_COLOR_TILE_ENABLE;
488474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   }
489474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
490474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   drb = r200->radeon.state.depth.rrb;
491474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   if (drb)
492474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     zbpitch = (drb->pitch / drb->cpp);
493474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
494474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   /* output the first 7 bytes of context */
495474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BEGIN_BATCH_NO_AUTOSTATE(dwords);
496474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
497474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   /* In the CS case we need to split this up */
498474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_BATCH(CP_PACKET0(packet[0].start, 3));
499474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_BATCH_TABLE((atom->cmd + 1), 4);
500474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
501474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   if (drb) {
502474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     OUT_BATCH(CP_PACKET0(RADEON_RB3D_DEPTHOFFSET, 0));
503474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     OUT_BATCH_RELOC(0, rrb->bo, 0, 0, RADEON_GEM_DOMAIN_VRAM, 0);
504474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
505474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     OUT_BATCH(CP_PACKET0(RADEON_RB3D_DEPTHPITCH, 0));
506474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     OUT_BATCH(zbpitch);
507474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   }
508474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
509474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_BATCH(CP_PACKET0(RADEON_RB3D_ZSTENCILCNTL, 0));
510474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_BATCH(atom->cmd[CTX_RB3D_ZSTENCILCNTL]);
511474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_BATCH(CP_PACKET0(RADEON_PP_CNTL, 1));
512474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_BATCH(atom->cmd[CTX_PP_CNTL]);
513474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_BATCH(atom->cmd[CTX_RB3D_CNTL]);
514474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
515474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
516474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   if (rrb) {
517474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     OUT_BATCH(CP_PACKET0(RADEON_RB3D_COLOROFFSET, 0));
518474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     OUT_BATCH_RELOC(0, rrb->bo, 0, 0, RADEON_GEM_DOMAIN_VRAM, 0);
519474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   }
520474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
521474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   if (rrb) {
522474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     if (rrb->cpp == 4)
523474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie       ;
524474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     else
525474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie       ;
526474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     OUT_BATCH(CP_PACKET0(RADEON_RB3D_COLORPITCH, 0));
527474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     OUT_BATCH(cbpitch);
528474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   }
529474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
530474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   if (atom->cmd_size == CTX_STATE_SIZE_NEWDRM) {
531474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     OUT_BATCH_TABLE((atom->cmd + 14), 4);
532474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   }
533474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
534474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   END_BATCH();
535ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie}
536ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie
53761bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airliestatic void tex_emit(GLcontext *ctx, struct radeon_state_atom *atom)
538ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie{
53961bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie   r200ContextPtr r200 = R200_CONTEXT(ctx);
54061bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie   BATCH_LOCALS(&r200->radeon);
54161bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie   uint32_t dwords = atom->cmd_size;
54261bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie   int i = atom->idx;
54361bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie   radeonTexObj *t = r200->state.texture.unit[i].texobj;
54461bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie
545695ca1e2be6f222c132a76299fc3a0ac9143d960Dave Airlie   if (t && t->mt && !t->image_override)
546695ca1e2be6f222c132a76299fc3a0ac9143d960Dave Airlie     dwords += 2;
54761bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie   BEGIN_BATCH_NO_AUTOSTATE(dwords);
54861bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie   OUT_BATCH_TABLE(atom->cmd, 10);
54961bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie   if (t && !t->image_override) {
55061bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie     OUT_BATCH_RELOC(t->tile_bits, t->mt->bo, 0,
55161bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie		     RADEON_GEM_DOMAIN_VRAM, 0, 0);
55261bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie   } else if (!t) {
553695ca1e2be6f222c132a76299fc3a0ac9143d960Dave Airlie     /* workaround for old CS mechanism */
554695ca1e2be6f222c132a76299fc3a0ac9143d960Dave Airlie     OUT_BATCH(r200->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP]);
5552753dd42fd42a3383d2e74ab231d0b1373a2d46dDave Airlie   } else if (t->image_override)
5562753dd42fd42a3383d2e74ab231d0b1373a2d46dDave Airlie     OUT_BATCH(atom->cmd[10]);
557ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie
55861bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie   END_BATCH();
559ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie}
560ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie
561674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airliestatic void cube_emit(GLcontext *ctx, struct radeon_state_atom *atom)
562674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie{
563674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie   r200ContextPtr r200 = R200_CONTEXT(ctx);
564674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie   BATCH_LOCALS(&r200->radeon);
565674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie   uint32_t dwords = atom->cmd_size;
566674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie   int i = atom->idx;
567674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie   radeonTexObj *t = r200->state.texture.unit[i].texobj;
568674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie   GLuint size;
569674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie
570f8c2beccd4847836dec18849d2d58f3220ff81ebDave Airlie   BEGIN_BATCH_NO_AUTOSTATE(dwords + (2 * 5));
571674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie   OUT_BATCH_TABLE(atom->cmd, 3);
572674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie
573674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie   if (t && !t->image_override) {
574674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie     size = t->mt->totalsize / 6;
575674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie     OUT_BATCH_RELOC(0, t->mt->bo, size, RADEON_GEM_DOMAIN_VRAM, 0, 0);
576674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie     OUT_BATCH_RELOC(0, t->mt->bo, size * 2, RADEON_GEM_DOMAIN_VRAM, 0, 0);
577674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie     OUT_BATCH_RELOC(0, t->mt->bo, size * 3, RADEON_GEM_DOMAIN_VRAM, 0, 0);
578674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie     OUT_BATCH_RELOC(0, t->mt->bo, size * 4, RADEON_GEM_DOMAIN_VRAM, 0, 0);
579674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie     OUT_BATCH_RELOC(0, t->mt->bo, size * 5, RADEON_GEM_DOMAIN_VRAM, 0, 0);
580674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie   }
581674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie   END_BATCH();
582674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie}
583ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie
584adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* Initialize the context's hardware state.
585adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
586adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellvoid r200InitState( r200ContextPtr rmesa )
587adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell{
5884637235183b80963536f2364e4d50fcb894886ddDave Airlie   GLcontext *ctx = rmesa->radeon.glCtx;
589adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint color_fmt, depth_fmt, i;
590fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul   GLint drawPitch, drawOffset;
591adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
5924637235183b80963536f2364e4d50fcb894886ddDave Airlie   switch ( rmesa->radeon.radeonScreen->cpp ) {
593adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   case 2:
594adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      color_fmt = R200_COLOR_FORMAT_RGB565;
595adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      break;
596adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   case 4:
597adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      color_fmt = R200_COLOR_FORMAT_ARGB8888;
598adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      break;
599adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   default:
600adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      fprintf( stderr, "Error: Unsupported pixel depth... exiting\n" );
601adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      exit( -1 );
602adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   }
603adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
604d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie   rmesa->radeon.state.color.clear = 0x00000000;
605adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
606adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   switch ( ctx->Visual.depthBits ) {
607adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   case 16:
608d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->radeon.state.depth.clear = 0x0000ffff;
609d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->radeon.state.depth.scale = 1.0 / (GLfloat)0xffff;
610adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      depth_fmt = R200_DEPTH_FORMAT_16BIT_INT_Z;
611d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->radeon.state.stencil.clear = 0x00000000;
612adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      break;
613adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   case 24:
614d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->radeon.state.depth.clear = 0x00ffffff;
615d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->radeon.state.depth.scale = 1.0 / (GLfloat)0xffffff;
616adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      depth_fmt = R200_DEPTH_FORMAT_24BIT_INT_Z;
617d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->radeon.state.stencil.clear = 0xffff0000;
618adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      break;
619adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   default:
620adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      fprintf( stderr, "Error: Unsupported depth %d... exiting\n",
621adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell	       ctx->Visual.depthBits );
622adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      exit( -1 );
623adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   }
624adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
625adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Only have hw stencil when depth buffer is 24 bits deep */
626d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie   rmesa->radeon.state.stencil.hwBuffer = ( ctx->Visual.stencilBits > 0 &&
627adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     ctx->Visual.depthBits == 24 );
628adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
6294637235183b80963536f2364e4d50fcb894886ddDave Airlie   rmesa->radeon.Fallback = 0;
630adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
6314637235183b80963536f2364e4d50fcb894886ddDave Airlie   if ( ctx->Visual.doubleBufferMode && rmesa->radeon.sarea->pfCurrentPage == 0 ) {
6324637235183b80963536f2364e4d50fcb894886ddDave Airlie      drawOffset = rmesa->radeon.radeonScreen->backOffset;
6334637235183b80963536f2364e4d50fcb894886ddDave Airlie      drawPitch  = rmesa->radeon.radeonScreen->backPitch;
634fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul   } else {
6354637235183b80963536f2364e4d50fcb894886ddDave Airlie      drawOffset = rmesa->radeon.radeonScreen->frontOffset;
6364637235183b80963536f2364e4d50fcb894886ddDave Airlie      drawPitch  = rmesa->radeon.radeonScreen->frontPitch;
637fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul   }
638fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul#if 000
639fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul   if ( ctx->Visual.doubleBufferMode && rmesa->sarea->pfCurrentPage == 0 ) {
640d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->radeon.state.color.drawOffset = rmesa->radeon.radeonScreen->backOffset;
641d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->radeon.state.color.drawPitch  = rmesa->radeon.radeonScreen->backPitch;
642adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   } else {
643d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->radeon.state.color.drawOffset = rmesa->radeon.radeonScreen->frontOffset;
644d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->radeon.state.color.drawPitch  = rmesa->radeon.radeonScreen->frontPitch;
645adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   }
646adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
647d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie   rmesa->state.pixel.readOffset = rmesa->radeon.state.color.drawOffset;
648d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie   rmesa->state.pixel.readPitch  = rmesa->radeon.state.color.drawPitch;
649fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul#endif
650adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
6511090d206de011a67d236d8c4ae32d2d42b2f6337Dave Airlie   rmesa->radeon.hw.max_state_size = 0;
652adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
653adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define ALLOC_STATE( ATOM, CHK, SZ, NM, IDX )				\
654adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   do {								\
655adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.ATOM.cmd_size = SZ;				\
6564637235183b80963536f2364e4d50fcb894886ddDave Airlie      rmesa->hw.ATOM.cmd = (GLuint *)CALLOC(SZ * sizeof(int));	\
6574637235183b80963536f2364e4d50fcb894886ddDave Airlie      rmesa->hw.ATOM.lastcmd = (GLuint *)CALLOC(SZ * sizeof(int));	\
658adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.ATOM.name = NM;					\
659adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.ATOM.idx = IDX;					\
6600c8f8d3dc9d60ed34eeca7f3606651420a81753cEric Anholt      rmesa->hw.ATOM.check = check_##CHK;			\
6610c8f8d3dc9d60ed34eeca7f3606651420a81753cEric Anholt      rmesa->hw.ATOM.dirty = GL_FALSE;				\
6621090d206de011a67d236d8c4ae32d2d42b2f6337Dave Airlie      rmesa->radeon.hw.max_state_size += SZ * sizeof(int);		\
663adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   } while (0)
664f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger
665f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger
666adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Allocate state buffers:
667adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
6684637235183b80963536f2364e4d50fcb894886ddDave Airlie   if (rmesa->radeon.radeonScreen->drmSupportsBlendColor)
669033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger      ALLOC_STATE( ctx, always, CTX_STATE_SIZE_NEWDRM, "CTX/context", 0 );
670033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger   else
671033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger      ALLOC_STATE( ctx, always, CTX_STATE_SIZE_OLDDRM, "CTX/context", 0 );
672ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie
673474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   if (rmesa->radeon.radeonScreen->kernel_mm)
674474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     rmesa->hw.ctx.emit = ctx_emit_cs;
675474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   else
676474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     rmesa->hw.ctx.emit = ctx_emit;
677adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( set, always, SET_STATE_SIZE, "SET/setup", 0 );
678adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( lin, always, LIN_STATE_SIZE, "LIN/line", 0 );
679adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( msk, always, MSK_STATE_SIZE, "MSK/mask", 0 );
680adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( vpt, always, VPT_STATE_SIZE, "VPT/viewport", 0 );
681adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( vtx, always, VTX_STATE_SIZE, "VTX/vertex", 0 );
682adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( vap, always, VAP_STATE_SIZE, "VAP/vap", 0 );
683adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( vte, always, VTE_STATE_SIZE, "VTE/vte", 0 );
684adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( msc, always, MSC_STATE_SIZE, "MSC/misc", 0 );
685adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( cst, always, CST_STATE_SIZE, "CST/constant", 0 );
686adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( zbs, always, ZBS_STATE_SIZE, "ZBS/zbias", 0 );
687f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger   ALLOC_STATE( tf, tf, TF_STATE_SIZE, "TF/tfactor", 0 );
6884637235183b80963536f2364e4d50fcb894886ddDave Airlie   if (rmesa->radeon.radeonScreen->drmSupportsFragShader) {
6894637235183b80963536f2364e4d50fcb894886ddDave Airlie      if (rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_R200) {
690f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      /* make sure texture units 0/1 are emitted pair-wise for r200 t0 hang workaround */
691f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	 ALLOC_STATE( tex[0], tex_pair, TEX_STATE_SIZE_NEWDRM, "TEX/tex-0", 0 );
692f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	 ALLOC_STATE( tex[1], tex_pair, TEX_STATE_SIZE_NEWDRM, "TEX/tex-1", 1 );
693f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	 ALLOC_STATE( tam, tex_any, TAM_STATE_SIZE, "TAM/tam", 0 );
694f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      }
695f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      else {
696f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	 ALLOC_STATE( tex[0], tex, TEX_STATE_SIZE_NEWDRM, "TEX/tex-0", 0 );
697f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	 ALLOC_STATE( tex[1], tex, TEX_STATE_SIZE_NEWDRM, "TEX/tex-1", 1 );
698f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	 ALLOC_STATE( tam, never, TAM_STATE_SIZE, "TAM/tam", 0 );
699f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      }
700f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      ALLOC_STATE( tex[2], tex, TEX_STATE_SIZE_NEWDRM, "TEX/tex-2", 2 );
701f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      ALLOC_STATE( tex[3], tex, TEX_STATE_SIZE_NEWDRM, "TEX/tex-3", 3 );
702f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      ALLOC_STATE( tex[4], tex, TEX_STATE_SIZE_NEWDRM, "TEX/tex-4", 4 );
703f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      ALLOC_STATE( tex[5], tex, TEX_STATE_SIZE_NEWDRM, "TEX/tex-5", 5 );
704f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      ALLOC_STATE( atf, afs, ATF_STATE_SIZE, "ATF/tfactor", 0 );
705f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      ALLOC_STATE( afs[0], afs_pass1, AFS_STATE_SIZE, "AFS/afsinst-0", 0 );
706f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      ALLOC_STATE( afs[1], afs, AFS_STATE_SIZE, "AFS/afsinst-1", 1 );
70748ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   }
70848ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   else {
7094637235183b80963536f2364e4d50fcb894886ddDave Airlie      if (rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_R200) {
710f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	 ALLOC_STATE( tex[0], tex_pair, TEX_STATE_SIZE_OLDDRM, "TEX/tex-0", 0 );
711f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	 ALLOC_STATE( tex[1], tex_pair, TEX_STATE_SIZE_OLDDRM, "TEX/tex-1", 1 );
712f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	 ALLOC_STATE( tam, tex_any, TAM_STATE_SIZE, "TAM/tam", 0 );
713f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      }
714f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      else {
715f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	 ALLOC_STATE( tex[0], tex, TEX_STATE_SIZE_OLDDRM, "TEX/tex-0", 0 );
716f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	 ALLOC_STATE( tex[1], tex, TEX_STATE_SIZE_OLDDRM, "TEX/tex-1", 1 );
717f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	 ALLOC_STATE( tam, never, TAM_STATE_SIZE, "TAM/tam", 0 );
718f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      }
719f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      ALLOC_STATE( tex[2], tex, TEX_STATE_SIZE_OLDDRM, "TEX/tex-2", 2 );
720f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      ALLOC_STATE( tex[3], tex, TEX_STATE_SIZE_OLDDRM, "TEX/tex-3", 3 );
721f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      ALLOC_STATE( tex[4], tex, TEX_STATE_SIZE_OLDDRM, "TEX/tex-4", 4 );
722f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      ALLOC_STATE( tex[5], tex, TEX_STATE_SIZE_OLDDRM, "TEX/tex-5", 5 );
723f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      ALLOC_STATE( atf, never, ATF_STATE_SIZE, "TF/tfactor", 0 );
724f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      ALLOC_STATE( afs[0], never, AFS_STATE_SIZE, "AFS/afsinst-0", 0 );
725f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      ALLOC_STATE( afs[1], never, AFS_STATE_SIZE, "AFS/afsinst-1", 1 );
72648ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   }
72761bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie
72861bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie   for (i = 0; i < 5; i++)
72961bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie     rmesa->hw.tex[i].emit = tex_emit;
7304637235183b80963536f2364e4d50fcb894886ddDave Airlie   if (rmesa->radeon.radeonScreen->drmSupportsCubeMapsR200) {
73148ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      ALLOC_STATE( cube[0], tex_cube, CUBE_STATE_SIZE, "CUBE/tex-0", 0 );
73248ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      ALLOC_STATE( cube[1], tex_cube, CUBE_STATE_SIZE, "CUBE/tex-1", 1 );
73348ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      ALLOC_STATE( cube[2], tex_cube, CUBE_STATE_SIZE, "CUBE/tex-2", 2 );
73448ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      ALLOC_STATE( cube[3], tex_cube, CUBE_STATE_SIZE, "CUBE/tex-3", 3 );
73548ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      ALLOC_STATE( cube[4], tex_cube, CUBE_STATE_SIZE, "CUBE/tex-4", 4 );
73648ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      ALLOC_STATE( cube[5], tex_cube, CUBE_STATE_SIZE, "CUBE/tex-5", 5 );
737674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie      for (i = 0; i < 5; i++)
738674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie	rmesa->hw.cube[i].emit = cube_emit;
739bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl   }
740bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl   else {
741bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl      ALLOC_STATE( cube[0], never, CUBE_STATE_SIZE, "CUBE/tex-0", 0 );
742bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl      ALLOC_STATE( cube[1], never, CUBE_STATE_SIZE, "CUBE/tex-1", 1 );
74348ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      ALLOC_STATE( cube[2], never, CUBE_STATE_SIZE, "CUBE/tex-2", 2 );
74448ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      ALLOC_STATE( cube[3], never, CUBE_STATE_SIZE, "CUBE/tex-3", 3 );
74548ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      ALLOC_STATE( cube[4], never, CUBE_STATE_SIZE, "CUBE/tex-4", 4 );
74648ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      ALLOC_STATE( cube[5], never, CUBE_STATE_SIZE, "CUBE/tex-5", 5 );
747bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl   }
748674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie
7494637235183b80963536f2364e4d50fcb894886ddDave Airlie   if (rmesa->radeon.radeonScreen->drmSupportsVertexProgram) {
75098c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      ALLOC_STATE( pvs, tcl_vp, PVS_STATE_SIZE, "PVS/pvscntl", 0 );
75198c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      ALLOC_STATE( vpi[0], tcl_vp, VPI_STATE_SIZE, "VP/vertexprog-0", 0 );
75298c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      ALLOC_STATE( vpi[1], tcl_vp_size, VPI_STATE_SIZE, "VP/vertexprog-1", 1 );
75398c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      ALLOC_STATE( vpp[0], tcl_vp, VPP_STATE_SIZE, "VPP/vertexparam-0", 0 );
75498c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      ALLOC_STATE( vpp[1], tcl_vpp_size, VPP_STATE_SIZE, "VPP/vertexparam-1", 1 );
75598c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   }
75698c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   else {
75798c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      ALLOC_STATE( pvs, never, PVS_STATE_SIZE, "PVS/pvscntl", 0 );
75898c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      ALLOC_STATE( vpi[0], never, VPI_STATE_SIZE, "VP/vertexprog-0", 0 );
75998c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      ALLOC_STATE( vpi[1], never, VPI_STATE_SIZE, "VP/vertexprog-1", 1 );
76098c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      ALLOC_STATE( vpp[0], never, VPP_STATE_SIZE, "VPP/vertexparam-0", 0 );
76198c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      ALLOC_STATE( vpp[1], never, VPP_STATE_SIZE, "VPP/vertexparam-1", 1 );
76298c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   }
76398c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   /* FIXME: this atom has two commands, we need only one (ucp_vert_blend) for vp */
76498c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   ALLOC_STATE( tcl, tcl_or_vp, TCL_STATE_SIZE, "TCL/tcl", 0 );
765adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( msl, tcl, MSL_STATE_SIZE, "MSL/matrix-select", 0 );
766adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( tcg, tcl, TCG_STATE_SIZE, "TCG/texcoordgen", 0 );
767adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( mtl[0], tcl_lighting, MTL_STATE_SIZE, "MTL0/material0", 0 );
768a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger   ALLOC_STATE( mtl[1], tcl_lighting, MTL_STATE_SIZE, "MTL1/material1", 1 );
76998c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   ALLOC_STATE( grd, tcl_or_vp, GRD_STATE_SIZE, "GRD/guard-band", 0 );
770014bfda235e5315baf84b1d47329be167dd2ec7fRoland Scheidegger   ALLOC_STATE( fog, tcl_fog, FOG_STATE_SIZE, "FOG/fog", 0 );
771adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( glt, tcl_lighting, GLT_STATE_SIZE, "GLT/light-global", 0 );
772adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( eye, tcl_lighting, EYE_STATE_SIZE, "EYE/eye-vector", 0 );
773adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( mat[R200_MTX_MV], tcl, MAT_STATE_SIZE, "MAT/modelview", 0 );
774adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( mat[R200_MTX_IMV], tcl, MAT_STATE_SIZE, "MAT/it-modelview", 0 );
775adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( mat[R200_MTX_MVP], tcl, MAT_STATE_SIZE, "MAT/modelproject", 0 );
776adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( mat[R200_MTX_TEX0], tcl_tex, MAT_STATE_SIZE, "MAT/texmat0", 0 );
777adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( mat[R200_MTX_TEX1], tcl_tex, MAT_STATE_SIZE, "MAT/texmat1", 1 );
77848ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   ALLOC_STATE( mat[R200_MTX_TEX2], tcl_tex, MAT_STATE_SIZE, "MAT/texmat2", 2 );
77948ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   ALLOC_STATE( mat[R200_MTX_TEX3], tcl_tex, MAT_STATE_SIZE, "MAT/texmat3", 3 );
78048ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   ALLOC_STATE( mat[R200_MTX_TEX4], tcl_tex, MAT_STATE_SIZE, "MAT/texmat4", 4 );
78148ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   ALLOC_STATE( mat[R200_MTX_TEX5], tcl_tex, MAT_STATE_SIZE, "MAT/texmat5", 5 );
782adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( ucp[0], tcl_ucp, UCP_STATE_SIZE, "UCP/userclip-0", 0 );
783adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( ucp[1], tcl_ucp, UCP_STATE_SIZE, "UCP/userclip-1", 1 );
784adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( ucp[2], tcl_ucp, UCP_STATE_SIZE, "UCP/userclip-2", 2 );
785adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( ucp[3], tcl_ucp, UCP_STATE_SIZE, "UCP/userclip-3", 3 );
786adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( ucp[4], tcl_ucp, UCP_STATE_SIZE, "UCP/userclip-4", 4 );
787adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( ucp[5], tcl_ucp, UCP_STATE_SIZE, "UCP/userclip-5", 5 );
788adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( lit[0], tcl_light, LIT_STATE_SIZE, "LIT/light-0", 0 );
789adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( lit[1], tcl_light, LIT_STATE_SIZE, "LIT/light-1", 1 );
790adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( lit[2], tcl_light, LIT_STATE_SIZE, "LIT/light-2", 2 );
791adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( lit[3], tcl_light, LIT_STATE_SIZE, "LIT/light-3", 3 );
792adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( lit[4], tcl_light, LIT_STATE_SIZE, "LIT/light-4", 4 );
793adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( lit[5], tcl_light, LIT_STATE_SIZE, "LIT/light-5", 5 );
794adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( lit[6], tcl_light, LIT_STATE_SIZE, "LIT/light-6", 6 );
795adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( lit[7], tcl_light, LIT_STATE_SIZE, "LIT/light-7", 7 );
796f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger   ALLOC_STATE( pix[0], pix_zero, PIX_STATE_SIZE, "PIX/pixstage-0", 0 );
79736603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger   ALLOC_STATE( pix[1], texenv, PIX_STATE_SIZE, "PIX/pixstage-1", 1 );
79836603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger   ALLOC_STATE( pix[2], texenv, PIX_STATE_SIZE, "PIX/pixstage-2", 2 );
79936603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger   ALLOC_STATE( pix[3], texenv, PIX_STATE_SIZE, "PIX/pixstage-3", 3 );
80036603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger   ALLOC_STATE( pix[4], texenv, PIX_STATE_SIZE, "PIX/pixstage-4", 4 );
80136603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger   ALLOC_STATE( pix[5], texenv, PIX_STATE_SIZE, "PIX/pixstage-5", 5 );
8024637235183b80963536f2364e4d50fcb894886ddDave Airlie   if (rmesa->radeon.radeonScreen->drmSupportsTriPerf) {
803fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger      ALLOC_STATE( prf, always, PRF_STATE_SIZE, "PRF/performance-tri", 0 );
804fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger   }
805fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger   else {
806fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger      ALLOC_STATE( prf, never, PRF_STATE_SIZE, "PRF/performance-tri", 0 );
807fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger   }
8084637235183b80963536f2364e4d50fcb894886ddDave Airlie   if (rmesa->radeon.radeonScreen->drmSupportsPointSprites) {
80944dace86eaf9eded8e6465adfadf6345658686ddRoland Scheidegger      ALLOC_STATE( spr, always, SPR_STATE_SIZE, "SPR/pointsprite", 0 );
810cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger      ALLOC_STATE( ptp, tcl, PTP_STATE_SIZE, "PTP/pointparams", 0 );
811cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   }
812cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   else {
81344dace86eaf9eded8e6465adfadf6345658686ddRoland Scheidegger      ALLOC_STATE (spr, never, SPR_STATE_SIZE, "SPR/pointsprite", 0 );
814cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger      ALLOC_STATE (ptp, never, PTP_STATE_SIZE, "PTP/pointparams", 0 );
815cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   }
816adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
8170c8f8d3dc9d60ed34eeca7f3606651420a81753cEric Anholt   r200SetUpAtomList( rmesa );
818adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
819adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Fill in the packet headers:
820adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
821474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.ctx.cmd[CTX_CMD_0] = cmdpkt(rmesa, RADEON_EMIT_PP_MISC);
822474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.ctx.cmd[CTX_CMD_1] = cmdpkt(rmesa, RADEON_EMIT_PP_CNTL);
823474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.ctx.cmd[CTX_CMD_2] = cmdpkt(rmesa, RADEON_EMIT_RB3D_COLORPITCH);
8244637235183b80963536f2364e4d50fcb894886ddDave Airlie   if (rmesa->radeon.radeonScreen->drmSupportsBlendColor)
825474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.ctx.cmd[CTX_CMD_3] = cmdpkt(rmesa, R200_EMIT_RB3D_BLENDCOLOR);
826474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.lin.cmd[LIN_CMD_0] = cmdpkt(rmesa, RADEON_EMIT_RE_LINE_PATTERN);
827474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.lin.cmd[LIN_CMD_1] = cmdpkt(rmesa, RADEON_EMIT_SE_LINE_WIDTH);
828474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.msk.cmd[MSK_CMD_0] = cmdpkt(rmesa, RADEON_EMIT_RB3D_STENCILREFMASK);
829474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.vpt.cmd[VPT_CMD_0] = cmdpkt(rmesa, RADEON_EMIT_SE_VPORT_XSCALE);
830474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.set.cmd[SET_CMD_0] = cmdpkt(rmesa, RADEON_EMIT_SE_CNTL);
831474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.msc.cmd[MSC_CMD_0] = cmdpkt(rmesa, RADEON_EMIT_RE_MISC);
832474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cst.cmd[CST_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_CNTL_X);
833474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cst.cmd[CST_CMD_1] = cmdpkt(rmesa, R200_EMIT_RB3D_DEPTHXY_OFFSET);
834474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cst.cmd[CST_CMD_2] = cmdpkt(rmesa, R200_EMIT_RE_AUX_SCISSOR_CNTL);
835474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cst.cmd[CST_CMD_3] = cmdpkt(rmesa, R200_EMIT_RE_SCISSOR_TL_0);
836474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cst.cmd[CST_CMD_4] = cmdpkt(rmesa, R200_EMIT_SE_VAP_CNTL_STATUS);
837474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cst.cmd[CST_CMD_5] = cmdpkt(rmesa, R200_EMIT_RE_POINTSIZE);
838474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cst.cmd[CST_CMD_6] = cmdpkt(rmesa, R200_EMIT_TCL_INPUT_VTX_VECTOR_ADDR_0);
839474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.tam.cmd[TAM_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TAM_DEBUG3);
840474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.tf.cmd[TF_CMD_0] = cmdpkt(rmesa, R200_EMIT_TFACTOR_0);
8414637235183b80963536f2364e4d50fcb894886ddDave Airlie   if (rmesa->radeon.radeonScreen->drmSupportsFragShader) {
842474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.atf.cmd[ATF_CMD_0] = cmdpkt(rmesa, R200_EMIT_ATF_TFACTOR);
843474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[0].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCTLALL_0);
844474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[0].cmd[TEX_CMD_1_NEWDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_0);
845474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[1].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCTLALL_1);
846474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[1].cmd[TEX_CMD_1_NEWDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_1);
847474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[2].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCTLALL_2);
848474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[2].cmd[TEX_CMD_1_NEWDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_2);
849474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[3].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCTLALL_3);
850474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[3].cmd[TEX_CMD_1_NEWDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_3);
851474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[4].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCTLALL_4);
852474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[4].cmd[TEX_CMD_1_NEWDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_4);
853474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[5].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCTLALL_5);
854474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[5].cmd[TEX_CMD_1_NEWDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_5);
855f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger   } else {
856474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[0].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXFILTER_0);
857474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[0].cmd[TEX_CMD_1_OLDDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_0);
858474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[1].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXFILTER_1);
859474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[1].cmd[TEX_CMD_1_OLDDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_1);
860474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[2].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXFILTER_2);
861474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[2].cmd[TEX_CMD_1_OLDDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_2);
862474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[3].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXFILTER_3);
863474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[3].cmd[TEX_CMD_1_OLDDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_3);
864474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[4].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXFILTER_4);
865474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[4].cmd[TEX_CMD_1_OLDDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_4);
866474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[5].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXFILTER_5);
867474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[5].cmd[TEX_CMD_1_OLDDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_5);
868474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   }
869474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.afs[0].cmd[AFS_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_AFS_0);
870474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.afs[1].cmd[AFS_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_AFS_1);
871474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.pvs.cmd[PVS_CMD_0] = cmdpkt(rmesa, R200_EMIT_VAP_PVS_CNTL);
872474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[0].cmd[CUBE_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_FACES_0);
873474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[0].cmd[CUBE_CMD_1] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_OFFSETS_0);
874474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[1].cmd[CUBE_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_FACES_1);
875474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[1].cmd[CUBE_CMD_1] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_OFFSETS_1);
876474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[2].cmd[CUBE_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_FACES_2);
877474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[2].cmd[CUBE_CMD_1] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_OFFSETS_2);
878474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[3].cmd[CUBE_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_FACES_3);
879474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[3].cmd[CUBE_CMD_1] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_OFFSETS_3);
880474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[4].cmd[CUBE_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_FACES_4);
881474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[4].cmd[CUBE_CMD_1] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_OFFSETS_4);
882474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[5].cmd[CUBE_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_FACES_5);
883474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[5].cmd[CUBE_CMD_1] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_OFFSETS_5);
884474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.pix[0].cmd[PIX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCBLEND_0);
885474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.pix[1].cmd[PIX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCBLEND_1);
886474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.pix[2].cmd[PIX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCBLEND_2);
887474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.pix[3].cmd[PIX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCBLEND_3);
888474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.pix[4].cmd[PIX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCBLEND_4);
889474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.pix[5].cmd[PIX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCBLEND_5);
890474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.zbs.cmd[ZBS_CMD_0] = cmdpkt(rmesa, RADEON_EMIT_SE_ZBIAS_FACTOR);
891474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.tcl.cmd[TCL_CMD_0] = cmdpkt(rmesa, R200_EMIT_TCL_LIGHT_MODEL_CTL_0);
892474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.tcl.cmd[TCL_CMD_1] = cmdpkt(rmesa, R200_EMIT_TCL_UCP_VERT_BLEND_CTL);
893474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.tcg.cmd[TCG_CMD_0] = cmdpkt(rmesa, R200_EMIT_TEX_PROC_CTL_2);
894474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.msl.cmd[MSL_CMD_0] = cmdpkt(rmesa, R200_EMIT_MATRIX_SELECT_0);
895474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.vap.cmd[VAP_CMD_0] = cmdpkt(rmesa, R200_EMIT_VAP_CTL);
896474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.vtx.cmd[VTX_CMD_0] = cmdpkt(rmesa, R200_EMIT_VTX_FMT_0);
897474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.vtx.cmd[VTX_CMD_1] = cmdpkt(rmesa, R200_EMIT_OUTPUT_VTX_COMP_SEL);
898474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.vtx.cmd[VTX_CMD_2] = cmdpkt(rmesa, R200_EMIT_SE_VTX_STATE_CNTL);
899474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.vte.cmd[VTE_CMD_0] = cmdpkt(rmesa, R200_EMIT_VTE_CNTL);
900474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.prf.cmd[PRF_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TRI_PERF_CNTL);
901474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.spr.cmd[SPR_CMD_0] = cmdpkt(rmesa, R200_EMIT_TCL_POINT_SPRITE_CNTL);
902474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   if (rmesa->radeon.radeonScreen->kernel_mm) {
903474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie	rmesa->hw.mtl[0].emit = mtl_emit;
904474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie	rmesa->hw.mtl[1].emit = mtl_emit;
905474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
906474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie	rmesa->hw.vpi[0].emit = veclinear_emit;
907474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie	rmesa->hw.vpi[1].emit = veclinear_emit;
908474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie	rmesa->hw.vpp[0].emit = veclinear_emit;
909474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie	rmesa->hw.vpp[1].emit = veclinear_emit;
910474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
911474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie	rmesa->hw.grd.emit = scl_emit;
912474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie	rmesa->hw.fog.emit = vec_emit;
913474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie	rmesa->hw.glt.emit = vec_emit;
914474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie	rmesa->hw.eye.emit = vec_emit;
915474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
916474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie	for (i = R200_MTX_MV; i <= R200_MTX_TEX5; i++)
917474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie	  rmesa->hw.mat[i].emit = vec_emit;
918474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
919474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie	for (i = 0; i < 8; i++)
920474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie	  rmesa->hw.lit[i].emit = lit_emit;
921474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
922474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie	for (i = 0; i < 6; i++)
923474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie	  rmesa->hw.ucp[i].emit = vec_emit;
924474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
925474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie	rmesa->hw.ptp.emit = ptp_emit;
926f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger   }
927474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
928474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
929474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
930adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.mtl[0].cmd[MTL_CMD_0] =
931adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_MAT_0_EMISS, 1, 16 );
932adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.mtl[0].cmd[MTL_CMD_1] =
933adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdscl2( R200_SS_MAT_0_SHININESS, 1, 1 );
934a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger   rmesa->hw.mtl[1].cmd[MTL_CMD_0] =
935a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger      cmdvec( R200_VS_MAT_1_EMISS, 1, 16 );
936a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger   rmesa->hw.mtl[1].cmd[MTL_CMD_1] =
937a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger      cmdscl2( R200_SS_MAT_1_SHININESS, 1, 1 );
938a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger
93998c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   rmesa->hw.vpi[0].cmd[VPI_CMD_0] =
94098c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      cmdveclinear( R200_PVS_PROG0, 64 );
94198c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   rmesa->hw.vpi[1].cmd[VPI_CMD_0] =
94298c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      cmdveclinear( R200_PVS_PROG1, 64 );
94398c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   rmesa->hw.vpp[0].cmd[VPP_CMD_0] =
94498c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      cmdveclinear( R200_PVS_PARAM0, 96 );
94598c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   rmesa->hw.vpp[1].cmd[VPP_CMD_0] =
94698c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      cmdveclinear( R200_PVS_PARAM1, 96 );
94798c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger
948adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.grd.cmd[GRD_CMD_0] =
949adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdscl( R200_SS_VERT_GUARD_CLIP_ADJ_ADDR, 1, 4 );
950adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.fog.cmd[FOG_CMD_0] =
951adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_FOG_PARAM_ADDR, 1, 4 );
952adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.glt.cmd[GLT_CMD_0] =
953adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_GLOBAL_AMBIENT_ADDR, 1, 4 );
954adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.eye.cmd[EYE_CMD_0] =
955adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_EYE_VECTOR_ADDR, 1, 4 );
956adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
957adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.mat[R200_MTX_MV].cmd[MAT_CMD_0] =
958adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_MATRIX_0_MV, 1, 16);
959adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.mat[R200_MTX_IMV].cmd[MAT_CMD_0] =
960adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_MATRIX_1_INV_MV, 1, 16);
961adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.mat[R200_MTX_MVP].cmd[MAT_CMD_0] =
962adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_MATRIX_2_MVP, 1, 16);
963adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.mat[R200_MTX_TEX0].cmd[MAT_CMD_0] =
964adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_MATRIX_3_TEX0, 1, 16);
965adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.mat[R200_MTX_TEX1].cmd[MAT_CMD_0] =
966adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_MATRIX_4_TEX1, 1, 16);
96748ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   rmesa->hw.mat[R200_MTX_TEX2].cmd[MAT_CMD_0] =
96848ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      cmdvec( R200_VS_MATRIX_5_TEX2, 1, 16);
96948ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   rmesa->hw.mat[R200_MTX_TEX3].cmd[MAT_CMD_0] =
97048ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      cmdvec( R200_VS_MATRIX_6_TEX3, 1, 16);
97148ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   rmesa->hw.mat[R200_MTX_TEX4].cmd[MAT_CMD_0] =
97248ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      cmdvec( R200_VS_MATRIX_7_TEX4, 1, 16);
97348ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   rmesa->hw.mat[R200_MTX_TEX5].cmd[MAT_CMD_0] =
97448ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      cmdvec( R200_VS_MATRIX_8_TEX5, 1, 16);
975adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
976adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   for (i = 0 ; i < 8; i++) {
977adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.lit[i].cmd[LIT_CMD_0] =
978adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell	 cmdvec( R200_VS_LIGHT_AMBIENT_ADDR + i, 8, 24 );
979adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.lit[i].cmd[LIT_CMD_1] =
980adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell	 cmdscl( R200_SS_LIGHT_DCD_ADDR + i, 8, 7 );
981adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   }
982adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
983adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   for (i = 0 ; i < 6; i++) {
984adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.ucp[i].cmd[UCP_CMD_0] =
985adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell	 cmdvec( R200_VS_UCP_ADDR + i, 1, 4 );
986adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   }
987adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
988cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_CMD_0] =
989cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger      cmdvec( R200_VS_PNT_SPRITE_VPORT_SCALE, 1, 4 );
990cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_CMD_1] =
991cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger      cmdvec( R200_VS_PNT_SPRITE_ATT_CONST, 1, 12 );
992cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger
993adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Initial Harware state:
994adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
995adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.ctx.cmd[CTX_PP_MISC] = (R200_ALPHA_TEST_PASS
996adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     /* | R200_RIGHT_HAND_CUBE_OGL*/);
997adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
998adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.ctx.cmd[CTX_PP_FOG_COLOR] = (R200_FOG_VERTEX |
999adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					  R200_FOG_USE_SPEC_ALPHA);
1000adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1001adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.ctx.cmd[CTX_RE_SOLID_COLOR] = 0x00000000;
1002adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1003adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.ctx.cmd[CTX_RB3D_BLENDCNTL] = (R200_COMB_FCN_ADD_CLAMP |
1004033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger				(R200_BLEND_GL_ONE << R200_SRC_BLEND_SHIFT) |
1005033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger				(R200_BLEND_GL_ZERO << R200_DST_BLEND_SHIFT));
1006033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger
10074637235183b80963536f2364e4d50fcb894886ddDave Airlie   if (rmesa->radeon.radeonScreen->drmSupportsBlendColor) {
1008033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger      rmesa->hw.ctx.cmd[CTX_RB3D_BLENDCOLOR] = 0x00000000;
1009033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger      rmesa->hw.ctx.cmd[CTX_RB3D_ABLENDCNTL] = (R200_COMB_FCN_ADD_CLAMP |
1010033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger				(R200_BLEND_GL_ONE << R200_SRC_BLEND_SHIFT) |
1011033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger				(R200_BLEND_GL_ZERO << R200_DST_BLEND_SHIFT));
1012033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger      rmesa->hw.ctx.cmd[CTX_RB3D_CBLENDCNTL] = (R200_COMB_FCN_ADD_CLAMP |
1013033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger				(R200_BLEND_GL_ONE << R200_SRC_BLEND_SHIFT) |
1014033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger				(R200_BLEND_GL_ZERO << R200_DST_BLEND_SHIFT));
1015033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger   }
1016adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1017adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.ctx.cmd[CTX_RB3D_DEPTHOFFSET] =
10184637235183b80963536f2364e4d50fcb894886ddDave Airlie      rmesa->radeon.radeonScreen->depthOffset + rmesa->radeon.radeonScreen->fbLocation;
1019adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1020adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.ctx.cmd[CTX_RB3D_DEPTHPITCH] =
10214637235183b80963536f2364e4d50fcb894886ddDave Airlie      ((rmesa->radeon.radeonScreen->depthPitch &
1022adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell	R200_DEPTHPITCH_MASK) |
1023adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_DEPTH_ENDIAN_NO_SWAP);
1024b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger
1025b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger   if (rmesa->using_hyperz)
1026b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger      rmesa->hw.ctx.cmd[CTX_RB3D_DEPTHPITCH] |= R200_DEPTH_HYPERZ;
1027adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1028adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] = (depth_fmt |
1029b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger					       R200_Z_TEST_LESS |
1030adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					       R200_STENCIL_TEST_ALWAYS |
1031adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					       R200_STENCIL_FAIL_KEEP |
1032adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					       R200_STENCIL_ZPASS_KEEP |
1033adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					       R200_STENCIL_ZFAIL_KEEP |
1034adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					       R200_Z_WRITE_ENABLE);
1035adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1036b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger   if (rmesa->using_hyperz) {
1037b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger      rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= R200_Z_COMPRESSION_ENABLE |
1038b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger						  R200_Z_DECOMPRESSION_ENABLE;
10394637235183b80963536f2364e4d50fcb894886ddDave Airlie/*      if (rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_R200)
1040b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger	 rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= RADEON_Z_HIERARCHY_ENABLE;*/
1041b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger   }
1042b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger
1043adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.ctx.cmd[CTX_PP_CNTL] = (R200_ANTI_ALIAS_NONE
1044adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 				     | R200_TEX_BLEND_0_ENABLE);
1045adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1046adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.ctx.cmd[CTX_RB3D_CNTL] = color_fmt;
10474637235183b80963536f2364e4d50fcb894886ddDave Airlie   switch ( driQueryOptioni( &rmesa->radeon.optionCache, "dither_mode" ) ) {
1048273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane   case DRI_CONF_DITHER_XERRORDIFFRESET:
1049273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane      rmesa->hw.ctx.cmd[CTX_RB3D_CNTL] |= R200_DITHER_INIT;
1050273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane      break;
1051273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane   case DRI_CONF_DITHER_ORDERED:
1052273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane      rmesa->hw.ctx.cmd[CTX_RB3D_CNTL] |= R200_SCALE_DITHER_ENABLE;
1053273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane      break;
1054273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane   }
10554637235183b80963536f2364e4d50fcb894886ddDave Airlie   if ( driQueryOptioni( &rmesa->radeon.optionCache, "round_mode" ) ==
1056273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane	DRI_CONF_ROUND_ROUND )
1057d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->radeon.state.color.roundEnable = R200_ROUND_ENABLE;
1058273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane   else
1059d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->radeon.state.color.roundEnable = 0;
10604637235183b80963536f2364e4d50fcb894886ddDave Airlie   if ( driQueryOptioni (&rmesa->radeon.optionCache, "color_reduction" ) ==
1061273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane	DRI_CONF_COLOR_REDUCTION_DITHER )
1062273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane      rmesa->hw.ctx.cmd[CTX_RB3D_CNTL] |= R200_DITHER_ENABLE;
1063273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane   else
1064d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->hw.ctx.cmd[CTX_RB3D_CNTL] |= rmesa->radeon.state.color.roundEnable;
1065273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane
1066fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul#if 000
1067d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie   rmesa->hw.ctx.cmd[CTX_RB3D_COLOROFFSET] = ((rmesa->radeon.state.color.drawOffset +
10684637235183b80963536f2364e4d50fcb894886ddDave Airlie					       rmesa->radeon.radeonScreen->fbLocation)
1069273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane					      & R200_COLOROFFSET_MASK);
1070adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1071d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie   rmesa->hw.ctx.cmd[CTX_RB3D_COLORPITCH] = ((rmesa->radeon.state.color.drawPitch &
1072adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					      R200_COLORPITCH_MASK) |
1073adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					     R200_COLOR_ENDIAN_NO_SWAP);
1074fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul#else
1075fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul   rmesa->hw.ctx.cmd[CTX_RB3D_COLOROFFSET] = ((drawOffset +
10764637235183b80963536f2364e4d50fcb894886ddDave Airlie					       rmesa->radeon.radeonScreen->fbLocation)
1077fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul					      & R200_COLOROFFSET_MASK);
1078fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul
1079fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul   rmesa->hw.ctx.cmd[CTX_RB3D_COLORPITCH] = ((drawPitch &
1080fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul					      R200_COLORPITCH_MASK) |
1081fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul					     R200_COLOR_ENDIAN_NO_SWAP);
1082fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul#endif
1083a205137423e42010a025c70b05af98a6c0564f28Roland Scheidegger   /* (fixed size) sarea is initialized to zero afaics so can omit version check. Phew! */
10844637235183b80963536f2364e4d50fcb894886ddDave Airlie   if (rmesa->radeon.sarea->tiling_enabled) {
1085a205137423e42010a025c70b05af98a6c0564f28Roland Scheidegger      rmesa->hw.ctx.cmd[CTX_RB3D_COLORPITCH] |= R200_COLOR_TILE_ENABLE;
1086a205137423e42010a025c70b05af98a6c0564f28Roland Scheidegger   }
1087adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1088fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger   rmesa->hw.prf.cmd[PRF_PP_TRI_PERF] = R200_TRI_CUTOFF_MASK - R200_TRI_CUTOFF_MASK *
10894637235183b80963536f2364e4d50fcb894886ddDave Airlie			driQueryOptionf (&rmesa->radeon.optionCache,"texture_blend_quality");
1090fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger   rmesa->hw.prf.cmd[PRF_PP_PERF_CNTL] = 0;
1091fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger
1092adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.set.cmd[SET_SE_CNTL] = (R200_FFACE_CULL_CCW |
1093adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_BFACE_SOLID |
1094adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_FFACE_SOLID |
1095adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_FLAT_SHADE_VTX_LAST |
1096adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_DIFFUSE_SHADE_GOURAUD |
1097adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_ALPHA_SHADE_GOURAUD |
1098adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_SPECULAR_SHADE_GOURAUD |
1099adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_FOG_SHADE_GOURAUD |
1100cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger				     R200_DISC_FOG_SHADE_GOURAUD |
1101adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_VTX_PIX_CENTER_OGL |
1102adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_ROUND_MODE_TRUNC |
1103adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_ROUND_PREC_8TH_PIX);
1104adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1105adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.set.cmd[SET_RE_CNTL] = (R200_PERSPECTIVE_ENABLE |
1106adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_SCISSOR_ENABLE);
1107adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1108adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.lin.cmd[LIN_RE_LINE_PATTERN] = ((1 << 16) | 0xffff);
1109adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1110adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.lin.cmd[LIN_RE_LINE_STATE] =
1111adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ((0 << R200_LINE_CURRENT_PTR_SHIFT) |
1112adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (1 << R200_LINE_CURRENT_COUNT_SHIFT));
1113adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1114adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.lin.cmd[LIN_SE_LINE_WIDTH] = (1 << 4);
1115adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1116adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msk.cmd[MSK_RB3D_STENCILREFMASK] =
1117adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ((0x00 << R200_STENCIL_REF_SHIFT) |
1118adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (0xff << R200_STENCIL_MASK_SHIFT) |
1119adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (0xff << R200_STENCIL_WRITEMASK_SHIFT));
1120adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1121adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msk.cmd[MSK_RB3D_ROPCNTL] = R200_ROP_COPY;
1122adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msk.cmd[MSK_RB3D_PLANEMASK] = 0xffffffff;
1123adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1124adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tam.cmd[TAM_DEBUG3] = 0;
1125adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1126adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msc.cmd[MSC_RE_MISC] =
1127adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ((0 << R200_STIPPLE_X_OFFSET_SHIFT) |
1128adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (0 << R200_STIPPLE_Y_OFFSET_SHIFT) |
1129adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_STIPPLE_BIG_BIT_ORDER);
1130adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1131adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1132adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_PP_CNTL_X] = 0;
1133adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_RB3D_DEPTHXY_OFFSET] = 0;
1134adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_RE_AUX_SCISSOR_CNTL] = 0x0;
1135adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_RE_SCISSOR_TL_0] = 0;
1136adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_RE_SCISSOR_BR_0] = 0;
1137adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_SE_VAP_CNTL_STATUS] =
1138adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#ifdef MESA_BIG_ENDIAN
1139adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell						R200_VC_32BIT_SWAP;
1140adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#else
1141adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell						R200_VC_NO_SWAP;
1142adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#endif
114310095c9024efb1767fb3df0b59672299c090ad10Eric Anholt
11444637235183b80963536f2364e4d50fcb894886ddDave Airlie   if (!(rmesa->radeon.radeonScreen->chip_flags & RADEON_CHIPSET_TCL)) {
114510095c9024efb1767fb3df0b59672299c090ad10Eric Anholt      /* Bypass TCL */
114610095c9024efb1767fb3df0b59672299c090ad10Eric Anholt      rmesa->hw.cst.cmd[CST_SE_VAP_CNTL_STATUS] |= (1<<8);
114710095c9024efb1767fb3df0b59672299c090ad10Eric Anholt   }
114810095c9024efb1767fb3df0b59672299c090ad10Eric Anholt
114944dace86eaf9eded8e6465adfadf6345658686ddRoland Scheidegger   rmesa->hw.cst.cmd[CST_RE_POINTSIZE] =
115044dace86eaf9eded8e6465adfadf6345658686ddRoland Scheidegger      (((GLuint)(ctx->Const.MaxPointSize * 16.0)) << R200_MAXPOINTSIZE_SHIFT) | 0x10;
1151adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_SE_TCL_INPUT_VTX_0] =
1152adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x0 << R200_VERTEX_POSITION_ADDR__SHIFT);
1153adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_SE_TCL_INPUT_VTX_1] =
1154adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x02 << R200_VTX_COLOR_0_ADDR__SHIFT) |
1155adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x03 << R200_VTX_COLOR_1_ADDR__SHIFT);
1156adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_SE_TCL_INPUT_VTX_2] =
1157adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x06 << R200_VTX_TEX_0_ADDR__SHIFT) |
1158adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x07 << R200_VTX_TEX_1_ADDR__SHIFT) |
1159adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x08 << R200_VTX_TEX_2_ADDR__SHIFT) |
1160adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x09 << R200_VTX_TEX_3_ADDR__SHIFT);
1161adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_SE_TCL_INPUT_VTX_3] =
1162adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x0A << R200_VTX_TEX_4_ADDR__SHIFT) |
1163adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x0B << R200_VTX_TEX_5_ADDR__SHIFT);
1164adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1165adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1166adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vpt.cmd[VPT_SE_VPORT_XSCALE]  = 0x00000000;
1167adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vpt.cmd[VPT_SE_VPORT_XOFFSET] = 0x00000000;
1168adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vpt.cmd[VPT_SE_VPORT_YSCALE]  = 0x00000000;
1169adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vpt.cmd[VPT_SE_VPORT_YOFFSET] = 0x00000000;
1170adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vpt.cmd[VPT_SE_VPORT_ZSCALE]  = 0x00000000;
1171adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vpt.cmd[VPT_SE_VPORT_ZOFFSET] = 0x00000000;
1172adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1173adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   for ( i = 0 ; i < ctx->Const.MaxTextureUnits ; i++ ) {
1174adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.tex[i].cmd[TEX_PP_TXFILTER] = R200_BORDER_MODE_OGL;
1175adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.tex[i].cmd[TEX_PP_TXFORMAT] =
1176adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell         ((i << R200_TXFORMAT_ST_ROUTE_SHIFT) |  /* <-- note i */
1177adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell          (2 << R200_TXFORMAT_WIDTH_SHIFT) |
1178adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell          (2 << R200_TXFORMAT_HEIGHT_SHIFT));
1179adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.tex[i].cmd[TEX_PP_BORDER_COLOR] = 0;
1180adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.tex[i].cmd[TEX_PP_TXFORMAT_X] =
1181adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell         (/* R200_TEXCOORD_PROJ | */
1182adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell          0x100000);	/* Small default bias */
11834637235183b80963536f2364e4d50fcb894886ddDave Airlie      if (rmesa->radeon.radeonScreen->drmSupportsFragShader) {
1184f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	 rmesa->hw.tex[i].cmd[TEX_PP_TXOFFSET_NEWDRM] =
11854637235183b80963536f2364e4d50fcb894886ddDave Airlie	     rmesa->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP];
1186f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	 rmesa->hw.tex[i].cmd[TEX_PP_CUBIC_FACES] = 0;
1187f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	 rmesa->hw.tex[i].cmd[TEX_PP_TXMULTI_CTL] = 0;
1188f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      }
1189f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      else {
1190f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	  rmesa->hw.tex[i].cmd[TEX_PP_TXOFFSET_OLDDRM] =
11914637235183b80963536f2364e4d50fcb894886ddDave Airlie	     rmesa->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP];
1192f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger     }
1193adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1194adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_FACES] = 0;
1195067603db91072fc3b02e1583195641972f81168fMichel Dänzer      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_OFFSET_F1] =
11964637235183b80963536f2364e4d50fcb894886ddDave Airlie         rmesa->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP];
1197067603db91072fc3b02e1583195641972f81168fMichel Dänzer      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_OFFSET_F2] =
11984637235183b80963536f2364e4d50fcb894886ddDave Airlie         rmesa->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP];
1199067603db91072fc3b02e1583195641972f81168fMichel Dänzer      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_OFFSET_F3] =
12004637235183b80963536f2364e4d50fcb894886ddDave Airlie         rmesa->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP];
1201067603db91072fc3b02e1583195641972f81168fMichel Dänzer      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_OFFSET_F4] =
12024637235183b80963536f2364e4d50fcb894886ddDave Airlie         rmesa->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP];
1203067603db91072fc3b02e1583195641972f81168fMichel Dänzer      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_OFFSET_F5] =
12044637235183b80963536f2364e4d50fcb894886ddDave Airlie         rmesa->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP];
1205adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
12061bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger      rmesa->hw.pix[i].cmd[PIX_PP_TXCBLEND] =
12071bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger         (R200_TXC_ARG_A_ZERO |
12081bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXC_ARG_B_ZERO |
12091bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXC_ARG_C_DIFFUSE_COLOR |
12101bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXC_OP_MADD);
12111bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger
12121bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger      rmesa->hw.pix[i].cmd[PIX_PP_TXCBLEND2] =
12131bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger         ((i << R200_TXC_TFACTOR_SEL_SHIFT) |
12141bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXC_SCALE_1X |
12151bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXC_CLAMP_0_1 |
12161bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXC_OUTPUT_REG_R0);
12171bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger
12181bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger      rmesa->hw.pix[i].cmd[PIX_PP_TXABLEND] =
12191bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger         (R200_TXA_ARG_A_ZERO |
12201bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXA_ARG_B_ZERO |
12211bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXA_ARG_C_DIFFUSE_ALPHA |
12221bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXA_OP_MADD);
12231bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger
12241bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger      rmesa->hw.pix[i].cmd[PIX_PP_TXABLEND2] =
12251bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger         ((i << R200_TXA_TFACTOR_SEL_SHIFT) |
12261bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXA_SCALE_1X |
12271bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXA_CLAMP_0_1 |
12281bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXA_OUTPUT_REG_R0);
12291bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger   }
1230adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1231adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tf.cmd[TF_TFACTOR_0] = 0;
1232adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tf.cmd[TF_TFACTOR_1] = 0;
1233adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tf.cmd[TF_TFACTOR_2] = 0;
1234adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tf.cmd[TF_TFACTOR_3] = 0;
1235adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tf.cmd[TF_TFACTOR_4] = 0;
1236adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tf.cmd[TF_TFACTOR_5] = 0;
1237adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1238adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vap.cmd[VAP_SE_VAP_CNTL] =
1239adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (R200_VAP_TCL_ENABLE |
1240adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (0x9 << R200_VAP_VF_MAX_VTX_NUM__SHIFT));
1241adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1242adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vte.cmd[VTE_SE_VTE_CNTL] =
1243adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (R200_VPORT_X_SCALE_ENA |
1244adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_VPORT_Y_SCALE_ENA |
1245adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_VPORT_Z_SCALE_ENA |
1246adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_VPORT_X_OFFSET_ENA |
1247adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_VPORT_Y_OFFSET_ENA |
1248adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_VPORT_Z_OFFSET_ENA |
1249adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* FIXME: Turn on for tex rect only */
1250adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_VTX_ST_DENORMALIZED |
1251adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_VTX_W0_FMT);
1252adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1253adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1254adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vtx.cmd[VTX_VTXFMT_0] = 0;
1255adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vtx.cmd[VTX_VTXFMT_1] = 0;
1256adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vtx.cmd[VTX_TCL_OUTPUT_VTXFMT_0] =
1257adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ((R200_VTX_Z0 | R200_VTX_W0 |
1258adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (R200_VTX_FP_RGBA << R200_VTX_COLOR_0_SHIFT)));
1259adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vtx.cmd[VTX_TCL_OUTPUT_VTXFMT_1] = 0;
1260adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vtx.cmd[VTX_TCL_OUTPUT_COMPSEL] = (R200_OUTPUT_XYZW);
1261adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vtx.cmd[VTX_STATE_CNTL] = R200_VSC_UPDATE_USER_COLOR_0_ENABLE;
1262adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1263adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1264adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Matrix selection */
1265adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msl.cmd[MSL_MATRIX_SELECT_0] =
1266adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (R200_MTX_MV << R200_MODELVIEW_0_SHIFT);
1267adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1268adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msl.cmd[MSL_MATRIX_SELECT_1] =
1269adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (R200_MTX_IMV << R200_IT_MODELVIEW_0_SHIFT);
1270adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1271adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msl.cmd[MSL_MATRIX_SELECT_2] =
1272adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (R200_MTX_MVP << R200_MODELPROJECT_0_SHIFT);
1273adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1274adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msl.cmd[MSL_MATRIX_SELECT_3] =
1275adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ((R200_MTX_TEX0 << R200_TEXMAT_0_SHIFT) |
1276adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (R200_MTX_TEX1 << R200_TEXMAT_1_SHIFT) |
1277adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (R200_MTX_TEX2 << R200_TEXMAT_2_SHIFT) |
1278adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (R200_MTX_TEX3 << R200_TEXMAT_3_SHIFT));
1279adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1280adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msl.cmd[MSL_MATRIX_SELECT_4] =
1281adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ((R200_MTX_TEX4 << R200_TEXMAT_4_SHIFT) |
1282adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (R200_MTX_TEX5 << R200_TEXMAT_5_SHIFT));
1283adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1284adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1285adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* General TCL state */
1286adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcl.cmd[TCL_LIGHT_MODEL_CTL_0] =
1287adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (R200_SPECULAR_LIGHTS |
1288adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_DIFFUSE_SPECULAR_COMBINE |
1289a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       R200_LOCAL_LIGHT_VEC_GL |
1290a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       R200_LM0_SOURCE_MATERIAL_0 << R200_FRONT_SHININESS_SOURCE_SHIFT |
1291a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       R200_LM0_SOURCE_MATERIAL_1 << R200_BACK_SHININESS_SOURCE_SHIFT);
1292adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1293adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcl.cmd[TCL_LIGHT_MODEL_CTL_1] =
1294a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger      ((R200_LM1_SOURCE_MATERIAL_0 << R200_FRONT_EMISSIVE_SOURCE_SHIFT) |
1295a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       (R200_LM1_SOURCE_MATERIAL_0 << R200_FRONT_AMBIENT_SOURCE_SHIFT) |
1296a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       (R200_LM1_SOURCE_MATERIAL_0 << R200_FRONT_DIFFUSE_SOURCE_SHIFT) |
1297a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       (R200_LM1_SOURCE_MATERIAL_0 << R200_FRONT_SPECULAR_SOURCE_SHIFT) |
1298a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       (R200_LM1_SOURCE_MATERIAL_1 << R200_BACK_EMISSIVE_SOURCE_SHIFT) |
1299a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       (R200_LM1_SOURCE_MATERIAL_1 << R200_BACK_AMBIENT_SOURCE_SHIFT) |
1300a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       (R200_LM1_SOURCE_MATERIAL_1 << R200_BACK_DIFFUSE_SOURCE_SHIFT) |
1301a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       (R200_LM1_SOURCE_MATERIAL_1 << R200_BACK_SPECULAR_SOURCE_SHIFT));
1302adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1303adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcl.cmd[TCL_PER_LIGHT_CTL_0] = 0; /* filled in via callbacks */
1304adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcl.cmd[TCL_PER_LIGHT_CTL_1] = 0;
1305adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcl.cmd[TCL_PER_LIGHT_CTL_2] = 0;
1306adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcl.cmd[TCL_PER_LIGHT_CTL_3] = 0;
1307adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1308adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcl.cmd[TCL_UCP_VERT_BLEND_CTL] =
1309adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (R200_UCP_IN_CLIP_SPACE |
1310adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_CULL_FRONT_IS_CCW);
1311adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1312adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Texgen/Texmat state */
1313b1ebd306bf4fdc4076d3d3daa410b08f477cb4c4Eric Anholt   rmesa->hw.tcg.cmd[TCG_TEX_PROC_CTL_2] = 0x00ffffff;
1314adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcg.cmd[TCG_TEX_PROC_CTL_3] =
1315adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ((0 << R200_TEXGEN_0_INPUT_TEX_SHIFT) |
1316adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (1 << R200_TEXGEN_1_INPUT_TEX_SHIFT) |
1317adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (2 << R200_TEXGEN_2_INPUT_TEX_SHIFT) |
1318adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (3 << R200_TEXGEN_3_INPUT_TEX_SHIFT) |
1319adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (4 << R200_TEXGEN_4_INPUT_TEX_SHIFT) |
1320adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (5 << R200_TEXGEN_5_INPUT_TEX_SHIFT));
1321adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcg.cmd[TCG_TEX_PROC_CTL_0] = 0;
1322adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcg.cmd[TCG_TEX_PROC_CTL_1] =
1323adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ((0 << R200_TEXGEN_0_INPUT_SHIFT) |
1324adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (1 << R200_TEXGEN_1_INPUT_SHIFT) |
1325adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (2 << R200_TEXGEN_2_INPUT_SHIFT) |
1326adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (3 << R200_TEXGEN_3_INPUT_SHIFT) |
1327adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (4 << R200_TEXGEN_4_INPUT_SHIFT) |
1328adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (5 << R200_TEXGEN_5_INPUT_SHIFT));
1329adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcg.cmd[TCG_TEX_CYL_WRAP_CTL] = 0;
1330adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1331adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1332adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   for (i = 0 ; i < 8; i++) {
1333adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      struct gl_light *l = &ctx->Light.Light[i];
1334adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      GLenum p = GL_LIGHT0 + i;
1335adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      *(float *)&(rmesa->hw.lit[i].cmd[LIT_RANGE_CUTOFF]) = FLT_MAX;
1336adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1337adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.Lightfv( ctx, p, GL_AMBIENT, l->Ambient );
1338adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.Lightfv( ctx, p, GL_DIFFUSE, l->Diffuse );
1339adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.Lightfv( ctx, p, GL_SPECULAR, l->Specular );
13400846e52d46b36c411f79908df010072e03bb6437Brian Paul      ctx->Driver.Lightfv( ctx, p, GL_POSITION, NULL );
13410846e52d46b36c411f79908df010072e03bb6437Brian Paul      ctx->Driver.Lightfv( ctx, p, GL_SPOT_DIRECTION, NULL );
1342adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.Lightfv( ctx, p, GL_SPOT_EXPONENT, &l->SpotExponent );
1343adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.Lightfv( ctx, p, GL_SPOT_CUTOFF, &l->SpotCutoff );
1344adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.Lightfv( ctx, p, GL_CONSTANT_ATTENUATION,
1345adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell			   &l->ConstantAttenuation );
1346adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.Lightfv( ctx, p, GL_LINEAR_ATTENUATION,
1347adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell			   &l->LinearAttenuation );
1348adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.Lightfv( ctx, p, GL_QUADRATIC_ATTENUATION,
1349bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl			   &l->QuadraticAttenuation );
13505d00e131d8a264498b8d050c3eded093ee5c42f2Michel Dänzer      *(float *)&(rmesa->hw.lit[i].cmd[LIT_ATTEN_XXX]) = 0.0;
1351adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   }
1352adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1353adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ctx->Driver.LightModelfv( ctx, GL_LIGHT_MODEL_AMBIENT,
1354adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell			     ctx->Light.Model.Ambient );
1355adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1356adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   TNL_CONTEXT(ctx)->Driver.NotifyMaterialChange( ctx );
1357adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1358adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   for (i = 0 ; i < 6; i++) {
1359adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.ClipPlane( ctx, GL_CLIP_PLANE0 + i, NULL );
1360adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   }
1361adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
13620846e52d46b36c411f79908df010072e03bb6437Brian Paul   ctx->Driver.Fogfv( ctx, GL_FOG_MODE, NULL );
1363adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ctx->Driver.Fogfv( ctx, GL_FOG_DENSITY, &ctx->Fog.Density );
1364adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ctx->Driver.Fogfv( ctx, GL_FOG_START, &ctx->Fog.Start );
1365adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ctx->Driver.Fogfv( ctx, GL_FOG_END, &ctx->Fog.End );
1366adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ctx->Driver.Fogfv( ctx, GL_FOG_COLOR, ctx->Fog.Color );
13670846e52d46b36c411f79908df010072e03bb6437Brian Paul   ctx->Driver.Fogfv( ctx, GL_FOG_COORDINATE_SOURCE_EXT, NULL );
1368adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1369adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.grd.cmd[GRD_VERT_GUARD_CLIP_ADJ] = IEEE_ONE;
1370adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.grd.cmd[GRD_VERT_GUARD_DISCARD_ADJ] = IEEE_ONE;
1371adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.grd.cmd[GRD_HORZ_GUARD_CLIP_ADJ] = IEEE_ONE;
1372adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.grd.cmd[GRD_HORZ_GUARD_DISCARD_ADJ] = IEEE_ONE;
1373adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1374adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.eye.cmd[EYE_X] = 0;
1375adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.eye.cmd[EYE_Y] = 0;
1376adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.eye.cmd[EYE_Z] = IEEE_ONE;
1377adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.eye.cmd[EYE_RESCALE_FACTOR] = IEEE_ONE;
1378adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1379cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.spr.cmd[SPR_POINT_SPRITE_CNTL] =
1380cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger      R200_PS_SE_SEL_STATE | R200_PS_MULT_CONST;
1381cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger
1382cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   /* ptp_eye is presumably used to calculate the attenuation wrt a different
1383cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger      location? In any case, since point attenuation triggers _needeyecoords,
1384cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger      it is constant. Probably ignored as long as R200_PS_USE_MODEL_EYE_VEC
1385cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger      isn't set */
1386cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_EYE_X] = 0;
1387cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_EYE_Y] = 0;
1388cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_EYE_Z] = IEEE_ONE | 0x80000000; /* -1.0 */
1389cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_EYE_3] = 0;
1390cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   /* no idea what the ptp_vport_scale values are good for, except the
1391cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger      PTSIZE one - hopefully doesn't matter */
1392cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_VPORT_SCALE_0] = IEEE_ONE;
1393cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_VPORT_SCALE_1] = IEEE_ONE;
1394cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_VPORT_SCALE_PTSIZE] = IEEE_ONE;
1395cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_VPORT_SCALE_3] = IEEE_ONE;
1396cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_ATT_CONST_QUAD] = 0;
1397cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_ATT_CONST_LIN] = 0;
1398cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_ATT_CONST_CON] = IEEE_ONE;
1399cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_ATT_CONST_3] = 0;
1400cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_CLAMP_MIN] = IEEE_ONE;
1401cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_CLAMP_MAX] = 0x44ffe000; /* 2047 */
1402cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_CLAMP_2] = 0;
1403cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_CLAMP_3] = 0;
140444dace86eaf9eded8e6465adfadf6345658686ddRoland Scheidegger
1405adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   r200LightingSpaceChange( ctx );
140644dace86eaf9eded8e6465adfadf6345658686ddRoland Scheidegger
14071090d206de011a67d236d8c4ae32d2d42b2f6337Dave Airlie   rmesa->radeon.hw.all_dirty = GL_TRUE;
1408ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie
14091090d206de011a67d236d8c4ae32d2d42b2f6337Dave Airlie   rcommonInitCmdBuf(&rmesa->radeon);
1410adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell}
1411