1 /* $XFree86: xc/lib/GL/mesa/src/drv/r200/r200_sanity.c,v 1.1 2002/10/30 12:51:52 alanh Exp $ */
2 /**************************************************************************
4 Copyright 2002 ATI Technologies Inc., Ontario, Canada, and
5 Tungsten Graphics Inc, Cedar Park, TX.
9 Permission is hereby granted, free of charge, to any person obtaining a
10 copy of this software and associated documentation files (the "Software"),
11 to deal in the Software without restriction, including without limitation
12 on the rights to use, copy, modify, merge, publish, distribute, sub
13 license, and/or sell copies of the Software, and to permit persons to whom
14 the Software is furnished to do so, subject to the following conditions:
16 The above copyright notice and this permission notice (including the next
17 paragraph) shall be included in all copies or substantial portions of the
20 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
23 ATI, TUNGSTEN GRAPHICS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
24 DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
25 OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
26 USE OR OTHER DEALINGS IN THE SOFTWARE.
28 **************************************************************************/
32 * Keith Whitwell <keith@tungstengraphics.com>
41 #include "r200_context.h"
42 #include "r200_ioctl.h"
43 #include "r200_sanity.h"
44 #include "radeon_reg.h"
47 /* Set this '1' to get more verbiage.
49 #define MORE_VERBOSE 1
52 #define VERBOSE (R200_DEBUG & DEBUG_VERBOSE)
56 #define NORMAL (R200_DEBUG & DEBUG_VERBOSE)
60 /* New (1.3) state mechanism. 3 commands (packet, scalar, vector) in
61 * 1.3 cmdbuffers allow all previous state to be updated as well as
62 * the tcl scalar and vector areas.
68 } packet
[RADEON_MAX_STATE_PACKETS
] = {
69 { RADEON_PP_MISC
,7,"RADEON_PP_MISC" },
70 { RADEON_PP_CNTL
,3,"RADEON_PP_CNTL" },
71 { RADEON_RB3D_COLORPITCH
,1,"RADEON_RB3D_COLORPITCH" },
72 { RADEON_RE_LINE_PATTERN
,2,"RADEON_RE_LINE_PATTERN" },
73 { RADEON_SE_LINE_WIDTH
,1,"RADEON_SE_LINE_WIDTH" },
74 { RADEON_PP_LUM_MATRIX
,1,"RADEON_PP_LUM_MATRIX" },
75 { RADEON_PP_ROT_MATRIX_0
,2,"RADEON_PP_ROT_MATRIX_0" },
76 { RADEON_RB3D_STENCILREFMASK
,3,"RADEON_RB3D_STENCILREFMASK" },
77 { RADEON_SE_VPORT_XSCALE
,6,"RADEON_SE_VPORT_XSCALE" },
78 { RADEON_SE_CNTL
,2,"RADEON_SE_CNTL" },
79 { RADEON_SE_CNTL_STATUS
,1,"RADEON_SE_CNTL_STATUS" },
80 { RADEON_RE_MISC
,1,"RADEON_RE_MISC" },
81 { RADEON_PP_TXFILTER_0
,6,"RADEON_PP_TXFILTER_0" },
82 { RADEON_PP_BORDER_COLOR_0
,1,"RADEON_PP_BORDER_COLOR_0" },
83 { RADEON_PP_TXFILTER_1
,6,"RADEON_PP_TXFILTER_1" },
84 { RADEON_PP_BORDER_COLOR_1
,1,"RADEON_PP_BORDER_COLOR_1" },
85 { RADEON_PP_TXFILTER_2
,6,"RADEON_PP_TXFILTER_2" },
86 { RADEON_PP_BORDER_COLOR_2
,1,"RADEON_PP_BORDER_COLOR_2" },
87 { RADEON_SE_ZBIAS_FACTOR
,2,"RADEON_SE_ZBIAS_FACTOR" },
88 { RADEON_SE_TCL_OUTPUT_VTX_FMT
,11,"RADEON_SE_TCL_OUTPUT_VTX_FMT" },
89 { RADEON_SE_TCL_MATERIAL_EMMISSIVE_RED
,17,"RADEON_SE_TCL_MATERIAL_EMMISSIVE_RED" },
90 { R200_PP_TXCBLEND_0
, 4, "R200_EMIT_PP_TXCBLEND_0" },
91 { R200_PP_TXCBLEND_1
, 4, "R200_PP_TXCBLEND_1" },
92 { R200_PP_TXCBLEND_2
, 4, "R200_PP_TXCBLEND_2" },
93 { R200_PP_TXCBLEND_3
, 4, "R200_PP_TXCBLEND_3" },
94 { R200_PP_TXCBLEND_4
, 4, "R200_PP_TXCBLEND_4" },
95 { R200_PP_TXCBLEND_5
, 4, "R200_PP_TXCBLEND_5" },
96 { R200_PP_TXCBLEND_6
, 4, "R200_PP_TXCBLEND_6" },
97 { R200_PP_TXCBLEND_7
, 4, "R200_PP_TXCBLEND_7" },
98 { R200_SE_TCL_LIGHT_MODEL_CTL_0
, 6, "R200_SE_TCL_LIGHT_MODEL_CTL_0" },
99 { R200_PP_TFACTOR_0
, 6, "R200_PP_TFACTOR_0" },
100 { R200_SE_VTX_FMT_0
, 4, "R200_SE_VTX_FMT_0" },
101 { R200_SE_VAP_CNTL
, 1, "R200_SE_VAP_CNTL" },
102 { R200_SE_TCL_MATRIX_SEL_0
, 5, "R200_SE_TCL_MATRIX_SEL_0" },
103 { R200_SE_TCL_TEX_PROC_CTL_2
, 5, "R200_SE_TCL_TEX_PROC_CTL_2" },
104 { R200_SE_TCL_UCP_VERT_BLEND_CTL
, 1, "R200_SE_TCL_UCP_VERT_BLEND_CTL" },
105 { R200_PP_TXFILTER_0
, 6, "R200_PP_TXFILTER_0" },
106 { R200_PP_TXFILTER_1
, 6, "R200_PP_TXFILTER_1" },
107 { R200_PP_TXFILTER_2
, 6, "R200_PP_TXFILTER_2" },
108 { R200_PP_TXFILTER_3
, 6, "R200_PP_TXFILTER_3" },
109 { R200_PP_TXFILTER_4
, 6, "R200_PP_TXFILTER_4" },
110 { R200_PP_TXFILTER_5
, 6, "R200_PP_TXFILTER_5" },
111 { R200_PP_TXOFFSET_0
, 1, "R200_PP_TXOFFSET_0" },
112 { R200_PP_TXOFFSET_1
, 1, "R200_PP_TXOFFSET_1" },
113 { R200_PP_TXOFFSET_2
, 1, "R200_PP_TXOFFSET_2" },
114 { R200_PP_TXOFFSET_3
, 1, "R200_PP_TXOFFSET_3" },
115 { R200_PP_TXOFFSET_4
, 1, "R200_PP_TXOFFSET_4" },
116 { R200_PP_TXOFFSET_5
, 1, "R200_PP_TXOFFSET_5" },
117 { R200_SE_VTE_CNTL
, 1, "R200_SE_VTE_CNTL" },
118 { R200_SE_TCL_OUTPUT_VTX_COMP_SEL
, 1, "R200_SE_TCL_OUTPUT_VTX_COMP_SEL" },
119 { R200_PP_TAM_DEBUG3
, 1, "R200_PP_TAM_DEBUG3" },
120 { R200_PP_CNTL_X
, 1, "R200_PP_CNTL_X" },
121 { R200_RB3D_DEPTHXY_OFFSET
, 1, "R200_RB3D_DEPTHXY_OFFSET" },
122 { R200_RE_AUX_SCISSOR_CNTL
, 1, "R200_RE_AUX_SCISSOR_CNTL" },
123 { R200_RE_SCISSOR_TL_0
, 2, "R200_RE_SCISSOR_TL_0" },
124 { R200_RE_SCISSOR_TL_1
, 2, "R200_RE_SCISSOR_TL_1" },
125 { R200_RE_SCISSOR_TL_2
, 2, "R200_RE_SCISSOR_TL_2" },
126 { R200_SE_VAP_CNTL_STATUS
, 1, "R200_SE_VAP_CNTL_STATUS" },
127 { R200_SE_VTX_STATE_CNTL
, 1, "R200_SE_VTX_STATE_CNTL" },
128 { R200_RE_POINTSIZE
, 1, "R200_RE_POINTSIZE" },
129 { R200_SE_TCL_INPUT_VTX_VECTOR_ADDR_0
, 4, "R200_SE_TCL_INPUT_VTX_VECTOR_ADDR_0" },
130 { R200_PP_CUBIC_FACES_0
, 1, "R200_PP_CUBIC_FACES_0" }, /* 61 */
131 { R200_PP_CUBIC_OFFSET_F1_0
, 5, "R200_PP_CUBIC_OFFSET_F1_0" }, /* 62 */
132 { R200_PP_CUBIC_FACES_1
, 1, "R200_PP_CUBIC_FACES_1" },
133 { R200_PP_CUBIC_OFFSET_F1_1
, 5, "R200_PP_CUBIC_OFFSET_F1_1" },
134 { R200_PP_CUBIC_FACES_2
, 1, "R200_PP_CUBIC_FACES_2" },
135 { R200_PP_CUBIC_OFFSET_F1_2
, 5, "R200_PP_CUBIC_OFFSET_F1_2" },
136 { R200_PP_CUBIC_FACES_3
, 1, "R200_PP_CUBIC_FACES_3" },
137 { R200_PP_CUBIC_OFFSET_F1_3
, 5, "R200_PP_CUBIC_OFFSET_F1_3" },
138 { R200_PP_CUBIC_FACES_4
, 1, "R200_PP_CUBIC_FACES_4" },
139 { R200_PP_CUBIC_OFFSET_F1_4
, 5, "R200_PP_CUBIC_OFFSET_F1_4" },
140 { R200_PP_CUBIC_FACES_5
, 1, "R200_PP_CUBIC_FACES_5" },
141 { R200_PP_CUBIC_OFFSET_F1_5
, 5, "R200_PP_CUBIC_OFFSET_F1_5" },
149 static struct reg_names reg_names
[] = {
150 { R200_PP_MISC
, "R200_PP_MISC" },
151 { R200_PP_FOG_COLOR
, "R200_PP_FOG_COLOR" },
152 { R200_RE_SOLID_COLOR
, "R200_RE_SOLID_COLOR" },
153 { R200_RB3D_BLENDCNTL
, "R200_RB3D_BLENDCNTL" },
154 { R200_RB3D_DEPTHOFFSET
, "R200_RB3D_DEPTHOFFSET" },
155 { R200_RB3D_DEPTHPITCH
, "R200_RB3D_DEPTHPITCH" },
156 { R200_RB3D_ZSTENCILCNTL
, "R200_RB3D_ZSTENCILCNTL" },
157 { R200_PP_CNTL
, "R200_PP_CNTL" },
158 { R200_RB3D_CNTL
, "R200_RB3D_CNTL" },
159 { R200_RB3D_COLOROFFSET
, "R200_RB3D_COLOROFFSET" },
160 { R200_RE_WIDTH_HEIGHT
, "R200_RE_WIDTH_HEIGHT" },
161 { R200_RB3D_COLORPITCH
, "R200_RB3D_COLORPITCH" },
162 { R200_SE_CNTL
, "R200_SE_CNTL" },
163 { R200_RE_CNTL
, "R200_RE_CNTL" },
164 { R200_RE_MISC
, "R200_RE_MISC" },
165 { R200_RE_STIPPLE_ADDR
, "R200_RE_STIPPLE_ADDR" },
166 { R200_RE_STIPPLE_DATA
, "R200_RE_STIPPLE_DATA" },
167 { R200_RE_LINE_PATTERN
, "R200_RE_LINE_PATTERN" },
168 { R200_RE_LINE_STATE
, "R200_RE_LINE_STATE" },
169 { R200_RE_SCISSOR_TL_0
, "R200_RE_SCISSOR_TL_0" },
170 { R200_RE_SCISSOR_BR_0
, "R200_RE_SCISSOR_BR_0" },
171 { R200_RE_SCISSOR_TL_1
, "R200_RE_SCISSOR_TL_1" },
172 { R200_RE_SCISSOR_BR_1
, "R200_RE_SCISSOR_BR_1" },
173 { R200_RE_SCISSOR_TL_2
, "R200_RE_SCISSOR_TL_2" },
174 { R200_RE_SCISSOR_BR_2
, "R200_RE_SCISSOR_BR_2" },
175 { R200_RB3D_DEPTHXY_OFFSET
, "R200_RB3D_DEPTHXY_OFFSET" },
176 { R200_RB3D_STENCILREFMASK
, "R200_RB3D_STENCILREFMASK" },
177 { R200_RB3D_ROPCNTL
, "R200_RB3D_ROPCNTL" },
178 { R200_RB3D_PLANEMASK
, "R200_RB3D_PLANEMASK" },
179 { R200_SE_VPORT_XSCALE
, "R200_SE_VPORT_XSCALE" },
180 { R200_SE_VPORT_XOFFSET
, "R200_SE_VPORT_XOFFSET" },
181 { R200_SE_VPORT_YSCALE
, "R200_SE_VPORT_YSCALE" },
182 { R200_SE_VPORT_YOFFSET
, "R200_SE_VPORT_YOFFSET" },
183 { R200_SE_VPORT_ZSCALE
, "R200_SE_VPORT_ZSCALE" },
184 { R200_SE_VPORT_ZOFFSET
, "R200_SE_VPORT_ZOFFSET" },
185 { R200_SE_ZBIAS_FACTOR
, "R200_SE_ZBIAS_FACTOR" },
186 { R200_SE_ZBIAS_CONSTANT
, "R200_SE_ZBIAS_CONSTANT" },
187 { R200_SE_LINE_WIDTH
, "R200_SE_LINE_WIDTH" },
188 { R200_SE_VAP_CNTL
, "R200_SE_VAP_CNTL" },
189 { R200_SE_VF_CNTL
, "R200_SE_VF_CNTL" },
190 { R200_SE_VTX_FMT_0
, "R200_SE_VTX_FMT_0" },
191 { R200_SE_VTX_FMT_1
, "R200_SE_VTX_FMT_1" },
192 { R200_SE_TCL_OUTPUT_VTX_FMT_0
, "R200_SE_TCL_OUTPUT_VTX_FMT_0" },
193 { R200_SE_TCL_OUTPUT_VTX_FMT_1
, "R200_SE_TCL_OUTPUT_VTX_FMT_1" },
194 { R200_SE_VTE_CNTL
, "R200_SE_VTE_CNTL" },
195 { R200_SE_VTX_NUM_ARRAYS
, "R200_SE_VTX_NUM_ARRAYS" },
196 { R200_SE_VTX_AOS_ATTR01
, "R200_SE_VTX_AOS_ATTR01" },
197 { R200_SE_VTX_AOS_ADDR0
, "R200_SE_VTX_AOS_ADDR0" },
198 { R200_SE_VTX_AOS_ADDR1
, "R200_SE_VTX_AOS_ADDR1" },
199 { R200_SE_VTX_AOS_ATTR23
, "R200_SE_VTX_AOS_ATTR23" },
200 { R200_SE_VTX_AOS_ADDR2
, "R200_SE_VTX_AOS_ADDR2" },
201 { R200_SE_VTX_AOS_ADDR3
, "R200_SE_VTX_AOS_ADDR3" },
202 { R200_SE_VTX_AOS_ATTR45
, "R200_SE_VTX_AOS_ATTR45" },
203 { R200_SE_VTX_AOS_ADDR4
, "R200_SE_VTX_AOS_ADDR4" },
204 { R200_SE_VTX_AOS_ADDR5
, "R200_SE_VTX_AOS_ADDR5" },
205 { R200_SE_VTX_AOS_ATTR67
, "R200_SE_VTX_AOS_ATTR67" },
206 { R200_SE_VTX_AOS_ADDR6
, "R200_SE_VTX_AOS_ADDR6" },
207 { R200_SE_VTX_AOS_ADDR7
, "R200_SE_VTX_AOS_ADDR7" },
208 { R200_SE_VTX_AOS_ATTR89
, "R200_SE_VTX_AOS_ATTR89" },
209 { R200_SE_VTX_AOS_ADDR8
, "R200_SE_VTX_AOS_ADDR8" },
210 { R200_SE_VTX_AOS_ADDR9
, "R200_SE_VTX_AOS_ADDR9" },
211 { R200_SE_VTX_AOS_ATTR1011
, "R200_SE_VTX_AOS_ATTR1011" },
212 { R200_SE_VTX_AOS_ADDR10
, "R200_SE_VTX_AOS_ADDR10" },
213 { R200_SE_VTX_AOS_ADDR11
, "R200_SE_VTX_AOS_ADDR11" },
214 { R200_SE_VF_MAX_VTX_INDX
, "R200_SE_VF_MAX_VTX_INDX" },
215 { R200_SE_VF_MIN_VTX_INDX
, "R200_SE_VF_MIN_VTX_INDX" },
216 { R200_SE_VTX_STATE_CNTL
, "R200_SE_VTX_STATE_CNTL" },
217 { R200_SE_TCL_VECTOR_INDX_REG
, "R200_SE_TCL_VECTOR_INDX_REG" },
218 { R200_SE_TCL_VECTOR_DATA_REG
, "R200_SE_TCL_VECTOR_DATA_REG" },
219 { R200_SE_TCL_SCALAR_INDX_REG
, "R200_SE_TCL_SCALAR_INDX_REG" },
220 { R200_SE_TCL_SCALAR_DATA_REG
, "R200_SE_TCL_SCALAR_DATA_REG" },
221 { R200_SE_TCL_MATRIX_SEL_0
, "R200_SE_TCL_MATRIX_SEL_0" },
222 { R200_SE_TCL_MATRIX_SEL_1
, "R200_SE_TCL_MATRIX_SEL_1" },
223 { R200_SE_TCL_MATRIX_SEL_2
, "R200_SE_TCL_MATRIX_SEL_2" },
224 { R200_SE_TCL_MATRIX_SEL_3
, "R200_SE_TCL_MATRIX_SEL_3" },
225 { R200_SE_TCL_MATRIX_SEL_4
, "R200_SE_TCL_MATRIX_SEL_4" },
226 { R200_SE_TCL_LIGHT_MODEL_CTL_0
, "R200_SE_TCL_LIGHT_MODEL_CTL_0" },
227 { R200_SE_TCL_LIGHT_MODEL_CTL_1
, "R200_SE_TCL_LIGHT_MODEL_CTL_1" },
228 { R200_SE_TCL_PER_LIGHT_CTL_0
, "R200_SE_TCL_PER_LIGHT_CTL_0" },
229 { R200_SE_TCL_PER_LIGHT_CTL_1
, "R200_SE_TCL_PER_LIGHT_CTL_1" },
230 { R200_SE_TCL_PER_LIGHT_CTL_2
, "R200_SE_TCL_PER_LIGHT_CTL_2" },
231 { R200_SE_TCL_PER_LIGHT_CTL_3
, "R200_SE_TCL_PER_LIGHT_CTL_3" },
232 { R200_SE_TCL_TEX_PROC_CTL_2
, "R200_SE_TCL_TEX_PROC_CTL_2" },
233 { R200_SE_TCL_TEX_PROC_CTL_3
, "R200_SE_TCL_TEX_PROC_CTL_3" },
234 { R200_SE_TCL_TEX_PROC_CTL_0
, "R200_SE_TCL_TEX_PROC_CTL_0" },
235 { R200_SE_TCL_TEX_PROC_CTL_1
, "R200_SE_TCL_TEX_PROC_CTL_1" },
236 { R200_SE_TC_TEX_CYL_WRAP_CTL
, "R200_SE_TC_TEX_CYL_WRAP_CTL" },
237 { R200_SE_TCL_UCP_VERT_BLEND_CTL
, "R200_SE_TCL_UCP_VERT_BLEND_CTL" },
238 { R200_SE_TCL_POINT_SPRITE_CNTL
, "R200_SE_TCL_POINT_SPRITE_CNTL" },
239 { R200_SE_VTX_ST_POS_0_X_4
, "R200_SE_VTX_ST_POS_0_X_4" },
240 { R200_SE_VTX_ST_POS_0_Y_4
, "R200_SE_VTX_ST_POS_0_Y_4" },
241 { R200_SE_VTX_ST_POS_0_Z_4
, "R200_SE_VTX_ST_POS_0_Z_4" },
242 { R200_SE_VTX_ST_POS_0_W_4
, "R200_SE_VTX_ST_POS_0_W_4" },
243 { R200_SE_VTX_ST_NORM_0_X
, "R200_SE_VTX_ST_NORM_0_X" },
244 { R200_SE_VTX_ST_NORM_0_Y
, "R200_SE_VTX_ST_NORM_0_Y" },
245 { R200_SE_VTX_ST_NORM_0_Z
, "R200_SE_VTX_ST_NORM_0_Z" },
246 { R200_SE_VTX_ST_PVMS
, "R200_SE_VTX_ST_PVMS" },
247 { R200_SE_VTX_ST_CLR_0_R
, "R200_SE_VTX_ST_CLR_0_R" },
248 { R200_SE_VTX_ST_CLR_0_G
, "R200_SE_VTX_ST_CLR_0_G" },
249 { R200_SE_VTX_ST_CLR_0_B
, "R200_SE_VTX_ST_CLR_0_B" },
250 { R200_SE_VTX_ST_CLR_0_A
, "R200_SE_VTX_ST_CLR_0_A" },
251 { R200_SE_VTX_ST_CLR_1_R
, "R200_SE_VTX_ST_CLR_1_R" },
252 { R200_SE_VTX_ST_CLR_1_G
, "R200_SE_VTX_ST_CLR_1_G" },
253 { R200_SE_VTX_ST_CLR_1_B
, "R200_SE_VTX_ST_CLR_1_B" },
254 { R200_SE_VTX_ST_CLR_1_A
, "R200_SE_VTX_ST_CLR_1_A" },
255 { R200_SE_VTX_ST_CLR_2_R
, "R200_SE_VTX_ST_CLR_2_R" },
256 { R200_SE_VTX_ST_CLR_2_G
, "R200_SE_VTX_ST_CLR_2_G" },
257 { R200_SE_VTX_ST_CLR_2_B
, "R200_SE_VTX_ST_CLR_2_B" },
258 { R200_SE_VTX_ST_CLR_2_A
, "R200_SE_VTX_ST_CLR_2_A" },
259 { R200_SE_VTX_ST_CLR_3_R
, "R200_SE_VTX_ST_CLR_3_R" },
260 { R200_SE_VTX_ST_CLR_3_G
, "R200_SE_VTX_ST_CLR_3_G" },
261 { R200_SE_VTX_ST_CLR_3_B
, "R200_SE_VTX_ST_CLR_3_B" },
262 { R200_SE_VTX_ST_CLR_3_A
, "R200_SE_VTX_ST_CLR_3_A" },
263 { R200_SE_VTX_ST_CLR_4_R
, "R200_SE_VTX_ST_CLR_4_R" },
264 { R200_SE_VTX_ST_CLR_4_G
, "R200_SE_VTX_ST_CLR_4_G" },
265 { R200_SE_VTX_ST_CLR_4_B
, "R200_SE_VTX_ST_CLR_4_B" },
266 { R200_SE_VTX_ST_CLR_4_A
, "R200_SE_VTX_ST_CLR_4_A" },
267 { R200_SE_VTX_ST_CLR_5_R
, "R200_SE_VTX_ST_CLR_5_R" },
268 { R200_SE_VTX_ST_CLR_5_G
, "R200_SE_VTX_ST_CLR_5_G" },
269 { R200_SE_VTX_ST_CLR_5_B
, "R200_SE_VTX_ST_CLR_5_B" },
270 { R200_SE_VTX_ST_CLR_5_A
, "R200_SE_VTX_ST_CLR_5_A" },
271 { R200_SE_VTX_ST_CLR_6_R
, "R200_SE_VTX_ST_CLR_6_R" },
272 { R200_SE_VTX_ST_CLR_6_G
, "R200_SE_VTX_ST_CLR_6_G" },
273 { R200_SE_VTX_ST_CLR_6_B
, "R200_SE_VTX_ST_CLR_6_B" },
274 { R200_SE_VTX_ST_CLR_6_A
, "R200_SE_VTX_ST_CLR_6_A" },
275 { R200_SE_VTX_ST_CLR_7_R
, "R200_SE_VTX_ST_CLR_7_R" },
276 { R200_SE_VTX_ST_CLR_7_G
, "R200_SE_VTX_ST_CLR_7_G" },
277 { R200_SE_VTX_ST_CLR_7_B
, "R200_SE_VTX_ST_CLR_7_B" },
278 { R200_SE_VTX_ST_CLR_7_A
, "R200_SE_VTX_ST_CLR_7_A" },
279 { R200_SE_VTX_ST_TEX_0_S
, "R200_SE_VTX_ST_TEX_0_S" },
280 { R200_SE_VTX_ST_TEX_0_T
, "R200_SE_VTX_ST_TEX_0_T" },
281 { R200_SE_VTX_ST_TEX_0_R
, "R200_SE_VTX_ST_TEX_0_R" },
282 { R200_SE_VTX_ST_TEX_0_Q
, "R200_SE_VTX_ST_TEX_0_Q" },
283 { R200_SE_VTX_ST_TEX_1_S
, "R200_SE_VTX_ST_TEX_1_S" },
284 { R200_SE_VTX_ST_TEX_1_T
, "R200_SE_VTX_ST_TEX_1_T" },
285 { R200_SE_VTX_ST_TEX_1_R
, "R200_SE_VTX_ST_TEX_1_R" },
286 { R200_SE_VTX_ST_TEX_1_Q
, "R200_SE_VTX_ST_TEX_1_Q" },
287 { R200_SE_VTX_ST_TEX_2_S
, "R200_SE_VTX_ST_TEX_2_S" },
288 { R200_SE_VTX_ST_TEX_2_T
, "R200_SE_VTX_ST_TEX_2_T" },
289 { R200_SE_VTX_ST_TEX_2_R
, "R200_SE_VTX_ST_TEX_2_R" },
290 { R200_SE_VTX_ST_TEX_2_Q
, "R200_SE_VTX_ST_TEX_2_Q" },
291 { R200_SE_VTX_ST_TEX_3_S
, "R200_SE_VTX_ST_TEX_3_S" },
292 { R200_SE_VTX_ST_TEX_3_T
, "R200_SE_VTX_ST_TEX_3_T" },
293 { R200_SE_VTX_ST_TEX_3_R
, "R200_SE_VTX_ST_TEX_3_R" },
294 { R200_SE_VTX_ST_TEX_3_Q
, "R200_SE_VTX_ST_TEX_3_Q" },
295 { R200_SE_VTX_ST_TEX_4_S
, "R200_SE_VTX_ST_TEX_4_S" },
296 { R200_SE_VTX_ST_TEX_4_T
, "R200_SE_VTX_ST_TEX_4_T" },
297 { R200_SE_VTX_ST_TEX_4_R
, "R200_SE_VTX_ST_TEX_4_R" },
298 { R200_SE_VTX_ST_TEX_4_Q
, "R200_SE_VTX_ST_TEX_4_Q" },
299 { R200_SE_VTX_ST_TEX_5_S
, "R200_SE_VTX_ST_TEX_5_S" },
300 { R200_SE_VTX_ST_TEX_5_T
, "R200_SE_VTX_ST_TEX_5_T" },
301 { R200_SE_VTX_ST_TEX_5_R
, "R200_SE_VTX_ST_TEX_5_R" },
302 { R200_SE_VTX_ST_TEX_5_Q
, "R200_SE_VTX_ST_TEX_5_Q" },
303 { R200_SE_VTX_ST_PNT_SPRT_SZ
, "R200_SE_VTX_ST_PNT_SPRT_SZ" },
304 { R200_SE_VTX_ST_DISC_FOG
, "R200_SE_VTX_ST_DISC_FOG" },
305 { R200_SE_VTX_ST_SHININESS_0
, "R200_SE_VTX_ST_SHININESS_0" },
306 { R200_SE_VTX_ST_SHININESS_1
, "R200_SE_VTX_ST_SHININESS_1" },
307 { R200_SE_VTX_ST_BLND_WT_0
, "R200_SE_VTX_ST_BLND_WT_0" },
308 { R200_SE_VTX_ST_BLND_WT_1
, "R200_SE_VTX_ST_BLND_WT_1" },
309 { R200_SE_VTX_ST_BLND_WT_2
, "R200_SE_VTX_ST_BLND_WT_2" },
310 { R200_SE_VTX_ST_BLND_WT_3
, "R200_SE_VTX_ST_BLND_WT_3" },
311 { R200_SE_VTX_ST_POS_1_X
, "R200_SE_VTX_ST_POS_1_X" },
312 { R200_SE_VTX_ST_POS_1_Y
, "R200_SE_VTX_ST_POS_1_Y" },
313 { R200_SE_VTX_ST_POS_1_Z
, "R200_SE_VTX_ST_POS_1_Z" },
314 { R200_SE_VTX_ST_POS_1_W
, "R200_SE_VTX_ST_POS_1_W" },
315 { R200_SE_VTX_ST_NORM_1_X
, "R200_SE_VTX_ST_NORM_1_X" },
316 { R200_SE_VTX_ST_NORM_1_Y
, "R200_SE_VTX_ST_NORM_1_Y" },
317 { R200_SE_VTX_ST_NORM_1_Z
, "R200_SE_VTX_ST_NORM_1_Z" },
318 { R200_SE_VTX_ST_USR_CLR_0_R
, "R200_SE_VTX_ST_USR_CLR_0_R" },
319 { R200_SE_VTX_ST_USR_CLR_0_G
, "R200_SE_VTX_ST_USR_CLR_0_G" },
320 { R200_SE_VTX_ST_USR_CLR_0_B
, "R200_SE_VTX_ST_USR_CLR_0_B" },
321 { R200_SE_VTX_ST_USR_CLR_0_A
, "R200_SE_VTX_ST_USR_CLR_0_A" },
322 { R200_SE_VTX_ST_USR_CLR_1_R
, "R200_SE_VTX_ST_USR_CLR_1_R" },
323 { R200_SE_VTX_ST_USR_CLR_1_G
, "R200_SE_VTX_ST_USR_CLR_1_G" },
324 { R200_SE_VTX_ST_USR_CLR_1_B
, "R200_SE_VTX_ST_USR_CLR_1_B" },
325 { R200_SE_VTX_ST_USR_CLR_1_A
, "R200_SE_VTX_ST_USR_CLR_1_A" },
326 { R200_SE_VTX_ST_CLR_0_PKD
, "R200_SE_VTX_ST_CLR_0_PKD" },
327 { R200_SE_VTX_ST_CLR_1_PKD
, "R200_SE_VTX_ST_CLR_1_PKD" },
328 { R200_SE_VTX_ST_CLR_2_PKD
, "R200_SE_VTX_ST_CLR_2_PKD" },
329 { R200_SE_VTX_ST_CLR_3_PKD
, "R200_SE_VTX_ST_CLR_3_PKD" },
330 { R200_SE_VTX_ST_CLR_4_PKD
, "R200_SE_VTX_ST_CLR_4_PKD" },
331 { R200_SE_VTX_ST_CLR_5_PKD
, "R200_SE_VTX_ST_CLR_5_PKD" },
332 { R200_SE_VTX_ST_CLR_6_PKD
, "R200_SE_VTX_ST_CLR_6_PKD" },
333 { R200_SE_VTX_ST_CLR_7_PKD
, "R200_SE_VTX_ST_CLR_7_PKD" },
334 { R200_SE_VTX_ST_POS_0_X_2
, "R200_SE_VTX_ST_POS_0_X_2" },
335 { R200_SE_VTX_ST_POS_0_Y_2
, "R200_SE_VTX_ST_POS_0_Y_2" },
336 { R200_SE_VTX_ST_PAR_CLR_LD
, "R200_SE_VTX_ST_PAR_CLR_LD" },
337 { R200_SE_VTX_ST_USR_CLR_PKD
, "R200_SE_VTX_ST_USR_CLR_PKD" },
338 { R200_SE_VTX_ST_POS_0_X_3
, "R200_SE_VTX_ST_POS_0_X_3" },
339 { R200_SE_VTX_ST_POS_0_Y_3
, "R200_SE_VTX_ST_POS_0_Y_3" },
340 { R200_SE_VTX_ST_POS_0_Z_3
, "R200_SE_VTX_ST_POS_0_Z_3" },
341 { R200_SE_VTX_ST_END_OF_PKT
, "R200_SE_VTX_ST_END_OF_PKT" },
342 { R200_RE_POINTSIZE
, "R200_RE_POINTSIZE" },
343 { R200_RE_TOP_LEFT
, "R200_RE_TOP_LEFT" },
344 { R200_RE_AUX_SCISSOR_CNTL
, "R200_RE_AUX_SCISSOR_CNTL" },
345 { R200_PP_TXFILTER_0
, "R200_PP_TXFILTER_0" },
346 { R200_PP_TXFORMAT_0
, "R200_PP_TXFORMAT_0" },
347 { R200_PP_TXSIZE_0
, "R200_PP_TXSIZE_0" },
348 { R200_PP_TXFORMAT_X_0
, "R200_PP_TXFORMAT_X_0" },
349 { R200_PP_TXPITCH_0
, "R200_PP_TXPITCH_0" },
350 { R200_PP_BORDER_COLOR_0
, "R200_PP_BORDER_COLOR_0" },
351 { R200_PP_CUBIC_FACES_0
, "R200_PP_CUBIC_FACES_0" },
352 { R200_PP_TXFILTER_1
, "R200_PP_TXFILTER_1" },
353 { R200_PP_TXFORMAT_1
, "R200_PP_TXFORMAT_1" },
354 { R200_PP_TXSIZE_1
, "R200_PP_TXSIZE_1" },
355 { R200_PP_TXFORMAT_X_1
, "R200_PP_TXFORMAT_X_1" },
356 { R200_PP_TXPITCH_1
, "R200_PP_TXPITCH_1" },
357 { R200_PP_BORDER_COLOR_1
, "R200_PP_BORDER_COLOR_1" },
358 { R200_PP_CUBIC_FACES_1
, "R200_PP_CUBIC_FACES_1" },
359 { R200_PP_TXFILTER_2
, "R200_PP_TXFILTER_2" },
360 { R200_PP_TXFORMAT_2
, "R200_PP_TXFORMAT_2" },
361 { R200_PP_TXSIZE_2
, "R200_PP_TXSIZE_2" },
362 { R200_PP_TXFORMAT_X_2
, "R200_PP_TXFORMAT_X_2" },
363 { R200_PP_TXPITCH_2
, "R200_PP_TXPITCH_2" },
364 { R200_PP_BORDER_COLOR_2
, "R200_PP_BORDER_COLOR_2" },
365 { R200_PP_CUBIC_FACES_2
, "R200_PP_CUBIC_FACES_2" },
366 { R200_PP_TXFILTER_3
, "R200_PP_TXFILTER_3" },
367 { R200_PP_TXFORMAT_3
, "R200_PP_TXFORMAT_3" },
368 { R200_PP_TXSIZE_3
, "R200_PP_TXSIZE_3" },
369 { R200_PP_TXFORMAT_X_3
, "R200_PP_TXFORMAT_X_3" },
370 { R200_PP_TXPITCH_3
, "R200_PP_TXPITCH_3" },
371 { R200_PP_BORDER_COLOR_3
, "R200_PP_BORDER_COLOR_3" },
372 { R200_PP_CUBIC_FACES_3
, "R200_PP_CUBIC_FACES_3" },
373 { R200_PP_TXFILTER_4
, "R200_PP_TXFILTER_4" },
374 { R200_PP_TXFORMAT_4
, "R200_PP_TXFORMAT_4" },
375 { R200_PP_TXSIZE_4
, "R200_PP_TXSIZE_4" },
376 { R200_PP_TXFORMAT_X_4
, "R200_PP_TXFORMAT_X_4" },
377 { R200_PP_TXPITCH_4
, "R200_PP_TXPITCH_4" },
378 { R200_PP_BORDER_COLOR_4
, "R200_PP_BORDER_COLOR_4" },
379 { R200_PP_CUBIC_FACES_4
, "R200_PP_CUBIC_FACES_4" },
380 { R200_PP_TXFILTER_5
, "R200_PP_TXFILTER_5" },
381 { R200_PP_TXFORMAT_5
, "R200_PP_TXFORMAT_5" },
382 { R200_PP_TXSIZE_5
, "R200_PP_TXSIZE_5" },
383 { R200_PP_TXFORMAT_X_5
, "R200_PP_TXFORMAT_X_5" },
384 { R200_PP_TXPITCH_5
, "R200_PP_TXPITCH_5" },
385 { R200_PP_BORDER_COLOR_5
, "R200_PP_BORDER_COLOR_5" },
386 { R200_PP_CUBIC_FACES_5
, "R200_PP_CUBIC_FACES_5" },
387 { R200_PP_TXOFFSET_0
, "R200_PP_TXOFFSET_0" },
388 { R200_PP_CUBIC_OFFSET_F1_0
, "R200_PP_CUBIC_OFFSET_F1_0" },
389 { R200_PP_CUBIC_OFFSET_F2_0
, "R200_PP_CUBIC_OFFSET_F2_0" },
390 { R200_PP_CUBIC_OFFSET_F3_0
, "R200_PP_CUBIC_OFFSET_F3_0" },
391 { R200_PP_CUBIC_OFFSET_F4_0
, "R200_PP_CUBIC_OFFSET_F4_0" },
392 { R200_PP_CUBIC_OFFSET_F5_0
, "R200_PP_CUBIC_OFFSET_F5_0" },
393 { R200_PP_TXOFFSET_1
, "R200_PP_TXOFFSET_1" },
394 { R200_PP_CUBIC_OFFSET_F1_1
, "R200_PP_CUBIC_OFFSET_F1_1" },
395 { R200_PP_CUBIC_OFFSET_F2_1
, "R200_PP_CUBIC_OFFSET_F2_1" },
396 { R200_PP_CUBIC_OFFSET_F3_1
, "R200_PP_CUBIC_OFFSET_F3_1" },
397 { R200_PP_CUBIC_OFFSET_F4_1
, "R200_PP_CUBIC_OFFSET_F4_1" },
398 { R200_PP_CUBIC_OFFSET_F5_1
, "R200_PP_CUBIC_OFFSET_F5_1" },
399 { R200_PP_TXOFFSET_2
, "R200_PP_TXOFFSET_2" },
400 { R200_PP_CUBIC_OFFSET_F1_2
, "R200_PP_CUBIC_OFFSET_F1_2" },
401 { R200_PP_CUBIC_OFFSET_F2_2
, "R200_PP_CUBIC_OFFSET_F2_2" },
402 { R200_PP_CUBIC_OFFSET_F3_2
, "R200_PP_CUBIC_OFFSET_F3_2" },
403 { R200_PP_CUBIC_OFFSET_F4_2
, "R200_PP_CUBIC_OFFSET_F4_2" },
404 { R200_PP_CUBIC_OFFSET_F5_2
, "R200_PP_CUBIC_OFFSET_F5_2" },
405 { R200_PP_TXOFFSET_3
, "R200_PP_TXOFFSET_3" },
406 { R200_PP_CUBIC_OFFSET_F1_3
, "R200_PP_CUBIC_OFFSET_F1_3" },
407 { R200_PP_CUBIC_OFFSET_F2_3
, "R200_PP_CUBIC_OFFSET_F2_3" },
408 { R200_PP_CUBIC_OFFSET_F3_3
, "R200_PP_CUBIC_OFFSET_F3_3" },
409 { R200_PP_CUBIC_OFFSET_F4_3
, "R200_PP_CUBIC_OFFSET_F4_3" },
410 { R200_PP_CUBIC_OFFSET_F5_3
, "R200_PP_CUBIC_OFFSET_F5_3" },
411 { R200_PP_TXOFFSET_4
, "R200_PP_TXOFFSET_4" },
412 { R200_PP_CUBIC_OFFSET_F1_4
, "R200_PP_CUBIC_OFFSET_F1_4" },
413 { R200_PP_CUBIC_OFFSET_F2_4
, "R200_PP_CUBIC_OFFSET_F2_4" },
414 { R200_PP_CUBIC_OFFSET_F3_4
, "R200_PP_CUBIC_OFFSET_F3_4" },
415 { R200_PP_CUBIC_OFFSET_F4_4
, "R200_PP_CUBIC_OFFSET_F4_4" },
416 { R200_PP_CUBIC_OFFSET_F5_4
, "R200_PP_CUBIC_OFFSET_F5_4" },
417 { R200_PP_TXOFFSET_5
, "R200_PP_TXOFFSET_5" },
418 { R200_PP_CUBIC_OFFSET_F1_5
, "R200_PP_CUBIC_OFFSET_F1_5" },
419 { R200_PP_CUBIC_OFFSET_F2_5
, "R200_PP_CUBIC_OFFSET_F2_5" },
420 { R200_PP_CUBIC_OFFSET_F3_5
, "R200_PP_CUBIC_OFFSET_F3_5" },
421 { R200_PP_CUBIC_OFFSET_F4_5
, "R200_PP_CUBIC_OFFSET_F4_5" },
422 { R200_PP_CUBIC_OFFSET_F5_5
, "R200_PP_CUBIC_OFFSET_F5_5" },
423 { R200_PP_TAM_DEBUG3
, "R200_PP_TAM_DEBUG3" },
424 { R200_PP_TFACTOR_0
, "R200_PP_TFACTOR_0" },
425 { R200_PP_TFACTOR_1
, "R200_PP_TFACTOR_1" },
426 { R200_PP_TFACTOR_2
, "R200_PP_TFACTOR_2" },
427 { R200_PP_TFACTOR_3
, "R200_PP_TFACTOR_3" },
428 { R200_PP_TFACTOR_4
, "R200_PP_TFACTOR_4" },
429 { R200_PP_TFACTOR_5
, "R200_PP_TFACTOR_5" },
430 { R200_PP_TXCBLEND_0
, "R200_PP_TXCBLEND_0" },
431 { R200_PP_TXCBLEND2_0
, "R200_PP_TXCBLEND2_0" },
432 { R200_PP_TXABLEND_0
, "R200_PP_TXABLEND_0" },
433 { R200_PP_TXABLEND2_0
, "R200_PP_TXABLEND2_0" },
434 { R200_PP_TXCBLEND_1
, "R200_PP_TXCBLEND_1" },
435 { R200_PP_TXCBLEND2_1
, "R200_PP_TXCBLEND2_1" },
436 { R200_PP_TXABLEND_1
, "R200_PP_TXABLEND_1" },
437 { R200_PP_TXABLEND2_1
, "R200_PP_TXABLEND2_1" },
438 { R200_PP_TXCBLEND_2
, "R200_PP_TXCBLEND_2" },
439 { R200_PP_TXCBLEND2_2
, "R200_PP_TXCBLEND2_2" },
440 { R200_PP_TXABLEND_2
, "R200_PP_TXABLEND_2" },
441 { R200_PP_TXABLEND2_2
, "R200_PP_TXABLEND2_2" },
442 { R200_PP_TXCBLEND_3
, "R200_PP_TXCBLEND_3" },
443 { R200_PP_TXCBLEND2_3
, "R200_PP_TXCBLEND2_3" },
444 { R200_PP_TXABLEND_3
, "R200_PP_TXABLEND_3" },
445 { R200_PP_TXABLEND2_3
, "R200_PP_TXABLEND2_3" },
446 { R200_PP_TXCBLEND_4
, "R200_PP_TXCBLEND_4" },
447 { R200_PP_TXCBLEND2_4
, "R200_PP_TXCBLEND2_4" },
448 { R200_PP_TXABLEND_4
, "R200_PP_TXABLEND_4" },
449 { R200_PP_TXABLEND2_4
, "R200_PP_TXABLEND2_4" },
450 { R200_PP_TXCBLEND_5
, "R200_PP_TXCBLEND_5" },
451 { R200_PP_TXCBLEND2_5
, "R200_PP_TXCBLEND2_5" },
452 { R200_PP_TXABLEND_5
, "R200_PP_TXABLEND_5" },
453 { R200_PP_TXABLEND2_5
, "R200_PP_TXABLEND2_5" },
454 { R200_PP_TXCBLEND_6
, "R200_PP_TXCBLEND_6" },
455 { R200_PP_TXCBLEND2_6
, "R200_PP_TXCBLEND2_6" },
456 { R200_PP_TXABLEND_6
, "R200_PP_TXABLEND_6" },
457 { R200_PP_TXABLEND2_6
, "R200_PP_TXABLEND2_6" },
458 { R200_PP_TXCBLEND_7
, "R200_PP_TXCBLEND_7" },
459 { R200_PP_TXCBLEND2_7
, "R200_PP_TXCBLEND2_7" },
460 { R200_PP_TXABLEND_7
, "R200_PP_TXABLEND_7" },
461 { R200_PP_TXABLEND2_7
, "R200_PP_TXABLEND2_7" },
462 { R200_RB3D_ABLENDCNTL
, "R200_RB3D_ABLENDCNTL" },
463 { R200_RB3D_CBLENDCNTL
, "R200_RB3D_CBLENDCNTL" },
464 { R200_SE_TCL_OUTPUT_VTX_COMP_SEL
, "R200_SE_TCL_OUTPUT_VTX_COMP_SEL" },
465 { R200_PP_CNTL_X
, "R200_PP_CNTL_X" },
466 { R200_SE_VAP_CNTL_STATUS
, "R200_SE_VAP_CNTL_STATUS" },
467 { R200_SE_TCL_INPUT_VTX_VECTOR_ADDR_0
, "R200_SE_TCL_INPUT_VTX_VECTOR_ADDR_0" },
468 { R200_SE_TCL_INPUT_VTX_VECTOR_ADDR_1
, "R200_SE_TCL_INPUT_VTX_VECTOR_ADDR_1" },
469 { R200_SE_TCL_INPUT_VTX_VECTOR_ADDR_2
, "R200_SE_TCL_INPUT_VTX_VECTOR_ADDR_2" },
470 { R200_SE_TCL_INPUT_VTX_VECTOR_ADDR_3
, "R200_SE_TCL_INPUT_VTX_VECTOR_ADDR_3" },
473 static struct reg_names scalar_names
[] = {
474 { R200_SS_LIGHT_DCD_ADDR
, "R200_SS_LIGHT_DCD_ADDR" },
475 { R200_SS_LIGHT_DCM_ADDR
, "R200_SS_LIGHT_DCM_ADDR" },
476 { R200_SS_LIGHT_SPOT_EXPONENT_ADDR
, "R200_SS_LIGHT_SPOT_EXPONENT_ADDR" },
477 { R200_SS_LIGHT_SPOT_CUTOFF_ADDR
, "R200_SS_LIGHT_SPOT_CUTOFF_ADDR" },
478 { R200_SS_LIGHT_SPECULAR_THRESH_ADDR
, "R200_SS_LIGHT_SPECULAR_THRESH_ADDR" },
479 { R200_SS_LIGHT_RANGE_CUTOFF_SQRD
, "R200_SS_LIGHT_RANGE_CUTOFF_SQRD" },
480 { R200_SS_LIGHT_RANGE_ATT_CONST
, "R200_SS_LIGHT_RANGE_ATT_CONST" },
481 { R200_SS_VERT_GUARD_CLIP_ADJ_ADDR
, "R200_SS_VERT_GUARD_CLIP_ADJ_ADDR" },
482 { R200_SS_VERT_GUARD_DISCARD_ADJ_ADDR
, "R200_SS_VERT_GUARD_DISCARD_ADJ_ADDR" },
483 { R200_SS_HORZ_GUARD_CLIP_ADJ_ADDR
, "R200_SS_HORZ_GUARD_CLIP_ADJ_ADDR" },
484 { R200_SS_HORZ_GUARD_DISCARD_ADJ_ADDR
, "R200_SS_HORZ_GUARD_DISCARD_ADJ_ADDR" },
485 { R200_SS_MAT_0_SHININESS
, "R200_SS_MAT_0_SHININESS" },
486 { R200_SS_MAT_1_SHININESS
, "R200_SS_MAT_1_SHININESS" },
490 /* Puff these out to make them look like normal (dword) registers.
492 static struct reg_names vector_names
[] = {
494 { R200_VS_LIGHT_AMBIENT_ADDR
, "R200_VS_LIGHT_AMBIENT_ADDR" },
495 { R200_VS_LIGHT_DIFFUSE_ADDR
, "R200_VS_LIGHT_DIFFUSE_ADDR" },
496 { R200_VS_LIGHT_SPECULAR_ADDR
, "R200_VS_LIGHT_SPECULAR_ADDR" },
497 { R200_VS_LIGHT_DIRPOS_ADDR
, "R200_VS_LIGHT_DIRPOS_ADDR" },
498 { R200_VS_LIGHT_HWVSPOT_ADDR
, "R200_VS_LIGHT_HWVSPOT_ADDR" },
499 { R200_VS_LIGHT_ATTENUATION_ADDR
, "R200_VS_LIGHT_ATTENUATION_ADDR" },
500 { R200_VS_SPOT_DUAL_CONE
, "R200_VS_SPOT_DUAL_CONE" },
501 { R200_VS_GLOBAL_AMBIENT_ADDR
, "R200_VS_GLOBAL_AMBIENT_ADDR" },
502 { R200_VS_FOG_PARAM_ADDR
, "R200_VS_FOG_PARAM_ADDR" },
503 { R200_VS_EYE_VECTOR_ADDR
, "R200_VS_EYE_VECTOR_ADDR" },
504 { R200_VS_UCP_ADDR
, "R200_VS_UCP_ADDR" },
505 { R200_VS_PNT_SPRITE_VPORT_SCALE
, "R200_VS_PNT_SPRITE_VPORT_SCALE" },
506 { R200_VS_MATRIX_0_MV
, "R200_VS_MATRIX_0_MV" },
507 { R200_VS_MATRIX_1_INV_MV
, "R200_VS_MATRIX_1_INV_MV" },
508 { R200_VS_MATRIX_2_MVP
, "R200_VS_MATRIX_2_MVP" },
509 { R200_VS_MATRIX_3_TEX0
, "R200_VS_MATRIX_3_TEX0" },
510 { R200_VS_MATRIX_4_TEX1
, "R200_VS_MATRIX_4_TEX1" },
511 { R200_VS_MATRIX_5_TEX2
, "R200_VS_MATRIX_5_TEX2" },
512 { R200_VS_MATRIX_6_TEX3
, "R200_VS_MATRIX_6_TEX3" },
513 { R200_VS_MATRIX_7_TEX4
, "R200_VS_MATRIX_7_TEX4" },
514 { R200_VS_MATRIX_8_TEX5
, "R200_VS_MATRIX_8_TEX5" },
515 { R200_VS_MAT_0_EMISS
, "R200_VS_MAT_0_EMISS" },
516 { R200_VS_MAT_0_AMB
, "R200_VS_MAT_0_AMB" },
517 { R200_VS_MAT_0_DIF
, "R200_VS_MAT_0_DIF" },
518 { R200_VS_MAT_0_SPEC
, "R200_VS_MAT_0_SPEC" },
519 { R200_VS_MAT_1_EMISS
, "R200_VS_MAT_1_EMISS" },
520 { R200_VS_MAT_1_AMB
, "R200_VS_MAT_1_AMB" },
521 { R200_VS_MAT_1_DIF
, "R200_VS_MAT_1_DIF" },
522 { R200_VS_MAT_1_SPEC
, "R200_VS_MAT_1_SPEC" },
523 { R200_VS_EYE2CLIP_MTX
, "R200_VS_EYE2CLIP_MTX" },
524 { R200_VS_PNT_SPRITE_ATT_CONST
, "R200_VS_PNT_SPRITE_ATT_CONST" },
525 { R200_VS_PNT_SPRITE_EYE_IN_MODEL
, "R200_VS_PNT_SPRITE_EYE_IN_MODEL" },
526 { R200_VS_PNT_SPRITE_CLAMP
, "R200_VS_PNT_SPRITE_CLAMP" },
527 { R200_VS_MAX
, "R200_VS_MAX" },
531 union fi
{ float f
; int i
; };
539 struct reg_names
*closest
;
549 static struct reg regs
[Elements(reg_names
)+1];
550 static struct reg scalars
[512+1];
551 static struct reg vectors
[512*4+1];
553 static int total
, total_changed
, bufs
;
555 static void init_regs( void )
557 struct reg_names
*tmp
;
560 for (i
= 0 ; i
< Elements(regs
) ; i
++) {
561 regs
[i
].idx
= reg_names
[i
].idx
;
562 regs
[i
].closest
= ®_names
[i
];
566 for (i
= 0, tmp
= scalar_names
; i
< Elements(scalars
) ; i
++) {
567 if (tmp
[1].idx
== i
) tmp
++;
569 scalars
[i
].closest
= tmp
;
570 scalars
[i
].flags
= ISFLOAT
;
573 for (i
= 0, tmp
= vector_names
; i
< Elements(vectors
) ; i
++) {
574 if (tmp
[1].idx
*4 == i
) tmp
++;
576 vectors
[i
].closest
= tmp
;
577 vectors
[i
].flags
= ISFLOAT
|ISVEC
;
580 regs
[Elements(regs
)-1].idx
= -1;
581 scalars
[Elements(scalars
)-1].idx
= -1;
582 vectors
[Elements(vectors
)-1].idx
= -1;
585 static int find_or_add_value( struct reg
*reg
, int val
)
589 for ( j
= 0 ; j
< reg
->nvalues
; j
++)
590 if ( val
== reg
->values
[j
].i
)
593 if (j
== reg
->nalloc
) {
596 reg
->values
= (union fi
*) realloc( reg
->values
,
597 reg
->nalloc
* sizeof(union fi
) );
600 reg
->values
[reg
->nvalues
++].i
= val
;
604 static struct reg
*lookup_reg( struct reg
*tab
, int reg
)
608 for (i
= 0 ; tab
[i
].idx
!= -1 ; i
++) {
609 if (tab
[i
].idx
== reg
)
613 fprintf(stderr
, "*** unknown reg 0x%x\n", reg
);
618 static const char *get_reg_name( struct reg
*reg
)
622 if (reg
->idx
== reg
->closest
->idx
)
623 return reg
->closest
->name
;
626 if (reg
->flags
& ISVEC
) {
627 if (reg
->idx
/4 != reg
->closest
->idx
)
628 sprintf(tmp
, "%s+%d[%d]",
630 (reg
->idx
/4) - reg
->closest
->idx
,
633 sprintf(tmp
, "%s[%d]", reg
->closest
->name
, reg
->idx
%4);
636 if (reg
->idx
!= reg
->closest
->idx
)
637 sprintf(tmp
, "%s+%d", reg
->closest
->name
, reg
->idx
- reg
->closest
->idx
);
639 sprintf(tmp
, "%s", reg
->closest
->name
);
645 static int print_int_reg_assignment( struct reg
*reg
, int data
)
647 int changed
= (reg
->current
.i
!= data
);
648 int ever_seen
= find_or_add_value( reg
, data
);
650 if (VERBOSE
|| (NORMAL
&& (changed
|| !ever_seen
)))
651 fprintf(stderr
, " %s <-- 0x%x", get_reg_name(reg
), data
);
655 fprintf(stderr
, " *** BRAND NEW VALUE");
657 fprintf(stderr
, " *** CHANGED");
660 reg
->current
.i
= data
;
662 if (VERBOSE
|| (NORMAL
&& (changed
|| !ever_seen
)))
663 fprintf(stderr
, "\n");
669 static int print_float_reg_assignment( struct reg
*reg
, float data
)
671 int changed
= (reg
->current
.f
!= data
);
672 int newmin
= (data
< reg
->vmin
);
673 int newmax
= (data
> reg
->vmax
);
675 if (VERBOSE
|| (NORMAL
&& (newmin
|| newmax
|| changed
)))
676 fprintf(stderr
, " %s <-- %.3f", get_reg_name(reg
), data
);
680 fprintf(stderr
, " *** NEW MIN (prev %.3f)", reg
->vmin
);
684 fprintf(stderr
, " *** NEW MAX (prev %.3f)", reg
->vmax
);
688 fprintf(stderr
, " *** CHANGED");
692 reg
->current
.f
= data
;
694 if (VERBOSE
|| (NORMAL
&& (newmin
|| newmax
|| changed
)))
695 fprintf(stderr
, "\n");
700 static int print_reg_assignment( struct reg
*reg
, int data
)
702 reg
->flags
|= TOUCHED
;
703 if (reg
->flags
& ISFLOAT
)
704 return print_float_reg_assignment( reg
, *(float *)&data
);
706 return print_int_reg_assignment( reg
, data
);
709 static void print_reg( struct reg
*reg
)
711 if (reg
->flags
& TOUCHED
) {
712 if (reg
->flags
& ISFLOAT
) {
713 fprintf(stderr
, " %s == %f\n", get_reg_name(reg
), reg
->current
.f
);
715 fprintf(stderr
, " %s == 0x%x\n", get_reg_name(reg
), reg
->current
.i
);
721 static void dump_state( void )
725 for (i
= 0 ; i
< Elements(regs
) ; i
++)
726 print_reg( ®s
[i
] );
728 for (i
= 0 ; i
< Elements(scalars
) ; i
++)
729 print_reg( &scalars
[i
] );
731 for (i
= 0 ; i
< Elements(vectors
) ; i
++)
732 print_reg( &vectors
[i
] );
737 static int radeon_emit_packets(
738 drmRadeonCmdHeader header
,
739 drmRadeonCmdBuffer
*cmdbuf
)
741 int id
= (int)header
.packet
.packet_id
;
742 int sz
= packet
[id
].len
;
743 int *data
= (int *)cmdbuf
->buf
;
746 if (sz
* sizeof(int) > cmdbuf
->bufsz
) {
747 fprintf(stderr
, "Packet overflows cmdbuf\n");
751 if (!packet
[id
].name
) {
752 fprintf(stderr
, "*** Unknown packet 0 nr %d\n", id
);
758 fprintf(stderr
, "Packet 0 reg %s nr %d\n", packet
[id
].name
, sz
);
760 for ( i
= 0 ; i
< sz
; i
++) {
761 struct reg
*reg
= lookup_reg( regs
, packet
[id
].start
+ i
*4 );
762 if (print_reg_assignment( reg
, data
[i
] ))
767 cmdbuf
->buf
+= sz
* sizeof(int);
768 cmdbuf
->bufsz
-= sz
* sizeof(int);
773 static int radeon_emit_scalars(
774 drmRadeonCmdHeader header
,
775 drmRadeonCmdBuffer
*cmdbuf
)
777 int sz
= header
.scalars
.count
;
778 int *data
= (int *)cmdbuf
->buf
;
779 int start
= header
.scalars
.offset
;
780 int stride
= header
.scalars
.stride
;
784 fprintf(stderr
, "emit scalars, start %d stride %d nr %d (end %d)\n",
785 start
, stride
, sz
, start
+ stride
* sz
);
788 for (i
= 0 ; i
< sz
; i
++, start
+= stride
) {
789 struct reg
*reg
= lookup_reg( scalars
, start
);
790 if (print_reg_assignment( reg
, data
[i
] ))
795 cmdbuf
->buf
+= sz
* sizeof(int);
796 cmdbuf
->bufsz
-= sz
* sizeof(int);
801 static int radeon_emit_scalars2(
802 drmRadeonCmdHeader header
,
803 drmRadeonCmdBuffer
*cmdbuf
)
805 int sz
= header
.scalars
.count
;
806 int *data
= (int *)cmdbuf
->buf
;
807 int start
= header
.scalars
.offset
+ 0x100;
808 int stride
= header
.scalars
.stride
;
812 fprintf(stderr
, "emit scalars2, start %d stride %d nr %d (end %d)\n",
813 start
, stride
, sz
, start
+ stride
* sz
);
815 if (start
+ stride
* sz
> 257) {
816 fprintf(stderr
, "emit scalars OVERFLOW %d/%d/%d\n", start
, stride
, sz
);
820 for (i
= 0 ; i
< sz
; i
++, start
+= stride
) {
821 struct reg
*reg
= lookup_reg( scalars
, start
);
822 if (print_reg_assignment( reg
, data
[i
] ))
827 cmdbuf
->buf
+= sz
* sizeof(int);
828 cmdbuf
->bufsz
-= sz
* sizeof(int);
832 /* Check: inf/nan/extreme-size?
833 * Check: table start, end, nr, etc.
835 static int radeon_emit_vectors(
836 drmRadeonCmdHeader header
,
837 drmRadeonCmdBuffer
*cmdbuf
)
839 int sz
= header
.vectors
.count
;
840 int *data
= (int *)cmdbuf
->buf
;
841 int start
= header
.vectors
.offset
;
842 int stride
= header
.vectors
.stride
;
846 fprintf(stderr
, "emit vectors, start %d stride %d nr %d (end %d) (0x%x)\n",
847 start
, stride
, sz
, start
+ stride
* sz
, header
.i
);
849 /* if (start + stride * (sz/4) > 128) { */
850 /* fprintf(stderr, "emit vectors OVERFLOW %d/%d/%d\n", start, stride, sz); */
854 for (i
= 0 ; i
< sz
; start
+= stride
) {
856 for (j
= 0 ; j
< 4 ; i
++,j
++) {
857 struct reg
*reg
= lookup_reg( vectors
, start
*4+j
);
858 if (print_reg_assignment( reg
, data
[i
] ))
867 cmdbuf
->buf
+= sz
* sizeof(int);
868 cmdbuf
->bufsz
-= sz
* sizeof(int);
873 static int print_vertex_format( int vfmt
)
876 fprintf(stderr
, " %s(%x): %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
880 (vfmt
& R200_VTX_Z0
) ? "z," : "",
881 (vfmt
& R200_VTX_W0
) ? "w0," : "",
882 (vfmt
& R200_VTX_FPCOLOR
) ? "fpcolor," : "",
883 (vfmt
& R200_VTX_FPALPHA
) ? "fpalpha," : "",
884 (vfmt
& R200_VTX_PKCOLOR
) ? "pkcolor," : "",
885 (vfmt
& R200_VTX_FPSPEC
) ? "fpspec," : "",
886 (vfmt
& R200_VTX_FPFOG
) ? "fpfog," : "",
887 (vfmt
& R200_VTX_PKSPEC
) ? "pkspec," : "",
888 (vfmt
& R200_VTX_ST0
) ? "st0," : "",
889 (vfmt
& R200_VTX_ST1
) ? "st1," : "",
890 (vfmt
& R200_VTX_Q1
) ? "q1," : "",
891 (vfmt
& R200_VTX_ST2
) ? "st2," : "",
892 (vfmt
& R200_VTX_Q2
) ? "q2," : "",
893 (vfmt
& R200_VTX_ST3
) ? "st3," : "",
894 (vfmt
& R200_VTX_Q3
) ? "q3," : "",
895 (vfmt
& R200_VTX_Q0
) ? "q0," : "",
896 (vfmt
& R200_VTX_N0
) ? "n0," : "",
897 (vfmt
& R200_VTX_XY1
) ? "xy1," : "",
898 (vfmt
& R200_VTX_Z1
) ? "z1," : "",
899 (vfmt
& R200_VTX_W1
) ? "w1," : "",
900 (vfmt
& R200_VTX_N1
) ? "n1," : "");
903 if (!find_or_add_value( &others
[V_VTXFMT
], vfmt
))
904 fprintf(stderr
, " *** NEW VALUE");
906 fprintf(stderr
, "\n");
913 static char *primname
[0x10] = {
932 static int print_prim_and_flags( int prim
)
937 fprintf(stderr
, " %s(%x): %s%s%s%s%s%s\n",
940 ((prim
& 0x30) == R200_VF_PRIM_WALK_IND
) ? "IND," : "",
941 ((prim
& 0x30) == R200_VF_PRIM_WALK_LIST
) ? "LIST," : "",
942 ((prim
& 0x30) == R200_VF_PRIM_WALK_RING
) ? "RING," : "",
943 (prim
& R200_VF_COLOR_ORDER_RGBA
) ? "RGBA," : "BGRA, ",
944 (prim
& R200_VF_INDEX_SZ_4
) ? "INDX-32," : "",
945 (prim
& R200_VF_TCL_OUTPUT_VTX_ENABLE
) ? "TCL_OUT_VTX," : "");
950 fprintf(stderr
, " prim: %s numverts %d\n", primname
[prim
&0xf], numverts
);
952 switch (prim
& 0xf) {
953 case R200_VF_PRIM_NONE
:
954 case R200_VF_PRIM_POINTS
:
956 fprintf(stderr
, "Bad nr verts for line %d\n", numverts
);
960 case R200_VF_PRIM_LINES
:
961 case R200_VF_PRIM_POINT_SPRITES
:
962 if ((numverts
& 1) || numverts
== 0) {
963 fprintf(stderr
, "Bad nr verts for line %d\n", numverts
);
967 case R200_VF_PRIM_LINE_STRIP
:
968 case R200_VF_PRIM_LINE_LOOP
:
970 fprintf(stderr
, "Bad nr verts for line_strip %d\n", numverts
);
974 case R200_VF_PRIM_TRIANGLES
:
975 case R200_VF_PRIM_3VRT_POINTS
:
976 case R200_VF_PRIM_3VRT_LINES
:
977 case R200_VF_PRIM_RECT_LIST
:
978 if (numverts
% 3 || numverts
== 0) {
979 fprintf(stderr
, "Bad nr verts for tri %d\n", numverts
);
983 case R200_VF_PRIM_TRIANGLE_FAN
:
984 case R200_VF_PRIM_TRIANGLE_STRIP
:
985 case R200_VF_PRIM_POLYGON
:
987 fprintf(stderr
, "Bad nr verts for strip/fan %d\n", numverts
);
991 case R200_VF_PRIM_QUADS
:
992 if (numverts
% 4 || numverts
== 0) {
993 fprintf(stderr
, "Bad nr verts for quad %d\n", numverts
);
997 case R200_VF_PRIM_QUAD_STRIP
:
998 if (numverts
% 2 || numverts
< 4) {
999 fprintf(stderr
, "Bad nr verts for quadstrip %d\n", numverts
);
1004 fprintf(stderr
, "Bad primitive\n");
1010 /* build in knowledge about each packet type
1012 static int radeon_emit_packet3( drmRadeonCmdBuffer
*cmdbuf
)
1015 int *cmd
= (int *)cmdbuf
->buf
;
1017 int i
, stride
, size
, start
;
1019 cmdsz
= 2 + ((cmd
[0] & RADEON_CP_PACKET_COUNT_MASK
) >> 16);
1021 if ((cmd
[0] & RADEON_CP_PACKET_MASK
) != RADEON_CP_PACKET3
||
1022 cmdsz
* 4 > cmdbuf
->bufsz
||
1023 cmdsz
> RADEON_CP_PACKET_MAX_DWORDS
) {
1024 fprintf(stderr
, "Bad packet\n");
1028 switch( cmd
[0] & ~RADEON_CP_PACKET_COUNT_MASK
) {
1029 case R200_CP_CMD_NOP
:
1031 fprintf(stderr
, "PACKET3_NOP, %d dwords\n", cmdsz
);
1033 case R200_CP_CMD_NEXT_CHAR
:
1035 fprintf(stderr
, "PACKET3_NEXT_CHAR, %d dwords\n", cmdsz
);
1037 case R200_CP_CMD_PLY_NEXTSCAN
:
1039 fprintf(stderr
, "PACKET3_PLY_NEXTSCAN, %d dwords\n", cmdsz
);
1041 case R200_CP_CMD_SET_SCISSORS
:
1043 fprintf(stderr
, "PACKET3_SET_SCISSORS, %d dwords\n", cmdsz
);
1045 case R200_CP_CMD_LOAD_MICROCODE
:
1047 fprintf(stderr
, "PACKET3_LOAD_MICROCODE, %d dwords\n", cmdsz
);
1049 case R200_CP_CMD_WAIT_FOR_IDLE
:
1051 fprintf(stderr
, "PACKET3_WAIT_FOR_IDLE, %d dwords\n", cmdsz
);
1054 case R200_CP_CMD_3D_DRAW_VBUF
:
1056 fprintf(stderr
, "PACKET3_3D_DRAW_VBUF, %d dwords\n", cmdsz
);
1057 /* print_vertex_format(cmd[1]); */
1058 if (print_prim_and_flags(cmd
[2]))
1062 case R200_CP_CMD_3D_DRAW_IMMD
:
1064 fprintf(stderr
, "PACKET3_3D_DRAW_IMMD, %d dwords\n", cmdsz
);
1066 case R200_CP_CMD_3D_DRAW_INDX
: {
1069 fprintf(stderr
, "PACKET3_3D_DRAW_INDX, %d dwords\n", cmdsz
);
1070 /* print_vertex_format(cmd[1]); */
1071 if (print_prim_and_flags(cmd
[2]))
1073 neltdwords
= cmd
[2]>>16;
1074 neltdwords
+= neltdwords
& 1;
1076 if (neltdwords
+ 3 != cmdsz
)
1077 fprintf(stderr
, "Mismatch in DRAW_INDX, %d vs cmdsz %d\n",
1081 case R200_CP_CMD_LOAD_PALETTE
:
1083 fprintf(stderr
, "PACKET3_LOAD_PALETTE, %d dwords\n", cmdsz
);
1085 case R200_CP_CMD_3D_LOAD_VBPNTR
:
1087 fprintf(stderr
, "PACKET3_3D_LOAD_VBPNTR, %d dwords\n", cmdsz
);
1088 fprintf(stderr
, " nr arrays: %d\n", cmd
[1]);
1091 if (((cmd
[1]/2)*3) + ((cmd
[1]%2)*2) != cmdsz
- 2) {
1092 fprintf(stderr
, " ****** MISMATCH %d/%d *******\n",
1093 ((cmd
[1]/2)*3) + ((cmd
[1]%2)*2) + 2, cmdsz
);
1099 for (i
= 0 ; i
< cmd
[1] ; i
++) {
1101 stride
= (tmp
[0]>>24) & 0xff;
1102 size
= (tmp
[0]>>16) & 0xff;
1107 stride
= (tmp
[0]>>8) & 0xff;
1108 size
= (tmp
[0]) & 0xff;
1111 fprintf(stderr
, " array %d: start 0x%x vsize %d vstride %d\n",
1112 i
, start
, size
, stride
);
1116 case R200_CP_CMD_PAINT
:
1118 fprintf(stderr
, "PACKET3_CNTL_PAINT, %d dwords\n", cmdsz
);
1120 case R200_CP_CMD_BITBLT
:
1122 fprintf(stderr
, "PACKET3_CNTL_BITBLT, %d dwords\n", cmdsz
);
1124 case R200_CP_CMD_SMALLTEXT
:
1126 fprintf(stderr
, "PACKET3_CNTL_SMALLTEXT, %d dwords\n", cmdsz
);
1128 case R200_CP_CMD_HOSTDATA_BLT
:
1130 fprintf(stderr
, "PACKET3_CNTL_HOSTDATA_BLT, %d dwords\n",
1133 case R200_CP_CMD_POLYLINE
:
1135 fprintf(stderr
, "PACKET3_CNTL_POLYLINE, %d dwords\n", cmdsz
);
1137 case R200_CP_CMD_POLYSCANLINES
:
1139 fprintf(stderr
, "PACKET3_CNTL_POLYSCANLINES, %d dwords\n",
1142 case R200_CP_CMD_PAINT_MULTI
:
1144 fprintf(stderr
, "PACKET3_CNTL_PAINT_MULTI, %d dwords\n",
1147 case R200_CP_CMD_BITBLT_MULTI
:
1149 fprintf(stderr
, "PACKET3_CNTL_BITBLT_MULTI, %d dwords\n",
1152 case R200_CP_CMD_TRANS_BITBLT
:
1154 fprintf(stderr
, "PACKET3_CNTL_TRANS_BITBLT, %d dwords\n",
1157 case R200_CP_CMD_3D_DRAW_VBUF_2
:
1159 fprintf(stderr
, "R200_CP_CMD_3D_DRAW_VBUF_2, %d dwords\n",
1161 if (print_prim_and_flags(cmd
[1]))
1164 case R200_CP_CMD_3D_DRAW_IMMD_2
:
1166 fprintf(stderr
, "R200_CP_CMD_3D_DRAW_IMMD_2, %d dwords\n",
1168 if (print_prim_and_flags(cmd
[1]))
1171 case R200_CP_CMD_3D_DRAW_INDX_2
:
1173 fprintf(stderr
, "R200_CP_CMD_3D_DRAW_INDX_2, %d dwords\n",
1175 if (print_prim_and_flags(cmd
[1]))
1179 fprintf(stderr
, "UNKNOWN PACKET, %d dwords\n", cmdsz
);
1183 cmdbuf
->buf
+= cmdsz
* 4;
1184 cmdbuf
->bufsz
-= cmdsz
* 4;
1189 /* Check cliprects for bounds, then pass on to above:
1191 static int radeon_emit_packet3_cliprect( drmRadeonCmdBuffer
*cmdbuf
)
1193 XF86DRIClipRectRec
*boxes
= (XF86DRIClipRectRec
*)cmdbuf
->boxes
;
1196 if (VERBOSE
&& total_changed
) {
1203 if ( i
< cmdbuf
->nbox
) {
1204 fprintf(stderr
, "Emit box %d/%d %d,%d %d,%d\n",
1206 boxes
[i
].x1
, boxes
[i
].y1
, boxes
[i
].x2
, boxes
[i
].y2
);
1208 } while ( ++i
< cmdbuf
->nbox
);
1211 if (cmdbuf
->nbox
== 1)
1214 return radeon_emit_packet3( cmdbuf
);
1218 int r200SanityCmdBuffer( r200ContextPtr rmesa
,
1220 XF86DRIClipRectRec
*boxes
)
1223 drmRadeonCmdBuffer cmdbuf
;
1224 drmRadeonCmdHeader header
;
1225 static int inited
= 0;
1233 cmdbuf
.buf
= rmesa
->store
.cmd_buf
;
1234 cmdbuf
.bufsz
= rmesa
->store
.cmd_used
;
1235 cmdbuf
.boxes
= (drmClipRect
*)boxes
;
1238 while ( cmdbuf
.bufsz
>= sizeof(header
) ) {
1240 header
.i
= *(int *)cmdbuf
.buf
;
1241 cmdbuf
.buf
+= sizeof(header
);
1242 cmdbuf
.bufsz
-= sizeof(header
);
1244 switch (header
.header
.cmd_type
) {
1245 case RADEON_CMD_PACKET
:
1246 if (radeon_emit_packets( header
, &cmdbuf
)) {
1247 fprintf(stderr
,"radeon_emit_packets failed\n");
1252 case RADEON_CMD_SCALARS
:
1253 if (radeon_emit_scalars( header
, &cmdbuf
)) {
1254 fprintf(stderr
,"radeon_emit_scalars failed\n");
1259 case RADEON_CMD_SCALARS2
:
1260 if (radeon_emit_scalars2( header
, &cmdbuf
)) {
1261 fprintf(stderr
,"radeon_emit_scalars failed\n");
1266 case RADEON_CMD_VECTORS
:
1267 if (radeon_emit_vectors( header
, &cmdbuf
)) {
1268 fprintf(stderr
,"radeon_emit_vectors failed\n");
1273 case RADEON_CMD_DMA_DISCARD
:
1274 idx
= header
.dma
.buf_idx
;
1276 fprintf(stderr
, "RADEON_CMD_DMA_DISCARD buf %d\n", idx
);
1280 case RADEON_CMD_PACKET3
:
1281 if (radeon_emit_packet3( &cmdbuf
)) {
1282 fprintf(stderr
,"radeon_emit_packet3 failed\n");
1287 case RADEON_CMD_PACKET3_CLIP
:
1288 if (radeon_emit_packet3_cliprect( &cmdbuf
)) {
1289 fprintf(stderr
,"radeon_emit_packet3_clip failed\n");
1294 case RADEON_CMD_WAIT
:
1298 fprintf(stderr
,"bad cmd_type %d at %p\n",
1299 header
.header
.cmd_type
,
1300 cmdbuf
.buf
- sizeof(header
));
1310 fprintf(stderr
, "Bufs %d Total emitted %d real changes %d (%.2f%%)\n",
1312 total
, total_changed
,
1313 ((float)total_changed
/(float)total
*100.0));
1314 fprintf(stderr
, "Total emitted per buf: %.2f\n",
1315 (float)total
/(float)bufs
);
1316 fprintf(stderr
, "Real changes per buf: %.2f\n",
1317 (float)total_changed
/(float)bufs
);
1319 bufs
= n
= total
= total_changed
= 0;
1323 fprintf(stderr
, "leaving %s\n\n\n", __FUNCTION__
);