r200_state_init.c revision 76a9831b2b20d59c49b5f25ba5275f17b4e2067b
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{
168ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl   drm_radeon_cmd_header_t h;
169474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
170474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   if (rmesa->radeon.radeonScreen->kernel_mm) {
171474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     return CP_PACKET0(packet[id].start, packet[id].len - 1);
172474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   } else {
173474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     h.i = 0;
174474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     h.packet.cmd_type = RADEON_CMD_PACKET;
175474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     h.packet.packet_id = id;
176474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   }
177adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   return h.i;
178adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell}
179adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
180adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstatic int cmdvec( int offset, int stride, int count )
181adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell{
182ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl   drm_radeon_cmd_header_t h;
183adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.i = 0;
184adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.vectors.cmd_type = RADEON_CMD_VECTORS;
185adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.vectors.offset = offset;
186adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.vectors.stride = stride;
187adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.vectors.count = count;
188adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   return h.i;
189adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell}
190adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
19198c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger/* warning: the count here is divided by 4 compared to other cmds
19298c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   (so it doesn't exceed the char size)! */
19398c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheideggerstatic int cmdveclinear( int offset, int count )
19498c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger{
19598c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   drm_radeon_cmd_header_t h;
19698c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   h.i = 0;
19798c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   h.veclinear.cmd_type = RADEON_CMD_VECLINEAR;
19898c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   h.veclinear.addr_lo = offset & 0xff;
19998c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   h.veclinear.addr_hi = (offset & 0xff00) >> 8;
20098c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   h.veclinear.count = count;
20198c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   return h.i;
20298c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger}
20398c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger
204adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstatic int cmdscl( int offset, int stride, int count )
205adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell{
206ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl   drm_radeon_cmd_header_t h;
207adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.i = 0;
208adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.scalars.cmd_type = RADEON_CMD_SCALARS;
209adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.scalars.offset = offset;
210adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.scalars.stride = stride;
211adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.scalars.count = count;
212adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   return h.i;
213adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell}
214adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
215adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstatic int cmdscl2( int offset, int stride, int count )
216adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell{
217ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl   drm_radeon_cmd_header_t h;
218adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.i = 0;
219adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.scalars.cmd_type = RADEON_CMD_SCALARS2;
220adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.scalars.offset = offset - 0x100;
221adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.scalars.stride = stride;
222adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.scalars.count = count;
223adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   return h.i;
224adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell}
225adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
2260f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen/**
2270f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen * Check functions are used to check if state is active.
2280f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen * If it is active check function returns maximum emit size.
2290f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen */
2300f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen#define CHECK( NM, FLAG, ADD )				\
2314637235183b80963536f2364e4d50fcb894886ddDave Airliestatic int check_##NM( GLcontext *ctx, struct radeon_state_atom *atom) \
232adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell{							\
23336603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger   r200ContextPtr rmesa = R200_CONTEXT(ctx);		\
23436603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger   (void) rmesa;					\
2350f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   return (FLAG) ? atom->cmd_size + (ADD) : 0;			\
236adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell}
237adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
2380f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen#define TCL_CHECK( NM, FLAG, ADD )				\
2394637235183b80963536f2364e4d50fcb894886ddDave Airliestatic int check_##NM( GLcontext *ctx, struct radeon_state_atom *atom) \
2404637235183b80963536f2364e4d50fcb894886ddDave Airlie{									\
2414637235183b80963536f2364e4d50fcb894886ddDave Airlie   r200ContextPtr rmesa = R200_CONTEXT(ctx);				\
2420f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   return (!rmesa->radeon.TclFallback && !ctx->VertexProgram._Enabled && (FLAG)) ? atom->cmd_size + (ADD) : 0; \
24398c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger}
24498c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger
2450f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen#define TCL_OR_VP_CHECK( NM, FLAG, ADD )			\
2464637235183b80963536f2364e4d50fcb894886ddDave Airliestatic int check_##NM( GLcontext *ctx, struct radeon_state_atom *atom ) \
24798c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger{							\
24898c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   r200ContextPtr rmesa = R200_CONTEXT(ctx);		\
2490f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   return (!rmesa->radeon.TclFallback && (FLAG)) ? atom->cmd_size + (ADD) : 0;	\
250adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell}
251adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
2520f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen#define VP_CHECK( NM, FLAG, ADD )				\
2534637235183b80963536f2364e4d50fcb894886ddDave Airliestatic int check_##NM( GLcontext *ctx, struct radeon_state_atom *atom ) \
2544637235183b80963536f2364e4d50fcb894886ddDave Airlie{									\
2554637235183b80963536f2364e4d50fcb894886ddDave Airlie   r200ContextPtr rmesa = R200_CONTEXT(ctx);				\
2564637235183b80963536f2364e4d50fcb894886ddDave Airlie   (void) atom;								\
2570f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   return (!rmesa->radeon.TclFallback && ctx->VertexProgram._Enabled && (FLAG)) ? atom->cmd_size + (ADD) : 0; \
25898c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger}
259adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
2600f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenCHECK( always, GL_TRUE, 0 )
2610f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenCHECK( always_add4, GL_TRUE, 4 )
2620f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenCHECK( never, GL_FALSE, 0 )
2630f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenCHECK( tex_any, ctx->Texture._EnabledUnits, 0 )
2640f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenCHECK( tf, (ctx->Texture._EnabledUnits && !ctx->ATIFragmentShader._Enabled), 0 );
2650f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenCHECK( pix_zero, !ctx->ATIFragmentShader._Enabled, 0 )
2660f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   CHECK( texenv, (rmesa->state.envneeded & (1 << (atom->idx)) && !ctx->ATIFragmentShader._Enabled), 0 )
2670f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenCHECK( afs_pass1, (ctx->ATIFragmentShader._Enabled && (ctx->ATIFragmentShader.Current->NumPasses > 1)), 0 )
2680f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenCHECK( afs, ctx->ATIFragmentShader._Enabled, 0 )
2690f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenCHECK( tex_cube, rmesa->state.texture.unit[atom->idx].unitneeded & TEXTURE_CUBE_BIT, 3 + 3*5 - CUBE_STATE_SIZE )
27097aa3d553f73d955a5c3eced33384348158307a7Dave AirlieCHECK( tex_cube_cs, rmesa->state.texture.unit[atom->idx].unitneeded & TEXTURE_CUBE_BIT, 2 + 4*5 - CUBE_STATE_SIZE )
2710f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenTCL_CHECK( tcl_fog, ctx->Fog.Enabled, 0 )
2720f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenTCL_CHECK( tcl_fog_add4, ctx->Fog.Enabled, 4 )
2730f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenTCL_CHECK( tcl, GL_TRUE, 0 )
2740f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenTCL_CHECK( tcl_add8, GL_TRUE, 8 )
2750f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenTCL_CHECK( tcl_add4, GL_TRUE, 4 )
2760f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenTCL_CHECK( tcl_tex, rmesa->state.texture.unit[atom->idx].unitneeded, 0 )
2770f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenTCL_CHECK( tcl_lighting, ctx->Light.Enabled, 0 )
2780f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenTCL_CHECK( tcl_light, ctx->Light.Enabled && ctx->Light.Light[atom->idx].Enabled, 0 )
2790f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenTCL_CHECK( tcl_tex_add4, rmesa->state.texture.unit[atom->idx].unitneeded, 4 )
2800f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenTCL_CHECK( tcl_lighting_add4, ctx->Light.Enabled, 4 )
2810f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenTCL_CHECK( tcl_lighting_add6, ctx->Light.Enabled, 6 )
2820f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenTCL_CHECK( tcl_light_add8, ctx->Light.Enabled && ctx->Light.Light[atom->idx].Enabled, 8 )
2830f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenTCL_OR_VP_CHECK( tcl_ucp, (ctx->Transform.ClipPlanesEnabled & (1 << (atom->idx))), 0 )
2840f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenTCL_OR_VP_CHECK( tcl_ucp_add4, (ctx->Transform.ClipPlanesEnabled & (1 << (atom->idx))), 4 )
2850f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenTCL_OR_VP_CHECK( tcl_or_vp, GL_TRUE, 0 )
2860f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenTCL_OR_VP_CHECK( tcl_or_vp_add2, GL_TRUE, 2 )
2870f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenVP_CHECK( tcl_vp, GL_TRUE, 0 )
2880f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenVP_CHECK( tcl_vp_add4, GL_TRUE, 4 )
2890f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenVP_CHECK( tcl_vp_size, ctx->VertexProgram.Current->Base.NumNativeInstructions > 64, 0 )
2900f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenVP_CHECK( tcl_vpp_size, ctx->VertexProgram.Current->Base.NumNativeParameters > 96, 0 )
2910f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenVP_CHECK( tcl_vp_size_add4, ctx->VertexProgram.Current->Base.NumNativeInstructions > 64, 4 )
2920f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli NieminenVP_CHECK( tcl_vpp_size_add4, ctx->VertexProgram.Current->Base.NumNativeParameters > 96, 4 )
293adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
294474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie#define OUT_VEC(hdr, data) do {			\
295474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    drm_radeon_cmd_header_t h;					\
296474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    h.i = hdr;								\
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(h.vectors.offset | (h.vectors.stride << RADEON_VEC_INDX_OCTWORD_STRIDE_SHIFT)); \
301474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(CP_PACKET0_ONE(R200_SE_TCL_VECTOR_DATA_REG, h.vectors.count - 1));	\
302474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH_TABLE((data), h.vectors.count);				\
303474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie  } while(0)
304474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
3051570bde279362d95a58d120e42e68cb307d00ddeDave Airlie#define OUT_VECLINEAR(hdr, data) do {					\
3061570bde279362d95a58d120e42e68cb307d00ddeDave Airlie    drm_radeon_cmd_header_t h;						\
3071570bde279362d95a58d120e42e68cb307d00ddeDave Airlie    uint32_t _start, _sz;						\
308474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    h.i = hdr;								\
3091570bde279362d95a58d120e42e68cb307d00ddeDave Airlie    _start = h.veclinear.addr_lo | (h.veclinear.addr_hi << 8);		\
3101570bde279362d95a58d120e42e68cb307d00ddeDave Airlie    _sz = h.veclinear.count * 4;					\
3118308bf9ee155b405ad42e6621daf33a108330418Jerome Glisse    if (r200->radeon.radeonScreen->kernel_mm && _sz) { \
3128308bf9ee155b405ad42e6621daf33a108330418Jerome Glisse    BEGIN_BATCH_NO_AUTOSTATE(dwords); \
313474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(CP_PACKET0(RADEON_SE_TCL_STATE_FLUSH, 0));		\
314474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(0);							\
315474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(CP_PACKET0(R200_SE_TCL_VECTOR_INDX_REG, 0));		\
316474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(_start | (1 << RADEON_VEC_INDX_OCTWORD_STRIDE_SHIFT));	\
317474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(CP_PACKET0_ONE(R200_SE_TCL_VECTOR_DATA_REG, _sz - 1));	\
318474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH_TABLE((data), _sz);					\
3198308bf9ee155b405ad42e6621daf33a108330418Jerome Glisse    END_BATCH(); \
3208308bf9ee155b405ad42e6621daf33a108330418Jerome Glisse    } \
321474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie  } while(0)
322474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
323474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie#define OUT_SCL(hdr, data) do {					\
324474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    drm_radeon_cmd_header_t h;						\
325474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    h.i = hdr;								\
326474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(CP_PACKET0(R200_SE_TCL_SCALAR_INDX_REG, 0));		\
327474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH((h.scalars.offset) | (h.scalars.stride << RADEON_SCAL_INDX_DWORD_STRIDE_SHIFT)); \
328474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(CP_PACKET0_ONE(R200_SE_TCL_SCALAR_DATA_REG, h.scalars.count - 1));	\
329474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH_TABLE((data), h.scalars.count);				\
330474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie  } while(0)
331474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
332474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie#define OUT_SCL2(hdr, data) do {					\
333474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    drm_radeon_cmd_header_t h;						\
334474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    h.i = hdr;								\
335474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(CP_PACKET0(R200_SE_TCL_SCALAR_INDX_REG, 0));		\
336474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH((h.scalars.offset + 0x100) | (h.scalars.stride << RADEON_SCAL_INDX_DWORD_STRIDE_SHIFT)); \
337474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH(CP_PACKET0_ONE(R200_SE_TCL_SCALAR_DATA_REG, h.scalars.count - 1));	\
338474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie    OUT_BATCH_TABLE((data), h.scalars.count);				\
339474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie  } while(0)
340dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminenstatic int check_rrb(GLcontext *ctx, struct radeon_state_atom *atom)
341dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen{
342dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen   r200ContextPtr r200 = R200_CONTEXT(ctx);
343dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen   struct radeon_renderbuffer *rrb;
344dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen   rrb = radeon_get_colorbuffer(&r200->radeon);
345dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen   if (!rrb || !rrb->bo)
346dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen      return 0;
347dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen   return atom->cmd_size;
348dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen}
349474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
3506785a8aaf4bff5f607731fdc6f19189c1088112fPauli Nieminenstatic int check_polygon_stipple(GLcontext *ctx,
3516785a8aaf4bff5f607731fdc6f19189c1088112fPauli Nieminen		struct radeon_state_atom *atom)
3526785a8aaf4bff5f607731fdc6f19189c1088112fPauli Nieminen{
3536785a8aaf4bff5f607731fdc6f19189c1088112fPauli Nieminen   r200ContextPtr r200 = R200_CONTEXT(ctx);
3546785a8aaf4bff5f607731fdc6f19189c1088112fPauli Nieminen   if (r200->hw.set.cmd[SET_RE_CNTL] & R200_STIPPLE_ENABLE)
3556785a8aaf4bff5f607731fdc6f19189c1088112fPauli Nieminen	   return atom->cmd_size;
3566785a8aaf4bff5f607731fdc6f19189c1088112fPauli Nieminen   return 0;
3576785a8aaf4bff5f607731fdc6f19189c1088112fPauli Nieminen}
3586785a8aaf4bff5f607731fdc6f19189c1088112fPauli Nieminen
359474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airliestatic void mtl_emit(GLcontext *ctx, struct radeon_state_atom *atom)
360474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie{
361474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   r200ContextPtr r200 = R200_CONTEXT(ctx);
362474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BATCH_LOCALS(&r200->radeon);
3630f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   uint32_t dwords = atom->check(ctx, atom);
364474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
365474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BEGIN_BATCH_NO_AUTOSTATE(dwords);
366474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_VEC(atom->cmd[MTL_CMD_0], (atom->cmd+1));
367474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_SCL2(atom->cmd[MTL_CMD_1], (atom->cmd + 18));
368474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   END_BATCH();
369474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie}
370474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
371474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airliestatic void lit_emit(GLcontext *ctx, struct radeon_state_atom *atom)
372474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie{
373474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   r200ContextPtr r200 = R200_CONTEXT(ctx);
374474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BATCH_LOCALS(&r200->radeon);
3750f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   uint32_t dwords = atom->check(ctx, atom);
376474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
377474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BEGIN_BATCH_NO_AUTOSTATE(dwords);
378474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_VEC(atom->cmd[LIT_CMD_0], atom->cmd+1);
379474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_VEC(atom->cmd[LIT_CMD_1], atom->cmd+LIT_CMD_1+1);
380474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   END_BATCH();
381474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie}
382474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
383474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airliestatic void ptp_emit(GLcontext *ctx, struct radeon_state_atom *atom)
384474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie{
385474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   r200ContextPtr r200 = R200_CONTEXT(ctx);
386474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BATCH_LOCALS(&r200->radeon);
3870f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   uint32_t dwords = atom->check(ctx, atom);
388474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
389474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BEGIN_BATCH_NO_AUTOSTATE(dwords);
390474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_VEC(atom->cmd[PTP_CMD_0], atom->cmd+1);
391474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_VEC(atom->cmd[PTP_CMD_1], atom->cmd+PTP_CMD_1+1);
392474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   END_BATCH();
393474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie}
394474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
395474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airliestatic void veclinear_emit(GLcontext *ctx, struct radeon_state_atom *atom)
396474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie{
397474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   r200ContextPtr r200 = R200_CONTEXT(ctx);
398474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BATCH_LOCALS(&r200->radeon);
3990f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   uint32_t dwords = atom->check(ctx, atom);
400474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
401474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_VECLINEAR(atom->cmd[0], atom->cmd+1);
402474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie}
403474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
404474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airliestatic void scl_emit(GLcontext *ctx, struct radeon_state_atom *atom)
405474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie{
406474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   r200ContextPtr r200 = R200_CONTEXT(ctx);
407474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BATCH_LOCALS(&r200->radeon);
4080f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   uint32_t dwords = atom->check(ctx, atom);
409474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
410474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BEGIN_BATCH_NO_AUTOSTATE(dwords);
411474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_SCL(atom->cmd[0], atom->cmd+1);
412474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   END_BATCH();
413474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie}
414474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
415474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
416474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airliestatic void vec_emit(GLcontext *ctx, struct radeon_state_atom *atom)
417474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie{
418474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   r200ContextPtr r200 = R200_CONTEXT(ctx);
419474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BATCH_LOCALS(&r200->radeon);
4200f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   uint32_t dwords = atom->check(ctx, atom);
421474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
422474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BEGIN_BATCH_NO_AUTOSTATE(dwords);
423474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_VEC(atom->cmd[0], atom->cmd+1);
424474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   END_BATCH();
425474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie}
426adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
427d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airliestatic void ctx_emit(GLcontext *ctx, struct radeon_state_atom *atom)
428ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie{
429ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie   r200ContextPtr r200 = R200_CONTEXT(ctx);
430ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie   BATCH_LOCALS(&r200->radeon);
431ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie   struct radeon_renderbuffer *rrb;
432ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie   uint32_t cbpitch;
433e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie   uint32_t zbpitch, depth_fmt;
4340f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   uint32_t dwords = atom->check(ctx, atom);
435d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie
436d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie   /* output the first 7 bytes of context */
4370f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   BEGIN_BATCH_NO_AUTOSTATE(dwords);
438d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie   OUT_BATCH_TABLE(atom->cmd, 5);
439d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie
440e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie   rrb = radeon_get_depthbuffer(&r200->radeon);
441d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie   if (!rrb) {
442474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     OUT_BATCH(0);
443474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     OUT_BATCH(0);
444d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie   } else {
445d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie     zbpitch = (rrb->pitch / rrb->cpp);
446e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie     if (r200->using_hyperz)
447e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie       zbpitch |= RADEON_DEPTH_HYPERZ;
448d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie     OUT_BATCH_RELOC(0, rrb->bo, 0, 0, RADEON_GEM_DOMAIN_VRAM, 0);
449d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie     OUT_BATCH(zbpitch);
450e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie     if (rrb->cpp == 4)
451e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie       depth_fmt = RADEON_DEPTH_FORMAT_24BIT_INT_Z;
452e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie     else
453e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie       depth_fmt = RADEON_DEPTH_FORMAT_16BIT_INT_Z;
454e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie     atom->cmd[CTX_RB3D_ZSTENCILCNTL] &= ~RADEON_DEPTH_FORMAT_MASK;
455e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie     atom->cmd[CTX_RB3D_ZSTENCILCNTL] |= depth_fmt;
456d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie   }
457d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie
458d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie   OUT_BATCH(atom->cmd[CTX_RB3D_ZSTENCILCNTL]);
459d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie   OUT_BATCH(atom->cmd[CTX_CMD_1]);
460d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie   OUT_BATCH(atom->cmd[CTX_PP_CNTL]);
461d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie
462e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie   rrb = radeon_get_colorbuffer(&r200->radeon);
463ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie   if (!rrb || !rrb->bo) {
464e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie     OUT_BATCH(atom->cmd[CTX_RB3D_CNTL]);
465d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie     OUT_BATCH(atom->cmd[CTX_RB3D_COLOROFFSET]);
466d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie   } else {
467e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie     atom->cmd[CTX_RB3D_CNTL] &= ~(0xf << 10);
468e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie     if (rrb->cpp == 4)
469e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie       atom->cmd[CTX_RB3D_CNTL] |= RADEON_COLOR_FORMAT_ARGB8888;
470e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie     else
471e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie       atom->cmd[CTX_RB3D_CNTL] |= RADEON_COLOR_FORMAT_RGB565;
472e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie
473e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie     OUT_BATCH(atom->cmd[CTX_RB3D_CNTL]);
474d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie     OUT_BATCH_RELOC(0, rrb->bo, 0, 0, RADEON_GEM_DOMAIN_VRAM, 0);
475ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie   }
476ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie
477d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie   OUT_BATCH(atom->cmd[CTX_CMD_2]);
478d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie
479d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie   if (!rrb || !rrb->bo) {
480d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie     OUT_BATCH(atom->cmd[CTX_RB3D_COLORPITCH]);
481d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie   } else {
482d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie     cbpitch = (rrb->pitch / rrb->cpp);
483e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie     if (rrb->bo->flags & RADEON_BO_FLAGS_MACRO_TILE)
484d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie       cbpitch |= R200_COLOR_TILE_ENABLE;
485d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie     OUT_BATCH(cbpitch);
486d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie   }
487d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie
488d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie   if (atom->cmd_size == CTX_STATE_SIZE_NEWDRM)
489d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie     OUT_BATCH_TABLE((atom->cmd + 14), 4);
490d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie
491d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie   END_BATCH();
492474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie}
493474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
4940f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminenstatic int check_always_ctx( GLcontext *ctx, struct radeon_state_atom *atom)
4950f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen{
4960f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   r200ContextPtr r200 = R200_CONTEXT(ctx);
4970f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   struct radeon_renderbuffer *rrb, *drb;
4980f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   uint32_t dwords;
4990f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
5000f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   rrb = radeon_get_colorbuffer(&r200->radeon);
5010f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   if (!rrb || !rrb->bo) {
5020f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      return 0;
5030f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   }
5040f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
5050f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   drb = radeon_get_depthbuffer(&r200->radeon);
5060f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
5070f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   dwords = 10;
5080f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   if (drb)
5090f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen     dwords += 6;
5100f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   if (rrb)
5110f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen     dwords += 8;
5120f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   if (atom->cmd_size == CTX_STATE_SIZE_NEWDRM)
5130f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen     dwords += 4;
5140f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
5150f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
5160f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   return dwords;
5170f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen}
5180f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
519474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airliestatic void ctx_emit_cs(GLcontext *ctx, struct radeon_state_atom *atom)
520474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie{
521474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   r200ContextPtr r200 = R200_CONTEXT(ctx);
522474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BATCH_LOCALS(&r200->radeon);
523474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   struct radeon_renderbuffer *rrb, *drb;
524474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   uint32_t cbpitch = 0;
525474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   uint32_t zbpitch = 0;
5260f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   uint32_t dwords = atom->check(ctx, atom);
527e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie   uint32_t depth_fmt;
528474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
529e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie   rrb = radeon_get_colorbuffer(&r200->radeon);
530e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie   if (!rrb || !rrb->bo) {
531e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie      return;
532474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   }
533e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie
534e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie   atom->cmd[CTX_RB3D_CNTL] &= ~(0xf << 10);
535e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie   if (rrb->cpp == 4)
536e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie	atom->cmd[CTX_RB3D_CNTL] |= RADEON_COLOR_FORMAT_ARGB8888;
53745e76d2665b38ba3787548310efc59e969124c01Brian Paul   else switch (rrb->base.Format) {
53845e76d2665b38ba3787548310efc59e969124c01Brian Paul   case MESA_FORMAT_RGB565:
539e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie	atom->cmd[CTX_RB3D_CNTL] |= RADEON_COLOR_FORMAT_RGB565;
54033f56b4612e506999a2be8391ba82c0174afa1b3Michel Dänzer	break;
54145e76d2665b38ba3787548310efc59e969124c01Brian Paul   case MESA_FORMAT_ARGB4444:
54233f56b4612e506999a2be8391ba82c0174afa1b3Michel Dänzer	atom->cmd[CTX_RB3D_CNTL] |= RADEON_COLOR_FORMAT_ARGB4444;
54333f56b4612e506999a2be8391ba82c0174afa1b3Michel Dänzer	break;
54445e76d2665b38ba3787548310efc59e969124c01Brian Paul   case MESA_FORMAT_ARGB1555:
54533f56b4612e506999a2be8391ba82c0174afa1b3Michel Dänzer	atom->cmd[CTX_RB3D_CNTL] |= RADEON_COLOR_FORMAT_ARGB1555;
54633f56b4612e506999a2be8391ba82c0174afa1b3Michel Dänzer	break;
54745e76d2665b38ba3787548310efc59e969124c01Brian Paul   default:
54845e76d2665b38ba3787548310efc59e969124c01Brian Paul	_mesa_problem(ctx, "Unexpected format in ctx_emit_cs");
54933f56b4612e506999a2be8391ba82c0174afa1b3Michel Dänzer   }
550e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie
551e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie   cbpitch = (rrb->pitch / rrb->cpp);
552e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie   if (rrb->bo->flags & RADEON_BO_FLAGS_MACRO_TILE)
553474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie       cbpitch |= R200_COLOR_TILE_ENABLE;
554e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie
555e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie   drb = radeon_get_depthbuffer(&r200->radeon);
556e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie   if (drb) {
557e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie     zbpitch = (drb->pitch / drb->cpp);
558e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie     if (drb->cpp == 4)
559e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie        depth_fmt = RADEON_DEPTH_FORMAT_24BIT_INT_Z;
560e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie     else
561e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie        depth_fmt = RADEON_DEPTH_FORMAT_16BIT_INT_Z;
562e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie     atom->cmd[CTX_RB3D_ZSTENCILCNTL] &= ~RADEON_DEPTH_FORMAT_MASK;
563e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie     atom->cmd[CTX_RB3D_ZSTENCILCNTL] |= depth_fmt;
564474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   }
565474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
566474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   /* output the first 7 bytes of context */
567474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   BEGIN_BATCH_NO_AUTOSTATE(dwords);
568474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
569474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   /* In the CS case we need to split this up */
570474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_BATCH(CP_PACKET0(packet[0].start, 3));
571474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_BATCH_TABLE((atom->cmd + 1), 4);
572474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
573474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   if (drb) {
574474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     OUT_BATCH(CP_PACKET0(RADEON_RB3D_DEPTHOFFSET, 0));
575eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie     OUT_BATCH_RELOC(0, drb->bo, 0, 0, RADEON_GEM_DOMAIN_VRAM, 0);
576474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
577474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     OUT_BATCH(CP_PACKET0(RADEON_RB3D_DEPTHPITCH, 0));
578474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     OUT_BATCH(zbpitch);
579474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   }
580474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
581474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_BATCH(CP_PACKET0(RADEON_RB3D_ZSTENCILCNTL, 0));
582474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_BATCH(atom->cmd[CTX_RB3D_ZSTENCILCNTL]);
583474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_BATCH(CP_PACKET0(RADEON_PP_CNTL, 1));
584474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_BATCH(atom->cmd[CTX_PP_CNTL]);
585474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   OUT_BATCH(atom->cmd[CTX_RB3D_CNTL]);
586474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
587474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
588474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   if (rrb) {
589474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     OUT_BATCH(CP_PACKET0(RADEON_RB3D_COLOROFFSET, 0));
590474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     OUT_BATCH_RELOC(0, rrb->bo, 0, 0, RADEON_GEM_DOMAIN_VRAM, 0);
591474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
592474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     OUT_BATCH(CP_PACKET0(RADEON_RB3D_COLORPITCH, 0));
593ac3de85eb6af680f2884194b40ada7b3e1edda8aDave Airlie     OUT_BATCH_RELOC(cbpitch, rrb->bo, cbpitch, 0, RADEON_GEM_DOMAIN_VRAM, 0);
594474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   }
595474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
596474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   if (atom->cmd_size == CTX_STATE_SIZE_NEWDRM) {
597474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     OUT_BATCH_TABLE((atom->cmd + 14), 4);
598474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   }
599474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
600474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   END_BATCH();
601ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie}
602ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie
6030f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminenstatic int get_tex_size(GLcontext* ctx, struct radeon_state_atom *atom)
6040f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen{
6050f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   r200ContextPtr r200 = R200_CONTEXT(ctx);
6060f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   uint32_t dwords = atom->cmd_size + 2;
6070f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   int i = atom->idx;
6080f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   radeonTexObj *t = r200->state.texture.unit[i].texobj;
6090f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   if (!(t && t->mt && !t->image_override))
6100f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen     dwords -= 2;
6110f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
6120f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   return dwords;
6130f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen}
6140f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
6150f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminenstatic int check_tex_pair(GLcontext* ctx, struct radeon_state_atom *atom)
6160f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen{
6170f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   r200ContextPtr r200 = R200_CONTEXT(ctx);
6180f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   /** XOR is bit flip operation so use it for finding pair */
6190f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   if (!(r200->state.texture.unit[atom->idx].unitneeded | r200->state.texture.unit[atom->idx ^ 1].unitneeded))
6200f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen     return 0;
6210f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
6220f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   return get_tex_size(ctx, atom);
6230f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen}
6240f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
6250f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminenstatic int check_tex(GLcontext* ctx, struct radeon_state_atom *atom)
6260f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen{
6270f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   r200ContextPtr r200 = R200_CONTEXT(ctx);
6280f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   if (!(r200->state.texture.unit[atom->idx].unitneeded))
6290f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen     return 0;
6300f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
6310f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   return get_tex_size(ctx, atom);
6320f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen}
6330f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
6340f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
63561bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airliestatic void tex_emit(GLcontext *ctx, struct radeon_state_atom *atom)
636ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie{
63761bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie   r200ContextPtr r200 = R200_CONTEXT(ctx);
63861bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie   BATCH_LOCALS(&r200->radeon);
6390f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   uint32_t dwords = atom->check(ctx, atom);
64061bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie   int i = atom->idx;
64161bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie   radeonTexObj *t = r200->state.texture.unit[i].texobj;
64261bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie
64361bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie   BEGIN_BATCH_NO_AUTOSTATE(dwords);
6445f8381724e81b594d6f11bb2d59964fbdbf22e90Roland Scheidegger   /* is this ok even with drm older than 1.18? */
64561bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie   OUT_BATCH_TABLE(atom->cmd, 10);
646eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie
647eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie   if (t && t->mt && !t->image_override) {
648afe84fa698eae3e035e967589f0a8d55f6a83698Maciej Cencora     OUT_BATCH_RELOC(t->tile_bits, t->mt->bo, get_base_teximage_offset(t),
6495f8381724e81b594d6f11bb2d59964fbdbf22e90Roland Scheidegger		  RADEON_GEM_DOMAIN_GTT|RADEON_GEM_DOMAIN_VRAM, 0, 0);
65061bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie   } else if (!t) {
651695ca1e2be6f222c132a76299fc3a0ac9143d960Dave Airlie     /* workaround for old CS mechanism */
652695ca1e2be6f222c132a76299fc3a0ac9143d960Dave Airlie     OUT_BATCH(r200->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP]);
653eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie   } else {
65462d504d818f1ab1836a134658b1661ceabb65f1fDave Airlie     OUT_BATCH(t->override_offset);
655eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie   }
656eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie
657eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie   END_BATCH();
658eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie}
659eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie
6600f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminenstatic int get_tex_mm_size(GLcontext* ctx, struct radeon_state_atom *atom)
661eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie{
662eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie   r200ContextPtr r200 = R200_CONTEXT(ctx);
6630f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   uint32_t dwords = atom->cmd_size + 2;
6640f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   int hastexture = 1;
665eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie   int i = atom->idx;
666eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie   radeonTexObj *t = r200->state.texture.unit[i].texobj;
667eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie   if (!t)
668eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie	hastexture = 0;
669eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie   else {
670eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie	if (!t->mt && !t->bo)
671eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie		hastexture = 0;
672eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie   }
673b074aacdb2a9e3520ccd6cfd892b60599ad0d1d8Dave Airlie
6740f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   if (!hastexture)
6750f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen     dwords -= 4;
6760f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   return dwords;
6770f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen}
6780f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
6790f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminenstatic int check_tex_pair_mm(GLcontext* ctx, struct radeon_state_atom *atom)
6800f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen{
6810f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   r200ContextPtr r200 = R200_CONTEXT(ctx);
6820f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   /** XOR is bit flip operation so use it for finding pair */
6830f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   if (!(r200->state.texture.unit[atom->idx].unitneeded | r200->state.texture.unit[atom->idx ^ 1].unitneeded))
6840f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen     return 0;
6850f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
6860f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   return get_tex_mm_size(ctx, atom);
6870f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen}
6880f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
6890f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminenstatic int check_tex_mm(GLcontext* ctx, struct radeon_state_atom *atom)
6900f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen{
6910f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   r200ContextPtr r200 = R200_CONTEXT(ctx);
6920f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   if (!(r200->state.texture.unit[atom->idx].unitneeded))
6930f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen     return 0;
6940f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
6950f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   return get_tex_mm_size(ctx, atom);
6960f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen}
6970f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
6980f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
6990f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminenstatic void tex_emit_mm(GLcontext *ctx, struct radeon_state_atom *atom)
7000f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen{
7010f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   r200ContextPtr r200 = R200_CONTEXT(ctx);
7020f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   BATCH_LOCALS(&r200->radeon);
7030f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   uint32_t dwords = atom->check(ctx, atom);
7040f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   int i = atom->idx;
7050f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   radeonTexObj *t = r200->state.texture.unit[i].texobj;
7062cf8164065b8704e2f32d77af14cde9e7979435cRoland Scheidegger
7072cf8164065b8704e2f32d77af14cde9e7979435cRoland Scheidegger   if (!r200->state.texture.unit[i].unitneeded && !(dwords <= atom->cmd_size))
7080f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen        dwords -= 4;
709eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie   BEGIN_BATCH_NO_AUTOSTATE(dwords);
710eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie
71139ef33708c1a048863a1956cd99782013791ca92Jerome Glisse   OUT_BATCH(CP_PACKET0(R200_PP_TXFILTER_0 + (32 * i), 7));
712b074aacdb2a9e3520ccd6cfd892b60599ad0d1d8Dave Airlie   OUT_BATCH_TABLE((atom->cmd + 1), 8);
713eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie
7140f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   if (dwords > atom->cmd_size) {
715eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie     OUT_BATCH(CP_PACKET0(R200_PP_TXOFFSET_0 + (24 * i), 0));
716eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie     if (t->mt && !t->image_override) {
7175f8381724e81b594d6f11bb2d59964fbdbf22e90Roland Scheidegger        OUT_BATCH_RELOC(t->tile_bits, t->mt->bo, 0,
7185f8381724e81b594d6f11bb2d59964fbdbf22e90Roland Scheidegger		  RADEON_GEM_DOMAIN_GTT|RADEON_GEM_DOMAIN_VRAM, 0, 0);
719eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie      } else {
720eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie	if (t->bo)
721eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie            OUT_BATCH_RELOC(t->tile_bits, t->bo, 0,
722eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie                            RADEON_GEM_DOMAIN_GTT|RADEON_GEM_DOMAIN_VRAM, 0, 0);
723eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie      }
724eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie   }
72561bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie   END_BATCH();
726ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie}
727ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie
728eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie
729674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airliestatic void cube_emit(GLcontext *ctx, struct radeon_state_atom *atom)
730674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie{
731674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie   r200ContextPtr r200 = R200_CONTEXT(ctx);
732674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie   BATCH_LOCALS(&r200->radeon);
7330f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   uint32_t dwords = atom->check(ctx, atom);
734ffae82da4cf5a969d699c7f5bdcd4dae6c27a1caRoland Scheidegger   int i = atom->idx, j;
735ffae82da4cf5a969d699c7f5bdcd4dae6c27a1caRoland Scheidegger   radeonTexObj *t = r200->state.texture.unit[i].texobj;
736ffae82da4cf5a969d699c7f5bdcd4dae6c27a1caRoland Scheidegger   radeon_mipmap_level *lvl;
737ffae82da4cf5a969d699c7f5bdcd4dae6c27a1caRoland Scheidegger
7380f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   if (!(t && !t->image_override))
7390f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen     dwords = 2;
7400f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
7410f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   BEGIN_BATCH_NO_AUTOSTATE(dwords);
742ffae82da4cf5a969d699c7f5bdcd4dae6c27a1caRoland Scheidegger   /* XXX that size won't really match with image_override... */
743ffae82da4cf5a969d699c7f5bdcd4dae6c27a1caRoland Scheidegger   OUT_BATCH_TABLE(atom->cmd, 2);
744ffae82da4cf5a969d699c7f5bdcd4dae6c27a1caRoland Scheidegger
745ffae82da4cf5a969d699c7f5bdcd4dae6c27a1caRoland Scheidegger   if (t && !t->image_override) {
746ffae82da4cf5a969d699c7f5bdcd4dae6c27a1caRoland Scheidegger     lvl = &t->mt->levels[0];
747ffae82da4cf5a969d699c7f5bdcd4dae6c27a1caRoland Scheidegger     OUT_BATCH_TABLE((atom->cmd + 2), 1);
748ffae82da4cf5a969d699c7f5bdcd4dae6c27a1caRoland Scheidegger     for (j = 1; j <= 5; j++) {
749ffae82da4cf5a969d699c7f5bdcd4dae6c27a1caRoland Scheidegger       OUT_BATCH_RELOC(lvl->faces[j].offset, t->mt->bo, lvl->faces[j].offset,
750ffae82da4cf5a969d699c7f5bdcd4dae6c27a1caRoland Scheidegger			RADEON_GEM_DOMAIN_VRAM, 0, 0);
751ffae82da4cf5a969d699c7f5bdcd4dae6c27a1caRoland Scheidegger     }
752ffae82da4cf5a969d699c7f5bdcd4dae6c27a1caRoland Scheidegger   }
753ffae82da4cf5a969d699c7f5bdcd4dae6c27a1caRoland Scheidegger   END_BATCH();
754ffae82da4cf5a969d699c7f5bdcd4dae6c27a1caRoland Scheidegger}
755ffae82da4cf5a969d699c7f5bdcd4dae6c27a1caRoland Scheidegger
756ffae82da4cf5a969d699c7f5bdcd4dae6c27a1caRoland Scheideggerstatic void cube_emit_cs(GLcontext *ctx, struct radeon_state_atom *atom)
757ffae82da4cf5a969d699c7f5bdcd4dae6c27a1caRoland Scheidegger{
758ffae82da4cf5a969d699c7f5bdcd4dae6c27a1caRoland Scheidegger   r200ContextPtr r200 = R200_CONTEXT(ctx);
759ffae82da4cf5a969d699c7f5bdcd4dae6c27a1caRoland Scheidegger   BATCH_LOCALS(&r200->radeon);
7600f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   uint32_t dwords = atom->check(ctx, atom);
7615f8381724e81b594d6f11bb2d59964fbdbf22e90Roland Scheidegger   int i = atom->idx, j;
762674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie   radeonTexObj *t = r200->state.texture.unit[i].texobj;
7635f8381724e81b594d6f11bb2d59964fbdbf22e90Roland Scheidegger   radeon_mipmap_level *lvl;
7640f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   if (!(t && !t->image_override))
7650f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen     dwords = 2;
766674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie
7670f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   BEGIN_BATCH_NO_AUTOSTATE(dwords);
768acf086ebfa95b77bb221c15acf6776439063c0b7Dave Airlie   OUT_BATCH_TABLE(atom->cmd, 2);
769674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie
770674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie   if (t && !t->image_override) {
7715f8381724e81b594d6f11bb2d59964fbdbf22e90Roland Scheidegger     lvl = &t->mt->levels[0];
7725f8381724e81b594d6f11bb2d59964fbdbf22e90Roland Scheidegger     for (j = 1; j <= 5; j++) {
773acf086ebfa95b77bb221c15acf6776439063c0b7Dave Airlie       OUT_BATCH(CP_PACKET0(R200_PP_CUBIC_OFFSET_F1_0 + (24*i) + (4 * (j-1)), 0));
7745f8381724e81b594d6f11bb2d59964fbdbf22e90Roland Scheidegger       OUT_BATCH_RELOC(lvl->faces[j].offset, t->mt->bo, lvl->faces[j].offset,
77597aa3d553f73d955a5c3eced33384348158307a7Dave Airlie			RADEON_GEM_DOMAIN_GTT|RADEON_GEM_DOMAIN_VRAM, 0, 0);
7765f8381724e81b594d6f11bb2d59964fbdbf22e90Roland Scheidegger     }
777674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie   }
778674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie   END_BATCH();
779674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie}
780ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie
781adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* Initialize the context's hardware state.
782adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
783adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellvoid r200InitState( r200ContextPtr rmesa )
784adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell{
7854637235183b80963536f2364e4d50fcb894886ddDave Airlie   GLcontext *ctx = rmesa->radeon.glCtx;
786e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie   GLuint i;
787adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
788d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie   rmesa->radeon.state.color.clear = 0x00000000;
789adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
790adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   switch ( ctx->Visual.depthBits ) {
791adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   case 16:
792d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->radeon.state.depth.clear = 0x0000ffff;
793d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->radeon.state.stencil.clear = 0x00000000;
794adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      break;
795adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   case 24:
796a03a4dd524b97f43356b830c21df05f82795fe0bDave Airlie   default:
797d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->radeon.state.depth.clear = 0x00ffffff;
798d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->radeon.state.stencil.clear = 0xffff0000;
799adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      break;
800adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   }
801adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
8024637235183b80963536f2364e4d50fcb894886ddDave Airlie   rmesa->radeon.Fallback = 0;
803adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
8041090d206de011a67d236d8c4ae32d2d42b2f6337Dave Airlie   rmesa->radeon.hw.max_state_size = 0;
805adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
806adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define ALLOC_STATE( ATOM, CHK, SZ, NM, IDX )				\
807adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   do {								\
808adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.ATOM.cmd_size = SZ;				\
8094637235183b80963536f2364e4d50fcb894886ddDave Airlie      rmesa->hw.ATOM.cmd = (GLuint *)CALLOC(SZ * sizeof(int));	\
8104637235183b80963536f2364e4d50fcb894886ddDave Airlie      rmesa->hw.ATOM.lastcmd = (GLuint *)CALLOC(SZ * sizeof(int));	\
811adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.ATOM.name = NM;					\
812adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.ATOM.idx = IDX;					\
813dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen      if (check_##CHK != check_never) {				\
814dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen         rmesa->hw.ATOM.check = check_##CHK;			\
815dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen         rmesa->radeon.hw.max_state_size += SZ * sizeof(int);	\
816dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen      } else {							\
817dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen         rmesa->hw.ATOM.check = NULL;				\
818dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen      }								\
8190c8f8d3dc9d60ed34eeca7f3606651420a81753cEric Anholt      rmesa->hw.ATOM.dirty = GL_FALSE;				\
820adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   } while (0)
821f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger
822f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger
823adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Allocate state buffers:
824adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
8254637235183b80963536f2364e4d50fcb894886ddDave Airlie   if (rmesa->radeon.radeonScreen->drmSupportsBlendColor)
8260f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( ctx, always_add4, CTX_STATE_SIZE_NEWDRM, "CTX/context", 0 );
827033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger   else
8280f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( ctx, always_add4, CTX_STATE_SIZE_OLDDRM, "CTX/context", 0 );
829ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie
830474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   if (rmesa->radeon.radeonScreen->kernel_mm)
8310f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   {
832474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     rmesa->hw.ctx.emit = ctx_emit_cs;
8330f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen     rmesa->hw.ctx.check = check_always_ctx;
8340f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   }
835474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   else
8360f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   {
837474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie     rmesa->hw.ctx.emit = ctx_emit;
8380f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   }
839adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( set, always, SET_STATE_SIZE, "SET/setup", 0 );
840adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( lin, always, LIN_STATE_SIZE, "LIN/line", 0 );
841adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( msk, always, MSK_STATE_SIZE, "MSK/mask", 0 );
842adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( vpt, always, VPT_STATE_SIZE, "VPT/viewport", 0 );
843adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( vtx, always, VTX_STATE_SIZE, "VTX/vertex", 0 );
844adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( vap, always, VAP_STATE_SIZE, "VAP/vap", 0 );
845adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( vte, always, VTE_STATE_SIZE, "VTE/vte", 0 );
846adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( msc, always, MSC_STATE_SIZE, "MSC/misc", 0 );
847adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( cst, always, CST_STATE_SIZE, "CST/constant", 0 );
848adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( zbs, always, ZBS_STATE_SIZE, "ZBS/zbias", 0 );
849f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger   ALLOC_STATE( tf, tf, TF_STATE_SIZE, "TF/tfactor", 0 );
8500f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   {
8510f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      int state_size = TEX_STATE_SIZE_NEWDRM;
8520f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      if (!rmesa->radeon.radeonScreen->drmSupportsFragShader) {
8530f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen         state_size = TEX_STATE_SIZE_OLDDRM;
854f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      }
8550f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      if (rmesa->radeon.radeonScreen->drmSupportsFragShader) {
8560f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen         if (rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_R200) {
8570f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen            /* make sure texture units 0/1 are emitted pair-wise for r200 t0 hang workaround */
8580f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen            ALLOC_STATE( tex[0], tex_pair_mm, state_size, "TEX/tex-0", 0 );
8590f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen            ALLOC_STATE( tex[1], tex_pair_mm, state_size, "TEX/tex-1", 1 );
8600f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen            ALLOC_STATE( tam, tex_any, TAM_STATE_SIZE, "TAM/tam", 0 );
8610f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen         }
8620f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen         else {
8630f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen            ALLOC_STATE( tex[0], tex_mm, state_size, "TEX/tex-0", 0 );
8640f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen            ALLOC_STATE( tex[1], tex_mm, state_size, "TEX/tex-1", 1 );
8650f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen            ALLOC_STATE( tam, never, TAM_STATE_SIZE, "TAM/tam", 0 );
8660f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen         }
8670f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen         ALLOC_STATE( tex[2], tex_mm, state_size, "TEX/tex-2", 2 );
8680f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen         ALLOC_STATE( tex[3], tex_mm, state_size, "TEX/tex-3", 3 );
8690f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen         ALLOC_STATE( tex[4], tex_mm, state_size, "TEX/tex-4", 4 );
8700f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen         ALLOC_STATE( tex[5], tex_mm, state_size, "TEX/tex-5", 5 );
8710f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen         if (!rmesa->radeon.radeonScreen->kernel_mm)
8720f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen         {
8730f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen            if (rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_R200) {
8740f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen               rmesa->hw.tex[0].check = check_tex_pair;
8750f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen               rmesa->hw.tex[1].check = check_tex_pair;
8760f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen            } else {
8770f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen               rmesa->hw.tex[0].check = check_tex;
8780f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen               rmesa->hw.tex[1].check = check_tex;
8790f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen            }
8800f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen            rmesa->hw.tex[2].check = check_tex;
8810f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen            rmesa->hw.tex[3].check = check_tex;
8820f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen            rmesa->hw.tex[4].check = check_tex;
8830f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen            rmesa->hw.tex[5].check = check_tex;
8840f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen         }
8850f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen         if (rmesa->radeon.radeonScreen->drmSupportsFragShader) {
8860f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen            ALLOC_STATE( atf, afs, ATF_STATE_SIZE, "ATF/tfactor", 0 );
8870f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen            ALLOC_STATE( afs[0], afs_pass1, AFS_STATE_SIZE, "AFS/afsinst-0", 0 );
8880f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen            ALLOC_STATE( afs[1], afs, AFS_STATE_SIZE, "AFS/afsinst-1", 1 );
8890f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen         } else {
8900f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen            ALLOC_STATE( atf, never, ATF_STATE_SIZE, "ATF/tfactor", 0 );
8910f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen            ALLOC_STATE( afs[0], never, AFS_STATE_SIZE, "AFS/afsinst-0", 0 );
8920f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen            ALLOC_STATE( afs[1], never, AFS_STATE_SIZE, "AFS/afsinst-1", 1 );
8930f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen         }
894f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      }
89548ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   }
8962b5618fc5bdcbee3434f8b5aa3a31eb06fb479c0Alex Deucher
8976785a8aaf4bff5f607731fdc6f19189c1088112fPauli Nieminen   ALLOC_STATE( stp, polygon_stipple, STP_STATE_SIZE, "STP/stp", 0 );
89861bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie
8998b9a5cfce0065d6e32d3a882b6ee9f94bf2634ffRoland Scheidegger   for (i = 0; i < 6; i++)
900eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie      if (rmesa->radeon.radeonScreen->kernel_mm)
9010f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen          rmesa->hw.tex[i].emit = tex_emit_mm;
902eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie      else
903eba8008916503cea47c557398b009e2e2b546cb1Dave Airlie          rmesa->hw.tex[i].emit = tex_emit;
9044637235183b80963536f2364e4d50fcb894886ddDave Airlie   if (rmesa->radeon.radeonScreen->drmSupportsCubeMapsR200) {
90548ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      ALLOC_STATE( cube[0], tex_cube, CUBE_STATE_SIZE, "CUBE/tex-0", 0 );
90648ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      ALLOC_STATE( cube[1], tex_cube, CUBE_STATE_SIZE, "CUBE/tex-1", 1 );
90748ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      ALLOC_STATE( cube[2], tex_cube, CUBE_STATE_SIZE, "CUBE/tex-2", 2 );
90848ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      ALLOC_STATE( cube[3], tex_cube, CUBE_STATE_SIZE, "CUBE/tex-3", 3 );
90948ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      ALLOC_STATE( cube[4], tex_cube, CUBE_STATE_SIZE, "CUBE/tex-4", 4 );
91048ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      ALLOC_STATE( cube[5], tex_cube, CUBE_STATE_SIZE, "CUBE/tex-5", 5 );
9118b9a5cfce0065d6e32d3a882b6ee9f94bf2634ffRoland Scheidegger      for (i = 0; i < 6; i++)
9120f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen          if (rmesa->radeon.radeonScreen->kernel_mm) {
913ffae82da4cf5a969d699c7f5bdcd4dae6c27a1caRoland Scheidegger              rmesa->hw.cube[i].emit = cube_emit_cs;
9140f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen              rmesa->hw.cube[i].check = check_tex_cube_cs;
9150f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen          } else
916ffae82da4cf5a969d699c7f5bdcd4dae6c27a1caRoland Scheidegger              rmesa->hw.cube[i].emit = cube_emit;
917bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl   }
918bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl   else {
919bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl      ALLOC_STATE( cube[0], never, CUBE_STATE_SIZE, "CUBE/tex-0", 0 );
920bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl      ALLOC_STATE( cube[1], never, CUBE_STATE_SIZE, "CUBE/tex-1", 1 );
92148ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      ALLOC_STATE( cube[2], never, CUBE_STATE_SIZE, "CUBE/tex-2", 2 );
92248ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      ALLOC_STATE( cube[3], never, CUBE_STATE_SIZE, "CUBE/tex-3", 3 );
92348ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      ALLOC_STATE( cube[4], never, CUBE_STATE_SIZE, "CUBE/tex-4", 4 );
92448ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      ALLOC_STATE( cube[5], never, CUBE_STATE_SIZE, "CUBE/tex-5", 5 );
925bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl   }
926674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie
9274637235183b80963536f2364e4d50fcb894886ddDave Airlie   if (rmesa->radeon.radeonScreen->drmSupportsVertexProgram) {
92898c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      ALLOC_STATE( pvs, tcl_vp, PVS_STATE_SIZE, "PVS/pvscntl", 0 );
9290f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      if (rmesa->radeon.radeonScreen->kernel_mm) {
9300f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen         ALLOC_STATE( vpi[0], tcl_vp_add4, VPI_STATE_SIZE, "VP/vertexprog-0", 0 );
9310f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen         ALLOC_STATE( vpi[1], tcl_vp_size_add4, VPI_STATE_SIZE, "VP/vertexprog-1", 1 );
9320f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen         ALLOC_STATE( vpp[0], tcl_vp_add4, VPP_STATE_SIZE, "VPP/vertexparam-0", 0 );
9330f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen         ALLOC_STATE( vpp[1], tcl_vpp_size_add4, VPP_STATE_SIZE, "VPP/vertexparam-1", 1 );
9340f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      } else {
9350f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen         ALLOC_STATE( vpi[0], tcl_vp, VPI_STATE_SIZE, "VP/vertexprog-0", 0 );
9360f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen         ALLOC_STATE( vpi[1], tcl_vp_size, VPI_STATE_SIZE, "VP/vertexprog-1", 1 );
9370f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen         ALLOC_STATE( vpp[0], tcl_vp, VPP_STATE_SIZE, "VPP/vertexparam-0", 0 );
9380f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen         ALLOC_STATE( vpp[1], tcl_vpp_size, VPP_STATE_SIZE, "VPP/vertexparam-1", 1 );
9390f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      }
94098c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   }
94198c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   else {
94298c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      ALLOC_STATE( pvs, never, PVS_STATE_SIZE, "PVS/pvscntl", 0 );
94398c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      ALLOC_STATE( vpi[0], never, VPI_STATE_SIZE, "VP/vertexprog-0", 0 );
94498c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      ALLOC_STATE( vpi[1], never, VPI_STATE_SIZE, "VP/vertexprog-1", 1 );
94598c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      ALLOC_STATE( vpp[0], never, VPP_STATE_SIZE, "VPP/vertexparam-0", 0 );
94698c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      ALLOC_STATE( vpp[1], never, VPP_STATE_SIZE, "VPP/vertexparam-1", 1 );
94798c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   }
94898c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   /* FIXME: this atom has two commands, we need only one (ucp_vert_blend) for vp */
94998c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   ALLOC_STATE( tcl, tcl_or_vp, TCL_STATE_SIZE, "TCL/tcl", 0 );
950adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( msl, tcl, MSL_STATE_SIZE, "MSL/matrix-select", 0 );
951adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( tcg, tcl, TCG_STATE_SIZE, "TCG/texcoordgen", 0 );
9520f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   if (rmesa->radeon.radeonScreen->kernel_mm) {
9530f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( mtl[0], tcl_lighting_add6, MTL_STATE_SIZE, "MTL0/material0", 0 );
9540f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( mtl[1], tcl_lighting_add6, MTL_STATE_SIZE, "MTL1/material1", 1 );
9550f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( grd, tcl_or_vp_add2, GRD_STATE_SIZE, "GRD/guard-band", 0 );
9560f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( fog, tcl_fog_add4, FOG_STATE_SIZE, "FOG/fog", 0 );
9570f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( glt, tcl_lighting_add4, GLT_STATE_SIZE, "GLT/light-global", 0 );
9580f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( eye, tcl_lighting_add4, EYE_STATE_SIZE, "EYE/eye-vector", 0 );
9590f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( mat[R200_MTX_MV], tcl_add4, MAT_STATE_SIZE, "MAT/modelview", 0 );
9600f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( mat[R200_MTX_IMV], tcl_add4, MAT_STATE_SIZE, "MAT/it-modelview", 0 );
9610f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( mat[R200_MTX_MVP], tcl_add4, MAT_STATE_SIZE, "MAT/modelproject", 0 );
9620f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( mat[R200_MTX_TEX0], tcl_tex_add4, MAT_STATE_SIZE, "MAT/texmat0", 0 );
9630f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( mat[R200_MTX_TEX1], tcl_tex_add4, MAT_STATE_SIZE, "MAT/texmat1", 1 );
9640f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( mat[R200_MTX_TEX2], tcl_tex_add4, MAT_STATE_SIZE, "MAT/texmat2", 2 );
9650f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( mat[R200_MTX_TEX3], tcl_tex_add4, MAT_STATE_SIZE, "MAT/texmat3", 3 );
9660f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( mat[R200_MTX_TEX4], tcl_tex_add4, MAT_STATE_SIZE, "MAT/texmat4", 4 );
9670f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( mat[R200_MTX_TEX5], tcl_tex_add4, MAT_STATE_SIZE, "MAT/texmat5", 5 );
9680f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( ucp[0], tcl_ucp_add4, UCP_STATE_SIZE, "UCP/userclip-0", 0 );
9690f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( ucp[1], tcl_ucp_add4, UCP_STATE_SIZE, "UCP/userclip-1", 1 );
9700f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( ucp[2], tcl_ucp_add4, UCP_STATE_SIZE, "UCP/userclip-2", 2 );
9710f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( ucp[3], tcl_ucp_add4, UCP_STATE_SIZE, "UCP/userclip-3", 3 );
9720f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( ucp[4], tcl_ucp_add4, UCP_STATE_SIZE, "UCP/userclip-4", 4 );
9730f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( ucp[5], tcl_ucp_add4, UCP_STATE_SIZE, "UCP/userclip-5", 5 );
9740f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( lit[0], tcl_light_add8, LIT_STATE_SIZE, "LIT/light-0", 0 );
9750f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( lit[1], tcl_light_add8, LIT_STATE_SIZE, "LIT/light-1", 1 );
9760f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( lit[2], tcl_light_add8, LIT_STATE_SIZE, "LIT/light-2", 2 );
9770f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( lit[3], tcl_light_add8, LIT_STATE_SIZE, "LIT/light-3", 3 );
9780f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( lit[4], tcl_light_add8, LIT_STATE_SIZE, "LIT/light-4", 4 );
9790f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( lit[5], tcl_light_add8, LIT_STATE_SIZE, "LIT/light-5", 5 );
9800f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( lit[6], tcl_light_add8, LIT_STATE_SIZE, "LIT/light-6", 6 );
9810f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( lit[7], tcl_light_add8, LIT_STATE_SIZE, "LIT/light-7", 7 );
982dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen      ALLOC_STATE( sci, rrb, SCI_STATE_SIZE, "SCI/scissor", 0 );
9830f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   } else {
9840f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( mtl[0], tcl_lighting, MTL_STATE_SIZE, "MTL0/material0", 0 );
9850f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( mtl[1], tcl_lighting, MTL_STATE_SIZE, "MTL1/material1", 1 );
9860f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( grd, tcl_or_vp, GRD_STATE_SIZE, "GRD/guard-band", 0 );
9870f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( fog, tcl_fog, FOG_STATE_SIZE, "FOG/fog", 0 );
9880f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( glt, tcl_lighting, GLT_STATE_SIZE, "GLT/light-global", 0 );
9890f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( eye, tcl_lighting, EYE_STATE_SIZE, "EYE/eye-vector", 0 );
9900f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( mat[R200_MTX_MV], tcl, MAT_STATE_SIZE, "MAT/modelview", 0 );
9910f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( mat[R200_MTX_IMV], tcl, MAT_STATE_SIZE, "MAT/it-modelview", 0 );
9920f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( mat[R200_MTX_MVP], tcl, MAT_STATE_SIZE, "MAT/modelproject", 0 );
9930f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( mat[R200_MTX_TEX0], tcl_tex, MAT_STATE_SIZE, "MAT/texmat0", 0 );
9940f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( mat[R200_MTX_TEX1], tcl_tex, MAT_STATE_SIZE, "MAT/texmat1", 1 );
9950f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( mat[R200_MTX_TEX2], tcl_tex, MAT_STATE_SIZE, "MAT/texmat2", 2 );
9960f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( mat[R200_MTX_TEX3], tcl_tex, MAT_STATE_SIZE, "MAT/texmat3", 3 );
9970f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( mat[R200_MTX_TEX4], tcl_tex, MAT_STATE_SIZE, "MAT/texmat4", 4 );
9980f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( mat[R200_MTX_TEX5], tcl_tex, MAT_STATE_SIZE, "MAT/texmat5", 5 );
9990f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( ucp[0], tcl_ucp, UCP_STATE_SIZE, "UCP/userclip-0", 0 );
10000f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( ucp[1], tcl_ucp, UCP_STATE_SIZE, "UCP/userclip-1", 1 );
10010f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( ucp[2], tcl_ucp, UCP_STATE_SIZE, "UCP/userclip-2", 2 );
10020f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( ucp[3], tcl_ucp, UCP_STATE_SIZE, "UCP/userclip-3", 3 );
10030f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( ucp[4], tcl_ucp, UCP_STATE_SIZE, "UCP/userclip-4", 4 );
10040f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( ucp[5], tcl_ucp, UCP_STATE_SIZE, "UCP/userclip-5", 5 );
10050f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( lit[0], tcl_light, LIT_STATE_SIZE, "LIT/light-0", 0 );
10060f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( lit[1], tcl_light, LIT_STATE_SIZE, "LIT/light-1", 1 );
10070f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( lit[2], tcl_light, LIT_STATE_SIZE, "LIT/light-2", 2 );
10080f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( lit[3], tcl_light, LIT_STATE_SIZE, "LIT/light-3", 3 );
10090f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( lit[4], tcl_light, LIT_STATE_SIZE, "LIT/light-4", 4 );
10100f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( lit[5], tcl_light, LIT_STATE_SIZE, "LIT/light-5", 5 );
10110f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( lit[6], tcl_light, LIT_STATE_SIZE, "LIT/light-6", 6 );
10120f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      ALLOC_STATE( lit[7], tcl_light, LIT_STATE_SIZE, "LIT/light-7", 7 );
1013dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen      ALLOC_STATE( sci, never, SCI_STATE_SIZE, "SCI/scissor", 0 );
10140f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen   }
1015f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger   ALLOC_STATE( pix[0], pix_zero, PIX_STATE_SIZE, "PIX/pixstage-0", 0 );
101636603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger   ALLOC_STATE( pix[1], texenv, PIX_STATE_SIZE, "PIX/pixstage-1", 1 );
101736603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger   ALLOC_STATE( pix[2], texenv, PIX_STATE_SIZE, "PIX/pixstage-2", 2 );
101836603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger   ALLOC_STATE( pix[3], texenv, PIX_STATE_SIZE, "PIX/pixstage-3", 3 );
101936603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger   ALLOC_STATE( pix[4], texenv, PIX_STATE_SIZE, "PIX/pixstage-4", 4 );
102036603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger   ALLOC_STATE( pix[5], texenv, PIX_STATE_SIZE, "PIX/pixstage-5", 5 );
10214637235183b80963536f2364e4d50fcb894886ddDave Airlie   if (rmesa->radeon.radeonScreen->drmSupportsTriPerf) {
1022fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger      ALLOC_STATE( prf, always, PRF_STATE_SIZE, "PRF/performance-tri", 0 );
1023fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger   }
1024fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger   else {
1025fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger      ALLOC_STATE( prf, never, PRF_STATE_SIZE, "PRF/performance-tri", 0 );
1026fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger   }
10274637235183b80963536f2364e4d50fcb894886ddDave Airlie   if (rmesa->radeon.radeonScreen->drmSupportsPointSprites) {
102844dace86eaf9eded8e6465adfadf6345658686ddRoland Scheidegger      ALLOC_STATE( spr, always, SPR_STATE_SIZE, "SPR/pointsprite", 0 );
10290f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      if (rmesa->radeon.radeonScreen->kernel_mm)
10300f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen         ALLOC_STATE( ptp, tcl_add8, PTP_STATE_SIZE, "PTP/pointparams", 0 );
10310f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen      else
10320f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen         ALLOC_STATE( ptp, tcl, PTP_STATE_SIZE, "PTP/pointparams", 0 );
1033cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   }
1034cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   else {
103544dace86eaf9eded8e6465adfadf6345658686ddRoland Scheidegger      ALLOC_STATE (spr, never, SPR_STATE_SIZE, "SPR/pointsprite", 0 );
1036cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger      ALLOC_STATE (ptp, never, PTP_STATE_SIZE, "PTP/pointparams", 0 );
1037cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   }
1038adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
10390c8f8d3dc9d60ed34eeca7f3606651420a81753cEric Anholt   r200SetUpAtomList( rmesa );
1040adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1041adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Fill in the packet headers:
1042adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
1043474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.ctx.cmd[CTX_CMD_0] = cmdpkt(rmesa, RADEON_EMIT_PP_MISC);
1044474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.ctx.cmd[CTX_CMD_1] = cmdpkt(rmesa, RADEON_EMIT_PP_CNTL);
1045474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.ctx.cmd[CTX_CMD_2] = cmdpkt(rmesa, RADEON_EMIT_RB3D_COLORPITCH);
10464637235183b80963536f2364e4d50fcb894886ddDave Airlie   if (rmesa->radeon.radeonScreen->drmSupportsBlendColor)
1047474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.ctx.cmd[CTX_CMD_3] = cmdpkt(rmesa, R200_EMIT_RB3D_BLENDCOLOR);
1048474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.lin.cmd[LIN_CMD_0] = cmdpkt(rmesa, RADEON_EMIT_RE_LINE_PATTERN);
1049474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.lin.cmd[LIN_CMD_1] = cmdpkt(rmesa, RADEON_EMIT_SE_LINE_WIDTH);
1050474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.msk.cmd[MSK_CMD_0] = cmdpkt(rmesa, RADEON_EMIT_RB3D_STENCILREFMASK);
1051474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.vpt.cmd[VPT_CMD_0] = cmdpkt(rmesa, RADEON_EMIT_SE_VPORT_XSCALE);
1052474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.set.cmd[SET_CMD_0] = cmdpkt(rmesa, RADEON_EMIT_SE_CNTL);
1053474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.msc.cmd[MSC_CMD_0] = cmdpkt(rmesa, RADEON_EMIT_RE_MISC);
1054474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cst.cmd[CST_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_CNTL_X);
1055474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cst.cmd[CST_CMD_1] = cmdpkt(rmesa, R200_EMIT_RB3D_DEPTHXY_OFFSET);
1056474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cst.cmd[CST_CMD_2] = cmdpkt(rmesa, R200_EMIT_RE_AUX_SCISSOR_CNTL);
1057474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cst.cmd[CST_CMD_3] = cmdpkt(rmesa, R200_EMIT_RE_SCISSOR_TL_0);
1058474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cst.cmd[CST_CMD_4] = cmdpkt(rmesa, R200_EMIT_SE_VAP_CNTL_STATUS);
1059474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cst.cmd[CST_CMD_5] = cmdpkt(rmesa, R200_EMIT_RE_POINTSIZE);
1060474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cst.cmd[CST_CMD_6] = cmdpkt(rmesa, R200_EMIT_TCL_INPUT_VTX_VECTOR_ADDR_0);
1061474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.tam.cmd[TAM_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TAM_DEBUG3);
1062474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.tf.cmd[TF_CMD_0] = cmdpkt(rmesa, R200_EMIT_TFACTOR_0);
10634637235183b80963536f2364e4d50fcb894886ddDave Airlie   if (rmesa->radeon.radeonScreen->drmSupportsFragShader) {
1064474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.atf.cmd[ATF_CMD_0] = cmdpkt(rmesa, R200_EMIT_ATF_TFACTOR);
1065474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[0].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCTLALL_0);
1066474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[0].cmd[TEX_CMD_1_NEWDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_0);
1067474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[1].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCTLALL_1);
1068474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[1].cmd[TEX_CMD_1_NEWDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_1);
1069474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[2].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCTLALL_2);
1070474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[2].cmd[TEX_CMD_1_NEWDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_2);
1071474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[3].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCTLALL_3);
1072474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[3].cmd[TEX_CMD_1_NEWDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_3);
1073474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[4].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCTLALL_4);
1074474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[4].cmd[TEX_CMD_1_NEWDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_4);
1075474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[5].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCTLALL_5);
1076474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[5].cmd[TEX_CMD_1_NEWDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_5);
1077f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger   } else {
1078474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[0].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXFILTER_0);
1079474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[0].cmd[TEX_CMD_1_OLDDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_0);
1080474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[1].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXFILTER_1);
1081474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[1].cmd[TEX_CMD_1_OLDDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_1);
1082474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[2].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXFILTER_2);
1083474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[2].cmd[TEX_CMD_1_OLDDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_2);
1084474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[3].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXFILTER_3);
1085474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[3].cmd[TEX_CMD_1_OLDDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_3);
1086474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[4].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXFILTER_4);
1087474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[4].cmd[TEX_CMD_1_OLDDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_4);
1088474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[5].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXFILTER_5);
1089474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie      rmesa->hw.tex[5].cmd[TEX_CMD_1_OLDDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_5);
1090474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   }
1091474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.afs[0].cmd[AFS_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_AFS_0);
1092474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.afs[1].cmd[AFS_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_AFS_1);
1093474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.pvs.cmd[PVS_CMD_0] = cmdpkt(rmesa, R200_EMIT_VAP_PVS_CNTL);
1094474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[0].cmd[CUBE_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_FACES_0);
1095474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[0].cmd[CUBE_CMD_1] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_OFFSETS_0);
1096474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[1].cmd[CUBE_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_FACES_1);
1097474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[1].cmd[CUBE_CMD_1] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_OFFSETS_1);
1098474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[2].cmd[CUBE_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_FACES_2);
1099474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[2].cmd[CUBE_CMD_1] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_OFFSETS_2);
1100474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[3].cmd[CUBE_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_FACES_3);
1101474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[3].cmd[CUBE_CMD_1] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_OFFSETS_3);
1102474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[4].cmd[CUBE_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_FACES_4);
1103474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[4].cmd[CUBE_CMD_1] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_OFFSETS_4);
1104474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[5].cmd[CUBE_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_FACES_5);
1105474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.cube[5].cmd[CUBE_CMD_1] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_OFFSETS_5);
1106474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.pix[0].cmd[PIX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCBLEND_0);
1107474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.pix[1].cmd[PIX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCBLEND_1);
1108474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.pix[2].cmd[PIX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCBLEND_2);
1109474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.pix[3].cmd[PIX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCBLEND_3);
1110474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.pix[4].cmd[PIX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCBLEND_4);
1111474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.pix[5].cmd[PIX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCBLEND_5);
1112474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.zbs.cmd[ZBS_CMD_0] = cmdpkt(rmesa, RADEON_EMIT_SE_ZBIAS_FACTOR);
1113474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.tcl.cmd[TCL_CMD_0] = cmdpkt(rmesa, R200_EMIT_TCL_LIGHT_MODEL_CTL_0);
1114474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.tcl.cmd[TCL_CMD_1] = cmdpkt(rmesa, R200_EMIT_TCL_UCP_VERT_BLEND_CTL);
1115474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.tcg.cmd[TCG_CMD_0] = cmdpkt(rmesa, R200_EMIT_TEX_PROC_CTL_2);
1116474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.msl.cmd[MSL_CMD_0] = cmdpkt(rmesa, R200_EMIT_MATRIX_SELECT_0);
1117474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.vap.cmd[VAP_CMD_0] = cmdpkt(rmesa, R200_EMIT_VAP_CTL);
1118474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.vtx.cmd[VTX_CMD_0] = cmdpkt(rmesa, R200_EMIT_VTX_FMT_0);
1119474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.vtx.cmd[VTX_CMD_1] = cmdpkt(rmesa, R200_EMIT_OUTPUT_VTX_COMP_SEL);
1120474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.vtx.cmd[VTX_CMD_2] = cmdpkt(rmesa, R200_EMIT_SE_VTX_STATE_CNTL);
1121474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.vte.cmd[VTE_CMD_0] = cmdpkt(rmesa, R200_EMIT_VTE_CNTL);
1122474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.prf.cmd[PRF_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TRI_PERF_CNTL);
1123474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie   rmesa->hw.spr.cmd[SPR_CMD_0] = cmdpkt(rmesa, R200_EMIT_TCL_POINT_SPRITE_CNTL);
1124dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen
1125dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen   rmesa->hw.sci.cmd[SCI_CMD_0] = CP_PACKET0(R200_RE_AUX_SCISSOR_CNTL, 0);
1126dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen   rmesa->hw.sci.cmd[SCI_CMD_1] = CP_PACKET0(R200_RE_TOP_LEFT, 0);
1127dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen   rmesa->hw.sci.cmd[SCI_CMD_2] = CP_PACKET0(R200_RE_WIDTH_HEIGHT, 0);
1128dbf59de6d2f8be526e97af6c768622e6ca3cf6b1Pauli Nieminen
11292b5618fc5bdcbee3434f8b5aa3a31eb06fb479c0Alex Deucher   rmesa->hw.stp.cmd[STP_CMD_0] = CP_PACKET0(RADEON_RE_STIPPLE_ADDR, 0);
11302b5618fc5bdcbee3434f8b5aa3a31eb06fb479c0Alex Deucher   rmesa->hw.stp.cmd[STP_DATA_0] = 0;
11312b5618fc5bdcbee3434f8b5aa3a31eb06fb479c0Alex Deucher   rmesa->hw.stp.cmd[STP_CMD_1] = CP_PACKET0_ONE(RADEON_RE_STIPPLE_DATA, 31);
11327d361537661b93a501c9533271458a41b965ea79Dave Airlie
11332b5618fc5bdcbee3434f8b5aa3a31eb06fb479c0Alex Deucher   if (rmesa->radeon.radeonScreen->kernel_mm) {
11340f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen        rmesa->hw.mtl[0].emit = mtl_emit;
11350f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen        rmesa->hw.mtl[1].emit = mtl_emit;
11360f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
11370f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen        rmesa->hw.vpi[0].emit = veclinear_emit;
11380f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen        rmesa->hw.vpi[1].emit = veclinear_emit;
11390f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen        rmesa->hw.vpp[0].emit = veclinear_emit;
11400f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen        rmesa->hw.vpp[1].emit = veclinear_emit;
11410f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen
11420f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen        rmesa->hw.grd.emit = scl_emit;
11430f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen        rmesa->hw.fog.emit = vec_emit;
11440f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen        rmesa->hw.glt.emit = vec_emit;
11450f41259eff62e341e9bfe6ec39f2a7fb8f1c7656Pauli Nieminen        rmesa->hw.eye.emit = vec_emit;
1146474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
1147474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie	for (i = R200_MTX_MV; i <= R200_MTX_TEX5; i++)
1148474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie	  rmesa->hw.mat[i].emit = vec_emit;
1149474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
1150474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie	for (i = 0; i < 8; i++)
1151474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie	  rmesa->hw.lit[i].emit = lit_emit;
1152474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
1153474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie	for (i = 0; i < 6; i++)
1154474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie	  rmesa->hw.ucp[i].emit = vec_emit;
1155474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
1156474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie	rmesa->hw.ptp.emit = ptp_emit;
1157f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger   }
1158474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
1159474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
1160474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie
1161adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.mtl[0].cmd[MTL_CMD_0] =
1162adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_MAT_0_EMISS, 1, 16 );
1163adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.mtl[0].cmd[MTL_CMD_1] =
1164adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdscl2( R200_SS_MAT_0_SHININESS, 1, 1 );
1165a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger   rmesa->hw.mtl[1].cmd[MTL_CMD_0] =
1166a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger      cmdvec( R200_VS_MAT_1_EMISS, 1, 16 );
1167a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger   rmesa->hw.mtl[1].cmd[MTL_CMD_1] =
1168a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger      cmdscl2( R200_SS_MAT_1_SHININESS, 1, 1 );
1169a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger
117098c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   rmesa->hw.vpi[0].cmd[VPI_CMD_0] =
117198c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      cmdveclinear( R200_PVS_PROG0, 64 );
117298c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   rmesa->hw.vpi[1].cmd[VPI_CMD_0] =
117398c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      cmdveclinear( R200_PVS_PROG1, 64 );
117498c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   rmesa->hw.vpp[0].cmd[VPP_CMD_0] =
117598c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      cmdveclinear( R200_PVS_PARAM0, 96 );
117698c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   rmesa->hw.vpp[1].cmd[VPP_CMD_0] =
117798c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      cmdveclinear( R200_PVS_PARAM1, 96 );
117898c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger
1179adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.grd.cmd[GRD_CMD_0] =
1180adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdscl( R200_SS_VERT_GUARD_CLIP_ADJ_ADDR, 1, 4 );
1181adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.fog.cmd[FOG_CMD_0] =
1182adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_FOG_PARAM_ADDR, 1, 4 );
1183adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.glt.cmd[GLT_CMD_0] =
1184adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_GLOBAL_AMBIENT_ADDR, 1, 4 );
1185adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.eye.cmd[EYE_CMD_0] =
1186adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_EYE_VECTOR_ADDR, 1, 4 );
1187adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1188adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.mat[R200_MTX_MV].cmd[MAT_CMD_0] =
1189adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_MATRIX_0_MV, 1, 16);
1190adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.mat[R200_MTX_IMV].cmd[MAT_CMD_0] =
1191adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_MATRIX_1_INV_MV, 1, 16);
1192adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.mat[R200_MTX_MVP].cmd[MAT_CMD_0] =
1193adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_MATRIX_2_MVP, 1, 16);
1194adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.mat[R200_MTX_TEX0].cmd[MAT_CMD_0] =
1195adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_MATRIX_3_TEX0, 1, 16);
1196adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.mat[R200_MTX_TEX1].cmd[MAT_CMD_0] =
1197adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_MATRIX_4_TEX1, 1, 16);
119848ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   rmesa->hw.mat[R200_MTX_TEX2].cmd[MAT_CMD_0] =
119948ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      cmdvec( R200_VS_MATRIX_5_TEX2, 1, 16);
120048ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   rmesa->hw.mat[R200_MTX_TEX3].cmd[MAT_CMD_0] =
120148ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      cmdvec( R200_VS_MATRIX_6_TEX3, 1, 16);
120248ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   rmesa->hw.mat[R200_MTX_TEX4].cmd[MAT_CMD_0] =
120348ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      cmdvec( R200_VS_MATRIX_7_TEX4, 1, 16);
120448ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   rmesa->hw.mat[R200_MTX_TEX5].cmd[MAT_CMD_0] =
120548ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      cmdvec( R200_VS_MATRIX_8_TEX5, 1, 16);
1206adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1207adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   for (i = 0 ; i < 8; i++) {
1208adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.lit[i].cmd[LIT_CMD_0] =
1209adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell	 cmdvec( R200_VS_LIGHT_AMBIENT_ADDR + i, 8, 24 );
1210adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.lit[i].cmd[LIT_CMD_1] =
1211adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell	 cmdscl( R200_SS_LIGHT_DCD_ADDR + i, 8, 7 );
1212adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   }
1213adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1214adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   for (i = 0 ; i < 6; i++) {
1215adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.ucp[i].cmd[UCP_CMD_0] =
1216adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell	 cmdvec( R200_VS_UCP_ADDR + i, 1, 4 );
1217adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   }
1218adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1219cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_CMD_0] =
1220cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger      cmdvec( R200_VS_PNT_SPRITE_VPORT_SCALE, 1, 4 );
1221cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_CMD_1] =
1222cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger      cmdvec( R200_VS_PNT_SPRITE_ATT_CONST, 1, 12 );
1223cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger
1224adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Initial Harware state:
1225adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
1226adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.ctx.cmd[CTX_PP_MISC] = (R200_ALPHA_TEST_PASS
1227adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     /* | R200_RIGHT_HAND_CUBE_OGL*/);
1228adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1229adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.ctx.cmd[CTX_PP_FOG_COLOR] = (R200_FOG_VERTEX |
1230adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					  R200_FOG_USE_SPEC_ALPHA);
1231adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1232adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.ctx.cmd[CTX_RE_SOLID_COLOR] = 0x00000000;
1233adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1234adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.ctx.cmd[CTX_RB3D_BLENDCNTL] = (R200_COMB_FCN_ADD_CLAMP |
1235033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger				(R200_BLEND_GL_ONE << R200_SRC_BLEND_SHIFT) |
1236033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger				(R200_BLEND_GL_ZERO << R200_DST_BLEND_SHIFT));
1237033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger
12384637235183b80963536f2364e4d50fcb894886ddDave Airlie   if (rmesa->radeon.radeonScreen->drmSupportsBlendColor) {
1239033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger      rmesa->hw.ctx.cmd[CTX_RB3D_BLENDCOLOR] = 0x00000000;
1240033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger      rmesa->hw.ctx.cmd[CTX_RB3D_ABLENDCNTL] = (R200_COMB_FCN_ADD_CLAMP |
1241033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger				(R200_BLEND_GL_ONE << R200_SRC_BLEND_SHIFT) |
1242033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger				(R200_BLEND_GL_ZERO << R200_DST_BLEND_SHIFT));
1243033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger      rmesa->hw.ctx.cmd[CTX_RB3D_CBLENDCNTL] = (R200_COMB_FCN_ADD_CLAMP |
1244033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger				(R200_BLEND_GL_ONE << R200_SRC_BLEND_SHIFT) |
1245033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger				(R200_BLEND_GL_ZERO << R200_DST_BLEND_SHIFT));
1246033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger   }
1247adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1248adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.ctx.cmd[CTX_RB3D_DEPTHOFFSET] =
12494637235183b80963536f2364e4d50fcb894886ddDave Airlie      rmesa->radeon.radeonScreen->depthOffset + rmesa->radeon.radeonScreen->fbLocation;
1250adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1251adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.ctx.cmd[CTX_RB3D_DEPTHPITCH] =
12524637235183b80963536f2364e4d50fcb894886ddDave Airlie      ((rmesa->radeon.radeonScreen->depthPitch &
1253adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell	R200_DEPTHPITCH_MASK) |
1254adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_DEPTH_ENDIAN_NO_SWAP);
1255b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger
1256b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger   if (rmesa->using_hyperz)
1257b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger      rmesa->hw.ctx.cmd[CTX_RB3D_DEPTHPITCH] |= R200_DEPTH_HYPERZ;
1258adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1259e267a090ab7be5dbd9a40887726e6ae696bc7be3Dave Airlie   rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] = (R200_Z_TEST_LESS |
1260adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					       R200_STENCIL_TEST_ALWAYS |
1261adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					       R200_STENCIL_FAIL_KEEP |
1262adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					       R200_STENCIL_ZPASS_KEEP |
1263adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					       R200_STENCIL_ZFAIL_KEEP |
1264adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					       R200_Z_WRITE_ENABLE);
1265adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1266b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger   if (rmesa->using_hyperz) {
1267b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger      rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= R200_Z_COMPRESSION_ENABLE |
1268b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger						  R200_Z_DECOMPRESSION_ENABLE;
12694637235183b80963536f2364e4d50fcb894886ddDave Airlie/*      if (rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_R200)
1270b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger	 rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= RADEON_Z_HIERARCHY_ENABLE;*/
1271b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger   }
1272b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger
1273adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.ctx.cmd[CTX_PP_CNTL] = (R200_ANTI_ALIAS_NONE
1274adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 				     | R200_TEX_BLEND_0_ENABLE);
1275adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
12764637235183b80963536f2364e4d50fcb894886ddDave Airlie   switch ( driQueryOptioni( &rmesa->radeon.optionCache, "dither_mode" ) ) {
1277273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane   case DRI_CONF_DITHER_XERRORDIFFRESET:
1278273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane      rmesa->hw.ctx.cmd[CTX_RB3D_CNTL] |= R200_DITHER_INIT;
1279273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane      break;
1280273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane   case DRI_CONF_DITHER_ORDERED:
1281273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane      rmesa->hw.ctx.cmd[CTX_RB3D_CNTL] |= R200_SCALE_DITHER_ENABLE;
1282273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane      break;
1283273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane   }
12844637235183b80963536f2364e4d50fcb894886ddDave Airlie   if ( driQueryOptioni( &rmesa->radeon.optionCache, "round_mode" ) ==
1285273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane	DRI_CONF_ROUND_ROUND )
1286d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->radeon.state.color.roundEnable = R200_ROUND_ENABLE;
1287273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane   else
1288d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->radeon.state.color.roundEnable = 0;
12894637235183b80963536f2364e4d50fcb894886ddDave Airlie   if ( driQueryOptioni (&rmesa->radeon.optionCache, "color_reduction" ) ==
1290273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane	DRI_CONF_COLOR_REDUCTION_DITHER )
1291273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane      rmesa->hw.ctx.cmd[CTX_RB3D_CNTL] |= R200_DITHER_ENABLE;
1292273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane   else
1293d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->hw.ctx.cmd[CTX_RB3D_CNTL] |= rmesa->radeon.state.color.roundEnable;
1294273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane
1295fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger   rmesa->hw.prf.cmd[PRF_PP_TRI_PERF] = R200_TRI_CUTOFF_MASK - R200_TRI_CUTOFF_MASK *
12964637235183b80963536f2364e4d50fcb894886ddDave Airlie			driQueryOptionf (&rmesa->radeon.optionCache,"texture_blend_quality");
1297fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger   rmesa->hw.prf.cmd[PRF_PP_PERF_CNTL] = 0;
1298fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger
1299adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.set.cmd[SET_SE_CNTL] = (R200_FFACE_CULL_CCW |
1300adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_BFACE_SOLID |
1301adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_FFACE_SOLID |
1302adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_FLAT_SHADE_VTX_LAST |
1303adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_DIFFUSE_SHADE_GOURAUD |
1304adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_ALPHA_SHADE_GOURAUD |
1305adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_SPECULAR_SHADE_GOURAUD |
1306adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_FOG_SHADE_GOURAUD |
1307cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger				     R200_DISC_FOG_SHADE_GOURAUD |
1308adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_VTX_PIX_CENTER_OGL |
1309adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_ROUND_MODE_TRUNC |
1310adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_ROUND_PREC_8TH_PIX);
1311adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1312adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.set.cmd[SET_RE_CNTL] = (R200_PERSPECTIVE_ENABLE |
1313adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_SCISSOR_ENABLE);
1314adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1315adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.lin.cmd[LIN_RE_LINE_PATTERN] = ((1 << 16) | 0xffff);
1316adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1317adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.lin.cmd[LIN_RE_LINE_STATE] =
1318adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ((0 << R200_LINE_CURRENT_PTR_SHIFT) |
1319adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (1 << R200_LINE_CURRENT_COUNT_SHIFT));
1320adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1321adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.lin.cmd[LIN_SE_LINE_WIDTH] = (1 << 4);
1322adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1323adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msk.cmd[MSK_RB3D_STENCILREFMASK] =
1324adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ((0x00 << R200_STENCIL_REF_SHIFT) |
1325adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (0xff << R200_STENCIL_MASK_SHIFT) |
1326adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (0xff << R200_STENCIL_WRITEMASK_SHIFT));
1327adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1328adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msk.cmd[MSK_RB3D_ROPCNTL] = R200_ROP_COPY;
1329adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msk.cmd[MSK_RB3D_PLANEMASK] = 0xffffffff;
1330adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1331adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tam.cmd[TAM_DEBUG3] = 0;
1332adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1333adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msc.cmd[MSC_RE_MISC] =
1334adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ((0 << R200_STIPPLE_X_OFFSET_SHIFT) |
1335adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (0 << R200_STIPPLE_Y_OFFSET_SHIFT) |
1336adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_STIPPLE_BIG_BIT_ORDER);
1337adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1338adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1339adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_PP_CNTL_X] = 0;
1340adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_RB3D_DEPTHXY_OFFSET] = 0;
1341adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_RE_AUX_SCISSOR_CNTL] = 0x0;
1342adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_RE_SCISSOR_TL_0] = 0;
1343adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_RE_SCISSOR_BR_0] = 0;
1344adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_SE_VAP_CNTL_STATUS] =
1345adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#ifdef MESA_BIG_ENDIAN
1346adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell						R200_VC_32BIT_SWAP;
1347adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#else
1348adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell						R200_VC_NO_SWAP;
1349adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#endif
135010095c9024efb1767fb3df0b59672299c090ad10Eric Anholt
13514637235183b80963536f2364e4d50fcb894886ddDave Airlie   if (!(rmesa->radeon.radeonScreen->chip_flags & RADEON_CHIPSET_TCL)) {
135210095c9024efb1767fb3df0b59672299c090ad10Eric Anholt      /* Bypass TCL */
135310095c9024efb1767fb3df0b59672299c090ad10Eric Anholt      rmesa->hw.cst.cmd[CST_SE_VAP_CNTL_STATUS] |= (1<<8);
135410095c9024efb1767fb3df0b59672299c090ad10Eric Anholt   }
135510095c9024efb1767fb3df0b59672299c090ad10Eric Anholt
135644dace86eaf9eded8e6465adfadf6345658686ddRoland Scheidegger   rmesa->hw.cst.cmd[CST_RE_POINTSIZE] =
135744dace86eaf9eded8e6465adfadf6345658686ddRoland Scheidegger      (((GLuint)(ctx->Const.MaxPointSize * 16.0)) << R200_MAXPOINTSIZE_SHIFT) | 0x10;
1358adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_SE_TCL_INPUT_VTX_0] =
1359adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x0 << R200_VERTEX_POSITION_ADDR__SHIFT);
1360adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_SE_TCL_INPUT_VTX_1] =
1361adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x02 << R200_VTX_COLOR_0_ADDR__SHIFT) |
1362adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x03 << R200_VTX_COLOR_1_ADDR__SHIFT);
1363adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_SE_TCL_INPUT_VTX_2] =
1364adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x06 << R200_VTX_TEX_0_ADDR__SHIFT) |
1365adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x07 << R200_VTX_TEX_1_ADDR__SHIFT) |
1366adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x08 << R200_VTX_TEX_2_ADDR__SHIFT) |
1367adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x09 << R200_VTX_TEX_3_ADDR__SHIFT);
1368adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_SE_TCL_INPUT_VTX_3] =
1369adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x0A << R200_VTX_TEX_4_ADDR__SHIFT) |
1370adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x0B << R200_VTX_TEX_5_ADDR__SHIFT);
1371adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1372adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1373adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vpt.cmd[VPT_SE_VPORT_XSCALE]  = 0x00000000;
1374adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vpt.cmd[VPT_SE_VPORT_XOFFSET] = 0x00000000;
1375adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vpt.cmd[VPT_SE_VPORT_YSCALE]  = 0x00000000;
1376adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vpt.cmd[VPT_SE_VPORT_YOFFSET] = 0x00000000;
1377adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vpt.cmd[VPT_SE_VPORT_ZSCALE]  = 0x00000000;
1378adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vpt.cmd[VPT_SE_VPORT_ZOFFSET] = 0x00000000;
1379adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1380adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   for ( i = 0 ; i < ctx->Const.MaxTextureUnits ; i++ ) {
1381adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.tex[i].cmd[TEX_PP_TXFILTER] = R200_BORDER_MODE_OGL;
1382adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.tex[i].cmd[TEX_PP_TXFORMAT] =
1383adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell         ((i << R200_TXFORMAT_ST_ROUTE_SHIFT) |  /* <-- note i */
1384adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell          (2 << R200_TXFORMAT_WIDTH_SHIFT) |
1385adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell          (2 << R200_TXFORMAT_HEIGHT_SHIFT));
1386adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.tex[i].cmd[TEX_PP_BORDER_COLOR] = 0;
1387adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.tex[i].cmd[TEX_PP_TXFORMAT_X] =
1388adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell         (/* R200_TEXCOORD_PROJ | */
138976a9831b2b20d59c49b5f25ba5275f17b4e2067bPauli Nieminen          R200_LOD_BIAS_CORRECTION);	/* Small default bias */
13904637235183b80963536f2364e4d50fcb894886ddDave Airlie      if (rmesa->radeon.radeonScreen->drmSupportsFragShader) {
1391f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	 rmesa->hw.tex[i].cmd[TEX_PP_TXOFFSET_NEWDRM] =
13924637235183b80963536f2364e4d50fcb894886ddDave Airlie	     rmesa->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP];
1393f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	 rmesa->hw.tex[i].cmd[TEX_PP_CUBIC_FACES] = 0;
1394f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	 rmesa->hw.tex[i].cmd[TEX_PP_TXMULTI_CTL] = 0;
1395f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      }
1396f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      else {
1397f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	  rmesa->hw.tex[i].cmd[TEX_PP_TXOFFSET_OLDDRM] =
13984637235183b80963536f2364e4d50fcb894886ddDave Airlie	     rmesa->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP];
1399f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger     }
1400adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1401adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_FACES] = 0;
1402067603db91072fc3b02e1583195641972f81168fMichel Dänzer      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_OFFSET_F1] =
14034637235183b80963536f2364e4d50fcb894886ddDave Airlie         rmesa->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP];
1404067603db91072fc3b02e1583195641972f81168fMichel Dänzer      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_OFFSET_F2] =
14054637235183b80963536f2364e4d50fcb894886ddDave Airlie         rmesa->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP];
1406067603db91072fc3b02e1583195641972f81168fMichel Dänzer      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_OFFSET_F3] =
14074637235183b80963536f2364e4d50fcb894886ddDave Airlie         rmesa->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP];
1408067603db91072fc3b02e1583195641972f81168fMichel Dänzer      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_OFFSET_F4] =
14094637235183b80963536f2364e4d50fcb894886ddDave Airlie         rmesa->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP];
1410067603db91072fc3b02e1583195641972f81168fMichel Dänzer      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_OFFSET_F5] =
14114637235183b80963536f2364e4d50fcb894886ddDave Airlie         rmesa->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP];
1412adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
14131bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger      rmesa->hw.pix[i].cmd[PIX_PP_TXCBLEND] =
14141bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger         (R200_TXC_ARG_A_ZERO |
14151bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXC_ARG_B_ZERO |
14161bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXC_ARG_C_DIFFUSE_COLOR |
14171bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXC_OP_MADD);
14181bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger
14191bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger      rmesa->hw.pix[i].cmd[PIX_PP_TXCBLEND2] =
14201bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger         ((i << R200_TXC_TFACTOR_SEL_SHIFT) |
14211bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXC_SCALE_1X |
14221bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXC_CLAMP_0_1 |
14231bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXC_OUTPUT_REG_R0);
14241bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger
14251bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger      rmesa->hw.pix[i].cmd[PIX_PP_TXABLEND] =
14261bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger         (R200_TXA_ARG_A_ZERO |
14271bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXA_ARG_B_ZERO |
14281bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXA_ARG_C_DIFFUSE_ALPHA |
14291bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXA_OP_MADD);
14301bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger
14311bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger      rmesa->hw.pix[i].cmd[PIX_PP_TXABLEND2] =
14321bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger         ((i << R200_TXA_TFACTOR_SEL_SHIFT) |
14331bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXA_SCALE_1X |
14341bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXA_CLAMP_0_1 |
14351bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXA_OUTPUT_REG_R0);
14361bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger   }
1437adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1438adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tf.cmd[TF_TFACTOR_0] = 0;
1439adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tf.cmd[TF_TFACTOR_1] = 0;
1440adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tf.cmd[TF_TFACTOR_2] = 0;
1441adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tf.cmd[TF_TFACTOR_3] = 0;
1442adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tf.cmd[TF_TFACTOR_4] = 0;
1443adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tf.cmd[TF_TFACTOR_5] = 0;
1444adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1445adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vap.cmd[VAP_SE_VAP_CNTL] =
1446adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (R200_VAP_TCL_ENABLE |
1447adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (0x9 << R200_VAP_VF_MAX_VTX_NUM__SHIFT));
1448adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1449adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vte.cmd[VTE_SE_VTE_CNTL] =
1450adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (R200_VPORT_X_SCALE_ENA |
1451adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_VPORT_Y_SCALE_ENA |
1452adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_VPORT_Z_SCALE_ENA |
1453adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_VPORT_X_OFFSET_ENA |
1454adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_VPORT_Y_OFFSET_ENA |
1455adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_VPORT_Z_OFFSET_ENA |
1456adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* FIXME: Turn on for tex rect only */
1457adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_VTX_ST_DENORMALIZED |
1458adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_VTX_W0_FMT);
1459adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1460adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1461adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vtx.cmd[VTX_VTXFMT_0] = 0;
1462adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vtx.cmd[VTX_VTXFMT_1] = 0;
1463adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vtx.cmd[VTX_TCL_OUTPUT_VTXFMT_0] =
1464adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ((R200_VTX_Z0 | R200_VTX_W0 |
1465adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (R200_VTX_FP_RGBA << R200_VTX_COLOR_0_SHIFT)));
1466adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vtx.cmd[VTX_TCL_OUTPUT_VTXFMT_1] = 0;
1467adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vtx.cmd[VTX_TCL_OUTPUT_COMPSEL] = (R200_OUTPUT_XYZW);
1468adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vtx.cmd[VTX_STATE_CNTL] = R200_VSC_UPDATE_USER_COLOR_0_ENABLE;
1469adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1470adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1471adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Matrix selection */
1472adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msl.cmd[MSL_MATRIX_SELECT_0] =
1473adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (R200_MTX_MV << R200_MODELVIEW_0_SHIFT);
1474adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1475adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msl.cmd[MSL_MATRIX_SELECT_1] =
1476adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (R200_MTX_IMV << R200_IT_MODELVIEW_0_SHIFT);
1477adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1478adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msl.cmd[MSL_MATRIX_SELECT_2] =
1479adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (R200_MTX_MVP << R200_MODELPROJECT_0_SHIFT);
1480adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1481adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msl.cmd[MSL_MATRIX_SELECT_3] =
1482adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ((R200_MTX_TEX0 << R200_TEXMAT_0_SHIFT) |
1483adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (R200_MTX_TEX1 << R200_TEXMAT_1_SHIFT) |
1484adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (R200_MTX_TEX2 << R200_TEXMAT_2_SHIFT) |
1485adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (R200_MTX_TEX3 << R200_TEXMAT_3_SHIFT));
1486adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1487adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msl.cmd[MSL_MATRIX_SELECT_4] =
1488adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ((R200_MTX_TEX4 << R200_TEXMAT_4_SHIFT) |
1489adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (R200_MTX_TEX5 << R200_TEXMAT_5_SHIFT));
1490adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1491adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1492adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* General TCL state */
1493adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcl.cmd[TCL_LIGHT_MODEL_CTL_0] =
1494adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (R200_SPECULAR_LIGHTS |
1495adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_DIFFUSE_SPECULAR_COMBINE |
1496a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       R200_LOCAL_LIGHT_VEC_GL |
1497a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       R200_LM0_SOURCE_MATERIAL_0 << R200_FRONT_SHININESS_SOURCE_SHIFT |
1498a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       R200_LM0_SOURCE_MATERIAL_1 << R200_BACK_SHININESS_SOURCE_SHIFT);
1499adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1500adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcl.cmd[TCL_LIGHT_MODEL_CTL_1] =
1501a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger      ((R200_LM1_SOURCE_MATERIAL_0 << R200_FRONT_EMISSIVE_SOURCE_SHIFT) |
1502a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       (R200_LM1_SOURCE_MATERIAL_0 << R200_FRONT_AMBIENT_SOURCE_SHIFT) |
1503a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       (R200_LM1_SOURCE_MATERIAL_0 << R200_FRONT_DIFFUSE_SOURCE_SHIFT) |
1504a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       (R200_LM1_SOURCE_MATERIAL_0 << R200_FRONT_SPECULAR_SOURCE_SHIFT) |
1505a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       (R200_LM1_SOURCE_MATERIAL_1 << R200_BACK_EMISSIVE_SOURCE_SHIFT) |
1506a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       (R200_LM1_SOURCE_MATERIAL_1 << R200_BACK_AMBIENT_SOURCE_SHIFT) |
1507a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       (R200_LM1_SOURCE_MATERIAL_1 << R200_BACK_DIFFUSE_SOURCE_SHIFT) |
1508a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       (R200_LM1_SOURCE_MATERIAL_1 << R200_BACK_SPECULAR_SOURCE_SHIFT));
1509adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1510adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcl.cmd[TCL_PER_LIGHT_CTL_0] = 0; /* filled in via callbacks */
1511adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcl.cmd[TCL_PER_LIGHT_CTL_1] = 0;
1512adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcl.cmd[TCL_PER_LIGHT_CTL_2] = 0;
1513adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcl.cmd[TCL_PER_LIGHT_CTL_3] = 0;
1514adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1515adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcl.cmd[TCL_UCP_VERT_BLEND_CTL] =
1516adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (R200_UCP_IN_CLIP_SPACE |
1517adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_CULL_FRONT_IS_CCW);
1518adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1519adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Texgen/Texmat state */
1520b1ebd306bf4fdc4076d3d3daa410b08f477cb4c4Eric Anholt   rmesa->hw.tcg.cmd[TCG_TEX_PROC_CTL_2] = 0x00ffffff;
1521adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcg.cmd[TCG_TEX_PROC_CTL_3] =
1522adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ((0 << R200_TEXGEN_0_INPUT_TEX_SHIFT) |
1523adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (1 << R200_TEXGEN_1_INPUT_TEX_SHIFT) |
1524adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (2 << R200_TEXGEN_2_INPUT_TEX_SHIFT) |
1525adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (3 << R200_TEXGEN_3_INPUT_TEX_SHIFT) |
1526adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (4 << R200_TEXGEN_4_INPUT_TEX_SHIFT) |
1527adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (5 << R200_TEXGEN_5_INPUT_TEX_SHIFT));
1528adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcg.cmd[TCG_TEX_PROC_CTL_0] = 0;
1529adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcg.cmd[TCG_TEX_PROC_CTL_1] =
1530adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ((0 << R200_TEXGEN_0_INPUT_SHIFT) |
1531adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (1 << R200_TEXGEN_1_INPUT_SHIFT) |
1532adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (2 << R200_TEXGEN_2_INPUT_SHIFT) |
1533adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (3 << R200_TEXGEN_3_INPUT_SHIFT) |
1534adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (4 << R200_TEXGEN_4_INPUT_SHIFT) |
1535adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (5 << R200_TEXGEN_5_INPUT_SHIFT));
1536adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcg.cmd[TCG_TEX_CYL_WRAP_CTL] = 0;
1537adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1538adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1539adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   for (i = 0 ; i < 8; i++) {
1540adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      struct gl_light *l = &ctx->Light.Light[i];
1541adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      GLenum p = GL_LIGHT0 + i;
1542adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      *(float *)&(rmesa->hw.lit[i].cmd[LIT_RANGE_CUTOFF]) = FLT_MAX;
1543adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1544adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.Lightfv( ctx, p, GL_AMBIENT, l->Ambient );
1545adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.Lightfv( ctx, p, GL_DIFFUSE, l->Diffuse );
1546adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.Lightfv( ctx, p, GL_SPECULAR, l->Specular );
15470846e52d46b36c411f79908df010072e03bb6437Brian Paul      ctx->Driver.Lightfv( ctx, p, GL_POSITION, NULL );
15480846e52d46b36c411f79908df010072e03bb6437Brian Paul      ctx->Driver.Lightfv( ctx, p, GL_SPOT_DIRECTION, NULL );
1549adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.Lightfv( ctx, p, GL_SPOT_EXPONENT, &l->SpotExponent );
1550adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.Lightfv( ctx, p, GL_SPOT_CUTOFF, &l->SpotCutoff );
1551adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.Lightfv( ctx, p, GL_CONSTANT_ATTENUATION,
1552adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell			   &l->ConstantAttenuation );
1553adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.Lightfv( ctx, p, GL_LINEAR_ATTENUATION,
1554adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell			   &l->LinearAttenuation );
1555adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.Lightfv( ctx, p, GL_QUADRATIC_ATTENUATION,
1556bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl			   &l->QuadraticAttenuation );
15575d00e131d8a264498b8d050c3eded093ee5c42f2Michel Dänzer      *(float *)&(rmesa->hw.lit[i].cmd[LIT_ATTEN_XXX]) = 0.0;
1558adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   }
1559adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1560adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ctx->Driver.LightModelfv( ctx, GL_LIGHT_MODEL_AMBIENT,
1561adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell			     ctx->Light.Model.Ambient );
1562adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1563adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   TNL_CONTEXT(ctx)->Driver.NotifyMaterialChange( ctx );
1564adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1565adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   for (i = 0 ; i < 6; i++) {
1566adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.ClipPlane( ctx, GL_CLIP_PLANE0 + i, NULL );
1567adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   }
1568adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
15690846e52d46b36c411f79908df010072e03bb6437Brian Paul   ctx->Driver.Fogfv( ctx, GL_FOG_MODE, NULL );
1570adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ctx->Driver.Fogfv( ctx, GL_FOG_DENSITY, &ctx->Fog.Density );
1571adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ctx->Driver.Fogfv( ctx, GL_FOG_START, &ctx->Fog.Start );
1572adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ctx->Driver.Fogfv( ctx, GL_FOG_END, &ctx->Fog.End );
1573adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ctx->Driver.Fogfv( ctx, GL_FOG_COLOR, ctx->Fog.Color );
15740846e52d46b36c411f79908df010072e03bb6437Brian Paul   ctx->Driver.Fogfv( ctx, GL_FOG_COORDINATE_SOURCE_EXT, NULL );
1575adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1576adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.grd.cmd[GRD_VERT_GUARD_CLIP_ADJ] = IEEE_ONE;
1577adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.grd.cmd[GRD_VERT_GUARD_DISCARD_ADJ] = IEEE_ONE;
1578adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.grd.cmd[GRD_HORZ_GUARD_CLIP_ADJ] = IEEE_ONE;
1579adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.grd.cmd[GRD_HORZ_GUARD_DISCARD_ADJ] = IEEE_ONE;
1580adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1581adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.eye.cmd[EYE_X] = 0;
1582adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.eye.cmd[EYE_Y] = 0;
1583adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.eye.cmd[EYE_Z] = IEEE_ONE;
1584adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.eye.cmd[EYE_RESCALE_FACTOR] = IEEE_ONE;
1585adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1586cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.spr.cmd[SPR_POINT_SPRITE_CNTL] =
1587cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger      R200_PS_SE_SEL_STATE | R200_PS_MULT_CONST;
1588cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger
1589cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   /* ptp_eye is presumably used to calculate the attenuation wrt a different
1590cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger      location? In any case, since point attenuation triggers _needeyecoords,
1591cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger      it is constant. Probably ignored as long as R200_PS_USE_MODEL_EYE_VEC
1592cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger      isn't set */
1593cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_EYE_X] = 0;
1594cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_EYE_Y] = 0;
1595cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_EYE_Z] = IEEE_ONE | 0x80000000; /* -1.0 */
1596cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_EYE_3] = 0;
1597cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   /* no idea what the ptp_vport_scale values are good for, except the
1598cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger      PTSIZE one - hopefully doesn't matter */
1599cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_VPORT_SCALE_0] = IEEE_ONE;
1600cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_VPORT_SCALE_1] = IEEE_ONE;
1601cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_VPORT_SCALE_PTSIZE] = IEEE_ONE;
1602cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_VPORT_SCALE_3] = IEEE_ONE;
1603cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_ATT_CONST_QUAD] = 0;
1604cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_ATT_CONST_LIN] = 0;
1605cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_ATT_CONST_CON] = IEEE_ONE;
1606cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_ATT_CONST_3] = 0;
1607cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_CLAMP_MIN] = IEEE_ONE;
1608cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_CLAMP_MAX] = 0x44ffe000; /* 2047 */
1609cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_CLAMP_2] = 0;
1610cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_CLAMP_3] = 0;
161144dace86eaf9eded8e6465adfadf6345658686ddRoland Scheidegger
1612adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   r200LightingSpaceChange( ctx );
161344dace86eaf9eded8e6465adfadf6345658686ddRoland Scheidegger
1614b6df23d8b3e70d86433ba9fc4d87338e1063fe39Dave Airlie   if (rmesa->radeon.radeonScreen->kernel_mm) {
1615b6df23d8b3e70d86433ba9fc4d87338e1063fe39Dave Airlie      radeon_init_query_stateobj(&rmesa->radeon, R200_QUERYOBJ_CMDSIZE);
1616b6df23d8b3e70d86433ba9fc4d87338e1063fe39Dave Airlie      rmesa->radeon.query.queryobj.cmd[R200_QUERYOBJ_CMD_0] = CP_PACKET0(RADEON_RB3D_ZPASS_DATA, 0);
1617b6df23d8b3e70d86433ba9fc4d87338e1063fe39Dave Airlie      rmesa->radeon.query.queryobj.cmd[R200_QUERYOBJ_DATA_0] = 0;
1618b6df23d8b3e70d86433ba9fc4d87338e1063fe39Dave Airlie   }
1619b6df23d8b3e70d86433ba9fc4d87338e1063fe39Dave Airlie
16201090d206de011a67d236d8c4ae32d2d42b2f6337Dave Airlie   rmesa->radeon.hw.all_dirty = GL_TRUE;
1621ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie
16221090d206de011a67d236d8c4ae32d2d42b2f6337Dave Airlie   rcommonInitCmdBuf(&rmesa->radeon);
1623adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell}
1624