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/t_pipeline.h"
43adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "swrast_setup/swrast_setup.h"
44adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
458cb16e6daff40bbfd7b63a43da72862226a4a164Dave Airlie#include "radeon_common.h"
4661bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie#include "radeon_mipmap_tree.h"
47adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "r200_context.h"
48adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "r200_ioctl.h"
49adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "r200_state.h"
50b6df23d8b3e70d86433ba9fc4d87338e1063fe39Dave Airlie#include "radeon_queryobj.h"
51adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
52273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane#include "xmlpool.h"
53273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane
54ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie/* New (1.3) state mechanism.  3 commands (packet, scalar, vector) in
55ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie * 1.3 cmdbuffers allow all previous state to be updated as well as
56ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie * the tcl scalar and vector areas.
57ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie */
58ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airliestatic struct {
59ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	int start;
60ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	int len;
61ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	const char *name;
62ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie} packet[RADEON_MAX_STATE_PACKETS] = {
63ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_MISC, 7, "RADEON_PP_MISC"},
64ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_CNTL, 3, "RADEON_PP_CNTL"},
65ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_RB3D_COLORPITCH, 1, "RADEON_RB3D_COLORPITCH"},
66ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_RE_LINE_PATTERN, 2, "RADEON_RE_LINE_PATTERN"},
67ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_SE_LINE_WIDTH, 1, "RADEON_SE_LINE_WIDTH"},
68ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_LUM_MATRIX, 1, "RADEON_PP_LUM_MATRIX"},
69ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_ROT_MATRIX_0, 2, "RADEON_PP_ROT_MATRIX_0"},
70ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_RB3D_STENCILREFMASK, 3, "RADEON_RB3D_STENCILREFMASK"},
71ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_SE_VPORT_XSCALE, 6, "RADEON_SE_VPORT_XSCALE"},
72ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_SE_CNTL, 2, "RADEON_SE_CNTL"},
73ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_SE_CNTL_STATUS, 1, "RADEON_SE_CNTL_STATUS"},
74ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_RE_MISC, 1, "RADEON_RE_MISC"},
75ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_TXFILTER_0, 6, "RADEON_PP_TXFILTER_0"},
76ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_BORDER_COLOR_0, 1, "RADEON_PP_BORDER_COLOR_0"},
77ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_TXFILTER_1, 6, "RADEON_PP_TXFILTER_1"},
78ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_BORDER_COLOR_1, 1, "RADEON_PP_BORDER_COLOR_1"},
79ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_TXFILTER_2, 6, "RADEON_PP_TXFILTER_2"},
80ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_BORDER_COLOR_2, 1, "RADEON_PP_BORDER_COLOR_2"},
81ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_SE_ZBIAS_FACTOR, 2, "RADEON_SE_ZBIAS_FACTOR"},
82ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_SE_TCL_OUTPUT_VTX_FMT, 11, "RADEON_SE_TCL_OUTPUT_VTX_FMT"},
83ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_SE_TCL_MATERIAL_EMMISSIVE_RED, 17,
84ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie		    "RADEON_SE_TCL_MATERIAL_EMMISSIVE_RED"},
85ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXCBLEND_0, 4, "R200_PP_TXCBLEND_0"},
86ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXCBLEND_1, 4, "R200_PP_TXCBLEND_1"},
87ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXCBLEND_2, 4, "R200_PP_TXCBLEND_2"},
88ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXCBLEND_3, 4, "R200_PP_TXCBLEND_3"},
89ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXCBLEND_4, 4, "R200_PP_TXCBLEND_4"},
90ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXCBLEND_5, 4, "R200_PP_TXCBLEND_5"},
91ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXCBLEND_6, 4, "R200_PP_TXCBLEND_6"},
92ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXCBLEND_7, 4, "R200_PP_TXCBLEND_7"},
93ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_SE_TCL_LIGHT_MODEL_CTL_0, 6, "R200_SE_TCL_LIGHT_MODEL_CTL_0"},
94ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TFACTOR_0, 6, "R200_PP_TFACTOR_0"},
95ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_SE_VTX_FMT_0, 4, "R200_SE_VTX_FMT_0"},
96ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_SE_VAP_CNTL, 1, "R200_SE_VAP_CNTL"},
97ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_SE_TCL_MATRIX_SEL_0, 5, "R200_SE_TCL_MATRIX_SEL_0"},
98ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_SE_TCL_TEX_PROC_CTL_2, 5, "R200_SE_TCL_TEX_PROC_CTL_2"},
99ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_SE_TCL_UCP_VERT_BLEND_CTL, 1, "R200_SE_TCL_UCP_VERT_BLEND_CTL"},
100ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXFILTER_0, 6, "R200_PP_TXFILTER_0"},
101ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXFILTER_1, 6, "R200_PP_TXFILTER_1"},
102ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXFILTER_2, 6, "R200_PP_TXFILTER_2"},
103ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXFILTER_3, 6, "R200_PP_TXFILTER_3"},
104ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXFILTER_4, 6, "R200_PP_TXFILTER_4"},
105ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXFILTER_5, 6, "R200_PP_TXFILTER_5"},
106ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXOFFSET_0, 1, "R200_PP_TXOFFSET_0"},
107ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXOFFSET_1, 1, "R200_PP_TXOFFSET_1"},
108ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXOFFSET_2, 1, "R200_PP_TXOFFSET_2"},
109ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXOFFSET_3, 1, "R200_PP_TXOFFSET_3"},
110ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXOFFSET_4, 1, "R200_PP_TXOFFSET_4"},
111ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXOFFSET_5, 1, "R200_PP_TXOFFSET_5"},
112ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_SE_VTE_CNTL, 1, "R200_SE_VTE_CNTL"},
113ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_SE_TCL_OUTPUT_VTX_COMP_SEL, 1,
114ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	 "R200_SE_TCL_OUTPUT_VTX_COMP_SEL"},
115ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TAM_DEBUG3, 1, "R200_PP_TAM_DEBUG3"},
116ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_CNTL_X, 1, "R200_PP_CNTL_X"},
117ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_RB3D_DEPTHXY_OFFSET, 1, "R200_RB3D_DEPTHXY_OFFSET"},
118ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_RE_AUX_SCISSOR_CNTL, 1, "R200_RE_AUX_SCISSOR_CNTL"},
119ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_RE_SCISSOR_TL_0, 2, "R200_RE_SCISSOR_TL_0"},
120ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_RE_SCISSOR_TL_1, 2, "R200_RE_SCISSOR_TL_1"},
121ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_RE_SCISSOR_TL_2, 2, "R200_RE_SCISSOR_TL_2"},
122ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_SE_VAP_CNTL_STATUS, 1, "R200_SE_VAP_CNTL_STATUS"},
123ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_SE_VTX_STATE_CNTL, 1, "R200_SE_VTX_STATE_CNTL"},
124ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_RE_POINTSIZE, 1, "R200_RE_POINTSIZE"},
125ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_SE_TCL_INPUT_VTX_VECTOR_ADDR_0, 4,
126ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie		    "R200_SE_TCL_INPUT_VTX_VECTOR_ADDR_0"},
127ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_CUBIC_FACES_0, 1, "R200_PP_CUBIC_FACES_0"},	/* 61 */
128ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_CUBIC_OFFSET_F1_0, 5, "R200_PP_CUBIC_OFFSET_F1_0"}, /* 62 */
129ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_CUBIC_FACES_1, 1, "R200_PP_CUBIC_FACES_1"},
130ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_CUBIC_OFFSET_F1_1, 5, "R200_PP_CUBIC_OFFSET_F1_1"},
131ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_CUBIC_FACES_2, 1, "R200_PP_CUBIC_FACES_2"},
132ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_CUBIC_OFFSET_F1_2, 5, "R200_PP_CUBIC_OFFSET_F1_2"},
133ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_CUBIC_FACES_3, 1, "R200_PP_CUBIC_FACES_3"},
134ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_CUBIC_OFFSET_F1_3, 5, "R200_PP_CUBIC_OFFSET_F1_3"},
135ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_CUBIC_FACES_4, 1, "R200_PP_CUBIC_FACES_4"},
136ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_CUBIC_OFFSET_F1_4, 5, "R200_PP_CUBIC_OFFSET_F1_4"},
137ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_CUBIC_FACES_5, 1, "R200_PP_CUBIC_FACES_5"},
138ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_CUBIC_OFFSET_F1_5, 5, "R200_PP_CUBIC_OFFSET_F1_5"},
139ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_TEX_SIZE_0, 2, "RADEON_PP_TEX_SIZE_0"},
140ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_TEX_SIZE_1, 2, "RADEON_PP_TEX_SIZE_1"},
141ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_TEX_SIZE_2, 2, "RADEON_PP_TEX_SIZE_2"},
142ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_RB3D_BLENDCOLOR, 3, "R200_RB3D_BLENDCOLOR"},
143ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_SE_TCL_POINT_SPRITE_CNTL, 1, "R200_SE_TCL_POINT_SPRITE_CNTL"},
144ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_CUBIC_FACES_0, 1, "RADEON_PP_CUBIC_FACES_0"},
145ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_CUBIC_OFFSET_T0_0, 5, "RADEON_PP_CUBIC_OFFSET_T0_0"},
146ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_CUBIC_FACES_1, 1, "RADEON_PP_CUBIC_FACES_1"},
147ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_CUBIC_OFFSET_T1_0, 5, "RADEON_PP_CUBIC_OFFSET_T1_0"},
148ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_CUBIC_FACES_2, 1, "RADEON_PP_CUBIC_FACES_2"},
149ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{RADEON_PP_CUBIC_OFFSET_T2_0, 5, "RADEON_PP_CUBIC_OFFSET_T2_0"},
150ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TRI_PERF, 2, "R200_PP_TRI_PERF"},
151ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXCBLEND_8, 32, "R200_PP_AFS_0"},     /* 85 */
152ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXCBLEND_0, 32, "R200_PP_AFS_1"},
153ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TFACTOR_0, 8, "R200_ATF_TFACTOR"},
154ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXFILTER_0, 8, "R200_PP_TXCTLALL_0"},
155ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXFILTER_1, 8, "R200_PP_TXCTLALL_1"},
156ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXFILTER_2, 8, "R200_PP_TXCTLALL_2"},
157ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXFILTER_3, 8, "R200_PP_TXCTLALL_3"},
158ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXFILTER_4, 8, "R200_PP_TXCTLALL_4"},
159ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_PP_TXFILTER_5, 8, "R200_PP_TXCTLALL_5"},
160ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie	{R200_VAP_PVS_CNTL_1, 2, "R200_VAP_PVS_CNTL"},
161ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie};
162ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie
163adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* =============================================================
164adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell * State initialization
165adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
166474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airliestatic int cmdpkt( r200ContextPtr rmesa, int id )
167adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell{
1684a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   return CP_PACKET0(packet[id].start, packet[id].len - 1);
169adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell}
170adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
171adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstatic int cmdvec( int offset, int stride, int count )
172adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell{
173ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl   drm_radeon_cmd_header_t h;
174adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.i = 0;
175adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.vectors.cmd_type = RADEON_CMD_VECTORS;
176adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.vectors.offset = offset;
177adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.vectors.stride = stride;
178adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.vectors.count = count;
179adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   return h.i;
180adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell}
181adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
18298c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger/* warning: the count here is divided by 4 compared to other cmds
18398c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   (so it doesn't exceed the char size)! */
18498c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheideggerstatic int cmdveclinear( int offset, int count )
18598c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger{
18698c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   drm_radeon_cmd_header_t h;
18798c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   h.i = 0;
18898c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   h.veclinear.cmd_type = RADEON_CMD_VECLINEAR;
18998c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   h.veclinear.addr_lo = offset & 0xff;
19098c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   h.veclinear.addr_hi = (offset & 0xff00) >> 8;
19198c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   h.veclinear.count = count;
19298c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   return h.i;
19398c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger}
19498c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger
195adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstatic int cmdscl( int offset, int stride, int count )
196adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell{
197ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl   drm_radeon_cmd_header_t h;
198adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.i = 0;
199adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.scalars.cmd_type = RADEON_CMD_SCALARS;
200adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.scalars.offset = offset;
201adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.scalars.stride = stride;
202adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.scalars.count = count;
203adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   return h.i;
204adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell}
205adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
206adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstatic int cmdscl2( int offset, int stride, int count )
207adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell{
208ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl   drm_radeon_cmd_header_t h;
209adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.i = 0;
210adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.scalars.cmd_type = RADEON_CMD_SCALARS2;
211adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.scalars.offset = offset - 0x100;
212adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.scalars.stride = stride;
213adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.scalars.count = count;
214adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   return h.i;
215adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell}
216adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
2170f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen/**
2180f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen * Check functions are used to check if state is active.
2190f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen * If it is active check function returns maximum emit size.
2200f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen */
2210f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen#define CHECK( NM, FLAG, ADD )				\
222f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergstatic int check_##NM( struct gl_context *ctx, struct radeon_state_atom *atom) \
223adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell{							\
22436603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger   r200ContextPtr rmesa = R200_CONTEXT(ctx);		\
22536603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger   (void) rmesa;					\
2260f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   return (FLAG) ? atom->cmd_size + (ADD) : 0;			\
227adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell}
228adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
2290f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen#define TCL_CHECK( NM, FLAG, ADD )				\
230f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergstatic int check_##NM( struct gl_context *ctx, struct radeon_state_atom *atom) \
2314637235183b80963536f2364e4d50fcb894886ddDave Airlie{									\
2324637235183b80963536f2364e4d50fcb894886ddDave Airlie   r200ContextPtr rmesa = R200_CONTEXT(ctx);				\
2330f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   return (!rmesa->radeon.TclFallback && !ctx->VertexProgram._Enabled && (FLAG)) ? atom->cmd_size + (ADD) : 0; \
23498c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger}
23598c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger
2360f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen#define TCL_OR_VP_CHECK( NM, FLAG, ADD )			\
237f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergstatic int check_##NM( struct gl_context *ctx, struct radeon_state_atom *atom ) \
23898c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger{							\
23998c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   r200ContextPtr rmesa = R200_CONTEXT(ctx);		\
2400f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   return (!rmesa->radeon.TclFallback && (FLAG)) ? atom->cmd_size + (ADD) : 0;	\
241adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell}
242adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
2430f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen#define VP_CHECK( NM, FLAG, ADD )				\
244f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergstatic int check_##NM( struct gl_context *ctx, struct radeon_state_atom *atom ) \
2454637235183b80963536f2364e4d50fcb894886ddDave Airlie{									\
2464637235183b80963536f2364e4d50fcb894886ddDave Airlie   r200ContextPtr rmesa = R200_CONTEXT(ctx);				\
2474637235183b80963536f2364e4d50fcb894886ddDave Airlie   (void) atom;								\
2480f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   return (!rmesa->radeon.TclFallback && ctx->VertexProgram._Enabled && (FLAG)) ? atom->cmd_size + (ADD) : 0; \
24998c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger}
250adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
2510f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenCHECK( always, GL_TRUE, 0 )
2520f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenCHECK( always_add4, GL_TRUE, 4 )
2530f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenCHECK( never, GL_FALSE, 0 )
2540f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenCHECK( tex_any, ctx->Texture._EnabledUnits, 0 )
2550f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenCHECK( tf, (ctx->Texture._EnabledUnits && !ctx->ATIFragmentShader._Enabled), 0 );
2560f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenCHECK( pix_zero, !ctx->ATIFragmentShader._Enabled, 0 )
2570f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   CHECK( texenv, (rmesa->state.envneeded & (1 << (atom->idx)) && !ctx->ATIFragmentShader._Enabled), 0 )
2580f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenCHECK( afs_pass1, (ctx->ATIFragmentShader._Enabled && (ctx->ATIFragmentShader.Current->NumPasses > 1)), 0 )
2590f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenCHECK( afs, ctx->ATIFragmentShader._Enabled, 0 )
2600f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenCHECK( tex_cube, rmesa->state.texture.unit[atom->idx].unitneeded & TEXTURE_CUBE_BIT, 3 + 3*5 - CUBE_STATE_SIZE )
26197aa3d553f73d955a5c3eced33384348158307a7Dave AirlieCHECK( tex_cube_cs, rmesa->state.texture.unit[atom->idx].unitneeded & TEXTURE_CUBE_BIT, 2 + 4*5 - CUBE_STATE_SIZE )
2620f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenTCL_CHECK( tcl_fog_add4, ctx->Fog.Enabled, 4 )
2630f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenTCL_CHECK( tcl, GL_TRUE, 0 )
2640f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenTCL_CHECK( tcl_add8, GL_TRUE, 8 )
2650f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenTCL_CHECK( tcl_add4, GL_TRUE, 4 )
2660f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenTCL_CHECK( tcl_tex_add4, rmesa->state.texture.unit[atom->idx].unitneeded, 4 )
2670f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenTCL_CHECK( tcl_lighting_add4, ctx->Light.Enabled, 4 )
2680f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenTCL_CHECK( tcl_lighting_add6, ctx->Light.Enabled, 6 )
269b694aa4ab9579815903220a0a3536f648914551asmokiTCL_CHECK( tcl_light_add6, ctx->Light.Enabled && ctx->Light.Light[atom->idx].Enabled, 6 )
2700f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenTCL_OR_VP_CHECK( tcl_ucp_add4, (ctx->Transform.ClipPlanesEnabled & (1 << (atom->idx))), 4 )
2710f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenTCL_OR_VP_CHECK( tcl_or_vp, GL_TRUE, 0 )
2720f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenTCL_OR_VP_CHECK( tcl_or_vp_add2, GL_TRUE, 2 )
2730f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenVP_CHECK( tcl_vp, GL_TRUE, 0 )
2740f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenVP_CHECK( tcl_vp_add4, GL_TRUE, 4 )
2750f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenVP_CHECK( tcl_vp_size_add4, ctx->VertexProgram.Current->Base.NumNativeInstructions > 64, 4 )
2760f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenVP_CHECK( tcl_vpp_size_add4, ctx->VertexProgram.Current->Base.NumNativeParameters > 96, 4 )
277adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
278474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie#define OUT_VEC(hdr, data) do {			\
279474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    drm_radeon_cmd_header_t h;					\
280474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    h.i = hdr;								\
281474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(CP_PACKET0(RADEON_SE_TCL_STATE_FLUSH, 0));		\
282474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(0);							\
283474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(CP_PACKET0(R200_SE_TCL_VECTOR_INDX_REG, 0));		\
284474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(h.vectors.offset | (h.vectors.stride << RADEON_VEC_INDX_OCTWORD_STRIDE_SHIFT)); \
285474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(CP_PACKET0_ONE(R200_SE_TCL_VECTOR_DATA_REG, h.vectors.count - 1));	\
286474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH_TABLE((data), h.vectors.count);				\
287474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie  } while(0)
288474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
2891570bde279362d95a58d120e42e68cb307d00ddeDave Airlie#define OUT_VECLINEAR(hdr, data) do {					\
2901570bde279362d95a58d120e42e68cb307d00ddeDave Airlie    drm_radeon_cmd_header_t h;						\
2911570bde279362d95a58d120e42e68cb307d00ddeDave Airlie    uint32_t _start, _sz;						\
292474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    h.i = hdr;								\
2931570bde279362d95a58d120e42e68cb307d00ddeDave Airlie    _start = h.veclinear.addr_lo | (h.veclinear.addr_hi << 8);		\
2941570bde279362d95a58d120e42e68cb307d00ddeDave Airlie    _sz = h.veclinear.count * 4;					\
2954a2f00889ba481c117057da5fac7585327458cc3Eric Anholt    if (_sz) {								\
2968308bf9ee155b405ad42e6621daf33a108330418Jerome Glisse    BEGIN_BATCH_NO_AUTOSTATE(dwords); \
297474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(CP_PACKET0(RADEON_SE_TCL_STATE_FLUSH, 0));		\
298474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(0);							\
299474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(CP_PACKET0(R200_SE_TCL_VECTOR_INDX_REG, 0));		\
300474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(_start | (1 << RADEON_VEC_INDX_OCTWORD_STRIDE_SHIFT));	\
301474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(CP_PACKET0_ONE(R200_SE_TCL_VECTOR_DATA_REG, _sz - 1));	\
302474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH_TABLE((data), _sz);					\
3038308bf9ee155b405ad42e6621daf33a108330418Jerome Glisse    END_BATCH(); \
3048308bf9ee155b405ad42e6621daf33a108330418Jerome Glisse    } \
305474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie  } while(0)
306474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
307474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie#define OUT_SCL(hdr, data) do {					\
308474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    drm_radeon_cmd_header_t h;						\
309474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    h.i = hdr;								\
310474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(CP_PACKET0(R200_SE_TCL_SCALAR_INDX_REG, 0));		\
311474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH((h.scalars.offset) | (h.scalars.stride << RADEON_SCAL_INDX_DWORD_STRIDE_SHIFT)); \
312474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(CP_PACKET0_ONE(R200_SE_TCL_SCALAR_DATA_REG, h.scalars.count - 1));	\
313474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH_TABLE((data), h.scalars.count);				\
314474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie  } while(0)
315474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
316474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie#define OUT_SCL2(hdr, data) do {					\
317474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    drm_radeon_cmd_header_t h;						\
318474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    h.i = hdr;								\
319474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(CP_PACKET0(R200_SE_TCL_SCALAR_INDX_REG, 0));		\
320474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH((h.scalars.offset + 0x100) | (h.scalars.stride << RADEON_SCAL_INDX_DWORD_STRIDE_SHIFT)); \
321474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(CP_PACKET0_ONE(R200_SE_TCL_SCALAR_DATA_REG, h.scalars.count - 1));	\
322474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH_TABLE((data), h.scalars.count);				\
323474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie  } while(0)
324f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergstatic int check_rrb(struct gl_context *ctx, struct radeon_state_atom *atom)
325dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen{
326dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen   r200ContextPtr r200 = R200_CONTEXT(ctx);
327dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen   struct radeon_renderbuffer *rrb;
328dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen   rrb = radeon_get_colorbuffer(&r200->radeon);
329dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen   if (!rrb || !rrb->bo)
330dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen      return 0;
331dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen   return atom->cmd_size;
332dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen}
333474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
334f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergstatic int check_polygon_stipple(struct gl_context *ctx,
3356785a8aaf4bff5f607731fdc6f19189c1088112fPauli Nieminen		struct radeon_state_atom *atom)
3366785a8aaf4bff5f607731fdc6f19189c1088112fPauli Nieminen{
3376785a8aaf4bff5f607731fdc6f19189c1088112fPauli Nieminen   r200ContextPtr r200 = R200_CONTEXT(ctx);
3386785a8aaf4bff5f607731fdc6f19189c1088112fPauli Nieminen   if (r200->hw.set.cmd[SET_RE_CNTL] & R200_STIPPLE_ENABLE)
3396785a8aaf4bff5f607731fdc6f19189c1088112fPauli Nieminen	   return atom->cmd_size;
3406785a8aaf4bff5f607731fdc6f19189c1088112fPauli Nieminen   return 0;
3416785a8aaf4bff5f607731fdc6f19189c1088112fPauli Nieminen}
3426785a8aaf4bff5f607731fdc6f19189c1088112fPauli Nieminen
343f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergstatic void mtl_emit(struct gl_context *ctx, struct radeon_state_atom *atom)
344474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie{
345474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   r200ContextPtr r200 = R200_CONTEXT(ctx);
346474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BATCH_LOCALS(&r200->radeon);
3470f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   uint32_t dwords = atom->check(ctx, atom);
348474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
349474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BEGIN_BATCH_NO_AUTOSTATE(dwords);
350474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_VEC(atom->cmd[MTL_CMD_0], (atom->cmd+1));
351474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_SCL2(atom->cmd[MTL_CMD_1], (atom->cmd + 18));
352474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   END_BATCH();
353474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie}
354474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
355f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergstatic void lit_emit(struct gl_context *ctx, struct radeon_state_atom *atom)
356474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie{
357474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   r200ContextPtr r200 = R200_CONTEXT(ctx);
358474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BATCH_LOCALS(&r200->radeon);
3590f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   uint32_t dwords = atom->check(ctx, atom);
360474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
361474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BEGIN_BATCH_NO_AUTOSTATE(dwords);
362474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_VEC(atom->cmd[LIT_CMD_0], atom->cmd+1);
363b694aa4ab9579815903220a0a3536f648914551asmoki   OUT_SCL(atom->cmd[LIT_CMD_1], atom->cmd+LIT_CMD_1+1);
364474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   END_BATCH();
365474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie}
366474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
367f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergstatic void ptp_emit(struct gl_context *ctx, struct radeon_state_atom *atom)
368474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie{
369474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   r200ContextPtr r200 = R200_CONTEXT(ctx);
370474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BATCH_LOCALS(&r200->radeon);
3710f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   uint32_t dwords = atom->check(ctx, atom);
372474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
373474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BEGIN_BATCH_NO_AUTOSTATE(dwords);
374474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_VEC(atom->cmd[PTP_CMD_0], atom->cmd+1);
375474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_VEC(atom->cmd[PTP_CMD_1], atom->cmd+PTP_CMD_1+1);
376474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   END_BATCH();
377474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie}
378474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
379f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergstatic void veclinear_emit(struct gl_context *ctx, struct radeon_state_atom *atom)
380474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie{
381474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   r200ContextPtr r200 = R200_CONTEXT(ctx);
382474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BATCH_LOCALS(&r200->radeon);
3830f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   uint32_t dwords = atom->check(ctx, atom);
384474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
385474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_VECLINEAR(atom->cmd[0], atom->cmd+1);
386474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie}
387474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
388f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergstatic void scl_emit(struct gl_context *ctx, struct radeon_state_atom *atom)
389474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie{
390474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   r200ContextPtr r200 = R200_CONTEXT(ctx);
391474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BATCH_LOCALS(&r200->radeon);
3920f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   uint32_t dwords = atom->check(ctx, atom);
393474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
394474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BEGIN_BATCH_NO_AUTOSTATE(dwords);
395474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_SCL(atom->cmd[0], atom->cmd+1);
396474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   END_BATCH();
397474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie}
398474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
399474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
400f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergstatic void vec_emit(struct gl_context *ctx, struct radeon_state_atom *atom)
401474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie{
402474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   r200ContextPtr r200 = R200_CONTEXT(ctx);
403474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BATCH_LOCALS(&r200->radeon);
4040f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   uint32_t dwords = atom->check(ctx, atom);
405474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
406474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BEGIN_BATCH_NO_AUTOSTATE(dwords);
407474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_VEC(atom->cmd[0], atom->cmd+1);
408474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   END_BATCH();
409474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie}
410adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
411f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergstatic int check_always_ctx( struct gl_context *ctx, struct radeon_state_atom *atom)
4120f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen{
4130f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   r200ContextPtr r200 = R200_CONTEXT(ctx);
4140f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   struct radeon_renderbuffer *rrb, *drb;
4150f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   uint32_t dwords;
4160f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
4170f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   rrb = radeon_get_colorbuffer(&r200->radeon);
4180f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   if (!rrb || !rrb->bo) {
4190f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      return 0;
4200f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   }
4210f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
4220f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   drb = radeon_get_depthbuffer(&r200->radeon);
4230f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
4240f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   dwords = 10;
4250f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   if (drb)
4260f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen     dwords += 6;
4270f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   if (rrb)
4280f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen     dwords += 8;
4290f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   if (atom->cmd_size == CTX_STATE_SIZE_NEWDRM)
4300f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen     dwords += 4;
4310f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
4320f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
4330f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   return dwords;
4340f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen}
4350f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
436f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergstatic void ctx_emit_cs(struct gl_context *ctx, struct radeon_state_atom *atom)
437474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie{
438474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   r200ContextPtr r200 = R200_CONTEXT(ctx);
439474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BATCH_LOCALS(&r200->radeon);
440474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   struct radeon_renderbuffer *rrb, *drb;
441474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   uint32_t cbpitch = 0;
442474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   uint32_t zbpitch = 0;
4430f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   uint32_t dwords = atom->check(ctx, atom);
444e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie   uint32_t depth_fmt;
445474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
446e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie   rrb = radeon_get_colorbuffer(&r200->radeon);
447e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie   if (!rrb || !rrb->bo) {
448e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie      return;
449474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   }
450e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie
451e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie   atom->cmd[CTX_RB3D_CNTL] &= ~(0xf << 10);
452e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie   if (rrb->cpp == 4)
453e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie	atom->cmd[CTX_RB3D_CNTL] |= RADEON_COLOR_FORMAT_ARGB8888;
454c080202db5363a18a759a9a7c82b40ac558c8abeBrian Paul   else switch (rrb->base.Base.Format) {
45545e76d2665b38ba3787548310efc59e969124c01Brian Paul   case MESA_FORMAT_RGB565:
456e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie	atom->cmd[CTX_RB3D_CNTL] |= RADEON_COLOR_FORMAT_RGB565;
45733f56b4612e506999a2be8391ba82c0174afa1b3Michel Dänzer	break;
45845e76d2665b38ba3787548310efc59e969124c01Brian Paul   case MESA_FORMAT_ARGB4444:
45933f56b4612e506999a2be8391ba82c0174afa1b3Michel Dänzer	atom->cmd[CTX_RB3D_CNTL] |= RADEON_COLOR_FORMAT_ARGB4444;
46033f56b4612e506999a2be8391ba82c0174afa1b3Michel Dänzer	break;
46145e76d2665b38ba3787548310efc59e969124c01Brian Paul   case MESA_FORMAT_ARGB1555:
46233f56b4612e506999a2be8391ba82c0174afa1b3Michel Dänzer	atom->cmd[CTX_RB3D_CNTL] |= RADEON_COLOR_FORMAT_ARGB1555;
46333f56b4612e506999a2be8391ba82c0174afa1b3Michel Dänzer	break;
46445e76d2665b38ba3787548310efc59e969124c01Brian Paul   default:
46545e76d2665b38ba3787548310efc59e969124c01Brian Paul	_mesa_problem(ctx, "Unexpected format in ctx_emit_cs");
46633f56b4612e506999a2be8391ba82c0174afa1b3Michel Dänzer   }
467e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie
468e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie   cbpitch = (rrb->pitch / rrb->cpp);
469e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie   if (rrb->bo->flags & RADEON_BO_FLAGS_MACRO_TILE)
470474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie       cbpitch |= R200_COLOR_TILE_ENABLE;
47181a715605af97f12e8907dba3d1de27addf5335fDave Airlie   if (rrb->bo->flags & RADEON_BO_FLAGS_MICRO_TILE)
47281a715605af97f12e8907dba3d1de27addf5335fDave Airlie       cbpitch |= R200_COLOR_MICROTILE_ENABLE;
47381a715605af97f12e8907dba3d1de27addf5335fDave Airlie
474e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie
475e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie   drb = radeon_get_depthbuffer(&r200->radeon);
476e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie   if (drb) {
477e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie     zbpitch = (drb->pitch / drb->cpp);
478e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie     if (drb->cpp == 4)
479e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie        depth_fmt = RADEON_DEPTH_FORMAT_24BIT_INT_Z;
480e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie     else
481e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie        depth_fmt = RADEON_DEPTH_FORMAT_16BIT_INT_Z;
482e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie     atom->cmd[CTX_RB3D_ZSTENCILCNTL] &= ~RADEON_DEPTH_FORMAT_MASK;
483e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie     atom->cmd[CTX_RB3D_ZSTENCILCNTL] |= depth_fmt;
484474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   }
485474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
486474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   /* output the first 7 bytes of context */
487474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BEGIN_BATCH_NO_AUTOSTATE(dwords);
488474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
489474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   /* In the CS case we need to split this up */
490474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_BATCH(CP_PACKET0(packet[0].start, 3));
491474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_BATCH_TABLE((atom->cmd + 1), 4);
492474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
493474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   if (drb) {
494474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     OUT_BATCH(CP_PACKET0(RADEON_RB3D_DEPTHOFFSET, 0));
495eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie     OUT_BATCH_RELOC(0, drb->bo, 0, 0, RADEON_GEM_DOMAIN_VRAM, 0);
496474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
497474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     OUT_BATCH(CP_PACKET0(RADEON_RB3D_DEPTHPITCH, 0));
498474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     OUT_BATCH(zbpitch);
499474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   }
500474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
501474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_BATCH(CP_PACKET0(RADEON_RB3D_ZSTENCILCNTL, 0));
502474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_BATCH(atom->cmd[CTX_RB3D_ZSTENCILCNTL]);
503474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_BATCH(CP_PACKET0(RADEON_PP_CNTL, 1));
504474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_BATCH(atom->cmd[CTX_PP_CNTL]);
505474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_BATCH(atom->cmd[CTX_RB3D_CNTL]);
506474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
507474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
508474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   if (rrb) {
509474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     OUT_BATCH(CP_PACKET0(RADEON_RB3D_COLOROFFSET, 0));
510f7bab47e6c7cf877acf6d9bb85453851e5aa7f19Dave Airlie     OUT_BATCH_RELOC(rrb->draw_offset, rrb->bo, rrb->draw_offset, 0, RADEON_GEM_DOMAIN_VRAM, 0);
511474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
512474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     OUT_BATCH(CP_PACKET0(RADEON_RB3D_COLORPITCH, 0));
513ac3de85eb6af680f2884194b40ada7b3e1edda8aDave Airlie     OUT_BATCH_RELOC(cbpitch, rrb->bo, cbpitch, 0, RADEON_GEM_DOMAIN_VRAM, 0);
514474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   }
515474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
516474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   if (atom->cmd_size == CTX_STATE_SIZE_NEWDRM) {
517474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     OUT_BATCH_TABLE((atom->cmd + 14), 4);
518474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   }
519474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
520474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   END_BATCH();
521ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie}
522ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie
523f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergstatic int get_tex_mm_size(struct gl_context* ctx, struct radeon_state_atom *atom)
524eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie{
525eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie   r200ContextPtr r200 = R200_CONTEXT(ctx);
5260f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   uint32_t dwords = atom->cmd_size + 2;
5270f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   int hastexture = 1;
528eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie   int i = atom->idx;
529eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie   radeonTexObj *t = r200->state.texture.unit[i].texobj;
530eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie   if (!t)
531eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie	hastexture = 0;
532eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie   else {
533eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie	if (!t->mt && !t->bo)
534eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie		hastexture = 0;
535eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie   }
536b074aacdb2a9e3520ccd6cfd892b60599ad0d1d8Dave Airlie
5370f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   if (!hastexture)
5380f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen     dwords -= 4;
5390f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   return dwords;
5400f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen}
5410f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
542f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergstatic int check_tex_pair_mm(struct gl_context* ctx, struct radeon_state_atom *atom)
5430f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen{
5440f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   r200ContextPtr r200 = R200_CONTEXT(ctx);
5450f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   /** XOR is bit flip operation so use it for finding pair */
5460f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   if (!(r200->state.texture.unit[atom->idx].unitneeded | r200->state.texture.unit[atom->idx ^ 1].unitneeded))
5470f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen     return 0;
5480f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
5490f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   return get_tex_mm_size(ctx, atom);
5500f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen}
5510f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
552f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergstatic int check_tex_mm(struct gl_context* ctx, struct radeon_state_atom *atom)
5530f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen{
5540f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   r200ContextPtr r200 = R200_CONTEXT(ctx);
5550f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   if (!(r200->state.texture.unit[atom->idx].unitneeded))
5560f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen     return 0;
5570f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
5580f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   return get_tex_mm_size(ctx, atom);
5590f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen}
5600f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
5610f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
562f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergstatic void tex_emit_mm(struct gl_context *ctx, struct radeon_state_atom *atom)
5630f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen{
5640f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   r200ContextPtr r200 = R200_CONTEXT(ctx);
5650f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   BATCH_LOCALS(&r200->radeon);
5660f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   uint32_t dwords = atom->check(ctx, atom);
5670f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   int i = atom->idx;
5680f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   radeonTexObj *t = r200->state.texture.unit[i].texobj;
5692cf8164065b8704e2f32d77af14cde9e7979435cRoland Scheidegger
5702cf8164065b8704e2f32d77af14cde9e7979435cRoland Scheidegger   if (!r200->state.texture.unit[i].unitneeded && !(dwords <= atom->cmd_size))
5710f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen        dwords -= 4;
572eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie   BEGIN_BATCH_NO_AUTOSTATE(dwords);
573eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie
57439ef33708c1a048863a1956cd99782013791ca92Jerome Glisse   OUT_BATCH(CP_PACKET0(R200_PP_TXFILTER_0 + (32 * i), 7));
575b074aacdb2a9e3520ccd6cfd892b60599ad0d1d8Dave Airlie   OUT_BATCH_TABLE((atom->cmd + 1), 8);
576eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie
5770f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   if (dwords > atom->cmd_size) {
578eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie     OUT_BATCH(CP_PACKET0(R200_PP_TXOFFSET_0 + (24 * i), 0));
579eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie     if (t->mt && !t->image_override) {
5805f8381724e81b594d6f11bb2d59964fbdbf22e90Roland Scheidegger        OUT_BATCH_RELOC(t->tile_bits, t->mt->bo, 0,
5815f8381724e81b594d6f11bb2d59964fbdbf22e90Roland Scheidegger		  RADEON_GEM_DOMAIN_GTT|RADEON_GEM_DOMAIN_VRAM, 0, 0);
582eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie      } else {
583eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie	if (t->bo)
584eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie            OUT_BATCH_RELOC(t->tile_bits, t->bo, 0,
585eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie                            RADEON_GEM_DOMAIN_GTT|RADEON_GEM_DOMAIN_VRAM, 0, 0);
586eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie      }
587eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie   }
58861bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie   END_BATCH();
589ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie}
590ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie
591f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergstatic void cube_emit_cs(struct gl_context *ctx, struct radeon_state_atom *atom)
592ffae82da4cf5a969d699c7f5bdcd4dae6c27a1caRoland Scheidegger{
593ffae82da4cf5a969d699c7f5bdcd4dae6c27a1caRoland Scheidegger   r200ContextPtr r200 = R200_CONTEXT(ctx);
594ffae82da4cf5a969d699c7f5bdcd4dae6c27a1caRoland Scheidegger   BATCH_LOCALS(&r200->radeon);
5950f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   uint32_t dwords = atom->check(ctx, atom);
5965f8381724e81b594d6f11bb2d59964fbdbf22e90Roland Scheidegger   int i = atom->idx, j;
597674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie   radeonTexObj *t = r200->state.texture.unit[i].texobj;
5985f8381724e81b594d6f11bb2d59964fbdbf22e90Roland Scheidegger   radeon_mipmap_level *lvl;
5990f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   if (!(t && !t->image_override))
6000f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen     dwords = 2;
601674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie
6020f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   BEGIN_BATCH_NO_AUTOSTATE(dwords);
603acf086ebfa95b77bb221c15acf6776439063c0b7Dave Airlie   OUT_BATCH_TABLE(atom->cmd, 2);
604674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie
605674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie   if (t && !t->image_override) {
6065f8381724e81b594d6f11bb2d59964fbdbf22e90Roland Scheidegger     lvl = &t->mt->levels[0];
6075f8381724e81b594d6f11bb2d59964fbdbf22e90Roland Scheidegger     for (j = 1; j <= 5; j++) {
608acf086ebfa95b77bb221c15acf6776439063c0b7Dave Airlie       OUT_BATCH(CP_PACKET0(R200_PP_CUBIC_OFFSET_F1_0 + (24*i) + (4 * (j-1)), 0));
6095f8381724e81b594d6f11bb2d59964fbdbf22e90Roland Scheidegger       OUT_BATCH_RELOC(lvl->faces[j].offset, t->mt->bo, lvl->faces[j].offset,
61097aa3d553f73d955a5c3eced33384348158307a7Dave Airlie			RADEON_GEM_DOMAIN_GTT|RADEON_GEM_DOMAIN_VRAM, 0, 0);
6115f8381724e81b594d6f11bb2d59964fbdbf22e90Roland Scheidegger     }
612674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie   }
613674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie   END_BATCH();
614674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie}
615ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie
616adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* Initialize the context's hardware state.
617adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
618adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellvoid r200InitState( r200ContextPtr rmesa )
619adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell{
620f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg   struct gl_context *ctx = rmesa->radeon.glCtx;
621e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie   GLuint i;
622adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
6234637235183b80963536f2364e4d50fcb894886ddDave Airlie   rmesa->radeon.Fallback = 0;
624adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
6251090d206de011a67d236d8c4ae32d2d42b2f6337Dave Airlie   rmesa->radeon.hw.max_state_size = 0;
626adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
627adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define ALLOC_STATE( ATOM, CHK, SZ, NM, IDX )				\
628adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   do {								\
629adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.ATOM.cmd_size = SZ;				\
6304637235183b80963536f2364e4d50fcb894886ddDave Airlie      rmesa->hw.ATOM.cmd = (GLuint *)CALLOC(SZ * sizeof(int));	\
6314637235183b80963536f2364e4d50fcb894886ddDave Airlie      rmesa->hw.ATOM.lastcmd = (GLuint *)CALLOC(SZ * sizeof(int));	\
632adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.ATOM.name = NM;					\
633adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.ATOM.idx = IDX;					\
634dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen      if (check_##CHK != check_never) {				\
635dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen         rmesa->hw.ATOM.check = check_##CHK;			\
636dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen         rmesa->radeon.hw.max_state_size += SZ * sizeof(int);	\
637dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen      } else {							\
638dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen         rmesa->hw.ATOM.check = NULL;				\
639dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen      }								\
6400c8f8d3dc9d60ed34eeca7f3606651420a81753cEric Anholt      rmesa->hw.ATOM.dirty = GL_FALSE;				\
641adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   } while (0)
642f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger
643f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger
644adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Allocate state buffers:
645adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
64656d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie   ALLOC_STATE( ctx, always_add4, CTX_STATE_SIZE_NEWDRM, "CTX/context", 0 );
647ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie
6484a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   rmesa->hw.ctx.emit = ctx_emit_cs;
6494a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   rmesa->hw.ctx.check = check_always_ctx;
650adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( set, always, SET_STATE_SIZE, "SET/setup", 0 );
651adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( lin, always, LIN_STATE_SIZE, "LIN/line", 0 );
652adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( msk, always, MSK_STATE_SIZE, "MSK/mask", 0 );
653adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( vpt, always, VPT_STATE_SIZE, "VPT/viewport", 0 );
654adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( vtx, always, VTX_STATE_SIZE, "VTX/vertex", 0 );
655adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( vap, always, VAP_STATE_SIZE, "VAP/vap", 0 );
656adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( vte, always, VTE_STATE_SIZE, "VTE/vte", 0 );
657adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( msc, always, MSC_STATE_SIZE, "MSC/misc", 0 );
658adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( cst, always, CST_STATE_SIZE, "CST/constant", 0 );
659adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( zbs, always, ZBS_STATE_SIZE, "ZBS/zbias", 0 );
660f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger   ALLOC_STATE( tf, tf, TF_STATE_SIZE, "TF/tfactor", 0 );
6610f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   {
6620f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      int state_size = TEX_STATE_SIZE_NEWDRM;
66356d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie      if (rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_R200) {
66456d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie         /* make sure texture units 0/1 are emitted pair-wise for r200 t0 hang workaround */
66556d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie         ALLOC_STATE( tex[0], tex_pair_mm, state_size, "TEX/tex-0", 0 );
66656d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie         ALLOC_STATE( tex[1], tex_pair_mm, state_size, "TEX/tex-1", 1 );
66756d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie         ALLOC_STATE( tam, tex_any, TAM_STATE_SIZE, "TAM/tam", 0 );
668f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      }
66956d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie      else {
67056d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie         ALLOC_STATE( tex[0], tex_mm, state_size, "TEX/tex-0", 0 );
67156d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie         ALLOC_STATE( tex[1], tex_mm, state_size, "TEX/tex-1", 1 );
67256d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie         ALLOC_STATE( tam, never, TAM_STATE_SIZE, "TAM/tam", 0 );
673f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      }
67456d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie      ALLOC_STATE( tex[2], tex_mm, state_size, "TEX/tex-2", 2 );
67556d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie      ALLOC_STATE( tex[3], tex_mm, state_size, "TEX/tex-3", 3 );
67656d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie      ALLOC_STATE( tex[4], tex_mm, state_size, "TEX/tex-4", 4 );
67756d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie      ALLOC_STATE( tex[5], tex_mm, state_size, "TEX/tex-5", 5 );
67856d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie      ALLOC_STATE( atf, afs, ATF_STATE_SIZE, "ATF/tfactor", 0 );
67956d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie      ALLOC_STATE( afs[0], afs_pass1, AFS_STATE_SIZE, "AFS/afsinst-0", 0 );
68056d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie      ALLOC_STATE( afs[1], afs, AFS_STATE_SIZE, "AFS/afsinst-1", 1 );
68148ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   }
6822b5618fc5bdcbee3434f8b5aa3a31eb06fb479c0Alex Deucher
6834a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   ALLOC_STATE( stp, polygon_stipple, STP_STATE_SIZE, "STP/stp", 0 );
68461bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie
6858b9a5cfce0065d6e32d3a882b6ee9f94bf2634ffRoland Scheidegger   for (i = 0; i < 6; i++)
6864a2f00889ba481c117057da5fac7585327458cc3Eric Anholt      rmesa->hw.tex[i].emit = tex_emit_mm;
68756d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie   ALLOC_STATE( cube[0], tex_cube, CUBE_STATE_SIZE, "CUBE/tex-0", 0 );
68856d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie   ALLOC_STATE( cube[1], tex_cube, CUBE_STATE_SIZE, "CUBE/tex-1", 1 );
68956d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie   ALLOC_STATE( cube[2], tex_cube, CUBE_STATE_SIZE, "CUBE/tex-2", 2 );
69056d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie   ALLOC_STATE( cube[3], tex_cube, CUBE_STATE_SIZE, "CUBE/tex-3", 3 );
69156d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie   ALLOC_STATE( cube[4], tex_cube, CUBE_STATE_SIZE, "CUBE/tex-4", 4 );
69256d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie   ALLOC_STATE( cube[5], tex_cube, CUBE_STATE_SIZE, "CUBE/tex-5", 5 );
69356d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie   for (i = 0; i < 6; i++) {
69456d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie      rmesa->hw.cube[i].emit = cube_emit_cs;
69556d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie      rmesa->hw.cube[i].check = check_tex_cube_cs;
696bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl   }
697674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie
69856d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie   ALLOC_STATE( pvs, tcl_vp, PVS_STATE_SIZE, "PVS/pvscntl", 0 );
69956d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie   ALLOC_STATE( vpi[0], tcl_vp_add4, VPI_STATE_SIZE, "VP/vertexprog-0", 0 );
70056d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie   ALLOC_STATE( vpi[1], tcl_vp_size_add4, VPI_STATE_SIZE, "VP/vertexprog-1", 1 );
70156d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie   ALLOC_STATE( vpp[0], tcl_vp_add4, VPP_STATE_SIZE, "VPP/vertexparam-0", 0 );
70256d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie   ALLOC_STATE( vpp[1], tcl_vpp_size_add4, VPP_STATE_SIZE, "VPP/vertexparam-1", 1 );
70356d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie
70498c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   /* FIXME: this atom has two commands, we need only one (ucp_vert_blend) for vp */
70598c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   ALLOC_STATE( tcl, tcl_or_vp, TCL_STATE_SIZE, "TCL/tcl", 0 );
706adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( msl, tcl, MSL_STATE_SIZE, "MSL/matrix-select", 0 );
707adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( tcg, tcl, TCG_STATE_SIZE, "TCG/texcoordgen", 0 );
7084a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   ALLOC_STATE( mtl[0], tcl_lighting_add6, MTL_STATE_SIZE, "MTL0/material0", 0 );
7094a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   ALLOC_STATE( mtl[1], tcl_lighting_add6, MTL_STATE_SIZE, "MTL1/material1", 1 );
7104a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   ALLOC_STATE( grd, tcl_or_vp_add2, GRD_STATE_SIZE, "GRD/guard-band", 0 );
7114a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   ALLOC_STATE( fog, tcl_fog_add4, FOG_STATE_SIZE, "FOG/fog", 0 );
7124a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   ALLOC_STATE( glt, tcl_lighting_add4, GLT_STATE_SIZE, "GLT/light-global", 0 );
7134a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   ALLOC_STATE( eye, tcl_lighting_add4, EYE_STATE_SIZE, "EYE/eye-vector", 0 );
7144a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   ALLOC_STATE( mat[R200_MTX_MV], tcl_add4, MAT_STATE_SIZE, "MAT/modelview", 0 );
7154a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   ALLOC_STATE( mat[R200_MTX_IMV], tcl_add4, MAT_STATE_SIZE, "MAT/it-modelview", 0 );
7164a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   ALLOC_STATE( mat[R200_MTX_MVP], tcl_add4, MAT_STATE_SIZE, "MAT/modelproject", 0 );
7174a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   ALLOC_STATE( mat[R200_MTX_TEX0], tcl_tex_add4, MAT_STATE_SIZE, "MAT/texmat0", 0 );
7184a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   ALLOC_STATE( mat[R200_MTX_TEX1], tcl_tex_add4, MAT_STATE_SIZE, "MAT/texmat1", 1 );
7194a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   ALLOC_STATE( mat[R200_MTX_TEX2], tcl_tex_add4, MAT_STATE_SIZE, "MAT/texmat2", 2 );
7204a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   ALLOC_STATE( mat[R200_MTX_TEX3], tcl_tex_add4, MAT_STATE_SIZE, "MAT/texmat3", 3 );
7214a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   ALLOC_STATE( mat[R200_MTX_TEX4], tcl_tex_add4, MAT_STATE_SIZE, "MAT/texmat4", 4 );
7224a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   ALLOC_STATE( mat[R200_MTX_TEX5], tcl_tex_add4, MAT_STATE_SIZE, "MAT/texmat5", 5 );
7234a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   ALLOC_STATE( ucp[0], tcl_ucp_add4, UCP_STATE_SIZE, "UCP/userclip-0", 0 );
7244a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   ALLOC_STATE( ucp[1], tcl_ucp_add4, UCP_STATE_SIZE, "UCP/userclip-1", 1 );
7254a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   ALLOC_STATE( ucp[2], tcl_ucp_add4, UCP_STATE_SIZE, "UCP/userclip-2", 2 );
7264a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   ALLOC_STATE( ucp[3], tcl_ucp_add4, UCP_STATE_SIZE, "UCP/userclip-3", 3 );
7274a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   ALLOC_STATE( ucp[4], tcl_ucp_add4, UCP_STATE_SIZE, "UCP/userclip-4", 4 );
7284a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   ALLOC_STATE( ucp[5], tcl_ucp_add4, UCP_STATE_SIZE, "UCP/userclip-5", 5 );
729b694aa4ab9579815903220a0a3536f648914551asmoki   ALLOC_STATE( lit[0], tcl_light_add6, LIT_STATE_SIZE, "LIT/light-0", 0 );
730b694aa4ab9579815903220a0a3536f648914551asmoki   ALLOC_STATE( lit[1], tcl_light_add6, LIT_STATE_SIZE, "LIT/light-1", 1 );
731b694aa4ab9579815903220a0a3536f648914551asmoki   ALLOC_STATE( lit[2], tcl_light_add6, LIT_STATE_SIZE, "LIT/light-2", 2 );
732b694aa4ab9579815903220a0a3536f648914551asmoki   ALLOC_STATE( lit[3], tcl_light_add6, LIT_STATE_SIZE, "LIT/light-3", 3 );
733b694aa4ab9579815903220a0a3536f648914551asmoki   ALLOC_STATE( lit[4], tcl_light_add6, LIT_STATE_SIZE, "LIT/light-4", 4 );
734b694aa4ab9579815903220a0a3536f648914551asmoki   ALLOC_STATE( lit[5], tcl_light_add6, LIT_STATE_SIZE, "LIT/light-5", 5 );
735b694aa4ab9579815903220a0a3536f648914551asmoki   ALLOC_STATE( lit[6], tcl_light_add6, LIT_STATE_SIZE, "LIT/light-6", 6 );
736b694aa4ab9579815903220a0a3536f648914551asmoki   ALLOC_STATE( lit[7], tcl_light_add6, LIT_STATE_SIZE, "LIT/light-7", 7 );
7374a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   ALLOC_STATE( sci, rrb, SCI_STATE_SIZE, "SCI/scissor", 0 );
738f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger   ALLOC_STATE( pix[0], pix_zero, PIX_STATE_SIZE, "PIX/pixstage-0", 0 );
73936603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger   ALLOC_STATE( pix[1], texenv, PIX_STATE_SIZE, "PIX/pixstage-1", 1 );
74036603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger   ALLOC_STATE( pix[2], texenv, PIX_STATE_SIZE, "PIX/pixstage-2", 2 );
74136603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger   ALLOC_STATE( pix[3], texenv, PIX_STATE_SIZE, "PIX/pixstage-3", 3 );
74236603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger   ALLOC_STATE( pix[4], texenv, PIX_STATE_SIZE, "PIX/pixstage-4", 4 );
74336603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger   ALLOC_STATE( pix[5], texenv, PIX_STATE_SIZE, "PIX/pixstage-5", 5 );
74456d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie   ALLOC_STATE( prf, always, PRF_STATE_SIZE, "PRF/performance-tri", 0 );
74556d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie   ALLOC_STATE( spr, always, SPR_STATE_SIZE, "SPR/pointsprite", 0 );
74656d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie   ALLOC_STATE( ptp, tcl_add8, PTP_STATE_SIZE, "PTP/pointparams", 0 );
747adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
7480c8f8d3dc9d60ed34eeca7f3606651420a81753cEric Anholt   r200SetUpAtomList( rmesa );
749adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
750adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Fill in the packet headers:
751adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
752474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.ctx.cmd[CTX_CMD_0] = cmdpkt(rmesa, RADEON_EMIT_PP_MISC);
753474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.ctx.cmd[CTX_CMD_1] = cmdpkt(rmesa, RADEON_EMIT_PP_CNTL);
754474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.ctx.cmd[CTX_CMD_2] = cmdpkt(rmesa, RADEON_EMIT_RB3D_COLORPITCH);
75556d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie   rmesa->hw.ctx.cmd[CTX_CMD_3] = cmdpkt(rmesa, R200_EMIT_RB3D_BLENDCOLOR);
756474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.lin.cmd[LIN_CMD_0] = cmdpkt(rmesa, RADEON_EMIT_RE_LINE_PATTERN);
757474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.lin.cmd[LIN_CMD_1] = cmdpkt(rmesa, RADEON_EMIT_SE_LINE_WIDTH);
758474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.msk.cmd[MSK_CMD_0] = cmdpkt(rmesa, RADEON_EMIT_RB3D_STENCILREFMASK);
759474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.vpt.cmd[VPT_CMD_0] = cmdpkt(rmesa, RADEON_EMIT_SE_VPORT_XSCALE);
760474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.set.cmd[SET_CMD_0] = cmdpkt(rmesa, RADEON_EMIT_SE_CNTL);
761474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.msc.cmd[MSC_CMD_0] = cmdpkt(rmesa, RADEON_EMIT_RE_MISC);
762474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cst.cmd[CST_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_CNTL_X);
763474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cst.cmd[CST_CMD_1] = cmdpkt(rmesa, R200_EMIT_RB3D_DEPTHXY_OFFSET);
764474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cst.cmd[CST_CMD_2] = cmdpkt(rmesa, R200_EMIT_RE_AUX_SCISSOR_CNTL);
765474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cst.cmd[CST_CMD_4] = cmdpkt(rmesa, R200_EMIT_SE_VAP_CNTL_STATUS);
766474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cst.cmd[CST_CMD_5] = cmdpkt(rmesa, R200_EMIT_RE_POINTSIZE);
767474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cst.cmd[CST_CMD_6] = cmdpkt(rmesa, R200_EMIT_TCL_INPUT_VTX_VECTOR_ADDR_0);
768474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.tam.cmd[TAM_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TAM_DEBUG3);
769474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.tf.cmd[TF_CMD_0] = cmdpkt(rmesa, R200_EMIT_TFACTOR_0);
77056d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie   rmesa->hw.atf.cmd[ATF_CMD_0] = cmdpkt(rmesa, R200_EMIT_ATF_TFACTOR);
77156d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie   rmesa->hw.tex[0].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCTLALL_0);
77256d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie   rmesa->hw.tex[0].cmd[TEX_CMD_1_NEWDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_0);
77356d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie   rmesa->hw.tex[1].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCTLALL_1);
77456d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie   rmesa->hw.tex[1].cmd[TEX_CMD_1_NEWDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_1);
77556d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie   rmesa->hw.tex[2].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCTLALL_2);
77656d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie   rmesa->hw.tex[2].cmd[TEX_CMD_1_NEWDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_2);
77756d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie   rmesa->hw.tex[3].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCTLALL_3);
77856d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie   rmesa->hw.tex[3].cmd[TEX_CMD_1_NEWDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_3);
77956d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie   rmesa->hw.tex[4].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCTLALL_4);
78056d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie   rmesa->hw.tex[4].cmd[TEX_CMD_1_NEWDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_4);
78156d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie   rmesa->hw.tex[5].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCTLALL_5);
78256d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie   rmesa->hw.tex[5].cmd[TEX_CMD_1_NEWDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_5);
783474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.afs[0].cmd[AFS_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_AFS_0);
784474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.afs[1].cmd[AFS_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_AFS_1);
785474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.pvs.cmd[PVS_CMD_0] = cmdpkt(rmesa, R200_EMIT_VAP_PVS_CNTL);
786474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[0].cmd[CUBE_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_FACES_0);
787474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[0].cmd[CUBE_CMD_1] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_OFFSETS_0);
788474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[1].cmd[CUBE_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_FACES_1);
789474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[1].cmd[CUBE_CMD_1] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_OFFSETS_1);
790474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[2].cmd[CUBE_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_FACES_2);
791474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[2].cmd[CUBE_CMD_1] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_OFFSETS_2);
792474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[3].cmd[CUBE_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_FACES_3);
793474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[3].cmd[CUBE_CMD_1] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_OFFSETS_3);
794474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[4].cmd[CUBE_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_FACES_4);
795474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[4].cmd[CUBE_CMD_1] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_OFFSETS_4);
796474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[5].cmd[CUBE_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_FACES_5);
797474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[5].cmd[CUBE_CMD_1] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_OFFSETS_5);
798474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.pix[0].cmd[PIX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCBLEND_0);
799474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.pix[1].cmd[PIX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCBLEND_1);
800474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.pix[2].cmd[PIX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCBLEND_2);
801474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.pix[3].cmd[PIX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCBLEND_3);
802474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.pix[4].cmd[PIX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCBLEND_4);
803474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.pix[5].cmd[PIX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCBLEND_5);
804474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.zbs.cmd[ZBS_CMD_0] = cmdpkt(rmesa, RADEON_EMIT_SE_ZBIAS_FACTOR);
805474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.tcl.cmd[TCL_CMD_0] = cmdpkt(rmesa, R200_EMIT_TCL_LIGHT_MODEL_CTL_0);
806474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.tcl.cmd[TCL_CMD_1] = cmdpkt(rmesa, R200_EMIT_TCL_UCP_VERT_BLEND_CTL);
807474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.tcg.cmd[TCG_CMD_0] = cmdpkt(rmesa, R200_EMIT_TEX_PROC_CTL_2);
808474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.msl.cmd[MSL_CMD_0] = cmdpkt(rmesa, R200_EMIT_MATRIX_SELECT_0);
809474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.vap.cmd[VAP_CMD_0] = cmdpkt(rmesa, R200_EMIT_VAP_CTL);
810474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.vtx.cmd[VTX_CMD_0] = cmdpkt(rmesa, R200_EMIT_VTX_FMT_0);
811474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.vtx.cmd[VTX_CMD_1] = cmdpkt(rmesa, R200_EMIT_OUTPUT_VTX_COMP_SEL);
812474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.vtx.cmd[VTX_CMD_2] = cmdpkt(rmesa, R200_EMIT_SE_VTX_STATE_CNTL);
813474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.vte.cmd[VTE_CMD_0] = cmdpkt(rmesa, R200_EMIT_VTE_CNTL);
814474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.prf.cmd[PRF_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TRI_PERF_CNTL);
815474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.spr.cmd[SPR_CMD_0] = cmdpkt(rmesa, R200_EMIT_TCL_POINT_SPRITE_CNTL);
816dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen
817dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen   rmesa->hw.sci.cmd[SCI_CMD_1] = CP_PACKET0(R200_RE_TOP_LEFT, 0);
818dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen   rmesa->hw.sci.cmd[SCI_CMD_2] = CP_PACKET0(R200_RE_WIDTH_HEIGHT, 0);
819dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen
8202b5618fc5bdcbee3434f8b5aa3a31eb06fb479c0Alex Deucher   rmesa->hw.stp.cmd[STP_CMD_0] = CP_PACKET0(RADEON_RE_STIPPLE_ADDR, 0);
8212b5618fc5bdcbee3434f8b5aa3a31eb06fb479c0Alex Deucher   rmesa->hw.stp.cmd[STP_DATA_0] = 0;
8222b5618fc5bdcbee3434f8b5aa3a31eb06fb479c0Alex Deucher   rmesa->hw.stp.cmd[STP_CMD_1] = CP_PACKET0_ONE(RADEON_RE_STIPPLE_DATA, 31);
8237d361537661b93a501c9533271458a41b965ea79Dave Airlie
8244a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   rmesa->hw.mtl[0].emit = mtl_emit;
8254a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   rmesa->hw.mtl[1].emit = mtl_emit;
8260f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
8274a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   rmesa->hw.vpi[0].emit = veclinear_emit;
8284a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   rmesa->hw.vpi[1].emit = veclinear_emit;
8294a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   rmesa->hw.vpp[0].emit = veclinear_emit;
8304a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   rmesa->hw.vpp[1].emit = veclinear_emit;
8310f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
8324a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   rmesa->hw.grd.emit = scl_emit;
8334a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   rmesa->hw.fog.emit = vec_emit;
8344a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   rmesa->hw.glt.emit = vec_emit;
8354a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   rmesa->hw.eye.emit = vec_emit;
836474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
8374a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   for (i = R200_MTX_MV; i <= R200_MTX_TEX5; i++)
8384a2f00889ba481c117057da5fac7585327458cc3Eric Anholt      rmesa->hw.mat[i].emit = vec_emit;
839474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
8404a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   for (i = 0; i < 8; i++)
8414a2f00889ba481c117057da5fac7585327458cc3Eric Anholt      rmesa->hw.lit[i].emit = lit_emit;
842474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
8434a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   for (i = 0; i < 6; i++)
8444a2f00889ba481c117057da5fac7585327458cc3Eric Anholt      rmesa->hw.ucp[i].emit = vec_emit;
845474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
8464a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   rmesa->hw.ptp.emit = ptp_emit;
847474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
848adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.mtl[0].cmd[MTL_CMD_0] =
849adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_MAT_0_EMISS, 1, 16 );
850adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.mtl[0].cmd[MTL_CMD_1] =
851adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdscl2( R200_SS_MAT_0_SHININESS, 1, 1 );
852a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger   rmesa->hw.mtl[1].cmd[MTL_CMD_0] =
853a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger      cmdvec( R200_VS_MAT_1_EMISS, 1, 16 );
854a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger   rmesa->hw.mtl[1].cmd[MTL_CMD_1] =
855a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger      cmdscl2( R200_SS_MAT_1_SHININESS, 1, 1 );
856a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger
85798c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   rmesa->hw.vpi[0].cmd[VPI_CMD_0] =
85898c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      cmdveclinear( R200_PVS_PROG0, 64 );
85998c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   rmesa->hw.vpi[1].cmd[VPI_CMD_0] =
86098c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      cmdveclinear( R200_PVS_PROG1, 64 );
86198c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   rmesa->hw.vpp[0].cmd[VPP_CMD_0] =
86298c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      cmdveclinear( R200_PVS_PARAM0, 96 );
86398c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   rmesa->hw.vpp[1].cmd[VPP_CMD_0] =
86498c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      cmdveclinear( R200_PVS_PARAM1, 96 );
86598c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger
866adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.grd.cmd[GRD_CMD_0] =
867adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdscl( R200_SS_VERT_GUARD_CLIP_ADJ_ADDR, 1, 4 );
868adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.fog.cmd[FOG_CMD_0] =
869adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_FOG_PARAM_ADDR, 1, 4 );
870adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.glt.cmd[GLT_CMD_0] =
871adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_GLOBAL_AMBIENT_ADDR, 1, 4 );
872adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.eye.cmd[EYE_CMD_0] =
873adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_EYE_VECTOR_ADDR, 1, 4 );
874adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
875adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.mat[R200_MTX_MV].cmd[MAT_CMD_0] =
876adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_MATRIX_0_MV, 1, 16);
877adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.mat[R200_MTX_IMV].cmd[MAT_CMD_0] =
878adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_MATRIX_1_INV_MV, 1, 16);
879adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.mat[R200_MTX_MVP].cmd[MAT_CMD_0] =
880adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_MATRIX_2_MVP, 1, 16);
881adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.mat[R200_MTX_TEX0].cmd[MAT_CMD_0] =
882adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_MATRIX_3_TEX0, 1, 16);
883adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.mat[R200_MTX_TEX1].cmd[MAT_CMD_0] =
884adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_MATRIX_4_TEX1, 1, 16);
88548ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   rmesa->hw.mat[R200_MTX_TEX2].cmd[MAT_CMD_0] =
88648ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      cmdvec( R200_VS_MATRIX_5_TEX2, 1, 16);
88748ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   rmesa->hw.mat[R200_MTX_TEX3].cmd[MAT_CMD_0] =
88848ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      cmdvec( R200_VS_MATRIX_6_TEX3, 1, 16);
88948ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   rmesa->hw.mat[R200_MTX_TEX4].cmd[MAT_CMD_0] =
89048ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      cmdvec( R200_VS_MATRIX_7_TEX4, 1, 16);
89148ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   rmesa->hw.mat[R200_MTX_TEX5].cmd[MAT_CMD_0] =
89248ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      cmdvec( R200_VS_MATRIX_8_TEX5, 1, 16);
893adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
894adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   for (i = 0 ; i < 8; i++) {
895adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.lit[i].cmd[LIT_CMD_0] =
896adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell	 cmdvec( R200_VS_LIGHT_AMBIENT_ADDR + i, 8, 24 );
897adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.lit[i].cmd[LIT_CMD_1] =
898adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell	 cmdscl( R200_SS_LIGHT_DCD_ADDR + i, 8, 7 );
899adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   }
900adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
901adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   for (i = 0 ; i < 6; i++) {
902adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.ucp[i].cmd[UCP_CMD_0] =
903adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell	 cmdvec( R200_VS_UCP_ADDR + i, 1, 4 );
904adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   }
905adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
906cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_CMD_0] =
907cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger      cmdvec( R200_VS_PNT_SPRITE_VPORT_SCALE, 1, 4 );
908cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_CMD_1] =
909cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger      cmdvec( R200_VS_PNT_SPRITE_ATT_CONST, 1, 12 );
910cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger
911adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Initial Harware state:
912adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
913adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.ctx.cmd[CTX_PP_MISC] = (R200_ALPHA_TEST_PASS
914adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     /* | R200_RIGHT_HAND_CUBE_OGL*/);
915adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
916adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.ctx.cmd[CTX_PP_FOG_COLOR] = (R200_FOG_VERTEX |
917adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					  R200_FOG_USE_SPEC_ALPHA);
918adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
919adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.ctx.cmd[CTX_RE_SOLID_COLOR] = 0x00000000;
920adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
921adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.ctx.cmd[CTX_RB3D_BLENDCNTL] = (R200_COMB_FCN_ADD_CLAMP |
922033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger				(R200_BLEND_GL_ONE << R200_SRC_BLEND_SHIFT) |
923033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger				(R200_BLEND_GL_ZERO << R200_DST_BLEND_SHIFT));
924033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger
92556d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie   rmesa->hw.ctx.cmd[CTX_RB3D_BLENDCOLOR] = 0x00000000;
92656d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie   rmesa->hw.ctx.cmd[CTX_RB3D_ABLENDCNTL] = (R200_COMB_FCN_ADD_CLAMP |
927033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger				(R200_BLEND_GL_ONE << R200_SRC_BLEND_SHIFT) |
928033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger				(R200_BLEND_GL_ZERO << R200_DST_BLEND_SHIFT));
92956d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie   rmesa->hw.ctx.cmd[CTX_RB3D_CBLENDCNTL] = (R200_COMB_FCN_ADD_CLAMP |
930033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger				(R200_BLEND_GL_ONE << R200_SRC_BLEND_SHIFT) |
931033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger				(R200_BLEND_GL_ZERO << R200_DST_BLEND_SHIFT));
932adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
933adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.ctx.cmd[CTX_RB3D_DEPTHOFFSET] =
9344637235183b80963536f2364e4d50fcb894886ddDave Airlie      rmesa->radeon.radeonScreen->depthOffset + rmesa->radeon.radeonScreen->fbLocation;
935adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
936adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.ctx.cmd[CTX_RB3D_DEPTHPITCH] =
9374637235183b80963536f2364e4d50fcb894886ddDave Airlie      ((rmesa->radeon.radeonScreen->depthPitch &
938adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell	R200_DEPTHPITCH_MASK) |
939adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_DEPTH_ENDIAN_NO_SWAP);
940b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger
941b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger   if (rmesa->using_hyperz)
942b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger      rmesa->hw.ctx.cmd[CTX_RB3D_DEPTHPITCH] |= R200_DEPTH_HYPERZ;
943adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
944e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie   rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] = (R200_Z_TEST_LESS |
945adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					       R200_STENCIL_TEST_ALWAYS |
946adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					       R200_STENCIL_FAIL_KEEP |
947adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					       R200_STENCIL_ZPASS_KEEP |
948adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					       R200_STENCIL_ZFAIL_KEEP |
949adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					       R200_Z_WRITE_ENABLE);
950adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
951b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger   if (rmesa->using_hyperz) {
952b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger      rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= R200_Z_COMPRESSION_ENABLE |
953b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger						  R200_Z_DECOMPRESSION_ENABLE;
9544637235183b80963536f2364e4d50fcb894886ddDave Airlie/*      if (rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_R200)
955b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger	 rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= RADEON_Z_HIERARCHY_ENABLE;*/
956b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger   }
957b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger
958adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.ctx.cmd[CTX_PP_CNTL] = (R200_ANTI_ALIAS_NONE
959adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 				     | R200_TEX_BLEND_0_ENABLE);
960adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
9614637235183b80963536f2364e4d50fcb894886ddDave Airlie   switch ( driQueryOptioni( &rmesa->radeon.optionCache, "dither_mode" ) ) {
962273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane   case DRI_CONF_DITHER_XERRORDIFFRESET:
963273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane      rmesa->hw.ctx.cmd[CTX_RB3D_CNTL] |= R200_DITHER_INIT;
964273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane      break;
965273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane   case DRI_CONF_DITHER_ORDERED:
966273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane      rmesa->hw.ctx.cmd[CTX_RB3D_CNTL] |= R200_SCALE_DITHER_ENABLE;
967273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane      break;
968273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane   }
9694637235183b80963536f2364e4d50fcb894886ddDave Airlie   if ( driQueryOptioni( &rmesa->radeon.optionCache, "round_mode" ) ==
970273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane	DRI_CONF_ROUND_ROUND )
971d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->radeon.state.color.roundEnable = R200_ROUND_ENABLE;
972273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane   else
973d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->radeon.state.color.roundEnable = 0;
9744637235183b80963536f2364e4d50fcb894886ddDave Airlie   if ( driQueryOptioni (&rmesa->radeon.optionCache, "color_reduction" ) ==
975273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane	DRI_CONF_COLOR_REDUCTION_DITHER )
976273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane      rmesa->hw.ctx.cmd[CTX_RB3D_CNTL] |= R200_DITHER_ENABLE;
977273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane   else
978d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->hw.ctx.cmd[CTX_RB3D_CNTL] |= rmesa->radeon.state.color.roundEnable;
979273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane
980fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger   rmesa->hw.prf.cmd[PRF_PP_TRI_PERF] = R200_TRI_CUTOFF_MASK - R200_TRI_CUTOFF_MASK *
9814637235183b80963536f2364e4d50fcb894886ddDave Airlie			driQueryOptionf (&rmesa->radeon.optionCache,"texture_blend_quality");
982fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger   rmesa->hw.prf.cmd[PRF_PP_PERF_CNTL] = 0;
983fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger
984adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.set.cmd[SET_SE_CNTL] = (R200_FFACE_CULL_CCW |
985adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_BFACE_SOLID |
986adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_FFACE_SOLID |
987adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_FLAT_SHADE_VTX_LAST |
988adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_DIFFUSE_SHADE_GOURAUD |
989adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_ALPHA_SHADE_GOURAUD |
990adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_SPECULAR_SHADE_GOURAUD |
991adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_FOG_SHADE_GOURAUD |
992cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger				     R200_DISC_FOG_SHADE_GOURAUD |
993adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_VTX_PIX_CENTER_OGL |
994adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_ROUND_MODE_TRUNC |
995adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_ROUND_PREC_8TH_PIX);
996adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
997adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.set.cmd[SET_RE_CNTL] = (R200_PERSPECTIVE_ENABLE |
998adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_SCISSOR_ENABLE);
999adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1000adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.lin.cmd[LIN_RE_LINE_PATTERN] = ((1 << 16) | 0xffff);
1001adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1002adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.lin.cmd[LIN_RE_LINE_STATE] =
1003adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ((0 << R200_LINE_CURRENT_PTR_SHIFT) |
1004adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (1 << R200_LINE_CURRENT_COUNT_SHIFT));
1005adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1006adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.lin.cmd[LIN_SE_LINE_WIDTH] = (1 << 4);
1007adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1008adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msk.cmd[MSK_RB3D_STENCILREFMASK] =
1009adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ((0x00 << R200_STENCIL_REF_SHIFT) |
1010adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (0xff << R200_STENCIL_MASK_SHIFT) |
1011adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (0xff << R200_STENCIL_WRITEMASK_SHIFT));
1012adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1013adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msk.cmd[MSK_RB3D_ROPCNTL] = R200_ROP_COPY;
1014adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msk.cmd[MSK_RB3D_PLANEMASK] = 0xffffffff;
1015adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1016adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tam.cmd[TAM_DEBUG3] = 0;
1017adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1018adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msc.cmd[MSC_RE_MISC] =
1019adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ((0 << R200_STIPPLE_X_OFFSET_SHIFT) |
1020adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (0 << R200_STIPPLE_Y_OFFSET_SHIFT) |
1021adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_STIPPLE_BIG_BIT_ORDER);
1022adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1023adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1024adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_PP_CNTL_X] = 0;
1025adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_RB3D_DEPTHXY_OFFSET] = 0;
1026adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_RE_AUX_SCISSOR_CNTL] = 0x0;
1027adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_SE_VAP_CNTL_STATUS] =
1028adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#ifdef MESA_BIG_ENDIAN
1029adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell						R200_VC_32BIT_SWAP;
1030adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#else
1031adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell						R200_VC_NO_SWAP;
1032adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#endif
103310095c9024efb1767fb3df0b59672299c090ad10Eric Anholt
10344637235183b80963536f2364e4d50fcb894886ddDave Airlie   if (!(rmesa->radeon.radeonScreen->chip_flags & RADEON_CHIPSET_TCL)) {
103510095c9024efb1767fb3df0b59672299c090ad10Eric Anholt      /* Bypass TCL */
103610095c9024efb1767fb3df0b59672299c090ad10Eric Anholt      rmesa->hw.cst.cmd[CST_SE_VAP_CNTL_STATUS] |= (1<<8);
103710095c9024efb1767fb3df0b59672299c090ad10Eric Anholt   }
103810095c9024efb1767fb3df0b59672299c090ad10Eric Anholt
103944dace86eaf9eded8e6465adfadf6345658686ddRoland Scheidegger   rmesa->hw.cst.cmd[CST_RE_POINTSIZE] =
104044dace86eaf9eded8e6465adfadf6345658686ddRoland Scheidegger      (((GLuint)(ctx->Const.MaxPointSize * 16.0)) << R200_MAXPOINTSIZE_SHIFT) | 0x10;
1041adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_SE_TCL_INPUT_VTX_0] =
1042adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x0 << R200_VERTEX_POSITION_ADDR__SHIFT);
1043adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_SE_TCL_INPUT_VTX_1] =
1044adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x02 << R200_VTX_COLOR_0_ADDR__SHIFT) |
1045adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x03 << R200_VTX_COLOR_1_ADDR__SHIFT);
1046adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_SE_TCL_INPUT_VTX_2] =
1047adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x06 << R200_VTX_TEX_0_ADDR__SHIFT) |
1048adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x07 << R200_VTX_TEX_1_ADDR__SHIFT) |
1049adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x08 << R200_VTX_TEX_2_ADDR__SHIFT) |
1050adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x09 << R200_VTX_TEX_3_ADDR__SHIFT);
1051adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_SE_TCL_INPUT_VTX_3] =
1052adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x0A << R200_VTX_TEX_4_ADDR__SHIFT) |
1053adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x0B << R200_VTX_TEX_5_ADDR__SHIFT);
1054adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1055adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1056adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vpt.cmd[VPT_SE_VPORT_XSCALE]  = 0x00000000;
1057adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vpt.cmd[VPT_SE_VPORT_XOFFSET] = 0x00000000;
1058adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vpt.cmd[VPT_SE_VPORT_YSCALE]  = 0x00000000;
1059adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vpt.cmd[VPT_SE_VPORT_YOFFSET] = 0x00000000;
1060adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vpt.cmd[VPT_SE_VPORT_ZSCALE]  = 0x00000000;
1061adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vpt.cmd[VPT_SE_VPORT_ZOFFSET] = 0x00000000;
1062adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1063adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   for ( i = 0 ; i < ctx->Const.MaxTextureUnits ; i++ ) {
1064adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.tex[i].cmd[TEX_PP_TXFILTER] = R200_BORDER_MODE_OGL;
1065adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.tex[i].cmd[TEX_PP_TXFORMAT] =
1066adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell         ((i << R200_TXFORMAT_ST_ROUTE_SHIFT) |  /* <-- note i */
1067adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell          (2 << R200_TXFORMAT_WIDTH_SHIFT) |
1068adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell          (2 << R200_TXFORMAT_HEIGHT_SHIFT));
1069adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.tex[i].cmd[TEX_PP_BORDER_COLOR] = 0;
1070adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.tex[i].cmd[TEX_PP_TXFORMAT_X] =
1071adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell         (/* R200_TEXCOORD_PROJ | */
107276a9831b2b20d59c49b5f25ba5275f17b4e2067bPauli Nieminen          R200_LOD_BIAS_CORRECTION);	/* Small default bias */
107356d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie      rmesa->hw.tex[i].cmd[TEX_PP_TXOFFSET_NEWDRM] =
10744637235183b80963536f2364e4d50fcb894886ddDave Airlie	     rmesa->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP];
107556d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie      rmesa->hw.tex[i].cmd[TEX_PP_CUBIC_FACES] = 0;
107656d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie      rmesa->hw.tex[i].cmd[TEX_PP_TXMULTI_CTL] = 0;
1077adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1078adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_FACES] = 0;
1079067603db91072fc3b02e1583195641972f81168fMichel Dänzer      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_OFFSET_F1] =
10804637235183b80963536f2364e4d50fcb894886ddDave Airlie         rmesa->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP];
1081067603db91072fc3b02e1583195641972f81168fMichel Dänzer      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_OFFSET_F2] =
10824637235183b80963536f2364e4d50fcb894886ddDave Airlie         rmesa->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP];
1083067603db91072fc3b02e1583195641972f81168fMichel Dänzer      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_OFFSET_F3] =
10844637235183b80963536f2364e4d50fcb894886ddDave Airlie         rmesa->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP];
1085067603db91072fc3b02e1583195641972f81168fMichel Dänzer      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_OFFSET_F4] =
10864637235183b80963536f2364e4d50fcb894886ddDave Airlie         rmesa->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP];
1087067603db91072fc3b02e1583195641972f81168fMichel Dänzer      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_OFFSET_F5] =
10884637235183b80963536f2364e4d50fcb894886ddDave Airlie         rmesa->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP];
1089adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
10901bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger      rmesa->hw.pix[i].cmd[PIX_PP_TXCBLEND] =
10911bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger         (R200_TXC_ARG_A_ZERO |
10921bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXC_ARG_B_ZERO |
10931bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXC_ARG_C_DIFFUSE_COLOR |
10941bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXC_OP_MADD);
10951bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger
10961bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger      rmesa->hw.pix[i].cmd[PIX_PP_TXCBLEND2] =
10971bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger         ((i << R200_TXC_TFACTOR_SEL_SHIFT) |
10981bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXC_SCALE_1X |
10991bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXC_CLAMP_0_1 |
11001bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXC_OUTPUT_REG_R0);
11011bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger
11021bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger      rmesa->hw.pix[i].cmd[PIX_PP_TXABLEND] =
11031bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger         (R200_TXA_ARG_A_ZERO |
11041bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXA_ARG_B_ZERO |
11051bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXA_ARG_C_DIFFUSE_ALPHA |
11061bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXA_OP_MADD);
11071bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger
11081bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger      rmesa->hw.pix[i].cmd[PIX_PP_TXABLEND2] =
11091bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger         ((i << R200_TXA_TFACTOR_SEL_SHIFT) |
11101bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXA_SCALE_1X |
11111bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXA_CLAMP_0_1 |
11121bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXA_OUTPUT_REG_R0);
11131bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger   }
1114adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1115adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tf.cmd[TF_TFACTOR_0] = 0;
1116adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tf.cmd[TF_TFACTOR_1] = 0;
1117adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tf.cmd[TF_TFACTOR_2] = 0;
1118adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tf.cmd[TF_TFACTOR_3] = 0;
1119adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tf.cmd[TF_TFACTOR_4] = 0;
1120adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tf.cmd[TF_TFACTOR_5] = 0;
1121adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1122adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vap.cmd[VAP_SE_VAP_CNTL] =
1123adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (R200_VAP_TCL_ENABLE |
1124adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (0x9 << R200_VAP_VF_MAX_VTX_NUM__SHIFT));
1125adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1126adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vte.cmd[VTE_SE_VTE_CNTL] =
1127adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (R200_VPORT_X_SCALE_ENA |
1128adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_VPORT_Y_SCALE_ENA |
1129adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_VPORT_Z_SCALE_ENA |
1130adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_VPORT_X_OFFSET_ENA |
1131adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_VPORT_Y_OFFSET_ENA |
1132adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_VPORT_Z_OFFSET_ENA |
1133adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* FIXME: Turn on for tex rect only */
1134adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_VTX_ST_DENORMALIZED |
1135adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_VTX_W0_FMT);
1136adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1137adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1138adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vtx.cmd[VTX_VTXFMT_0] = 0;
1139adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vtx.cmd[VTX_VTXFMT_1] = 0;
1140adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vtx.cmd[VTX_TCL_OUTPUT_VTXFMT_0] =
1141adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ((R200_VTX_Z0 | R200_VTX_W0 |
1142adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (R200_VTX_FP_RGBA << R200_VTX_COLOR_0_SHIFT)));
1143adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vtx.cmd[VTX_TCL_OUTPUT_VTXFMT_1] = 0;
1144adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vtx.cmd[VTX_TCL_OUTPUT_COMPSEL] = (R200_OUTPUT_XYZW);
1145adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vtx.cmd[VTX_STATE_CNTL] = R200_VSC_UPDATE_USER_COLOR_0_ENABLE;
1146adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1147adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1148adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Matrix selection */
1149adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msl.cmd[MSL_MATRIX_SELECT_0] =
1150adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (R200_MTX_MV << R200_MODELVIEW_0_SHIFT);
1151adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1152adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msl.cmd[MSL_MATRIX_SELECT_1] =
1153adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (R200_MTX_IMV << R200_IT_MODELVIEW_0_SHIFT);
1154adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1155adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msl.cmd[MSL_MATRIX_SELECT_2] =
1156adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (R200_MTX_MVP << R200_MODELPROJECT_0_SHIFT);
1157adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1158adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msl.cmd[MSL_MATRIX_SELECT_3] =
1159adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ((R200_MTX_TEX0 << R200_TEXMAT_0_SHIFT) |
1160adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (R200_MTX_TEX1 << R200_TEXMAT_1_SHIFT) |
1161adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (R200_MTX_TEX2 << R200_TEXMAT_2_SHIFT) |
1162adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (R200_MTX_TEX3 << R200_TEXMAT_3_SHIFT));
1163adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1164adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msl.cmd[MSL_MATRIX_SELECT_4] =
1165adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ((R200_MTX_TEX4 << R200_TEXMAT_4_SHIFT) |
1166adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (R200_MTX_TEX5 << R200_TEXMAT_5_SHIFT));
1167adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1168adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1169adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* General TCL state */
1170adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcl.cmd[TCL_LIGHT_MODEL_CTL_0] =
1171adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (R200_SPECULAR_LIGHTS |
1172adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_DIFFUSE_SPECULAR_COMBINE |
1173a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       R200_LOCAL_LIGHT_VEC_GL |
1174a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       R200_LM0_SOURCE_MATERIAL_0 << R200_FRONT_SHININESS_SOURCE_SHIFT |
1175a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       R200_LM0_SOURCE_MATERIAL_1 << R200_BACK_SHININESS_SOURCE_SHIFT);
1176adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1177adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcl.cmd[TCL_LIGHT_MODEL_CTL_1] =
1178a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger      ((R200_LM1_SOURCE_MATERIAL_0 << R200_FRONT_EMISSIVE_SOURCE_SHIFT) |
1179a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       (R200_LM1_SOURCE_MATERIAL_0 << R200_FRONT_AMBIENT_SOURCE_SHIFT) |
1180a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       (R200_LM1_SOURCE_MATERIAL_0 << R200_FRONT_DIFFUSE_SOURCE_SHIFT) |
1181a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       (R200_LM1_SOURCE_MATERIAL_0 << R200_FRONT_SPECULAR_SOURCE_SHIFT) |
1182a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       (R200_LM1_SOURCE_MATERIAL_1 << R200_BACK_EMISSIVE_SOURCE_SHIFT) |
1183a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       (R200_LM1_SOURCE_MATERIAL_1 << R200_BACK_AMBIENT_SOURCE_SHIFT) |
1184a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       (R200_LM1_SOURCE_MATERIAL_1 << R200_BACK_DIFFUSE_SOURCE_SHIFT) |
1185a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       (R200_LM1_SOURCE_MATERIAL_1 << R200_BACK_SPECULAR_SOURCE_SHIFT));
1186adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1187adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcl.cmd[TCL_PER_LIGHT_CTL_0] = 0; /* filled in via callbacks */
1188adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcl.cmd[TCL_PER_LIGHT_CTL_1] = 0;
1189adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcl.cmd[TCL_PER_LIGHT_CTL_2] = 0;
1190adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcl.cmd[TCL_PER_LIGHT_CTL_3] = 0;
1191adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1192adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcl.cmd[TCL_UCP_VERT_BLEND_CTL] =
1193adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (R200_UCP_IN_CLIP_SPACE |
1194adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_CULL_FRONT_IS_CCW);
1195adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1196adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Texgen/Texmat state */
1197b1ebd306bf4fdc4076d3d3daa410b08f477cb4c4Eric Anholt   rmesa->hw.tcg.cmd[TCG_TEX_PROC_CTL_2] = 0x00ffffff;
1198adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcg.cmd[TCG_TEX_PROC_CTL_3] =
1199adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ((0 << R200_TEXGEN_0_INPUT_TEX_SHIFT) |
1200adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (1 << R200_TEXGEN_1_INPUT_TEX_SHIFT) |
1201adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (2 << R200_TEXGEN_2_INPUT_TEX_SHIFT) |
1202adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (3 << R200_TEXGEN_3_INPUT_TEX_SHIFT) |
1203adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (4 << R200_TEXGEN_4_INPUT_TEX_SHIFT) |
1204adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (5 << R200_TEXGEN_5_INPUT_TEX_SHIFT));
1205adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcg.cmd[TCG_TEX_PROC_CTL_0] = 0;
1206adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcg.cmd[TCG_TEX_PROC_CTL_1] =
1207adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ((0 << R200_TEXGEN_0_INPUT_SHIFT) |
1208adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (1 << R200_TEXGEN_1_INPUT_SHIFT) |
1209adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (2 << R200_TEXGEN_2_INPUT_SHIFT) |
1210adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (3 << R200_TEXGEN_3_INPUT_SHIFT) |
1211adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (4 << R200_TEXGEN_4_INPUT_SHIFT) |
1212adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (5 << R200_TEXGEN_5_INPUT_SHIFT));
1213adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcg.cmd[TCG_TEX_CYL_WRAP_CTL] = 0;
1214adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1215adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1216adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   for (i = 0 ; i < 8; i++) {
1217adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      struct gl_light *l = &ctx->Light.Light[i];
1218adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      GLenum p = GL_LIGHT0 + i;
1219adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      *(float *)&(rmesa->hw.lit[i].cmd[LIT_RANGE_CUTOFF]) = FLT_MAX;
1220adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1221adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.Lightfv( ctx, p, GL_AMBIENT, l->Ambient );
1222adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.Lightfv( ctx, p, GL_DIFFUSE, l->Diffuse );
1223adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.Lightfv( ctx, p, GL_SPECULAR, l->Specular );
12240846e52d46b36c411f79908df010072e03bb6437Brian Paul      ctx->Driver.Lightfv( ctx, p, GL_POSITION, NULL );
12250846e52d46b36c411f79908df010072e03bb6437Brian Paul      ctx->Driver.Lightfv( ctx, p, GL_SPOT_DIRECTION, NULL );
1226adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.Lightfv( ctx, p, GL_SPOT_EXPONENT, &l->SpotExponent );
1227adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.Lightfv( ctx, p, GL_SPOT_CUTOFF, &l->SpotCutoff );
1228adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.Lightfv( ctx, p, GL_CONSTANT_ATTENUATION,
1229adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell			   &l->ConstantAttenuation );
1230adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.Lightfv( ctx, p, GL_LINEAR_ATTENUATION,
1231adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell			   &l->LinearAttenuation );
1232adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.Lightfv( ctx, p, GL_QUADRATIC_ATTENUATION,
1233bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl			   &l->QuadraticAttenuation );
12345d00e131d8a264498b8d050c3eded093ee5c42f2Michel Dänzer      *(float *)&(rmesa->hw.lit[i].cmd[LIT_ATTEN_XXX]) = 0.0;
1235adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   }
1236adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1237adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ctx->Driver.LightModelfv( ctx, GL_LIGHT_MODEL_AMBIENT,
1238adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell			     ctx->Light.Model.Ambient );
1239adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1240adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   TNL_CONTEXT(ctx)->Driver.NotifyMaterialChange( ctx );
1241adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1242adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   for (i = 0 ; i < 6; i++) {
1243adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.ClipPlane( ctx, GL_CLIP_PLANE0 + i, NULL );
1244adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   }
1245adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
12460846e52d46b36c411f79908df010072e03bb6437Brian Paul   ctx->Driver.Fogfv( ctx, GL_FOG_MODE, NULL );
1247adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ctx->Driver.Fogfv( ctx, GL_FOG_DENSITY, &ctx->Fog.Density );
1248adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ctx->Driver.Fogfv( ctx, GL_FOG_START, &ctx->Fog.Start );
1249adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ctx->Driver.Fogfv( ctx, GL_FOG_END, &ctx->Fog.End );
1250adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ctx->Driver.Fogfv( ctx, GL_FOG_COLOR, ctx->Fog.Color );
12510846e52d46b36c411f79908df010072e03bb6437Brian Paul   ctx->Driver.Fogfv( ctx, GL_FOG_COORDINATE_SOURCE_EXT, NULL );
1252adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1253adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.grd.cmd[GRD_VERT_GUARD_CLIP_ADJ] = IEEE_ONE;
1254adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.grd.cmd[GRD_VERT_GUARD_DISCARD_ADJ] = IEEE_ONE;
1255adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.grd.cmd[GRD_HORZ_GUARD_CLIP_ADJ] = IEEE_ONE;
1256adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.grd.cmd[GRD_HORZ_GUARD_DISCARD_ADJ] = IEEE_ONE;
1257adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1258adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.eye.cmd[EYE_X] = 0;
1259adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.eye.cmd[EYE_Y] = 0;
1260adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.eye.cmd[EYE_Z] = IEEE_ONE;
1261adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.eye.cmd[EYE_RESCALE_FACTOR] = IEEE_ONE;
1262adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1263cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.spr.cmd[SPR_POINT_SPRITE_CNTL] =
1264cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger      R200_PS_SE_SEL_STATE | R200_PS_MULT_CONST;
1265cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger
1266cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   /* ptp_eye is presumably used to calculate the attenuation wrt a different
1267cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger      location? In any case, since point attenuation triggers _needeyecoords,
1268cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger      it is constant. Probably ignored as long as R200_PS_USE_MODEL_EYE_VEC
1269cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger      isn't set */
1270cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_EYE_X] = 0;
1271cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_EYE_Y] = 0;
1272cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_EYE_Z] = IEEE_ONE | 0x80000000; /* -1.0 */
1273cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_EYE_3] = 0;
1274cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   /* no idea what the ptp_vport_scale values are good for, except the
1275cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger      PTSIZE one - hopefully doesn't matter */
1276cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_VPORT_SCALE_0] = IEEE_ONE;
1277cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_VPORT_SCALE_1] = IEEE_ONE;
1278cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_VPORT_SCALE_PTSIZE] = IEEE_ONE;
1279cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_VPORT_SCALE_3] = IEEE_ONE;
1280cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_ATT_CONST_QUAD] = 0;
1281cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_ATT_CONST_LIN] = 0;
1282cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_ATT_CONST_CON] = IEEE_ONE;
1283cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_ATT_CONST_3] = 0;
1284cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_CLAMP_MIN] = IEEE_ONE;
1285cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_CLAMP_MAX] = 0x44ffe000; /* 2047 */
1286cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_CLAMP_2] = 0;
1287cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_CLAMP_3] = 0;
128844dace86eaf9eded8e6465adfadf6345658686ddRoland Scheidegger
1289adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   r200LightingSpaceChange( ctx );
129044dace86eaf9eded8e6465adfadf6345658686ddRoland Scheidegger
12914a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   radeon_init_query_stateobj(&rmesa->radeon, R200_QUERYOBJ_CMDSIZE);
12924a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   rmesa->radeon.query.queryobj.cmd[R200_QUERYOBJ_CMD_0] = CP_PACKET0(RADEON_RB3D_ZPASS_DATA, 0);
12934a2f00889ba481c117057da5fac7585327458cc3Eric Anholt   rmesa->radeon.query.queryobj.cmd[R200_QUERYOBJ_DATA_0] = 0;
1294b6df23d8b3e70d86433ba9fc4d87338e1063fe39Dave Airlie
12951090d206de011a67d236d8c4ae32d2d42b2f6337Dave Airlie   rmesa->radeon.hw.all_dirty = GL_TRUE;
1296ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie
12971090d206de011a67d236d8c4ae32d2d42b2f6337Dave Airlie   rcommonInitCmdBuf(&rmesa->radeon);
1298adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell}
1299