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" },
142 { RADEON_PP_TEX_SIZE_0
, 2, "RADEON_PP_TEX_SIZE_0" },
143 { RADEON_PP_TEX_SIZE_1
, 2, "RADEON_PP_TEX_SIZE_1" },
144 { RADEON_PP_TEX_SIZE_2
, 2, "RADEON_PP_TEX_SIZE_2" },
145 { R200_RB3D_BLENDCOLOR
, 3, "R200_RB3D_BLENDCOLOR" },
146 { R200_SE_TCL_POINT_SPRITE_CNTL
, 1, "R200_SE_TCL_POINT_SPRITE_CNTL" },
154 static struct reg_names reg_names
[] = {
155 { R200_PP_MISC
, "R200_PP_MISC" },
156 { R200_PP_FOG_COLOR
, "R200_PP_FOG_COLOR" },
157 { R200_RE_SOLID_COLOR
, "R200_RE_SOLID_COLOR" },
158 { R200_RB3D_BLENDCNTL
, "R200_RB3D_BLENDCNTL" },
159 { R200_RB3D_DEPTHOFFSET
, "R200_RB3D_DEPTHOFFSET" },
160 { R200_RB3D_DEPTHPITCH
, "R200_RB3D_DEPTHPITCH" },
161 { R200_RB3D_ZSTENCILCNTL
, "R200_RB3D_ZSTENCILCNTL" },
162 { R200_PP_CNTL
, "R200_PP_CNTL" },
163 { R200_RB3D_CNTL
, "R200_RB3D_CNTL" },
164 { R200_RB3D_COLOROFFSET
, "R200_RB3D_COLOROFFSET" },
165 { R200_RE_WIDTH_HEIGHT
, "R200_RE_WIDTH_HEIGHT" },
166 { R200_RB3D_COLORPITCH
, "R200_RB3D_COLORPITCH" },
167 { R200_SE_CNTL
, "R200_SE_CNTL" },
168 { R200_RE_CNTL
, "R200_RE_CNTL" },
169 { R200_RE_MISC
, "R200_RE_MISC" },
170 { R200_RE_STIPPLE_ADDR
, "R200_RE_STIPPLE_ADDR" },
171 { R200_RE_STIPPLE_DATA
, "R200_RE_STIPPLE_DATA" },
172 { R200_RE_LINE_PATTERN
, "R200_RE_LINE_PATTERN" },
173 { R200_RE_LINE_STATE
, "R200_RE_LINE_STATE" },
174 { R200_RE_SCISSOR_TL_0
, "R200_RE_SCISSOR_TL_0" },
175 { R200_RE_SCISSOR_BR_0
, "R200_RE_SCISSOR_BR_0" },
176 { R200_RE_SCISSOR_TL_1
, "R200_RE_SCISSOR_TL_1" },
177 { R200_RE_SCISSOR_BR_1
, "R200_RE_SCISSOR_BR_1" },
178 { R200_RE_SCISSOR_TL_2
, "R200_RE_SCISSOR_TL_2" },
179 { R200_RE_SCISSOR_BR_2
, "R200_RE_SCISSOR_BR_2" },
180 { R200_RB3D_DEPTHXY_OFFSET
, "R200_RB3D_DEPTHXY_OFFSET" },
181 { R200_RB3D_STENCILREFMASK
, "R200_RB3D_STENCILREFMASK" },
182 { R200_RB3D_ROPCNTL
, "R200_RB3D_ROPCNTL" },
183 { R200_RB3D_PLANEMASK
, "R200_RB3D_PLANEMASK" },
184 { R200_SE_VPORT_XSCALE
, "R200_SE_VPORT_XSCALE" },
185 { R200_SE_VPORT_XOFFSET
, "R200_SE_VPORT_XOFFSET" },
186 { R200_SE_VPORT_YSCALE
, "R200_SE_VPORT_YSCALE" },
187 { R200_SE_VPORT_YOFFSET
, "R200_SE_VPORT_YOFFSET" },
188 { R200_SE_VPORT_ZSCALE
, "R200_SE_VPORT_ZSCALE" },
189 { R200_SE_VPORT_ZOFFSET
, "R200_SE_VPORT_ZOFFSET" },
190 { R200_SE_ZBIAS_FACTOR
, "R200_SE_ZBIAS_FACTOR" },
191 { R200_SE_ZBIAS_CONSTANT
, "R200_SE_ZBIAS_CONSTANT" },
192 { R200_SE_LINE_WIDTH
, "R200_SE_LINE_WIDTH" },
193 { R200_SE_VAP_CNTL
, "R200_SE_VAP_CNTL" },
194 { R200_SE_VF_CNTL
, "R200_SE_VF_CNTL" },
195 { R200_SE_VTX_FMT_0
, "R200_SE_VTX_FMT_0" },
196 { R200_SE_VTX_FMT_1
, "R200_SE_VTX_FMT_1" },
197 { R200_SE_TCL_OUTPUT_VTX_FMT_0
, "R200_SE_TCL_OUTPUT_VTX_FMT_0" },
198 { R200_SE_TCL_OUTPUT_VTX_FMT_1
, "R200_SE_TCL_OUTPUT_VTX_FMT_1" },
199 { R200_SE_VTE_CNTL
, "R200_SE_VTE_CNTL" },
200 { R200_SE_VTX_NUM_ARRAYS
, "R200_SE_VTX_NUM_ARRAYS" },
201 { R200_SE_VTX_AOS_ATTR01
, "R200_SE_VTX_AOS_ATTR01" },
202 { R200_SE_VTX_AOS_ADDR0
, "R200_SE_VTX_AOS_ADDR0" },
203 { R200_SE_VTX_AOS_ADDR1
, "R200_SE_VTX_AOS_ADDR1" },
204 { R200_SE_VTX_AOS_ATTR23
, "R200_SE_VTX_AOS_ATTR23" },
205 { R200_SE_VTX_AOS_ADDR2
, "R200_SE_VTX_AOS_ADDR2" },
206 { R200_SE_VTX_AOS_ADDR3
, "R200_SE_VTX_AOS_ADDR3" },
207 { R200_SE_VTX_AOS_ATTR45
, "R200_SE_VTX_AOS_ATTR45" },
208 { R200_SE_VTX_AOS_ADDR4
, "R200_SE_VTX_AOS_ADDR4" },
209 { R200_SE_VTX_AOS_ADDR5
, "R200_SE_VTX_AOS_ADDR5" },
210 { R200_SE_VTX_AOS_ATTR67
, "R200_SE_VTX_AOS_ATTR67" },
211 { R200_SE_VTX_AOS_ADDR6
, "R200_SE_VTX_AOS_ADDR6" },
212 { R200_SE_VTX_AOS_ADDR7
, "R200_SE_VTX_AOS_ADDR7" },
213 { R200_SE_VTX_AOS_ATTR89
, "R200_SE_VTX_AOS_ATTR89" },
214 { R200_SE_VTX_AOS_ADDR8
, "R200_SE_VTX_AOS_ADDR8" },
215 { R200_SE_VTX_AOS_ADDR9
, "R200_SE_VTX_AOS_ADDR9" },
216 { R200_SE_VTX_AOS_ATTR1011
, "R200_SE_VTX_AOS_ATTR1011" },
217 { R200_SE_VTX_AOS_ADDR10
, "R200_SE_VTX_AOS_ADDR10" },
218 { R200_SE_VTX_AOS_ADDR11
, "R200_SE_VTX_AOS_ADDR11" },
219 { R200_SE_VF_MAX_VTX_INDX
, "R200_SE_VF_MAX_VTX_INDX" },
220 { R200_SE_VF_MIN_VTX_INDX
, "R200_SE_VF_MIN_VTX_INDX" },
221 { R200_SE_VTX_STATE_CNTL
, "R200_SE_VTX_STATE_CNTL" },
222 { R200_SE_TCL_VECTOR_INDX_REG
, "R200_SE_TCL_VECTOR_INDX_REG" },
223 { R200_SE_TCL_VECTOR_DATA_REG
, "R200_SE_TCL_VECTOR_DATA_REG" },
224 { R200_SE_TCL_SCALAR_INDX_REG
, "R200_SE_TCL_SCALAR_INDX_REG" },
225 { R200_SE_TCL_SCALAR_DATA_REG
, "R200_SE_TCL_SCALAR_DATA_REG" },
226 { R200_SE_TCL_MATRIX_SEL_0
, "R200_SE_TCL_MATRIX_SEL_0" },
227 { R200_SE_TCL_MATRIX_SEL_1
, "R200_SE_TCL_MATRIX_SEL_1" },
228 { R200_SE_TCL_MATRIX_SEL_2
, "R200_SE_TCL_MATRIX_SEL_2" },
229 { R200_SE_TCL_MATRIX_SEL_3
, "R200_SE_TCL_MATRIX_SEL_3" },
230 { R200_SE_TCL_MATRIX_SEL_4
, "R200_SE_TCL_MATRIX_SEL_4" },
231 { R200_SE_TCL_LIGHT_MODEL_CTL_0
, "R200_SE_TCL_LIGHT_MODEL_CTL_0" },
232 { R200_SE_TCL_LIGHT_MODEL_CTL_1
, "R200_SE_TCL_LIGHT_MODEL_CTL_1" },
233 { R200_SE_TCL_PER_LIGHT_CTL_0
, "R200_SE_TCL_PER_LIGHT_CTL_0" },
234 { R200_SE_TCL_PER_LIGHT_CTL_1
, "R200_SE_TCL_PER_LIGHT_CTL_1" },
235 { R200_SE_TCL_PER_LIGHT_CTL_2
, "R200_SE_TCL_PER_LIGHT_CTL_2" },
236 { R200_SE_TCL_PER_LIGHT_CTL_3
, "R200_SE_TCL_PER_LIGHT_CTL_3" },
237 { R200_SE_TCL_TEX_PROC_CTL_2
, "R200_SE_TCL_TEX_PROC_CTL_2" },
238 { R200_SE_TCL_TEX_PROC_CTL_3
, "R200_SE_TCL_TEX_PROC_CTL_3" },
239 { R200_SE_TCL_TEX_PROC_CTL_0
, "R200_SE_TCL_TEX_PROC_CTL_0" },
240 { R200_SE_TCL_TEX_PROC_CTL_1
, "R200_SE_TCL_TEX_PROC_CTL_1" },
241 { R200_SE_TC_TEX_CYL_WRAP_CTL
, "R200_SE_TC_TEX_CYL_WRAP_CTL" },
242 { R200_SE_TCL_UCP_VERT_BLEND_CTL
, "R200_SE_TCL_UCP_VERT_BLEND_CTL" },
243 { R200_SE_TCL_POINT_SPRITE_CNTL
, "R200_SE_TCL_POINT_SPRITE_CNTL" },
244 { R200_SE_VTX_ST_POS_0_X_4
, "R200_SE_VTX_ST_POS_0_X_4" },
245 { R200_SE_VTX_ST_POS_0_Y_4
, "R200_SE_VTX_ST_POS_0_Y_4" },
246 { R200_SE_VTX_ST_POS_0_Z_4
, "R200_SE_VTX_ST_POS_0_Z_4" },
247 { R200_SE_VTX_ST_POS_0_W_4
, "R200_SE_VTX_ST_POS_0_W_4" },
248 { R200_SE_VTX_ST_NORM_0_X
, "R200_SE_VTX_ST_NORM_0_X" },
249 { R200_SE_VTX_ST_NORM_0_Y
, "R200_SE_VTX_ST_NORM_0_Y" },
250 { R200_SE_VTX_ST_NORM_0_Z
, "R200_SE_VTX_ST_NORM_0_Z" },
251 { R200_SE_VTX_ST_PVMS
, "R200_SE_VTX_ST_PVMS" },
252 { R200_SE_VTX_ST_CLR_0_R
, "R200_SE_VTX_ST_CLR_0_R" },
253 { R200_SE_VTX_ST_CLR_0_G
, "R200_SE_VTX_ST_CLR_0_G" },
254 { R200_SE_VTX_ST_CLR_0_B
, "R200_SE_VTX_ST_CLR_0_B" },
255 { R200_SE_VTX_ST_CLR_0_A
, "R200_SE_VTX_ST_CLR_0_A" },
256 { R200_SE_VTX_ST_CLR_1_R
, "R200_SE_VTX_ST_CLR_1_R" },
257 { R200_SE_VTX_ST_CLR_1_G
, "R200_SE_VTX_ST_CLR_1_G" },
258 { R200_SE_VTX_ST_CLR_1_B
, "R200_SE_VTX_ST_CLR_1_B" },
259 { R200_SE_VTX_ST_CLR_1_A
, "R200_SE_VTX_ST_CLR_1_A" },
260 { R200_SE_VTX_ST_CLR_2_R
, "R200_SE_VTX_ST_CLR_2_R" },
261 { R200_SE_VTX_ST_CLR_2_G
, "R200_SE_VTX_ST_CLR_2_G" },
262 { R200_SE_VTX_ST_CLR_2_B
, "R200_SE_VTX_ST_CLR_2_B" },
263 { R200_SE_VTX_ST_CLR_2_A
, "R200_SE_VTX_ST_CLR_2_A" },
264 { R200_SE_VTX_ST_CLR_3_R
, "R200_SE_VTX_ST_CLR_3_R" },
265 { R200_SE_VTX_ST_CLR_3_G
, "R200_SE_VTX_ST_CLR_3_G" },
266 { R200_SE_VTX_ST_CLR_3_B
, "R200_SE_VTX_ST_CLR_3_B" },
267 { R200_SE_VTX_ST_CLR_3_A
, "R200_SE_VTX_ST_CLR_3_A" },
268 { R200_SE_VTX_ST_CLR_4_R
, "R200_SE_VTX_ST_CLR_4_R" },
269 { R200_SE_VTX_ST_CLR_4_G
, "R200_SE_VTX_ST_CLR_4_G" },
270 { R200_SE_VTX_ST_CLR_4_B
, "R200_SE_VTX_ST_CLR_4_B" },
271 { R200_SE_VTX_ST_CLR_4_A
, "R200_SE_VTX_ST_CLR_4_A" },
272 { R200_SE_VTX_ST_CLR_5_R
, "R200_SE_VTX_ST_CLR_5_R" },
273 { R200_SE_VTX_ST_CLR_5_G
, "R200_SE_VTX_ST_CLR_5_G" },
274 { R200_SE_VTX_ST_CLR_5_B
, "R200_SE_VTX_ST_CLR_5_B" },
275 { R200_SE_VTX_ST_CLR_5_A
, "R200_SE_VTX_ST_CLR_5_A" },
276 { R200_SE_VTX_ST_CLR_6_R
, "R200_SE_VTX_ST_CLR_6_R" },
277 { R200_SE_VTX_ST_CLR_6_G
, "R200_SE_VTX_ST_CLR_6_G" },
278 { R200_SE_VTX_ST_CLR_6_B
, "R200_SE_VTX_ST_CLR_6_B" },
279 { R200_SE_VTX_ST_CLR_6_A
, "R200_SE_VTX_ST_CLR_6_A" },
280 { R200_SE_VTX_ST_CLR_7_R
, "R200_SE_VTX_ST_CLR_7_R" },
281 { R200_SE_VTX_ST_CLR_7_G
, "R200_SE_VTX_ST_CLR_7_G" },
282 { R200_SE_VTX_ST_CLR_7_B
, "R200_SE_VTX_ST_CLR_7_B" },
283 { R200_SE_VTX_ST_CLR_7_A
, "R200_SE_VTX_ST_CLR_7_A" },
284 { R200_SE_VTX_ST_TEX_0_S
, "R200_SE_VTX_ST_TEX_0_S" },
285 { R200_SE_VTX_ST_TEX_0_T
, "R200_SE_VTX_ST_TEX_0_T" },
286 { R200_SE_VTX_ST_TEX_0_R
, "R200_SE_VTX_ST_TEX_0_R" },
287 { R200_SE_VTX_ST_TEX_0_Q
, "R200_SE_VTX_ST_TEX_0_Q" },
288 { R200_SE_VTX_ST_TEX_1_S
, "R200_SE_VTX_ST_TEX_1_S" },
289 { R200_SE_VTX_ST_TEX_1_T
, "R200_SE_VTX_ST_TEX_1_T" },
290 { R200_SE_VTX_ST_TEX_1_R
, "R200_SE_VTX_ST_TEX_1_R" },
291 { R200_SE_VTX_ST_TEX_1_Q
, "R200_SE_VTX_ST_TEX_1_Q" },
292 { R200_SE_VTX_ST_TEX_2_S
, "R200_SE_VTX_ST_TEX_2_S" },
293 { R200_SE_VTX_ST_TEX_2_T
, "R200_SE_VTX_ST_TEX_2_T" },
294 { R200_SE_VTX_ST_TEX_2_R
, "R200_SE_VTX_ST_TEX_2_R" },
295 { R200_SE_VTX_ST_TEX_2_Q
, "R200_SE_VTX_ST_TEX_2_Q" },
296 { R200_SE_VTX_ST_TEX_3_S
, "R200_SE_VTX_ST_TEX_3_S" },
297 { R200_SE_VTX_ST_TEX_3_T
, "R200_SE_VTX_ST_TEX_3_T" },
298 { R200_SE_VTX_ST_TEX_3_R
, "R200_SE_VTX_ST_TEX_3_R" },
299 { R200_SE_VTX_ST_TEX_3_Q
, "R200_SE_VTX_ST_TEX_3_Q" },
300 { R200_SE_VTX_ST_TEX_4_S
, "R200_SE_VTX_ST_TEX_4_S" },
301 { R200_SE_VTX_ST_TEX_4_T
, "R200_SE_VTX_ST_TEX_4_T" },
302 { R200_SE_VTX_ST_TEX_4_R
, "R200_SE_VTX_ST_TEX_4_R" },
303 { R200_SE_VTX_ST_TEX_4_Q
, "R200_SE_VTX_ST_TEX_4_Q" },
304 { R200_SE_VTX_ST_TEX_5_S
, "R200_SE_VTX_ST_TEX_5_S" },
305 { R200_SE_VTX_ST_TEX_5_T
, "R200_SE_VTX_ST_TEX_5_T" },
306 { R200_SE_VTX_ST_TEX_5_R
, "R200_SE_VTX_ST_TEX_5_R" },
307 { R200_SE_VTX_ST_TEX_5_Q
, "R200_SE_VTX_ST_TEX_5_Q" },
308 { R200_SE_VTX_ST_PNT_SPRT_SZ
, "R200_SE_VTX_ST_PNT_SPRT_SZ" },
309 { R200_SE_VTX_ST_DISC_FOG
, "R200_SE_VTX_ST_DISC_FOG" },
310 { R200_SE_VTX_ST_SHININESS_0
, "R200_SE_VTX_ST_SHININESS_0" },
311 { R200_SE_VTX_ST_SHININESS_1
, "R200_SE_VTX_ST_SHININESS_1" },
312 { R200_SE_VTX_ST_BLND_WT_0
, "R200_SE_VTX_ST_BLND_WT_0" },
313 { R200_SE_VTX_ST_BLND_WT_1
, "R200_SE_VTX_ST_BLND_WT_1" },
314 { R200_SE_VTX_ST_BLND_WT_2
, "R200_SE_VTX_ST_BLND_WT_2" },
315 { R200_SE_VTX_ST_BLND_WT_3
, "R200_SE_VTX_ST_BLND_WT_3" },
316 { R200_SE_VTX_ST_POS_1_X
, "R200_SE_VTX_ST_POS_1_X" },
317 { R200_SE_VTX_ST_POS_1_Y
, "R200_SE_VTX_ST_POS_1_Y" },
318 { R200_SE_VTX_ST_POS_1_Z
, "R200_SE_VTX_ST_POS_1_Z" },
319 { R200_SE_VTX_ST_POS_1_W
, "R200_SE_VTX_ST_POS_1_W" },
320 { R200_SE_VTX_ST_NORM_1_X
, "R200_SE_VTX_ST_NORM_1_X" },
321 { R200_SE_VTX_ST_NORM_1_Y
, "R200_SE_VTX_ST_NORM_1_Y" },
322 { R200_SE_VTX_ST_NORM_1_Z
, "R200_SE_VTX_ST_NORM_1_Z" },
323 { R200_SE_VTX_ST_USR_CLR_0_R
, "R200_SE_VTX_ST_USR_CLR_0_R" },
324 { R200_SE_VTX_ST_USR_CLR_0_G
, "R200_SE_VTX_ST_USR_CLR_0_G" },
325 { R200_SE_VTX_ST_USR_CLR_0_B
, "R200_SE_VTX_ST_USR_CLR_0_B" },
326 { R200_SE_VTX_ST_USR_CLR_0_A
, "R200_SE_VTX_ST_USR_CLR_0_A" },
327 { R200_SE_VTX_ST_USR_CLR_1_R
, "R200_SE_VTX_ST_USR_CLR_1_R" },
328 { R200_SE_VTX_ST_USR_CLR_1_G
, "R200_SE_VTX_ST_USR_CLR_1_G" },
329 { R200_SE_VTX_ST_USR_CLR_1_B
, "R200_SE_VTX_ST_USR_CLR_1_B" },
330 { R200_SE_VTX_ST_USR_CLR_1_A
, "R200_SE_VTX_ST_USR_CLR_1_A" },
331 { R200_SE_VTX_ST_CLR_0_PKD
, "R200_SE_VTX_ST_CLR_0_PKD" },
332 { R200_SE_VTX_ST_CLR_1_PKD
, "R200_SE_VTX_ST_CLR_1_PKD" },
333 { R200_SE_VTX_ST_CLR_2_PKD
, "R200_SE_VTX_ST_CLR_2_PKD" },
334 { R200_SE_VTX_ST_CLR_3_PKD
, "R200_SE_VTX_ST_CLR_3_PKD" },
335 { R200_SE_VTX_ST_CLR_4_PKD
, "R200_SE_VTX_ST_CLR_4_PKD" },
336 { R200_SE_VTX_ST_CLR_5_PKD
, "R200_SE_VTX_ST_CLR_5_PKD" },
337 { R200_SE_VTX_ST_CLR_6_PKD
, "R200_SE_VTX_ST_CLR_6_PKD" },
338 { R200_SE_VTX_ST_CLR_7_PKD
, "R200_SE_VTX_ST_CLR_7_PKD" },
339 { R200_SE_VTX_ST_POS_0_X_2
, "R200_SE_VTX_ST_POS_0_X_2" },
340 { R200_SE_VTX_ST_POS_0_Y_2
, "R200_SE_VTX_ST_POS_0_Y_2" },
341 { R200_SE_VTX_ST_PAR_CLR_LD
, "R200_SE_VTX_ST_PAR_CLR_LD" },
342 { R200_SE_VTX_ST_USR_CLR_PKD
, "R200_SE_VTX_ST_USR_CLR_PKD" },
343 { R200_SE_VTX_ST_POS_0_X_3
, "R200_SE_VTX_ST_POS_0_X_3" },
344 { R200_SE_VTX_ST_POS_0_Y_3
, "R200_SE_VTX_ST_POS_0_Y_3" },
345 { R200_SE_VTX_ST_POS_0_Z_3
, "R200_SE_VTX_ST_POS_0_Z_3" },
346 { R200_SE_VTX_ST_END_OF_PKT
, "R200_SE_VTX_ST_END_OF_PKT" },
347 { R200_RE_POINTSIZE
, "R200_RE_POINTSIZE" },
348 { R200_RE_TOP_LEFT
, "R200_RE_TOP_LEFT" },
349 { R200_RE_AUX_SCISSOR_CNTL
, "R200_RE_AUX_SCISSOR_CNTL" },
350 { R200_PP_TXFILTER_0
, "R200_PP_TXFILTER_0" },
351 { R200_PP_TXFORMAT_0
, "R200_PP_TXFORMAT_0" },
352 { R200_PP_TXSIZE_0
, "R200_PP_TXSIZE_0" },
353 { R200_PP_TXFORMAT_X_0
, "R200_PP_TXFORMAT_X_0" },
354 { R200_PP_TXPITCH_0
, "R200_PP_TXPITCH_0" },
355 { R200_PP_BORDER_COLOR_0
, "R200_PP_BORDER_COLOR_0" },
356 { R200_PP_CUBIC_FACES_0
, "R200_PP_CUBIC_FACES_0" },
357 { R200_PP_TXFILTER_1
, "R200_PP_TXFILTER_1" },
358 { R200_PP_TXFORMAT_1
, "R200_PP_TXFORMAT_1" },
359 { R200_PP_TXSIZE_1
, "R200_PP_TXSIZE_1" },
360 { R200_PP_TXFORMAT_X_1
, "R200_PP_TXFORMAT_X_1" },
361 { R200_PP_TXPITCH_1
, "R200_PP_TXPITCH_1" },
362 { R200_PP_BORDER_COLOR_1
, "R200_PP_BORDER_COLOR_1" },
363 { R200_PP_CUBIC_FACES_1
, "R200_PP_CUBIC_FACES_1" },
364 { R200_PP_TXFILTER_2
, "R200_PP_TXFILTER_2" },
365 { R200_PP_TXFORMAT_2
, "R200_PP_TXFORMAT_2" },
366 { R200_PP_TXSIZE_2
, "R200_PP_TXSIZE_2" },
367 { R200_PP_TXFORMAT_X_2
, "R200_PP_TXFORMAT_X_2" },
368 { R200_PP_TXPITCH_2
, "R200_PP_TXPITCH_2" },
369 { R200_PP_BORDER_COLOR_2
, "R200_PP_BORDER_COLOR_2" },
370 { R200_PP_CUBIC_FACES_2
, "R200_PP_CUBIC_FACES_2" },
371 { R200_PP_TXFILTER_3
, "R200_PP_TXFILTER_3" },
372 { R200_PP_TXFORMAT_3
, "R200_PP_TXFORMAT_3" },
373 { R200_PP_TXSIZE_3
, "R200_PP_TXSIZE_3" },
374 { R200_PP_TXFORMAT_X_3
, "R200_PP_TXFORMAT_X_3" },
375 { R200_PP_TXPITCH_3
, "R200_PP_TXPITCH_3" },
376 { R200_PP_BORDER_COLOR_3
, "R200_PP_BORDER_COLOR_3" },
377 { R200_PP_CUBIC_FACES_3
, "R200_PP_CUBIC_FACES_3" },
378 { R200_PP_TXFILTER_4
, "R200_PP_TXFILTER_4" },
379 { R200_PP_TXFORMAT_4
, "R200_PP_TXFORMAT_4" },
380 { R200_PP_TXSIZE_4
, "R200_PP_TXSIZE_4" },
381 { R200_PP_TXFORMAT_X_4
, "R200_PP_TXFORMAT_X_4" },
382 { R200_PP_TXPITCH_4
, "R200_PP_TXPITCH_4" },
383 { R200_PP_BORDER_COLOR_4
, "R200_PP_BORDER_COLOR_4" },
384 { R200_PP_CUBIC_FACES_4
, "R200_PP_CUBIC_FACES_4" },
385 { R200_PP_TXFILTER_5
, "R200_PP_TXFILTER_5" },
386 { R200_PP_TXFORMAT_5
, "R200_PP_TXFORMAT_5" },
387 { R200_PP_TXSIZE_5
, "R200_PP_TXSIZE_5" },
388 { R200_PP_TXFORMAT_X_5
, "R200_PP_TXFORMAT_X_5" },
389 { R200_PP_TXPITCH_5
, "R200_PP_TXPITCH_5" },
390 { R200_PP_BORDER_COLOR_5
, "R200_PP_BORDER_COLOR_5" },
391 { R200_PP_CUBIC_FACES_5
, "R200_PP_CUBIC_FACES_5" },
392 { R200_PP_TXOFFSET_0
, "R200_PP_TXOFFSET_0" },
393 { R200_PP_CUBIC_OFFSET_F1_0
, "R200_PP_CUBIC_OFFSET_F1_0" },
394 { R200_PP_CUBIC_OFFSET_F2_0
, "R200_PP_CUBIC_OFFSET_F2_0" },
395 { R200_PP_CUBIC_OFFSET_F3_0
, "R200_PP_CUBIC_OFFSET_F3_0" },
396 { R200_PP_CUBIC_OFFSET_F4_0
, "R200_PP_CUBIC_OFFSET_F4_0" },
397 { R200_PP_CUBIC_OFFSET_F5_0
, "R200_PP_CUBIC_OFFSET_F5_0" },
398 { R200_PP_TXOFFSET_1
, "R200_PP_TXOFFSET_1" },
399 { R200_PP_CUBIC_OFFSET_F1_1
, "R200_PP_CUBIC_OFFSET_F1_1" },
400 { R200_PP_CUBIC_OFFSET_F2_1
, "R200_PP_CUBIC_OFFSET_F2_1" },
401 { R200_PP_CUBIC_OFFSET_F3_1
, "R200_PP_CUBIC_OFFSET_F3_1" },
402 { R200_PP_CUBIC_OFFSET_F4_1
, "R200_PP_CUBIC_OFFSET_F4_1" },
403 { R200_PP_CUBIC_OFFSET_F5_1
, "R200_PP_CUBIC_OFFSET_F5_1" },
404 { R200_PP_TXOFFSET_2
, "R200_PP_TXOFFSET_2" },
405 { R200_PP_CUBIC_OFFSET_F1_2
, "R200_PP_CUBIC_OFFSET_F1_2" },
406 { R200_PP_CUBIC_OFFSET_F2_2
, "R200_PP_CUBIC_OFFSET_F2_2" },
407 { R200_PP_CUBIC_OFFSET_F3_2
, "R200_PP_CUBIC_OFFSET_F3_2" },
408 { R200_PP_CUBIC_OFFSET_F4_2
, "R200_PP_CUBIC_OFFSET_F4_2" },
409 { R200_PP_CUBIC_OFFSET_F5_2
, "R200_PP_CUBIC_OFFSET_F5_2" },
410 { R200_PP_TXOFFSET_3
, "R200_PP_TXOFFSET_3" },
411 { R200_PP_CUBIC_OFFSET_F1_3
, "R200_PP_CUBIC_OFFSET_F1_3" },
412 { R200_PP_CUBIC_OFFSET_F2_3
, "R200_PP_CUBIC_OFFSET_F2_3" },
413 { R200_PP_CUBIC_OFFSET_F3_3
, "R200_PP_CUBIC_OFFSET_F3_3" },
414 { R200_PP_CUBIC_OFFSET_F4_3
, "R200_PP_CUBIC_OFFSET_F4_3" },
415 { R200_PP_CUBIC_OFFSET_F5_3
, "R200_PP_CUBIC_OFFSET_F5_3" },
416 { R200_PP_TXOFFSET_4
, "R200_PP_TXOFFSET_4" },
417 { R200_PP_CUBIC_OFFSET_F1_4
, "R200_PP_CUBIC_OFFSET_F1_4" },
418 { R200_PP_CUBIC_OFFSET_F2_4
, "R200_PP_CUBIC_OFFSET_F2_4" },
419 { R200_PP_CUBIC_OFFSET_F3_4
, "R200_PP_CUBIC_OFFSET_F3_4" },
420 { R200_PP_CUBIC_OFFSET_F4_4
, "R200_PP_CUBIC_OFFSET_F4_4" },
421 { R200_PP_CUBIC_OFFSET_F5_4
, "R200_PP_CUBIC_OFFSET_F5_4" },
422 { R200_PP_TXOFFSET_5
, "R200_PP_TXOFFSET_5" },
423 { R200_PP_CUBIC_OFFSET_F1_5
, "R200_PP_CUBIC_OFFSET_F1_5" },
424 { R200_PP_CUBIC_OFFSET_F2_5
, "R200_PP_CUBIC_OFFSET_F2_5" },
425 { R200_PP_CUBIC_OFFSET_F3_5
, "R200_PP_CUBIC_OFFSET_F3_5" },
426 { R200_PP_CUBIC_OFFSET_F4_5
, "R200_PP_CUBIC_OFFSET_F4_5" },
427 { R200_PP_CUBIC_OFFSET_F5_5
, "R200_PP_CUBIC_OFFSET_F5_5" },
428 { R200_PP_TAM_DEBUG3
, "R200_PP_TAM_DEBUG3" },
429 { R200_PP_TFACTOR_0
, "R200_PP_TFACTOR_0" },
430 { R200_PP_TFACTOR_1
, "R200_PP_TFACTOR_1" },
431 { R200_PP_TFACTOR_2
, "R200_PP_TFACTOR_2" },
432 { R200_PP_TFACTOR_3
, "R200_PP_TFACTOR_3" },
433 { R200_PP_TFACTOR_4
, "R200_PP_TFACTOR_4" },
434 { R200_PP_TFACTOR_5
, "R200_PP_TFACTOR_5" },
435 { R200_PP_TXCBLEND_0
, "R200_PP_TXCBLEND_0" },
436 { R200_PP_TXCBLEND2_0
, "R200_PP_TXCBLEND2_0" },
437 { R200_PP_TXABLEND_0
, "R200_PP_TXABLEND_0" },
438 { R200_PP_TXABLEND2_0
, "R200_PP_TXABLEND2_0" },
439 { R200_PP_TXCBLEND_1
, "R200_PP_TXCBLEND_1" },
440 { R200_PP_TXCBLEND2_1
, "R200_PP_TXCBLEND2_1" },
441 { R200_PP_TXABLEND_1
, "R200_PP_TXABLEND_1" },
442 { R200_PP_TXABLEND2_1
, "R200_PP_TXABLEND2_1" },
443 { R200_PP_TXCBLEND_2
, "R200_PP_TXCBLEND_2" },
444 { R200_PP_TXCBLEND2_2
, "R200_PP_TXCBLEND2_2" },
445 { R200_PP_TXABLEND_2
, "R200_PP_TXABLEND_2" },
446 { R200_PP_TXABLEND2_2
, "R200_PP_TXABLEND2_2" },
447 { R200_PP_TXCBLEND_3
, "R200_PP_TXCBLEND_3" },
448 { R200_PP_TXCBLEND2_3
, "R200_PP_TXCBLEND2_3" },
449 { R200_PP_TXABLEND_3
, "R200_PP_TXABLEND_3" },
450 { R200_PP_TXABLEND2_3
, "R200_PP_TXABLEND2_3" },
451 { R200_PP_TXCBLEND_4
, "R200_PP_TXCBLEND_4" },
452 { R200_PP_TXCBLEND2_4
, "R200_PP_TXCBLEND2_4" },
453 { R200_PP_TXABLEND_4
, "R200_PP_TXABLEND_4" },
454 { R200_PP_TXABLEND2_4
, "R200_PP_TXABLEND2_4" },
455 { R200_PP_TXCBLEND_5
, "R200_PP_TXCBLEND_5" },
456 { R200_PP_TXCBLEND2_5
, "R200_PP_TXCBLEND2_5" },
457 { R200_PP_TXABLEND_5
, "R200_PP_TXABLEND_5" },
458 { R200_PP_TXABLEND2_5
, "R200_PP_TXABLEND2_5" },
459 { R200_PP_TXCBLEND_6
, "R200_PP_TXCBLEND_6" },
460 { R200_PP_TXCBLEND2_6
, "R200_PP_TXCBLEND2_6" },
461 { R200_PP_TXABLEND_6
, "R200_PP_TXABLEND_6" },
462 { R200_PP_TXABLEND2_6
, "R200_PP_TXABLEND2_6" },
463 { R200_PP_TXCBLEND_7
, "R200_PP_TXCBLEND_7" },
464 { R200_PP_TXCBLEND2_7
, "R200_PP_TXCBLEND2_7" },
465 { R200_PP_TXABLEND_7
, "R200_PP_TXABLEND_7" },
466 { R200_PP_TXABLEND2_7
, "R200_PP_TXABLEND2_7" },
467 { R200_RB3D_BLENDCOLOR
, "R200_RB3D_BLENDCOLOR" },
468 { R200_RB3D_ABLENDCNTL
, "R200_RB3D_ABLENDCNTL" },
469 { R200_RB3D_CBLENDCNTL
, "R200_RB3D_CBLENDCNTL" },
470 { R200_SE_TCL_OUTPUT_VTX_COMP_SEL
, "R200_SE_TCL_OUTPUT_VTX_COMP_SEL" },
471 { R200_PP_CNTL_X
, "R200_PP_CNTL_X" },
472 { R200_SE_VAP_CNTL_STATUS
, "R200_SE_VAP_CNTL_STATUS" },
473 { R200_SE_TCL_INPUT_VTX_VECTOR_ADDR_0
, "R200_SE_TCL_INPUT_VTX_VECTOR_ADDR_0" },
474 { R200_SE_TCL_INPUT_VTX_VECTOR_ADDR_1
, "R200_SE_TCL_INPUT_VTX_VECTOR_ADDR_1" },
475 { R200_SE_TCL_INPUT_VTX_VECTOR_ADDR_2
, "R200_SE_TCL_INPUT_VTX_VECTOR_ADDR_2" },
476 { R200_SE_TCL_INPUT_VTX_VECTOR_ADDR_3
, "R200_SE_TCL_INPUT_VTX_VECTOR_ADDR_3" },
479 static struct reg_names scalar_names
[] = {
480 { R200_SS_LIGHT_DCD_ADDR
, "R200_SS_LIGHT_DCD_ADDR" },
481 { R200_SS_LIGHT_DCM_ADDR
, "R200_SS_LIGHT_DCM_ADDR" },
482 { R200_SS_LIGHT_SPOT_EXPONENT_ADDR
, "R200_SS_LIGHT_SPOT_EXPONENT_ADDR" },
483 { R200_SS_LIGHT_SPOT_CUTOFF_ADDR
, "R200_SS_LIGHT_SPOT_CUTOFF_ADDR" },
484 { R200_SS_LIGHT_SPECULAR_THRESH_ADDR
, "R200_SS_LIGHT_SPECULAR_THRESH_ADDR" },
485 { R200_SS_LIGHT_RANGE_CUTOFF_SQRD
, "R200_SS_LIGHT_RANGE_CUTOFF_SQRD" },
486 { R200_SS_LIGHT_RANGE_ATT_CONST
, "R200_SS_LIGHT_RANGE_ATT_CONST" },
487 { R200_SS_VERT_GUARD_CLIP_ADJ_ADDR
, "R200_SS_VERT_GUARD_CLIP_ADJ_ADDR" },
488 { R200_SS_VERT_GUARD_DISCARD_ADJ_ADDR
, "R200_SS_VERT_GUARD_DISCARD_ADJ_ADDR" },
489 { R200_SS_HORZ_GUARD_CLIP_ADJ_ADDR
, "R200_SS_HORZ_GUARD_CLIP_ADJ_ADDR" },
490 { R200_SS_HORZ_GUARD_DISCARD_ADJ_ADDR
, "R200_SS_HORZ_GUARD_DISCARD_ADJ_ADDR" },
491 { R200_SS_MAT_0_SHININESS
, "R200_SS_MAT_0_SHININESS" },
492 { R200_SS_MAT_1_SHININESS
, "R200_SS_MAT_1_SHININESS" },
496 /* Puff these out to make them look like normal (dword) registers.
498 static struct reg_names vector_names
[] = {
500 { R200_VS_LIGHT_AMBIENT_ADDR
, "R200_VS_LIGHT_AMBIENT_ADDR" },
501 { R200_VS_LIGHT_DIFFUSE_ADDR
, "R200_VS_LIGHT_DIFFUSE_ADDR" },
502 { R200_VS_LIGHT_SPECULAR_ADDR
, "R200_VS_LIGHT_SPECULAR_ADDR" },
503 { R200_VS_LIGHT_DIRPOS_ADDR
, "R200_VS_LIGHT_DIRPOS_ADDR" },
504 { R200_VS_LIGHT_HWVSPOT_ADDR
, "R200_VS_LIGHT_HWVSPOT_ADDR" },
505 { R200_VS_LIGHT_ATTENUATION_ADDR
, "R200_VS_LIGHT_ATTENUATION_ADDR" },
506 { R200_VS_SPOT_DUAL_CONE
, "R200_VS_SPOT_DUAL_CONE" },
507 { R200_VS_GLOBAL_AMBIENT_ADDR
, "R200_VS_GLOBAL_AMBIENT_ADDR" },
508 { R200_VS_FOG_PARAM_ADDR
, "R200_VS_FOG_PARAM_ADDR" },
509 { R200_VS_EYE_VECTOR_ADDR
, "R200_VS_EYE_VECTOR_ADDR" },
510 { R200_VS_UCP_ADDR
, "R200_VS_UCP_ADDR" },
511 { R200_VS_PNT_SPRITE_VPORT_SCALE
, "R200_VS_PNT_SPRITE_VPORT_SCALE" },
512 { R200_VS_MATRIX_0_MV
, "R200_VS_MATRIX_0_MV" },
513 { R200_VS_MATRIX_1_INV_MV
, "R200_VS_MATRIX_1_INV_MV" },
514 { R200_VS_MATRIX_2_MVP
, "R200_VS_MATRIX_2_MVP" },
515 { R200_VS_MATRIX_3_TEX0
, "R200_VS_MATRIX_3_TEX0" },
516 { R200_VS_MATRIX_4_TEX1
, "R200_VS_MATRIX_4_TEX1" },
517 { R200_VS_MATRIX_5_TEX2
, "R200_VS_MATRIX_5_TEX2" },
518 { R200_VS_MATRIX_6_TEX3
, "R200_VS_MATRIX_6_TEX3" },
519 { R200_VS_MATRIX_7_TEX4
, "R200_VS_MATRIX_7_TEX4" },
520 { R200_VS_MATRIX_8_TEX5
, "R200_VS_MATRIX_8_TEX5" },
521 { R200_VS_MAT_0_EMISS
, "R200_VS_MAT_0_EMISS" },
522 { R200_VS_MAT_0_AMB
, "R200_VS_MAT_0_AMB" },
523 { R200_VS_MAT_0_DIF
, "R200_VS_MAT_0_DIF" },
524 { R200_VS_MAT_0_SPEC
, "R200_VS_MAT_0_SPEC" },
525 { R200_VS_MAT_1_EMISS
, "R200_VS_MAT_1_EMISS" },
526 { R200_VS_MAT_1_AMB
, "R200_VS_MAT_1_AMB" },
527 { R200_VS_MAT_1_DIF
, "R200_VS_MAT_1_DIF" },
528 { R200_VS_MAT_1_SPEC
, "R200_VS_MAT_1_SPEC" },
529 { R200_VS_EYE2CLIP_MTX
, "R200_VS_EYE2CLIP_MTX" },
530 { R200_VS_PNT_SPRITE_ATT_CONST
, "R200_VS_PNT_SPRITE_ATT_CONST" },
531 { R200_VS_PNT_SPRITE_EYE_IN_MODEL
, "R200_VS_PNT_SPRITE_EYE_IN_MODEL" },
532 { R200_VS_PNT_SPRITE_CLAMP
, "R200_VS_PNT_SPRITE_CLAMP" },
533 { R200_VS_MAX
, "R200_VS_MAX" },
537 union fi
{ float f
; int i
; };
545 struct reg_names
*closest
;
555 static struct reg regs
[Elements(reg_names
)+1];
556 static struct reg scalars
[512+1];
557 static struct reg vectors
[512*4+1];
559 static int total
, total_changed
, bufs
;
561 static void init_regs( void )
563 struct reg_names
*tmp
;
566 for (i
= 0 ; i
< Elements(regs
) ; i
++) {
567 regs
[i
].idx
= reg_names
[i
].idx
;
568 regs
[i
].closest
= ®_names
[i
];
572 for (i
= 0, tmp
= scalar_names
; i
< Elements(scalars
) ; i
++) {
573 if (tmp
[1].idx
== i
) tmp
++;
575 scalars
[i
].closest
= tmp
;
576 scalars
[i
].flags
= ISFLOAT
;
579 for (i
= 0, tmp
= vector_names
; i
< Elements(vectors
) ; i
++) {
580 if (tmp
[1].idx
*4 == i
) tmp
++;
582 vectors
[i
].closest
= tmp
;
583 vectors
[i
].flags
= ISFLOAT
|ISVEC
;
586 regs
[Elements(regs
)-1].idx
= -1;
587 scalars
[Elements(scalars
)-1].idx
= -1;
588 vectors
[Elements(vectors
)-1].idx
= -1;
591 static int find_or_add_value( struct reg
*reg
, int val
)
595 for ( j
= 0 ; j
< reg
->nvalues
; j
++)
596 if ( val
== reg
->values
[j
].i
)
599 if (j
== reg
->nalloc
) {
602 reg
->values
= (union fi
*) realloc( reg
->values
,
603 reg
->nalloc
* sizeof(union fi
) );
606 reg
->values
[reg
->nvalues
++].i
= val
;
610 static struct reg
*lookup_reg( struct reg
*tab
, int reg
)
614 for (i
= 0 ; tab
[i
].idx
!= -1 ; i
++) {
615 if (tab
[i
].idx
== reg
)
619 fprintf(stderr
, "*** unknown reg 0x%x\n", reg
);
624 static const char *get_reg_name( struct reg
*reg
)
628 if (reg
->idx
== reg
->closest
->idx
)
629 return reg
->closest
->name
;
632 if (reg
->flags
& ISVEC
) {
633 if (reg
->idx
/4 != reg
->closest
->idx
)
634 sprintf(tmp
, "%s+%d[%d]",
636 (reg
->idx
/4) - reg
->closest
->idx
,
639 sprintf(tmp
, "%s[%d]", reg
->closest
->name
, reg
->idx
%4);
642 if (reg
->idx
!= reg
->closest
->idx
)
643 sprintf(tmp
, "%s+%d", reg
->closest
->name
, reg
->idx
- reg
->closest
->idx
);
645 sprintf(tmp
, "%s", reg
->closest
->name
);
651 static int print_int_reg_assignment( struct reg
*reg
, int data
)
653 int changed
= (reg
->current
.i
!= data
);
654 int ever_seen
= find_or_add_value( reg
, data
);
656 if (VERBOSE
|| (NORMAL
&& (changed
|| !ever_seen
)))
657 fprintf(stderr
, " %s <-- 0x%x", get_reg_name(reg
), data
);
661 fprintf(stderr
, " *** BRAND NEW VALUE");
663 fprintf(stderr
, " *** CHANGED");
666 reg
->current
.i
= data
;
668 if (VERBOSE
|| (NORMAL
&& (changed
|| !ever_seen
)))
669 fprintf(stderr
, "\n");
675 static int print_float_reg_assignment( struct reg
*reg
, float data
)
677 int changed
= (reg
->current
.f
!= data
);
678 int newmin
= (data
< reg
->vmin
);
679 int newmax
= (data
> reg
->vmax
);
681 if (VERBOSE
|| (NORMAL
&& (newmin
|| newmax
|| changed
)))
682 fprintf(stderr
, " %s <-- %.3f", get_reg_name(reg
), data
);
686 fprintf(stderr
, " *** NEW MIN (prev %.3f)", reg
->vmin
);
690 fprintf(stderr
, " *** NEW MAX (prev %.3f)", reg
->vmax
);
694 fprintf(stderr
, " *** CHANGED");
698 reg
->current
.f
= data
;
700 if (VERBOSE
|| (NORMAL
&& (newmin
|| newmax
|| changed
)))
701 fprintf(stderr
, "\n");
706 static int print_reg_assignment( struct reg
*reg
, int data
)
708 reg
->flags
|= TOUCHED
;
709 if (reg
->flags
& ISFLOAT
)
710 return print_float_reg_assignment( reg
, *(float *)&data
);
712 return print_int_reg_assignment( reg
, data
);
715 static void print_reg( struct reg
*reg
)
717 if (reg
->flags
& TOUCHED
) {
718 if (reg
->flags
& ISFLOAT
) {
719 fprintf(stderr
, " %s == %f\n", get_reg_name(reg
), reg
->current
.f
);
721 fprintf(stderr
, " %s == 0x%x\n", get_reg_name(reg
), reg
->current
.i
);
727 static void dump_state( void )
731 for (i
= 0 ; i
< Elements(regs
) ; i
++)
732 print_reg( ®s
[i
] );
734 for (i
= 0 ; i
< Elements(scalars
) ; i
++)
735 print_reg( &scalars
[i
] );
737 for (i
= 0 ; i
< Elements(vectors
) ; i
++)
738 print_reg( &vectors
[i
] );
743 static int radeon_emit_packets(
744 drm_radeon_cmd_header_t header
,
745 drm_radeon_cmd_buffer_t
*cmdbuf
)
747 int id
= (int)header
.packet
.packet_id
;
748 int sz
= packet
[id
].len
;
749 int *data
= (int *)cmdbuf
->buf
;
752 if (sz
* sizeof(int) > cmdbuf
->bufsz
) {
753 fprintf(stderr
, "Packet overflows cmdbuf\n");
757 if (!packet
[id
].name
) {
758 fprintf(stderr
, "*** Unknown packet 0 nr %d\n", id
);
764 fprintf(stderr
, "Packet 0 reg %s nr %d\n", packet
[id
].name
, sz
);
766 for ( i
= 0 ; i
< sz
; i
++) {
767 struct reg
*reg
= lookup_reg( regs
, packet
[id
].start
+ i
*4 );
768 if (print_reg_assignment( reg
, data
[i
] ))
773 cmdbuf
->buf
+= sz
* sizeof(int);
774 cmdbuf
->bufsz
-= sz
* sizeof(int);
779 static int radeon_emit_scalars(
780 drm_radeon_cmd_header_t header
,
781 drm_radeon_cmd_buffer_t
*cmdbuf
)
783 int sz
= header
.scalars
.count
;
784 int *data
= (int *)cmdbuf
->buf
;
785 int start
= header
.scalars
.offset
;
786 int stride
= header
.scalars
.stride
;
790 fprintf(stderr
, "emit scalars, start %d stride %d nr %d (end %d)\n",
791 start
, stride
, sz
, start
+ stride
* sz
);
794 for (i
= 0 ; i
< sz
; i
++, start
+= stride
) {
795 struct reg
*reg
= lookup_reg( scalars
, start
);
796 if (print_reg_assignment( reg
, data
[i
] ))
801 cmdbuf
->buf
+= sz
* sizeof(int);
802 cmdbuf
->bufsz
-= sz
* sizeof(int);
807 static int radeon_emit_scalars2(
808 drm_radeon_cmd_header_t header
,
809 drm_radeon_cmd_buffer_t
*cmdbuf
)
811 int sz
= header
.scalars
.count
;
812 int *data
= (int *)cmdbuf
->buf
;
813 int start
= header
.scalars
.offset
+ 0x100;
814 int stride
= header
.scalars
.stride
;
818 fprintf(stderr
, "emit scalars2, start %d stride %d nr %d (end %d)\n",
819 start
, stride
, sz
, start
+ stride
* sz
);
821 if (start
+ stride
* sz
> 258) {
822 fprintf(stderr
, "emit scalars OVERFLOW %d/%d/%d\n", start
, stride
, sz
);
826 for (i
= 0 ; i
< sz
; i
++, start
+= stride
) {
827 struct reg
*reg
= lookup_reg( scalars
, start
);
828 if (print_reg_assignment( reg
, data
[i
] ))
833 cmdbuf
->buf
+= sz
* sizeof(int);
834 cmdbuf
->bufsz
-= sz
* sizeof(int);
838 /* Check: inf/nan/extreme-size?
839 * Check: table start, end, nr, etc.
841 static int radeon_emit_vectors(
842 drm_radeon_cmd_header_t header
,
843 drm_radeon_cmd_buffer_t
*cmdbuf
)
845 int sz
= header
.vectors
.count
;
846 int *data
= (int *)cmdbuf
->buf
;
847 int start
= header
.vectors
.offset
;
848 int stride
= header
.vectors
.stride
;
852 fprintf(stderr
, "emit vectors, start %d stride %d nr %d (end %d) (0x%x)\n",
853 start
, stride
, sz
, start
+ stride
* sz
, header
.i
);
855 /* if (start + stride * (sz/4) > 128) { */
856 /* fprintf(stderr, "emit vectors OVERFLOW %d/%d/%d\n", start, stride, sz); */
860 for (i
= 0 ; i
< sz
; start
+= stride
) {
862 for (j
= 0 ; j
< 4 ; i
++,j
++) {
863 struct reg
*reg
= lookup_reg( vectors
, start
*4+j
);
864 if (print_reg_assignment( reg
, data
[i
] ))
873 cmdbuf
->buf
+= sz
* sizeof(int);
874 cmdbuf
->bufsz
-= sz
* sizeof(int);
879 static int print_vertex_format( int vfmt
)
882 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",
886 (vfmt
& R200_VTX_Z0
) ? "z," : "",
887 (vfmt
& R200_VTX_W0
) ? "w0," : "",
888 (vfmt
& R200_VTX_FPCOLOR
) ? "fpcolor," : "",
889 (vfmt
& R200_VTX_FPALPHA
) ? "fpalpha," : "",
890 (vfmt
& R200_VTX_PKCOLOR
) ? "pkcolor," : "",
891 (vfmt
& R200_VTX_FPSPEC
) ? "fpspec," : "",
892 (vfmt
& R200_VTX_FPFOG
) ? "fpfog," : "",
893 (vfmt
& R200_VTX_PKSPEC
) ? "pkspec," : "",
894 (vfmt
& R200_VTX_ST0
) ? "st0," : "",
895 (vfmt
& R200_VTX_ST1
) ? "st1," : "",
896 (vfmt
& R200_VTX_Q1
) ? "q1," : "",
897 (vfmt
& R200_VTX_ST2
) ? "st2," : "",
898 (vfmt
& R200_VTX_Q2
) ? "q2," : "",
899 (vfmt
& R200_VTX_ST3
) ? "st3," : "",
900 (vfmt
& R200_VTX_Q3
) ? "q3," : "",
901 (vfmt
& R200_VTX_Q0
) ? "q0," : "",
902 (vfmt
& R200_VTX_N0
) ? "n0," : "",
903 (vfmt
& R200_VTX_XY1
) ? "xy1," : "",
904 (vfmt
& R200_VTX_Z1
) ? "z1," : "",
905 (vfmt
& R200_VTX_W1
) ? "w1," : "",
906 (vfmt
& R200_VTX_N1
) ? "n1," : "");
909 if (!find_or_add_value( &others
[V_VTXFMT
], vfmt
))
910 fprintf(stderr
, " *** NEW VALUE");
912 fprintf(stderr
, "\n");
919 static char *primname
[0x10] = {
938 static int print_prim_and_flags( int prim
)
943 fprintf(stderr
, " %s(%x): %s%s%s%s%s%s\n",
946 ((prim
& 0x30) == R200_VF_PRIM_WALK_IND
) ? "IND," : "",
947 ((prim
& 0x30) == R200_VF_PRIM_WALK_LIST
) ? "LIST," : "",
948 ((prim
& 0x30) == R200_VF_PRIM_WALK_RING
) ? "RING," : "",
949 (prim
& R200_VF_COLOR_ORDER_RGBA
) ? "RGBA," : "BGRA, ",
950 (prim
& R200_VF_INDEX_SZ_4
) ? "INDX-32," : "",
951 (prim
& R200_VF_TCL_OUTPUT_VTX_ENABLE
) ? "TCL_OUT_VTX," : "");
956 fprintf(stderr
, " prim: %s numverts %d\n", primname
[prim
&0xf], numverts
);
958 switch (prim
& 0xf) {
959 case R200_VF_PRIM_NONE
:
960 case R200_VF_PRIM_POINTS
:
962 fprintf(stderr
, "Bad nr verts for line %d\n", numverts
);
966 case R200_VF_PRIM_LINES
:
967 case R200_VF_PRIM_POINT_SPRITES
:
968 if ((numverts
& 1) || numverts
== 0) {
969 fprintf(stderr
, "Bad nr verts for line %d\n", numverts
);
973 case R200_VF_PRIM_LINE_STRIP
:
974 case R200_VF_PRIM_LINE_LOOP
:
976 fprintf(stderr
, "Bad nr verts for line_strip %d\n", numverts
);
980 case R200_VF_PRIM_TRIANGLES
:
981 case R200_VF_PRIM_3VRT_POINTS
:
982 case R200_VF_PRIM_3VRT_LINES
:
983 case R200_VF_PRIM_RECT_LIST
:
984 if (numverts
% 3 || numverts
== 0) {
985 fprintf(stderr
, "Bad nr verts for tri %d\n", numverts
);
989 case R200_VF_PRIM_TRIANGLE_FAN
:
990 case R200_VF_PRIM_TRIANGLE_STRIP
:
991 case R200_VF_PRIM_POLYGON
:
993 fprintf(stderr
, "Bad nr verts for strip/fan %d\n", numverts
);
997 case R200_VF_PRIM_QUADS
:
998 if (numverts
% 4 || numverts
== 0) {
999 fprintf(stderr
, "Bad nr verts for quad %d\n", numverts
);
1003 case R200_VF_PRIM_QUAD_STRIP
:
1004 if (numverts
% 2 || numverts
< 4) {
1005 fprintf(stderr
, "Bad nr verts for quadstrip %d\n", numverts
);
1010 fprintf(stderr
, "Bad primitive\n");
1016 /* build in knowledge about each packet type
1018 static int radeon_emit_packet3( drm_radeon_cmd_buffer_t
*cmdbuf
)
1021 int *cmd
= (int *)cmdbuf
->buf
;
1023 int i
, stride
, size
, start
;
1025 cmdsz
= 2 + ((cmd
[0] & RADEON_CP_PACKET_COUNT_MASK
) >> 16);
1027 if ((cmd
[0] & RADEON_CP_PACKET_MASK
) != RADEON_CP_PACKET3
||
1028 cmdsz
* 4 > cmdbuf
->bufsz
||
1029 cmdsz
> RADEON_CP_PACKET_MAX_DWORDS
) {
1030 fprintf(stderr
, "Bad packet\n");
1034 switch( cmd
[0] & ~RADEON_CP_PACKET_COUNT_MASK
) {
1035 case R200_CP_CMD_NOP
:
1037 fprintf(stderr
, "PACKET3_NOP, %d dwords\n", cmdsz
);
1039 case R200_CP_CMD_NEXT_CHAR
:
1041 fprintf(stderr
, "PACKET3_NEXT_CHAR, %d dwords\n", cmdsz
);
1043 case R200_CP_CMD_PLY_NEXTSCAN
:
1045 fprintf(stderr
, "PACKET3_PLY_NEXTSCAN, %d dwords\n", cmdsz
);
1047 case R200_CP_CMD_SET_SCISSORS
:
1049 fprintf(stderr
, "PACKET3_SET_SCISSORS, %d dwords\n", cmdsz
);
1051 case R200_CP_CMD_LOAD_MICROCODE
:
1053 fprintf(stderr
, "PACKET3_LOAD_MICROCODE, %d dwords\n", cmdsz
);
1055 case R200_CP_CMD_WAIT_FOR_IDLE
:
1057 fprintf(stderr
, "PACKET3_WAIT_FOR_IDLE, %d dwords\n", cmdsz
);
1060 case R200_CP_CMD_3D_DRAW_VBUF
:
1062 fprintf(stderr
, "PACKET3_3D_DRAW_VBUF, %d dwords\n", cmdsz
);
1063 /* print_vertex_format(cmd[1]); */
1064 if (print_prim_and_flags(cmd
[2]))
1068 case R200_CP_CMD_3D_DRAW_IMMD
:
1070 fprintf(stderr
, "PACKET3_3D_DRAW_IMMD, %d dwords\n", cmdsz
);
1072 case R200_CP_CMD_3D_DRAW_INDX
: {
1075 fprintf(stderr
, "PACKET3_3D_DRAW_INDX, %d dwords\n", cmdsz
);
1076 /* print_vertex_format(cmd[1]); */
1077 if (print_prim_and_flags(cmd
[2]))
1079 neltdwords
= cmd
[2]>>16;
1080 neltdwords
+= neltdwords
& 1;
1082 if (neltdwords
+ 3 != cmdsz
)
1083 fprintf(stderr
, "Mismatch in DRAW_INDX, %d vs cmdsz %d\n",
1087 case R200_CP_CMD_LOAD_PALETTE
:
1089 fprintf(stderr
, "PACKET3_LOAD_PALETTE, %d dwords\n", cmdsz
);
1091 case R200_CP_CMD_3D_LOAD_VBPNTR
:
1093 fprintf(stderr
, "PACKET3_3D_LOAD_VBPNTR, %d dwords\n", cmdsz
);
1094 fprintf(stderr
, " nr arrays: %d\n", cmd
[1]);
1097 if (((cmd
[1]/2)*3) + ((cmd
[1]%2)*2) != cmdsz
- 2) {
1098 fprintf(stderr
, " ****** MISMATCH %d/%d *******\n",
1099 ((cmd
[1]/2)*3) + ((cmd
[1]%2)*2) + 2, cmdsz
);
1105 for (i
= 0 ; i
< cmd
[1] ; i
++) {
1107 stride
= (tmp
[0]>>24) & 0xff;
1108 size
= (tmp
[0]>>16) & 0xff;
1113 stride
= (tmp
[0]>>8) & 0xff;
1114 size
= (tmp
[0]) & 0xff;
1117 fprintf(stderr
, " array %d: start 0x%x vsize %d vstride %d\n",
1118 i
, start
, size
, stride
);
1122 case R200_CP_CMD_PAINT
:
1124 fprintf(stderr
, "PACKET3_CNTL_PAINT, %d dwords\n", cmdsz
);
1126 case R200_CP_CMD_BITBLT
:
1128 fprintf(stderr
, "PACKET3_CNTL_BITBLT, %d dwords\n", cmdsz
);
1130 case R200_CP_CMD_SMALLTEXT
:
1132 fprintf(stderr
, "PACKET3_CNTL_SMALLTEXT, %d dwords\n", cmdsz
);
1134 case R200_CP_CMD_HOSTDATA_BLT
:
1136 fprintf(stderr
, "PACKET3_CNTL_HOSTDATA_BLT, %d dwords\n",
1139 case R200_CP_CMD_POLYLINE
:
1141 fprintf(stderr
, "PACKET3_CNTL_POLYLINE, %d dwords\n", cmdsz
);
1143 case R200_CP_CMD_POLYSCANLINES
:
1145 fprintf(stderr
, "PACKET3_CNTL_POLYSCANLINES, %d dwords\n",
1148 case R200_CP_CMD_PAINT_MULTI
:
1150 fprintf(stderr
, "PACKET3_CNTL_PAINT_MULTI, %d dwords\n",
1153 case R200_CP_CMD_BITBLT_MULTI
:
1155 fprintf(stderr
, "PACKET3_CNTL_BITBLT_MULTI, %d dwords\n",
1158 case R200_CP_CMD_TRANS_BITBLT
:
1160 fprintf(stderr
, "PACKET3_CNTL_TRANS_BITBLT, %d dwords\n",
1163 case R200_CP_CMD_3D_DRAW_VBUF_2
:
1165 fprintf(stderr
, "R200_CP_CMD_3D_DRAW_VBUF_2, %d dwords\n",
1167 if (print_prim_and_flags(cmd
[1]))
1170 case R200_CP_CMD_3D_DRAW_IMMD_2
:
1172 fprintf(stderr
, "R200_CP_CMD_3D_DRAW_IMMD_2, %d dwords\n",
1174 if (print_prim_and_flags(cmd
[1]))
1177 case R200_CP_CMD_3D_DRAW_INDX_2
:
1179 fprintf(stderr
, "R200_CP_CMD_3D_DRAW_INDX_2, %d dwords\n",
1181 if (print_prim_and_flags(cmd
[1]))
1185 fprintf(stderr
, "UNKNOWN PACKET, %d dwords\n", cmdsz
);
1189 cmdbuf
->buf
+= cmdsz
* 4;
1190 cmdbuf
->bufsz
-= cmdsz
* 4;
1195 /* Check cliprects for bounds, then pass on to above:
1197 static int radeon_emit_packet3_cliprect( drm_radeon_cmd_buffer_t
*cmdbuf
)
1199 drm_clip_rect_t
*boxes
= (drm_clip_rect_t
*)cmdbuf
->boxes
;
1202 if (VERBOSE
&& total_changed
) {
1209 if ( i
< cmdbuf
->nbox
) {
1210 fprintf(stderr
, "Emit box %d/%d %d,%d %d,%d\n",
1212 boxes
[i
].x1
, boxes
[i
].y1
, boxes
[i
].x2
, boxes
[i
].y2
);
1214 } while ( ++i
< cmdbuf
->nbox
);
1217 if (cmdbuf
->nbox
== 1)
1220 return radeon_emit_packet3( cmdbuf
);
1224 int r200SanityCmdBuffer( r200ContextPtr rmesa
,
1226 drm_clip_rect_t
*boxes
)
1229 drm_radeon_cmd_buffer_t cmdbuf
;
1230 drm_radeon_cmd_header_t header
;
1231 static int inited
= 0;
1239 cmdbuf
.buf
= rmesa
->store
.cmd_buf
;
1240 cmdbuf
.bufsz
= rmesa
->store
.cmd_used
;
1241 cmdbuf
.boxes
= (drm_clip_rect_t
*)boxes
;
1244 while ( cmdbuf
.bufsz
>= sizeof(header
) ) {
1246 header
.i
= *(int *)cmdbuf
.buf
;
1247 cmdbuf
.buf
+= sizeof(header
);
1248 cmdbuf
.bufsz
-= sizeof(header
);
1250 switch (header
.header
.cmd_type
) {
1251 case RADEON_CMD_PACKET
:
1252 if (radeon_emit_packets( header
, &cmdbuf
)) {
1253 fprintf(stderr
,"radeon_emit_packets failed\n");
1258 case RADEON_CMD_SCALARS
:
1259 if (radeon_emit_scalars( header
, &cmdbuf
)) {
1260 fprintf(stderr
,"radeon_emit_scalars failed\n");
1265 case RADEON_CMD_SCALARS2
:
1266 if (radeon_emit_scalars2( header
, &cmdbuf
)) {
1267 fprintf(stderr
,"radeon_emit_scalars failed\n");
1272 case RADEON_CMD_VECTORS
:
1273 if (radeon_emit_vectors( header
, &cmdbuf
)) {
1274 fprintf(stderr
,"radeon_emit_vectors failed\n");
1279 case RADEON_CMD_DMA_DISCARD
:
1280 idx
= header
.dma
.buf_idx
;
1282 fprintf(stderr
, "RADEON_CMD_DMA_DISCARD buf %d\n", idx
);
1286 case RADEON_CMD_PACKET3
:
1287 if (radeon_emit_packet3( &cmdbuf
)) {
1288 fprintf(stderr
,"radeon_emit_packet3 failed\n");
1293 case RADEON_CMD_PACKET3_CLIP
:
1294 if (radeon_emit_packet3_cliprect( &cmdbuf
)) {
1295 fprintf(stderr
,"radeon_emit_packet3_clip failed\n");
1300 case RADEON_CMD_WAIT
:
1304 fprintf(stderr
,"bad cmd_type %d at %p\n",
1305 header
.header
.cmd_type
,
1306 cmdbuf
.buf
- sizeof(header
));
1316 fprintf(stderr
, "Bufs %d Total emitted %d real changes %d (%.2f%%)\n",
1318 total
, total_changed
,
1319 ((float)total_changed
/(float)total
*100.0));
1320 fprintf(stderr
, "Total emitted per buf: %.2f\n",
1321 (float)total
/(float)bufs
);
1322 fprintf(stderr
, "Real changes per buf: %.2f\n",
1323 (float)total_changed
/(float)bufs
);
1325 bufs
= n
= total
= total_changed
= 0;
1329 fprintf(stderr
, "leaving %s\n\n\n", __FUNCTION__
);