13a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/**************************************************************************
23a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
33a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgCopyright 2002 ATI Technologies Inc., Ontario, Canada, and
43a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org                     Tungsten Graphics Inc, Cedar Park, TX.
53a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
63a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgAll Rights Reserved.
73a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
83a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgPermission is hereby granted, free of charge, to any person obtaining a
93a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgcopy of this software and associated documentation files (the "Software"),
103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgto deal in the Software without restriction, including without limitation
113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgon the rights to use, copy, modify, merge, publish, distribute, sub
123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orglicense, and/or sell copies of the Software, and to permit persons to whom
133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgthe Software is furnished to do so, subject to the following conditions:
143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgThe above copyright notice and this permission notice (including the next
163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgparagraph) shall be included in all copies or substantial portions of the
173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgSoftware.
183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgFITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgATI, TUNGSTEN GRAPHICS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgDAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgUSE OR OTHER DEALINGS IN THE SOFTWARE.
263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org**************************************************************************/
283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/*
303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Authors:
313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *   Keith Whitwell <keith@tungstengraphics.com>
323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *
333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */
343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include <errno.h>
363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "main/glheader.h"
383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "main/imports.h"
393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "r200_context.h"
413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "r200_sanity.h"
423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "radeon_reg.h"
433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "r200_reg.h"
443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* Set this '1' to get more verbiage.
463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */
473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define MORE_VERBOSE 1
483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#if MORE_VERBOSE
503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define VERBOSE (R200_DEBUG & RADEON_VERBOSE)
513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define NORMAL  (1)
523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#else
533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define VERBOSE 0
543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define NORMAL  (R200_DEBUG & RADEON_VERBOSE)
553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#endif
563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* New (1.3) state mechanism.  3 commands (packet, scalar, vector) in
593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 1.3 cmdbuffers allow all previous state to be updated as well as
603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * the tcl scalar and vector areas.
613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */
623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic struct {
633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int start;
643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int len;
653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   const char *name;
663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} packet[RADEON_MAX_STATE_PACKETS] = {
673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { RADEON_PP_MISC,7,"RADEON_PP_MISC" },
683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { RADEON_PP_CNTL,3,"RADEON_PP_CNTL" },
693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { RADEON_RB3D_COLORPITCH,1,"RADEON_RB3D_COLORPITCH" },
703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { RADEON_RE_LINE_PATTERN,2,"RADEON_RE_LINE_PATTERN" },
713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { RADEON_SE_LINE_WIDTH,1,"RADEON_SE_LINE_WIDTH" },
723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { RADEON_PP_LUM_MATRIX,1,"RADEON_PP_LUM_MATRIX" },
733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { RADEON_PP_ROT_MATRIX_0,2,"RADEON_PP_ROT_MATRIX_0" },
743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { RADEON_RB3D_STENCILREFMASK,3,"RADEON_RB3D_STENCILREFMASK" },
753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { RADEON_SE_VPORT_XSCALE,6,"RADEON_SE_VPORT_XSCALE" },
763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { RADEON_SE_CNTL,2,"RADEON_SE_CNTL" },
773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { RADEON_SE_CNTL_STATUS,1,"RADEON_SE_CNTL_STATUS" },
783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { RADEON_RE_MISC,1,"RADEON_RE_MISC" },
793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { RADEON_PP_TXFILTER_0,6,"RADEON_PP_TXFILTER_0" },
803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { RADEON_PP_BORDER_COLOR_0,1,"RADEON_PP_BORDER_COLOR_0" },
813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { RADEON_PP_TXFILTER_1,6,"RADEON_PP_TXFILTER_1" },
823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { RADEON_PP_BORDER_COLOR_1,1,"RADEON_PP_BORDER_COLOR_1" },
833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { RADEON_PP_TXFILTER_2,6,"RADEON_PP_TXFILTER_2" },
843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { RADEON_PP_BORDER_COLOR_2,1,"RADEON_PP_BORDER_COLOR_2" },
853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { RADEON_SE_ZBIAS_FACTOR,2,"RADEON_SE_ZBIAS_FACTOR" },
863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { RADEON_SE_TCL_OUTPUT_VTX_FMT,11,"RADEON_SE_TCL_OUTPUT_VTX_FMT" },
873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { RADEON_SE_TCL_MATERIAL_EMMISSIVE_RED,17,"RADEON_SE_TCL_MATERIAL_EMMISSIVE_RED" },
883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND_0, 4, "R200_EMIT_PP_TXCBLEND_0" },
893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND_1, 4, "R200_PP_TXCBLEND_1" },
903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND_2, 4, "R200_PP_TXCBLEND_2" },
913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND_3, 4, "R200_PP_TXCBLEND_3" },
923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND_4, 4, "R200_PP_TXCBLEND_4" },
933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND_5, 4, "R200_PP_TXCBLEND_5" },
943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND_6, 4, "R200_PP_TXCBLEND_6" },
953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND_7, 4, "R200_PP_TXCBLEND_7" },
963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TCL_LIGHT_MODEL_CTL_0, 6, "R200_SE_TCL_LIGHT_MODEL_CTL_0" },
973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TFACTOR_0, 6, "R200_PP_TFACTOR_0" },
983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_FMT_0, 4, "R200_SE_VTX_FMT_0" },
993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VAP_CNTL, 1, "R200_SE_VAP_CNTL" },
1003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TCL_MATRIX_SEL_0, 5, "R200_SE_TCL_MATRIX_SEL_0" },
1013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TCL_TEX_PROC_CTL_2, 5, "R200_SE_TCL_TEX_PROC_CTL_2" },
1023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TCL_UCP_VERT_BLEND_CTL, 1, "R200_SE_TCL_UCP_VERT_BLEND_CTL" },
1033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXFILTER_0, 6, "R200_PP_TXFILTER_0" },
1043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXFILTER_1, 6, "R200_PP_TXFILTER_1" },
1053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXFILTER_2, 6, "R200_PP_TXFILTER_2" },
1063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXFILTER_3, 6, "R200_PP_TXFILTER_3" },
1073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXFILTER_4, 6, "R200_PP_TXFILTER_4" },
1083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXFILTER_5, 6, "R200_PP_TXFILTER_5" },
1093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXOFFSET_0, 1, "R200_PP_TXOFFSET_0" },
1103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXOFFSET_1, 1, "R200_PP_TXOFFSET_1" },
1113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXOFFSET_2, 1, "R200_PP_TXOFFSET_2" },
1123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXOFFSET_3, 1, "R200_PP_TXOFFSET_3" },
1133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXOFFSET_4, 1, "R200_PP_TXOFFSET_4" },
1143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXOFFSET_5, 1, "R200_PP_TXOFFSET_5" },
1153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTE_CNTL, 1, "R200_SE_VTE_CNTL" },
1163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TCL_OUTPUT_VTX_COMP_SEL, 1, "R200_SE_TCL_OUTPUT_VTX_COMP_SEL" },
1173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TAM_DEBUG3, 1, "R200_PP_TAM_DEBUG3" },
1183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CNTL_X, 1, "R200_PP_CNTL_X" },
1193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RB3D_DEPTHXY_OFFSET, 1, "R200_RB3D_DEPTHXY_OFFSET" },
1203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RE_AUX_SCISSOR_CNTL, 1, "R200_RE_AUX_SCISSOR_CNTL" },
1213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RE_SCISSOR_TL_0, 2, "R200_RE_SCISSOR_TL_0" },
1223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RE_SCISSOR_TL_1, 2, "R200_RE_SCISSOR_TL_1" },
1233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RE_SCISSOR_TL_2, 2, "R200_RE_SCISSOR_TL_2" },
1243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VAP_CNTL_STATUS, 1, "R200_SE_VAP_CNTL_STATUS" },
1253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_STATE_CNTL, 1, "R200_SE_VTX_STATE_CNTL" },
1263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RE_POINTSIZE, 1, "R200_RE_POINTSIZE" },
1273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TCL_INPUT_VTX_VECTOR_ADDR_0, 4, "R200_SE_TCL_INPUT_VTX_VECTOR_ADDR_0" },
1283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_FACES_0, 1, "R200_PP_CUBIC_FACES_0" }, /* 61 */
1293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F1_0, 5, "R200_PP_CUBIC_OFFSET_F1_0" }, /* 62 */
1303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_FACES_1, 1, "R200_PP_CUBIC_FACES_1" },
1313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F1_1, 5, "R200_PP_CUBIC_OFFSET_F1_1" },
1323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_FACES_2, 1, "R200_PP_CUBIC_FACES_2" },
1333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F1_2, 5, "R200_PP_CUBIC_OFFSET_F1_2" },
1343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_FACES_3, 1, "R200_PP_CUBIC_FACES_3" },
1353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F1_3, 5, "R200_PP_CUBIC_OFFSET_F1_3" },
1363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_FACES_4, 1, "R200_PP_CUBIC_FACES_4" },
1373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F1_4, 5, "R200_PP_CUBIC_OFFSET_F1_4" },
1383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_FACES_5, 1, "R200_PP_CUBIC_FACES_5" },
1393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F1_5, 5, "R200_PP_CUBIC_OFFSET_F1_5" },
1403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { RADEON_PP_TEX_SIZE_0, 2, "RADEON_PP_TEX_SIZE_0" },
1413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { RADEON_PP_TEX_SIZE_1, 2, "RADEON_PP_TEX_SIZE_1" },
1423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { RADEON_PP_TEX_SIZE_2, 2, "RADEON_PP_TEX_SIZE_2" },
1433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RB3D_BLENDCOLOR, 3, "R200_RB3D_BLENDCOLOR" },
1443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TCL_POINT_SPRITE_CNTL, 1, "R200_SE_TCL_POINT_SPRITE_CNTL" },
1453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { RADEON_PP_CUBIC_FACES_0, 1, "RADEON_PP_CUBIC_FACES_0" },
1463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { RADEON_PP_CUBIC_OFFSET_T0_0, 5, "RADEON_PP_CUBIC_OFFSET_T0_0" },
1473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { RADEON_PP_CUBIC_FACES_1, 1, "RADEON_PP_CUBIC_FACES_1" },
1483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { RADEON_PP_CUBIC_OFFSET_T1_0, 5, "RADEON_PP_CUBIC_OFFSET_T1_0" },
1493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { RADEON_PP_CUBIC_FACES_2, 1, "RADEON_PP_CUBIC_FACES_2" },
1503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { RADEON_PP_CUBIC_OFFSET_T2_0, 5, "RADEON_PP_CUBIC_OFFSET_T2_0" },
1513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TRI_PERF, 2, "R200_PP_TRI_PERF" },
1523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND_8, 32, "R200_PP_AFS_0"},   /* 85 */
1533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND_0, 32, "R200_PP_AFS_1"},
1543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TFACTOR_0, 8, "R200_ATF_TFACTOR"},
1553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXFILTER_0, 8, "R200_PP_TXCTLALL_0"},
1563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXFILTER_1, 8, "R200_PP_TXCTLALL_1"},
1573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXFILTER_2, 8, "R200_PP_TXCTLALL_2"},
1583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXFILTER_3, 8, "R200_PP_TXCTLALL_3"},
1593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXFILTER_4, 8, "R200_PP_TXCTLALL_4"},
1603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXFILTER_5, 8, "R200_PP_TXCTLALL_5"},
1613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VAP_PVS_CNTL_1, 2, "R200_VAP_PVS_CNTL"},
1623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org};
1633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
1643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstruct reg_names {
1653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int idx;
1663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   const char *name;
1673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org};
1683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
1693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic struct reg_names reg_names[] = {
1703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_MISC, "R200_PP_MISC" },
1713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_FOG_COLOR, "R200_PP_FOG_COLOR" },
1723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RE_SOLID_COLOR, "R200_RE_SOLID_COLOR" },
1733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RB3D_BLENDCNTL, "R200_RB3D_BLENDCNTL" },
1743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RB3D_DEPTHOFFSET, "R200_RB3D_DEPTHOFFSET" },
1753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RB3D_DEPTHPITCH, "R200_RB3D_DEPTHPITCH" },
1763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RB3D_ZSTENCILCNTL, "R200_RB3D_ZSTENCILCNTL" },
1773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CNTL, "R200_PP_CNTL" },
1783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RB3D_CNTL, "R200_RB3D_CNTL" },
1793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RB3D_COLOROFFSET, "R200_RB3D_COLOROFFSET" },
1803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RE_WIDTH_HEIGHT, "R200_RE_WIDTH_HEIGHT" },
1813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RB3D_COLORPITCH, "R200_RB3D_COLORPITCH" },
1823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_CNTL, "R200_SE_CNTL" },
1833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RE_CNTL, "R200_RE_CNTL" },
1843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RE_MISC, "R200_RE_MISC" },
1853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RE_STIPPLE_ADDR, "R200_RE_STIPPLE_ADDR" },
1863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RE_STIPPLE_DATA, "R200_RE_STIPPLE_DATA" },
1873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RE_LINE_PATTERN, "R200_RE_LINE_PATTERN" },
1883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RE_LINE_STATE, "R200_RE_LINE_STATE" },
1893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RE_SCISSOR_TL_0, "R200_RE_SCISSOR_TL_0" },
1903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RE_SCISSOR_BR_0, "R200_RE_SCISSOR_BR_0" },
1913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RE_SCISSOR_TL_1, "R200_RE_SCISSOR_TL_1" },
1923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RE_SCISSOR_BR_1, "R200_RE_SCISSOR_BR_1" },
1933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RE_SCISSOR_TL_2, "R200_RE_SCISSOR_TL_2" },
1943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RE_SCISSOR_BR_2, "R200_RE_SCISSOR_BR_2" },
1953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RB3D_DEPTHXY_OFFSET, "R200_RB3D_DEPTHXY_OFFSET" },
1963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RB3D_STENCILREFMASK, "R200_RB3D_STENCILREFMASK" },
1973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RB3D_ROPCNTL, "R200_RB3D_ROPCNTL" },
1983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RB3D_PLANEMASK, "R200_RB3D_PLANEMASK" },
1993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VPORT_XSCALE, "R200_SE_VPORT_XSCALE" },
2003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VPORT_XOFFSET, "R200_SE_VPORT_XOFFSET" },
2013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VPORT_YSCALE, "R200_SE_VPORT_YSCALE" },
2023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VPORT_YOFFSET, "R200_SE_VPORT_YOFFSET" },
2033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VPORT_ZSCALE, "R200_SE_VPORT_ZSCALE" },
2043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VPORT_ZOFFSET, "R200_SE_VPORT_ZOFFSET" },
2053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_ZBIAS_FACTOR, "R200_SE_ZBIAS_FACTOR" },
2063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_ZBIAS_CONSTANT, "R200_SE_ZBIAS_CONSTANT" },
2073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_LINE_WIDTH, "R200_SE_LINE_WIDTH" },
2083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VAP_CNTL, "R200_SE_VAP_CNTL" },
2093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VF_CNTL, "R200_SE_VF_CNTL" },
2103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_FMT_0, "R200_SE_VTX_FMT_0" },
2113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_FMT_1, "R200_SE_VTX_FMT_1" },
2123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TCL_OUTPUT_VTX_FMT_0, "R200_SE_TCL_OUTPUT_VTX_FMT_0" },
2133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TCL_OUTPUT_VTX_FMT_1, "R200_SE_TCL_OUTPUT_VTX_FMT_1" },
2143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTE_CNTL, "R200_SE_VTE_CNTL" },
2153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_NUM_ARRAYS, "R200_SE_VTX_NUM_ARRAYS" },
2163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_AOS_ATTR01, "R200_SE_VTX_AOS_ATTR01" },
2173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_AOS_ADDR0, "R200_SE_VTX_AOS_ADDR0" },
2183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_AOS_ADDR1, "R200_SE_VTX_AOS_ADDR1" },
2193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_AOS_ATTR23, "R200_SE_VTX_AOS_ATTR23" },
2203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_AOS_ADDR2, "R200_SE_VTX_AOS_ADDR2" },
2213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_AOS_ADDR3, "R200_SE_VTX_AOS_ADDR3" },
2223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_AOS_ATTR45, "R200_SE_VTX_AOS_ATTR45" },
2233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_AOS_ADDR4, "R200_SE_VTX_AOS_ADDR4" },
2243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_AOS_ADDR5, "R200_SE_VTX_AOS_ADDR5" },
2253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_AOS_ATTR67, "R200_SE_VTX_AOS_ATTR67" },
2263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_AOS_ADDR6, "R200_SE_VTX_AOS_ADDR6" },
2273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_AOS_ADDR7, "R200_SE_VTX_AOS_ADDR7" },
2283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_AOS_ATTR89, "R200_SE_VTX_AOS_ATTR89" },
2293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_AOS_ADDR8, "R200_SE_VTX_AOS_ADDR8" },
2303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_AOS_ADDR9, "R200_SE_VTX_AOS_ADDR9" },
2313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_AOS_ATTR1011, "R200_SE_VTX_AOS_ATTR1011" },
2323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_AOS_ADDR10, "R200_SE_VTX_AOS_ADDR10" },
2333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_AOS_ADDR11, "R200_SE_VTX_AOS_ADDR11" },
2343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VF_MAX_VTX_INDX, "R200_SE_VF_MAX_VTX_INDX" },
2353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VF_MIN_VTX_INDX, "R200_SE_VF_MIN_VTX_INDX" },
2363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_STATE_CNTL, "R200_SE_VTX_STATE_CNTL" },
2373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TCL_VECTOR_INDX_REG, "R200_SE_TCL_VECTOR_INDX_REG" },
2383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TCL_VECTOR_DATA_REG, "R200_SE_TCL_VECTOR_DATA_REG" },
2393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TCL_SCALAR_INDX_REG, "R200_SE_TCL_SCALAR_INDX_REG" },
2403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TCL_SCALAR_DATA_REG, "R200_SE_TCL_SCALAR_DATA_REG" },
2413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TCL_MATRIX_SEL_0, "R200_SE_TCL_MATRIX_SEL_0" },
2423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TCL_MATRIX_SEL_1, "R200_SE_TCL_MATRIX_SEL_1" },
2433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TCL_MATRIX_SEL_2, "R200_SE_TCL_MATRIX_SEL_2" },
2443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TCL_MATRIX_SEL_3, "R200_SE_TCL_MATRIX_SEL_3" },
2453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TCL_MATRIX_SEL_4, "R200_SE_TCL_MATRIX_SEL_4" },
2463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TCL_LIGHT_MODEL_CTL_0, "R200_SE_TCL_LIGHT_MODEL_CTL_0" },
2473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TCL_LIGHT_MODEL_CTL_1, "R200_SE_TCL_LIGHT_MODEL_CTL_1" },
2483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TCL_PER_LIGHT_CTL_0, "R200_SE_TCL_PER_LIGHT_CTL_0" },
2493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TCL_PER_LIGHT_CTL_1, "R200_SE_TCL_PER_LIGHT_CTL_1" },
2503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TCL_PER_LIGHT_CTL_2, "R200_SE_TCL_PER_LIGHT_CTL_2" },
2513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TCL_PER_LIGHT_CTL_3, "R200_SE_TCL_PER_LIGHT_CTL_3" },
2523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TCL_TEX_PROC_CTL_2, "R200_SE_TCL_TEX_PROC_CTL_2" },
2533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TCL_TEX_PROC_CTL_3, "R200_SE_TCL_TEX_PROC_CTL_3" },
2543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TCL_TEX_PROC_CTL_0, "R200_SE_TCL_TEX_PROC_CTL_0" },
2553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TCL_TEX_PROC_CTL_1, "R200_SE_TCL_TEX_PROC_CTL_1" },
2563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TC_TEX_CYL_WRAP_CTL, "R200_SE_TC_TEX_CYL_WRAP_CTL" },
2573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TCL_UCP_VERT_BLEND_CTL, "R200_SE_TCL_UCP_VERT_BLEND_CTL" },
2583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TCL_POINT_SPRITE_CNTL, "R200_SE_TCL_POINT_SPRITE_CNTL" },
2593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_POS_0_X_4, "R200_SE_VTX_ST_POS_0_X_4" },
2603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_POS_0_Y_4, "R200_SE_VTX_ST_POS_0_Y_4" },
2613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_POS_0_Z_4, "R200_SE_VTX_ST_POS_0_Z_4" },
2623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_POS_0_W_4, "R200_SE_VTX_ST_POS_0_W_4" },
2633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_NORM_0_X, "R200_SE_VTX_ST_NORM_0_X" },
2643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_NORM_0_Y, "R200_SE_VTX_ST_NORM_0_Y" },
2653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_NORM_0_Z, "R200_SE_VTX_ST_NORM_0_Z" },
2663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_PVMS, "R200_SE_VTX_ST_PVMS" },
2673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_0_R, "R200_SE_VTX_ST_CLR_0_R" },
2683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_0_G, "R200_SE_VTX_ST_CLR_0_G" },
2693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_0_B, "R200_SE_VTX_ST_CLR_0_B" },
2703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_0_A, "R200_SE_VTX_ST_CLR_0_A" },
2713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_1_R, "R200_SE_VTX_ST_CLR_1_R" },
2723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_1_G, "R200_SE_VTX_ST_CLR_1_G" },
2733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_1_B, "R200_SE_VTX_ST_CLR_1_B" },
2743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_1_A, "R200_SE_VTX_ST_CLR_1_A" },
2753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_2_R, "R200_SE_VTX_ST_CLR_2_R" },
2763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_2_G, "R200_SE_VTX_ST_CLR_2_G" },
2773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_2_B, "R200_SE_VTX_ST_CLR_2_B" },
2783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_2_A, "R200_SE_VTX_ST_CLR_2_A" },
2793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_3_R, "R200_SE_VTX_ST_CLR_3_R" },
2803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_3_G, "R200_SE_VTX_ST_CLR_3_G" },
2813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_3_B, "R200_SE_VTX_ST_CLR_3_B" },
2823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_3_A, "R200_SE_VTX_ST_CLR_3_A" },
2833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_4_R, "R200_SE_VTX_ST_CLR_4_R" },
2843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_4_G, "R200_SE_VTX_ST_CLR_4_G" },
2853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_4_B, "R200_SE_VTX_ST_CLR_4_B" },
2863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_4_A, "R200_SE_VTX_ST_CLR_4_A" },
2873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_5_R, "R200_SE_VTX_ST_CLR_5_R" },
2883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_5_G, "R200_SE_VTX_ST_CLR_5_G" },
2893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_5_B, "R200_SE_VTX_ST_CLR_5_B" },
2903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_5_A, "R200_SE_VTX_ST_CLR_5_A" },
2913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_6_R, "R200_SE_VTX_ST_CLR_6_R" },
2923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_6_G, "R200_SE_VTX_ST_CLR_6_G" },
2933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_6_B, "R200_SE_VTX_ST_CLR_6_B" },
2943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_6_A, "R200_SE_VTX_ST_CLR_6_A" },
2953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_7_R, "R200_SE_VTX_ST_CLR_7_R" },
2963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_7_G, "R200_SE_VTX_ST_CLR_7_G" },
2973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_7_B, "R200_SE_VTX_ST_CLR_7_B" },
2983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_7_A, "R200_SE_VTX_ST_CLR_7_A" },
2993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_TEX_0_S, "R200_SE_VTX_ST_TEX_0_S" },
3003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_TEX_0_T, "R200_SE_VTX_ST_TEX_0_T" },
3013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_TEX_0_R, "R200_SE_VTX_ST_TEX_0_R" },
3023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_TEX_0_Q, "R200_SE_VTX_ST_TEX_0_Q" },
3033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_TEX_1_S, "R200_SE_VTX_ST_TEX_1_S" },
3043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_TEX_1_T, "R200_SE_VTX_ST_TEX_1_T" },
3053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_TEX_1_R, "R200_SE_VTX_ST_TEX_1_R" },
3063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_TEX_1_Q, "R200_SE_VTX_ST_TEX_1_Q" },
3073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_TEX_2_S, "R200_SE_VTX_ST_TEX_2_S" },
3083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_TEX_2_T, "R200_SE_VTX_ST_TEX_2_T" },
3093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_TEX_2_R, "R200_SE_VTX_ST_TEX_2_R" },
3103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_TEX_2_Q, "R200_SE_VTX_ST_TEX_2_Q" },
3113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_TEX_3_S, "R200_SE_VTX_ST_TEX_3_S" },
3123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_TEX_3_T, "R200_SE_VTX_ST_TEX_3_T" },
3133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_TEX_3_R, "R200_SE_VTX_ST_TEX_3_R" },
3143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_TEX_3_Q, "R200_SE_VTX_ST_TEX_3_Q" },
3153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_TEX_4_S, "R200_SE_VTX_ST_TEX_4_S" },
3163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_TEX_4_T, "R200_SE_VTX_ST_TEX_4_T" },
3173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_TEX_4_R, "R200_SE_VTX_ST_TEX_4_R" },
3183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_TEX_4_Q, "R200_SE_VTX_ST_TEX_4_Q" },
3193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_TEX_5_S, "R200_SE_VTX_ST_TEX_5_S" },
3203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_TEX_5_T, "R200_SE_VTX_ST_TEX_5_T" },
3213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_TEX_5_R, "R200_SE_VTX_ST_TEX_5_R" },
3223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_TEX_5_Q, "R200_SE_VTX_ST_TEX_5_Q" },
3233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_PNT_SPRT_SZ, "R200_SE_VTX_ST_PNT_SPRT_SZ" },
3243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_DISC_FOG, "R200_SE_VTX_ST_DISC_FOG" },
3253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_SHININESS_0, "R200_SE_VTX_ST_SHININESS_0" },
3263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_SHININESS_1, "R200_SE_VTX_ST_SHININESS_1" },
3273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_BLND_WT_0, "R200_SE_VTX_ST_BLND_WT_0" },
3283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_BLND_WT_1, "R200_SE_VTX_ST_BLND_WT_1" },
3293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_BLND_WT_2, "R200_SE_VTX_ST_BLND_WT_2" },
3303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_BLND_WT_3, "R200_SE_VTX_ST_BLND_WT_3" },
3313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_POS_1_X, "R200_SE_VTX_ST_POS_1_X" },
3323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_POS_1_Y, "R200_SE_VTX_ST_POS_1_Y" },
3333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_POS_1_Z, "R200_SE_VTX_ST_POS_1_Z" },
3343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_POS_1_W, "R200_SE_VTX_ST_POS_1_W" },
3353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_NORM_1_X, "R200_SE_VTX_ST_NORM_1_X" },
3363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_NORM_1_Y, "R200_SE_VTX_ST_NORM_1_Y" },
3373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_NORM_1_Z, "R200_SE_VTX_ST_NORM_1_Z" },
3383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_USR_CLR_0_R, "R200_SE_VTX_ST_USR_CLR_0_R" },
3393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_USR_CLR_0_G, "R200_SE_VTX_ST_USR_CLR_0_G" },
3403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_USR_CLR_0_B, "R200_SE_VTX_ST_USR_CLR_0_B" },
3413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_USR_CLR_0_A, "R200_SE_VTX_ST_USR_CLR_0_A" },
3423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_USR_CLR_1_R, "R200_SE_VTX_ST_USR_CLR_1_R" },
3433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_USR_CLR_1_G, "R200_SE_VTX_ST_USR_CLR_1_G" },
3443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_USR_CLR_1_B, "R200_SE_VTX_ST_USR_CLR_1_B" },
3453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_USR_CLR_1_A, "R200_SE_VTX_ST_USR_CLR_1_A" },
3463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_0_PKD, "R200_SE_VTX_ST_CLR_0_PKD" },
3473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_1_PKD, "R200_SE_VTX_ST_CLR_1_PKD" },
3483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_2_PKD, "R200_SE_VTX_ST_CLR_2_PKD" },
3493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_3_PKD, "R200_SE_VTX_ST_CLR_3_PKD" },
3503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_4_PKD, "R200_SE_VTX_ST_CLR_4_PKD" },
3513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_5_PKD, "R200_SE_VTX_ST_CLR_5_PKD" },
3523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_6_PKD, "R200_SE_VTX_ST_CLR_6_PKD" },
3533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_CLR_7_PKD, "R200_SE_VTX_ST_CLR_7_PKD" },
3543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_POS_0_X_2, "R200_SE_VTX_ST_POS_0_X_2" },
3553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_POS_0_Y_2, "R200_SE_VTX_ST_POS_0_Y_2" },
3563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_PAR_CLR_LD, "R200_SE_VTX_ST_PAR_CLR_LD" },
3573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_USR_CLR_PKD, "R200_SE_VTX_ST_USR_CLR_PKD" },
3583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_POS_0_X_3, "R200_SE_VTX_ST_POS_0_X_3" },
3593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_POS_0_Y_3, "R200_SE_VTX_ST_POS_0_Y_3" },
3603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_POS_0_Z_3, "R200_SE_VTX_ST_POS_0_Z_3" },
3613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VTX_ST_END_OF_PKT, "R200_SE_VTX_ST_END_OF_PKT" },
3623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RE_POINTSIZE, "R200_RE_POINTSIZE" },
3633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RE_TOP_LEFT, "R200_RE_TOP_LEFT" },
3643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RE_AUX_SCISSOR_CNTL, "R200_RE_AUX_SCISSOR_CNTL" },
3653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXFILTER_0, "R200_PP_TXFILTER_0" },
3663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXFORMAT_0, "R200_PP_TXFORMAT_0" },
3673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXSIZE_0, "R200_PP_TXSIZE_0" },
3683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXFORMAT_X_0, "R200_PP_TXFORMAT_X_0" },
3693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXPITCH_0, "R200_PP_TXPITCH_0" },
3703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_BORDER_COLOR_0, "R200_PP_BORDER_COLOR_0" },
3713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_FACES_0, "R200_PP_CUBIC_FACES_0" },
3723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXMULTI_CTL_0, "R200_PP_TXMULTI_CTL_0" },
3733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXFILTER_1, "R200_PP_TXFILTER_1" },
3743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXFORMAT_1, "R200_PP_TXFORMAT_1" },
3753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXSIZE_1, "R200_PP_TXSIZE_1" },
3763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXFORMAT_X_1, "R200_PP_TXFORMAT_X_1" },
3773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXPITCH_1, "R200_PP_TXPITCH_1" },
3783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_BORDER_COLOR_1, "R200_PP_BORDER_COLOR_1" },
3793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_FACES_1, "R200_PP_CUBIC_FACES_1" },
3803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXMULTI_CTL_1, "R200_PP_TXMULTI_CTL_1" },
3813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXFILTER_2, "R200_PP_TXFILTER_2" },
3823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXFORMAT_2, "R200_PP_TXFORMAT_2" },
3833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXSIZE_2, "R200_PP_TXSIZE_2" },
3843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXFORMAT_X_2, "R200_PP_TXFORMAT_X_2" },
3853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXPITCH_2, "R200_PP_TXPITCH_2" },
3863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_BORDER_COLOR_2, "R200_PP_BORDER_COLOR_2" },
3873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_FACES_2, "R200_PP_CUBIC_FACES_2" },
3883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXMULTI_CTL_2, "R200_PP_TXMULTI_CTL_2" },
3893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXFILTER_3, "R200_PP_TXFILTER_3" },
3903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXFORMAT_3, "R200_PP_TXFORMAT_3" },
3913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXSIZE_3, "R200_PP_TXSIZE_3" },
3923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXFORMAT_X_3, "R200_PP_TXFORMAT_X_3" },
3933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXPITCH_3, "R200_PP_TXPITCH_3" },
3943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_BORDER_COLOR_3, "R200_PP_BORDER_COLOR_3" },
3953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_FACES_3, "R200_PP_CUBIC_FACES_3" },
3963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXMULTI_CTL_3, "R200_PP_TXMULTI_CTL_3" },
3973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXFILTER_4, "R200_PP_TXFILTER_4" },
3983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXFORMAT_4, "R200_PP_TXFORMAT_4" },
3993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXSIZE_4, "R200_PP_TXSIZE_4" },
4003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXFORMAT_X_4, "R200_PP_TXFORMAT_X_4" },
4013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXPITCH_4, "R200_PP_TXPITCH_4" },
4023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_BORDER_COLOR_4, "R200_PP_BORDER_COLOR_4" },
4033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_FACES_4, "R200_PP_CUBIC_FACES_4" },
4043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXMULTI_CTL_4, "R200_PP_TXMULTI_CTL_4" },
4053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXFILTER_5, "R200_PP_TXFILTER_5" },
4063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXFORMAT_5, "R200_PP_TXFORMAT_5" },
4073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXSIZE_5, "R200_PP_TXSIZE_5" },
4083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXFORMAT_X_5, "R200_PP_TXFORMAT_X_5" },
4093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXPITCH_5, "R200_PP_TXPITCH_5" },
4103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_BORDER_COLOR_5, "R200_PP_BORDER_COLOR_5" },
4113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_FACES_5, "R200_PP_CUBIC_FACES_5" },
4123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXMULTI_CTL_5, "R200_PP_TXMULTI_CTL_5" },
4133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXOFFSET_0, "R200_PP_TXOFFSET_0" },
4143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F1_0, "R200_PP_CUBIC_OFFSET_F1_0" },
4153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F2_0, "R200_PP_CUBIC_OFFSET_F2_0" },
4163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F3_0, "R200_PP_CUBIC_OFFSET_F3_0" },
4173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F4_0, "R200_PP_CUBIC_OFFSET_F4_0" },
4183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F5_0, "R200_PP_CUBIC_OFFSET_F5_0" },
4193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXOFFSET_1, "R200_PP_TXOFFSET_1" },
4203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F1_1, "R200_PP_CUBIC_OFFSET_F1_1" },
4213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F2_1, "R200_PP_CUBIC_OFFSET_F2_1" },
4223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F3_1, "R200_PP_CUBIC_OFFSET_F3_1" },
4233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F4_1, "R200_PP_CUBIC_OFFSET_F4_1" },
4243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F5_1, "R200_PP_CUBIC_OFFSET_F5_1" },
4253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXOFFSET_2, "R200_PP_TXOFFSET_2" },
4263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F1_2, "R200_PP_CUBIC_OFFSET_F1_2" },
4273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F2_2, "R200_PP_CUBIC_OFFSET_F2_2" },
4283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F3_2, "R200_PP_CUBIC_OFFSET_F3_2" },
4293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F4_2, "R200_PP_CUBIC_OFFSET_F4_2" },
4303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F5_2, "R200_PP_CUBIC_OFFSET_F5_2" },
4313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXOFFSET_3, "R200_PP_TXOFFSET_3" },
4323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F1_3, "R200_PP_CUBIC_OFFSET_F1_3" },
4333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F2_3, "R200_PP_CUBIC_OFFSET_F2_3" },
4343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F3_3, "R200_PP_CUBIC_OFFSET_F3_3" },
4353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F4_3, "R200_PP_CUBIC_OFFSET_F4_3" },
4363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F5_3, "R200_PP_CUBIC_OFFSET_F5_3" },
4373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXOFFSET_4, "R200_PP_TXOFFSET_4" },
4383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F1_4, "R200_PP_CUBIC_OFFSET_F1_4" },
4393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F2_4, "R200_PP_CUBIC_OFFSET_F2_4" },
4403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F3_4, "R200_PP_CUBIC_OFFSET_F3_4" },
4413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F4_4, "R200_PP_CUBIC_OFFSET_F4_4" },
4423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F5_4, "R200_PP_CUBIC_OFFSET_F5_4" },
4433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXOFFSET_5, "R200_PP_TXOFFSET_5" },
4443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F1_5, "R200_PP_CUBIC_OFFSET_F1_5" },
4453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F2_5, "R200_PP_CUBIC_OFFSET_F2_5" },
4463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F3_5, "R200_PP_CUBIC_OFFSET_F3_5" },
4473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F4_5, "R200_PP_CUBIC_OFFSET_F4_5" },
4483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CUBIC_OFFSET_F5_5, "R200_PP_CUBIC_OFFSET_F5_5" },
4493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TAM_DEBUG3, "R200_PP_TAM_DEBUG3" },
4503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TFACTOR_0, "R200_PP_TFACTOR_0" },
4513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TFACTOR_1, "R200_PP_TFACTOR_1" },
4523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TFACTOR_2, "R200_PP_TFACTOR_2" },
4533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TFACTOR_3, "R200_PP_TFACTOR_3" },
4543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TFACTOR_4, "R200_PP_TFACTOR_4" },
4553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TFACTOR_5, "R200_PP_TFACTOR_5" },
4563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TFACTOR_6, "R200_PP_TFACTOR_6" },
4573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TFACTOR_7, "R200_PP_TFACTOR_7" },
4583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND_0, "R200_PP_TXCBLEND_0" },
4593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND2_0, "R200_PP_TXCBLEND2_0" },
4603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXABLEND_0, "R200_PP_TXABLEND_0" },
4613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXABLEND2_0, "R200_PP_TXABLEND2_0" },
4623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND_1, "R200_PP_TXCBLEND_1" },
4633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND2_1, "R200_PP_TXCBLEND2_1" },
4643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXABLEND_1, "R200_PP_TXABLEND_1" },
4653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXABLEND2_1, "R200_PP_TXABLEND2_1" },
4663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND_2, "R200_PP_TXCBLEND_2" },
4673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND2_2, "R200_PP_TXCBLEND2_2" },
4683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXABLEND_2, "R200_PP_TXABLEND_2" },
4693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXABLEND2_2, "R200_PP_TXABLEND2_2" },
4703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND_3, "R200_PP_TXCBLEND_3" },
4713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND2_3, "R200_PP_TXCBLEND2_3" },
4723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXABLEND_3, "R200_PP_TXABLEND_3" },
4733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXABLEND2_3, "R200_PP_TXABLEND2_3" },
4743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND_4, "R200_PP_TXCBLEND_4" },
4753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND2_4, "R200_PP_TXCBLEND2_4" },
4763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXABLEND_4, "R200_PP_TXABLEND_4" },
4773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXABLEND2_4, "R200_PP_TXABLEND2_4" },
4783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND_5, "R200_PP_TXCBLEND_5" },
4793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND2_5, "R200_PP_TXCBLEND2_5" },
4803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXABLEND_5, "R200_PP_TXABLEND_5" },
4813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXABLEND2_5, "R200_PP_TXABLEND2_5" },
4823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND_6, "R200_PP_TXCBLEND_6" },
4833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND2_6, "R200_PP_TXCBLEND2_6" },
4843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXABLEND_6, "R200_PP_TXABLEND_6" },
4853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXABLEND2_6, "R200_PP_TXABLEND2_6" },
4863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND_7, "R200_PP_TXCBLEND_7" },
4873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND2_7, "R200_PP_TXCBLEND2_7" },
4883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXABLEND_7, "R200_PP_TXABLEND_7" },
4893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXABLEND2_7, "R200_PP_TXABLEND2_7" },
4903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RB3D_BLENDCOLOR, "R200_RB3D_BLENDCOLOR" },
4913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RB3D_ABLENDCNTL, "R200_RB3D_ABLENDCNTL" },
4923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_RB3D_CBLENDCNTL, "R200_RB3D_CBLENDCNTL" },
4933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TCL_OUTPUT_VTX_COMP_SEL, "R200_SE_TCL_OUTPUT_VTX_COMP_SEL" },
4943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_CNTL_X, "R200_PP_CNTL_X" },
4953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_VAP_CNTL_STATUS, "R200_SE_VAP_CNTL_STATUS" },
4963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TCL_INPUT_VTX_VECTOR_ADDR_0, "R200_SE_TCL_INPUT_VTX_VECTOR_ADDR_0" },
4973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TCL_INPUT_VTX_VECTOR_ADDR_1, "R200_SE_TCL_INPUT_VTX_VECTOR_ADDR_1" },
4983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TCL_INPUT_VTX_VECTOR_ADDR_2, "R200_SE_TCL_INPUT_VTX_VECTOR_ADDR_2" },
4993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SE_TCL_INPUT_VTX_VECTOR_ADDR_3, "R200_SE_TCL_INPUT_VTX_VECTOR_ADDR_3" },
5003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TRI_PERF, "R200_PP_TRI_PERF" },
5013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_PERF_CNTL, "R200_PP_PERF_CNTL" },
5023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND_8, "R200_PP_TXCBLEND_8" },
5033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND2_8, "R200_PP_TXCBLEND2_8" },
5043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXABLEND_8, "R200_PP_TXABLEND_8" },
5053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXABLEND2_8, "R200_PP_TXABLEND2_8" },
5063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND_9, "R200_PP_TXCBLEND_9" },
5073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND2_9, "R200_PP_TXCBLEND2_9" },
5083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXABLEND_9, "R200_PP_TXABLEND_9" },
5093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXABLEND2_9, "R200_PP_TXABLEND2_9" },
5103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND_10, "R200_PP_TXCBLEND_10" },
5113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND2_10, "R200_PP_TXCBLEND2_10" },
5123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXABLEND_10, "R200_PP_TXABLEND_10" },
5133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXABLEND2_10, "R200_PP_TXABLEND2_10" },
5143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND_11, "R200_PP_TXCBLEND_11" },
5153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND2_11, "R200_PP_TXCBLEND2_11" },
5163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXABLEND_11, "R200_PP_TXABLEND_11" },
5173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXABLEND2_11, "R200_PP_TXABLEND2_11" },
5183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND_12, "R200_PP_TXCBLEND_12" },
5193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND2_12, "R200_PP_TXCBLEND2_12" },
5203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXABLEND_12, "R200_PP_TXABLEND_12" },
5213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXABLEND2_12, "R200_PP_TXABLEND2_12" },
5223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND_13, "R200_PP_TXCBLEND_13" },
5233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND2_13, "R200_PP_TXCBLEND2_13" },
5243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXABLEND_13, "R200_PP_TXABLEND_13" },
5253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXABLEND2_13, "R200_PP_TXABLEND2_13" },
5263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND_14, "R200_PP_TXCBLEND_14" },
5273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND2_14, "R200_PP_TXCBLEND2_14" },
5283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXABLEND_14, "R200_PP_TXABLEND_14" },
5293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXABLEND2_14, "R200_PP_TXABLEND2_14" },
5303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND_15, "R200_PP_TXCBLEND_15" },
5313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXCBLEND2_15, "R200_PP_TXCBLEND2_15" },
5323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXABLEND_15, "R200_PP_TXABLEND_15" },
5333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_PP_TXABLEND2_15, "R200_PP_TXABLEND2_15" },
5343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VAP_PVS_CNTL_1, "R200_VAP_PVS_CNTL_1" },
5353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VAP_PVS_CNTL_2, "R200_VAP_PVS_CNTL_2" },
5363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org};
5373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
5383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic struct reg_names scalar_names[] = {
5393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SS_LIGHT_DCD_ADDR, "R200_SS_LIGHT_DCD_ADDR" },
5403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SS_LIGHT_DCM_ADDR, "R200_SS_LIGHT_DCM_ADDR" },
5413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SS_LIGHT_SPOT_EXPONENT_ADDR, "R200_SS_LIGHT_SPOT_EXPONENT_ADDR" },
5423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SS_LIGHT_SPOT_CUTOFF_ADDR, "R200_SS_LIGHT_SPOT_CUTOFF_ADDR" },
5433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SS_LIGHT_SPECULAR_THRESH_ADDR, "R200_SS_LIGHT_SPECULAR_THRESH_ADDR" },
5443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SS_LIGHT_RANGE_CUTOFF_SQRD, "R200_SS_LIGHT_RANGE_CUTOFF_SQRD" },
5453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SS_LIGHT_RANGE_ATT_CONST, "R200_SS_LIGHT_RANGE_ATT_CONST" },
5463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SS_VERT_GUARD_CLIP_ADJ_ADDR, "R200_SS_VERT_GUARD_CLIP_ADJ_ADDR" },
5473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SS_VERT_GUARD_DISCARD_ADJ_ADDR, "R200_SS_VERT_GUARD_DISCARD_ADJ_ADDR" },
5483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SS_HORZ_GUARD_CLIP_ADJ_ADDR, "R200_SS_HORZ_GUARD_CLIP_ADJ_ADDR" },
5493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SS_HORZ_GUARD_DISCARD_ADJ_ADDR, "R200_SS_HORZ_GUARD_DISCARD_ADJ_ADDR" },
5503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SS_MAT_0_SHININESS, "R200_SS_MAT_0_SHININESS" },
5513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_SS_MAT_1_SHININESS, "R200_SS_MAT_1_SHININESS" },
5523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { 1000, "" },
5533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org};
5543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
5553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* Puff these out to make them look like normal (dword) registers.
5563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */
5573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic struct reg_names vector_names[] = {
5583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { 0, "start" },
5593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VS_LIGHT_AMBIENT_ADDR, "R200_VS_LIGHT_AMBIENT_ADDR" },
5603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VS_LIGHT_DIFFUSE_ADDR, "R200_VS_LIGHT_DIFFUSE_ADDR" },
5613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VS_LIGHT_SPECULAR_ADDR, "R200_VS_LIGHT_SPECULAR_ADDR" },
5623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VS_LIGHT_DIRPOS_ADDR, "R200_VS_LIGHT_DIRPOS_ADDR" },
5633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VS_LIGHT_HWVSPOT_ADDR, "R200_VS_LIGHT_HWVSPOT_ADDR" },
5643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VS_LIGHT_ATTENUATION_ADDR, "R200_VS_LIGHT_ATTENUATION_ADDR" },
5653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VS_SPOT_DUAL_CONE, "R200_VS_SPOT_DUAL_CONE" },
5663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VS_GLOBAL_AMBIENT_ADDR, "R200_VS_GLOBAL_AMBIENT_ADDR" },
5673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VS_FOG_PARAM_ADDR, "R200_VS_FOG_PARAM_ADDR" },
5683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VS_EYE_VECTOR_ADDR, "R200_VS_EYE_VECTOR_ADDR" },
5693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VS_UCP_ADDR, "R200_VS_UCP_ADDR" },
5703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VS_PNT_SPRITE_VPORT_SCALE, "R200_VS_PNT_SPRITE_VPORT_SCALE" },
5713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VS_MATRIX_0_MV, "R200_VS_MATRIX_0_MV" },
5723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VS_MATRIX_1_INV_MV, "R200_VS_MATRIX_1_INV_MV" },
5733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VS_MATRIX_2_MVP, "R200_VS_MATRIX_2_MVP" },
5743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VS_MATRIX_3_TEX0, "R200_VS_MATRIX_3_TEX0" },
5753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VS_MATRIX_4_TEX1, "R200_VS_MATRIX_4_TEX1" },
5763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VS_MATRIX_5_TEX2, "R200_VS_MATRIX_5_TEX2" },
5773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VS_MATRIX_6_TEX3, "R200_VS_MATRIX_6_TEX3" },
5783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VS_MATRIX_7_TEX4, "R200_VS_MATRIX_7_TEX4" },
5793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VS_MATRIX_8_TEX5, "R200_VS_MATRIX_8_TEX5" },
5803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VS_MAT_0_EMISS, "R200_VS_MAT_0_EMISS" },
5813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VS_MAT_0_AMB, "R200_VS_MAT_0_AMB" },
5823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VS_MAT_0_DIF, "R200_VS_MAT_0_DIF" },
5833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VS_MAT_0_SPEC, "R200_VS_MAT_0_SPEC" },
5843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VS_MAT_1_EMISS, "R200_VS_MAT_1_EMISS" },
5853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VS_MAT_1_AMB, "R200_VS_MAT_1_AMB" },
5863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VS_MAT_1_DIF, "R200_VS_MAT_1_DIF" },
5873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VS_MAT_1_SPEC, "R200_VS_MAT_1_SPEC" },
5883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VS_EYE2CLIP_MTX, "R200_VS_EYE2CLIP_MTX" },
5893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VS_PNT_SPRITE_ATT_CONST, "R200_VS_PNT_SPRITE_ATT_CONST" },
5903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VS_PNT_SPRITE_EYE_IN_MODEL, "R200_VS_PNT_SPRITE_EYE_IN_MODEL" },
5913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VS_PNT_SPRITE_CLAMP, "R200_VS_PNT_SPRITE_CLAMP" },
5923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { R200_VS_MAX, "R200_VS_MAX" },
5933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   { 1000, "" },
5943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org};
5953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
5963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgunion fi { float f; int i; };
5973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
5983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define ISVEC   1
5993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define ISFLOAT 2
6003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define TOUCHED 4
6013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
6023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstruct reg {
6033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int idx;
6043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   struct reg_names *closest;
6053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int flags;
6063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   union fi current;
6073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   union fi *values;
6083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int nvalues;
6093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int nalloc;
6103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   float vmin, vmax;
6113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org};
6123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
6133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
6143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic struct reg regs[Elements(reg_names)+1];
6153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic struct reg scalars[512+1];
6163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic struct reg vectors[512*4+1];
6173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
6183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic int total, total_changed, bufs;
6193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
6203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic void init_regs( void )
6213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{
6223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   struct reg_names *tmp;
6233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int i;
6243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
6253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   for (i = 0 ; i < Elements(regs) ; i++) {
6263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      regs[i].idx = reg_names[i].idx;
6273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      regs[i].closest = &reg_names[i];
6283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      regs[i].flags = 0;
6293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
6303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
6313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   for (i = 0, tmp = scalar_names ; i < Elements(scalars) ; i++) {
6323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (tmp[1].idx == i) tmp++;
6333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      scalars[i].idx = i;
6343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      scalars[i].closest = tmp;
6353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      scalars[i].flags = ISFLOAT;
6363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
6373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
6383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   for (i = 0, tmp = vector_names ; i < Elements(vectors) ; i++) {
6393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (tmp[1].idx*4 == i) tmp++;
6403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      vectors[i].idx = i;
6413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      vectors[i].closest = tmp;
6423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      vectors[i].flags = ISFLOAT|ISVEC;
6433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
6443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
6453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   regs[Elements(regs)-1].idx = -1;
6463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   scalars[Elements(scalars)-1].idx = -1;
6473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   vectors[Elements(vectors)-1].idx = -1;
6483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}
6493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
6503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic int find_or_add_value( struct reg *reg, int val )
6513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{
6523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int j;
6533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
6543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   for ( j = 0 ; j < reg->nvalues ; j++)
6553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if ( val == reg->values[j].i )
6563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 return 1;
6573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
6583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   if (j == reg->nalloc) {
6593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      reg->nalloc += 5;
6603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      reg->nalloc *= 2;
6613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      reg->values = (union fi *) realloc( reg->values,
6623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org					  reg->nalloc * sizeof(union fi) );
6633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
6643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
6653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   reg->values[reg->nvalues++].i = val;
6663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   return 0;
6673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}
6683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
6693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic struct reg *lookup_reg( struct reg *tab, int reg )
6703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{
6713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int i;
6723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
6733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   for (i = 0 ; tab[i].idx != -1 ; i++) {
6743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (tab[i].idx == reg)
6753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 return &tab[i];
6763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
6773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
6783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   fprintf(stderr, "*** unknown reg 0x%x\n", reg);
6793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   return NULL;
6803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}
6813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
6823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
6833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic const char *get_reg_name( struct reg *reg )
6843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{
6853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   static char tmp[80];
6863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
6873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   if (reg->idx == reg->closest->idx)
6883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      return reg->closest->name;
6893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
6903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
6913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   if (reg->flags & ISVEC) {
6923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (reg->idx/4 != reg->closest->idx)
6933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 sprintf(tmp, "%s+%d[%d]",
6943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org		 reg->closest->name,
6953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org		 (reg->idx/4) - reg->closest->idx,
6963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org		 reg->idx%4);
6973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      else
6983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 sprintf(tmp, "%s[%d]", reg->closest->name, reg->idx%4);
6993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
7003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   else {
7013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (reg->idx != reg->closest->idx)
7023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 sprintf(tmp, "%s+%d", reg->closest->name, reg->idx - reg->closest->idx);
7033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      else
7043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 sprintf(tmp, "%s", reg->closest->name);
7053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
7063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
7073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   return tmp;
7083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}
7093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
7103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic int print_int_reg_assignment( struct reg *reg, int data )
7113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{
7123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int changed = (reg->current.i != data);
7133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int ever_seen = find_or_add_value( reg, data );
7143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
7153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   if (VERBOSE || (NORMAL && (changed || !ever_seen)))
7163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org       fprintf(stderr, "   %s <-- 0x%x", get_reg_name(reg), data);
7173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
7183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   if (NORMAL) {
7193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (!ever_seen)
7203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, " *** BRAND NEW VALUE");
7213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      else if (changed)
7223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, " *** CHANGED");
7233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
7243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
7253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   reg->current.i = data;
7263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
7273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   if (VERBOSE || (NORMAL && (changed || !ever_seen)))
7283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      fprintf(stderr, "\n");
7293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
7303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   return changed;
7313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}
7323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
7333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
7343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic int print_float_reg_assignment( struct reg *reg, float data )
7353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{
7363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int changed = (reg->current.f != data);
7373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int newmin = (data < reg->vmin);
7383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int newmax = (data > reg->vmax);
7393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
7403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   if (VERBOSE || (NORMAL && (newmin || newmax || changed)))
7413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      fprintf(stderr, "   %s <-- %.3f", get_reg_name(reg), data);
7423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
7433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   if (NORMAL) {
7443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (newmin) {
7453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, " *** NEW MIN (prev %.3f)", reg->vmin);
7463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 reg->vmin = data;
7473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      }
7483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      else if (newmax) {
7493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, " *** NEW MAX (prev %.3f)", reg->vmax);
7503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 reg->vmax = data;
7513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      }
7523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      else if (changed) {
7533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, " *** CHANGED");
7543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      }
7553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
7563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
7573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   reg->current.f = data;
7583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
7593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   if (VERBOSE || (NORMAL && (newmin || newmax || changed)))
7603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      fprintf(stderr, "\n");
7613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
7623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   return changed;
7633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}
7643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
7653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic int print_reg_assignment( struct reg *reg, int data )
7663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{
7673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   float_ui32_type datau;
7683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   datau.ui32 = data;
7693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   reg->flags |= TOUCHED;
7703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   if (reg->flags & ISFLOAT)
7713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      return print_float_reg_assignment( reg, datau.f );
7723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   else
7733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      return print_int_reg_assignment( reg, data );
7743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}
7753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
7763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic void print_reg( struct reg *reg )
7773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{
7783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   if (reg->flags & TOUCHED) {
7793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (reg->flags & ISFLOAT) {
7803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "   %s == %f\n", get_reg_name(reg), reg->current.f);
7813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      } else {
7823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "   %s == 0x%x\n", get_reg_name(reg), reg->current.i);
7833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      }
7843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
7853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}
7863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
7873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
7883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic void dump_state( void )
7893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{
7903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int i;
7913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
7923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   for (i = 0 ; i < Elements(regs) ; i++)
7933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      print_reg( &regs[i] );
7943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
7953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   for (i = 0 ; i < Elements(scalars) ; i++)
7963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      print_reg( &scalars[i] );
7973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
7983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   for (i = 0 ; i < Elements(vectors) ; i++)
7993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      print_reg( &vectors[i] );
8003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}
8013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
8023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
8033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
8043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic int radeon_emit_packets(
8053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   drm_radeon_cmd_header_t header,
8063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   drm_radeon_cmd_buffer_t *cmdbuf )
8073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{
8083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int id = (int)header.packet.packet_id;
8093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int sz = packet[id].len;
8103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int *data = (int *)cmdbuf->buf;
8113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int i;
8123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
8133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   if (sz * sizeof(int) > cmdbuf->bufsz) {
8143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      fprintf(stderr, "Packet overflows cmdbuf\n");
8153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      return -EINVAL;
8163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
8173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
8183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   if (!packet[id].name) {
8193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      fprintf(stderr, "*** Unknown packet 0 nr %d\n", id );
8203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      return -EINVAL;
8213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
8223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
8233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
8243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   if (VERBOSE)
8253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      fprintf(stderr, "Packet 0 reg %s nr %d\n", packet[id].name, sz );
8263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
8273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   for ( i = 0 ; i < sz ; i++) {
8283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      struct reg *reg = lookup_reg( regs, packet[id].start + i*4 );
8293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (print_reg_assignment( reg, data[i] ))
8303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 total_changed++;
8313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      total++;
8323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
8333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
8343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   cmdbuf->buf += sz * sizeof(int);
8353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   cmdbuf->bufsz -= sz * sizeof(int);
8363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   return 0;
8373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}
8383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
8393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
8403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic int radeon_emit_scalars(
8413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   drm_radeon_cmd_header_t header,
8423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   drm_radeon_cmd_buffer_t *cmdbuf )
8433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{
8443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int sz = header.scalars.count;
8453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int *data = (int *)cmdbuf->buf;
8463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int start = header.scalars.offset;
8473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int stride = header.scalars.stride;
8483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int i;
8493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
8503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   if (VERBOSE)
8513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      fprintf(stderr, "emit scalars, start %d stride %d nr %d (end %d)\n",
8523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      start, stride, sz, start + stride * sz);
8533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
8543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
8553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   for (i = 0 ; i < sz ; i++, start += stride) {
8563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      struct reg *reg = lookup_reg( scalars, start );
8573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (print_reg_assignment( reg, data[i] ))
8583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 total_changed++;
8593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      total++;
8603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
8613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
8623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   cmdbuf->buf += sz * sizeof(int);
8633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   cmdbuf->bufsz -= sz * sizeof(int);
8643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   return 0;
8653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}
8663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
8673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
8683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic int radeon_emit_scalars2(
8693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   drm_radeon_cmd_header_t header,
8703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   drm_radeon_cmd_buffer_t *cmdbuf )
8713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{
8723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int sz = header.scalars.count;
8733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int *data = (int *)cmdbuf->buf;
8743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int start = header.scalars.offset + 0x100;
8753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int stride = header.scalars.stride;
8763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int i;
8773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
8783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   if (VERBOSE)
8793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      fprintf(stderr, "emit scalars2, start %d stride %d nr %d (end %d)\n",
8803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      start, stride, sz, start + stride * sz);
8813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
8823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   if (start + stride * sz > 258) {
8833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      fprintf(stderr, "emit scalars OVERFLOW %d/%d/%d\n", start, stride, sz);
8843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      return -1;
8853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
8863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
8873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   for (i = 0 ; i < sz ; i++, start += stride) {
8883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      struct reg *reg = lookup_reg( scalars, start );
8893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (print_reg_assignment( reg, data[i] ))
8903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 total_changed++;
8913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      total++;
8923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
8933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
8943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   cmdbuf->buf += sz * sizeof(int);
8953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   cmdbuf->bufsz -= sz * sizeof(int);
8963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   return 0;
8973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}
8983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
8993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* Check: inf/nan/extreme-size?
9003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Check: table start, end, nr, etc.
9013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */
9023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic int radeon_emit_vectors(
9033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   drm_radeon_cmd_header_t header,
9043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   drm_radeon_cmd_buffer_t *cmdbuf )
9053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{
9063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int sz = header.vectors.count;
9073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int *data = (int *)cmdbuf->buf;
9083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int start = header.vectors.offset;
9093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int stride = header.vectors.stride;
9103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int i,j;
9113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
9123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   if (VERBOSE)
9133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      fprintf(stderr, "emit vectors, start %d stride %d nr %d (end %d) (0x%x)\n",
9143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      start, stride, sz, start + stride * sz, header.i);
9153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
9163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/*    if (start + stride * (sz/4) > 128) { */
9173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/*       fprintf(stderr, "emit vectors OVERFLOW %d/%d/%d\n", start, stride, sz); */
9183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/*       return -1; */
9193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/*    } */
9203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
9213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   for (i = 0 ; i < sz ;  start += stride) {
9223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      int changed = 0;
9233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      for (j = 0 ; j < 4 ; i++,j++) {
9243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 struct reg *reg = lookup_reg( vectors, start*4+j );
9253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 if (print_reg_assignment( reg, data[i] ))
9263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	    changed = 1;
9273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      }
9283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (changed)
9293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 total_changed += 4;
9303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      total += 4;
9313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
9323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
9333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
9343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   cmdbuf->buf += sz * sizeof(int);
9353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   cmdbuf->bufsz -= sz * sizeof(int);
9363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   return 0;
9373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}
9383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
9393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic int radeon_emit_veclinear(
9403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   drm_radeon_cmd_header_t header,
9413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   drm_radeon_cmd_buffer_t *cmdbuf )
9423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{
9433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int sz = header.veclinear.count * 4;
9443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int *data = (int *)cmdbuf->buf;
9453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   float *fdata =(float *)cmdbuf->buf;
9463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int start = header.veclinear.addr_lo | (header.veclinear.addr_hi << 8);
9473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int i;
9483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
9493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   if (1||VERBOSE)
9503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      fprintf(stderr, "emit vectors linear, start %d nr %d (end %d) (0x%x)\n",
9513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      start, sz >> 2, start + (sz >> 2), header.i);
9523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
9533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
9543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   if (start < 0x60) {
9553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      for (i = 0 ; i < sz ;  i += 4) {
9563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "R200_VS_PARAM %d 0 %f\n", (i >> 2) + start, fdata[i]);
9573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "R200_VS_PARAM %d 1 %f\n", (i >> 2) + start, fdata[i+1]);
9583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "R200_VS_PARAM %d 2 %f\n", (i >> 2) + start, fdata[i+2]);
9593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "R200_VS_PARAM %d 3 %f\n", (i >> 2) + start, fdata[i+3]);
9603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      }
9613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
9623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   else if ((start >= 0x100) && (start < 0x160)) {
9633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      for (i = 0 ; i < sz ;  i += 4) {
9643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "R200_VS_PARAM %d 0 %f\n", (i >> 2) + start - 0x100 + 0x60, fdata[i]);
9653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "R200_VS_PARAM %d 1 %f\n", (i >> 2) + start - 0x100 + 0x60, fdata[i+1]);
9663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "R200_VS_PARAM %d 2 %f\n", (i >> 2) + start - 0x100 + 0x60, fdata[i+2]);
9673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "R200_VS_PARAM %d 3 %f\n", (i >> 2) + start - 0x100 + 0x60, fdata[i+3]);
9683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      }
9693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
9703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   else if ((start >= 0x80) && (start < 0xc0)) {
9713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      for (i = 0 ; i < sz ;  i += 4) {
9723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "R200_VS_PROG %d OPDST %08x\n", (i >> 2) + start - 0x80, data[i]);
9733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "R200_VS_PROG %d SRC1  %08x\n", (i >> 2) + start - 0x80, data[i+1]);
9743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "R200_VS_PROG %d SRC2  %08x\n", (i >> 2) + start - 0x80, data[i+2]);
9753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "R200_VS_PROG %d SRC3  %08x\n", (i >> 2) + start - 0x80, data[i+3]);
9763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      }
9773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
9783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   else if ((start >= 0x180) && (start < 0x1c0)) {
9793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      for (i = 0 ; i < sz ;  i += 4) {
9803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "R200_VS_PROG %d OPDST %08x\n", (i >> 2) + start - 0x180 + 0x40, data[i]);
9813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "R200_VS_PROG %d SRC1  %08x\n", (i >> 2) + start - 0x180 + 0x40, data[i+1]);
9823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "R200_VS_PROG %d SRC2  %08x\n", (i >> 2) + start - 0x180 + 0x40, data[i+2]);
9833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "R200_VS_PROG %d SRC3  %08x\n", (i >> 2) + start - 0x180 + 0x40, data[i+3]);
9843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      }
9853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
9863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   else {
9873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      fprintf(stderr, "write to unknown vector area\n");
9883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
9893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
9903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   cmdbuf->buf += sz * sizeof(int);
9913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   cmdbuf->bufsz -= sz * sizeof(int);
9923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   return 0;
9933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}
9943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
9953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#if 0
9963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic int print_vertex_format( int vfmt )
9973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{
9983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   if (NORMAL) {
9993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      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",
10003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      "vertex format",
10013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      vfmt,
10023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      "xy,",
10033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      (vfmt & R200_VTX_Z0) ? "z," : "",
10043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      (vfmt & R200_VTX_W0) ? "w0," : "",
10053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      (vfmt & R200_VTX_FPCOLOR) ? "fpcolor," : "",
10063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      (vfmt & R200_VTX_FPALPHA) ? "fpalpha," : "",
10073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      (vfmt & R200_VTX_PKCOLOR) ? "pkcolor," : "",
10083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      (vfmt & R200_VTX_FPSPEC) ? "fpspec," : "",
10093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      (vfmt & R200_VTX_FPFOG) ? "fpfog," : "",
10103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      (vfmt & R200_VTX_PKSPEC) ? "pkspec," : "",
10113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      (vfmt & R200_VTX_ST0) ? "st0," : "",
10123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      (vfmt & R200_VTX_ST1) ? "st1," : "",
10133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      (vfmt & R200_VTX_Q1) ? "q1," : "",
10143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      (vfmt & R200_VTX_ST2) ? "st2," : "",
10153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      (vfmt & R200_VTX_Q2) ? "q2," : "",
10163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      (vfmt & R200_VTX_ST3) ? "st3," : "",
10173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      (vfmt & R200_VTX_Q3) ? "q3," : "",
10183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      (vfmt & R200_VTX_Q0) ? "q0," : "",
10193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      (vfmt & R200_VTX_N0) ? "n0," : "",
10203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      (vfmt & R200_VTX_XY1) ? "xy1," : "",
10213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      (vfmt & R200_VTX_Z1) ? "z1," : "",
10223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      (vfmt & R200_VTX_W1) ? "w1," : "",
10233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      (vfmt & R200_VTX_N1) ? "n1," : "");
10243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
10253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
10263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (!find_or_add_value( &others[V_VTXFMT], vfmt ))
10273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, " *** NEW VALUE");
10283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
10293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      fprintf(stderr, "\n");
10303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
10313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
10323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   return 0;
10333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}
10343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#endif
10353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
10363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic char *primname[0x10] = {
10373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   "NONE",
10383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   "POINTS",
10393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   "LINES",
10403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   "LINE_STRIP",
10413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   "TRIANGLES",
10423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   "TRIANGLE_FAN",
10433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   "TRIANGLE_STRIP",
10443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   "RECT_LIST",
10453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   NULL,
10463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   "3VRT_POINTS",
10473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   "3VRT_LINES",
10483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   "POINT_SPRITES",
10493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   "LINE_LOOP",
10503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   "QUADS",
10513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   "QUAD_STRIP",
10523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   "POLYGON",
10533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org};
10543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
10553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic int print_prim_and_flags( int prim )
10563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{
10573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int numverts;
10583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
10593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   if (NORMAL)
10603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      fprintf(stderr, "   %s(%x): %s%s%s%s%s%s\n",
10613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      "prim flags",
10623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      prim,
10633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      ((prim & 0x30) == R200_VF_PRIM_WALK_IND) ? "IND," : "",
10643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      ((prim & 0x30) == R200_VF_PRIM_WALK_LIST) ? "LIST," : "",
10653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      ((prim & 0x30) == R200_VF_PRIM_WALK_RING) ? "RING," : "",
10663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      (prim & R200_VF_COLOR_ORDER_RGBA) ? "RGBA," : "BGRA, ",
10673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      (prim & R200_VF_INDEX_SZ_4) ? "INDX-32," : "",
10683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      (prim & R200_VF_TCL_OUTPUT_VTX_ENABLE) ? "TCL_OUT_VTX," : "");
10693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
10703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   numverts = prim>>16;
10713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
10723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   if (NORMAL)
10733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      fprintf(stderr, "   prim: %s numverts %d\n", primname[prim&0xf], numverts);
10743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
10753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   switch (prim & 0xf) {
10763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_VF_PRIM_NONE:
10773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_VF_PRIM_POINTS:
10783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (numverts < 1) {
10793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "Bad nr verts for line %d\n", numverts);
10803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 return -1;
10813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      }
10823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      break;
10833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_VF_PRIM_LINES:
10843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_VF_PRIM_POINT_SPRITES:
10853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if ((numverts & 1) || numverts == 0) {
10863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "Bad nr verts for line %d\n", numverts);
10873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 return -1;
10883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      }
10893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      break;
10903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_VF_PRIM_LINE_STRIP:
10913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_VF_PRIM_LINE_LOOP:
10923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (numverts < 2) {
10933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "Bad nr verts for line_strip %d\n", numverts);
10943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 return -1;
10953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      }
10963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      break;
10973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_VF_PRIM_TRIANGLES:
10983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_VF_PRIM_3VRT_POINTS:
10993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_VF_PRIM_3VRT_LINES:
11003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_VF_PRIM_RECT_LIST:
11013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (numverts % 3 || numverts == 0) {
11023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "Bad nr verts for tri %d\n", numverts);
11033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 return -1;
11043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      }
11053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      break;
11063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_VF_PRIM_TRIANGLE_FAN:
11073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_VF_PRIM_TRIANGLE_STRIP:
11083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_VF_PRIM_POLYGON:
11093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (numverts < 3) {
11103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "Bad nr verts for strip/fan %d\n", numverts);
11113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 return -1;
11123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      }
11133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      break;
11143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_VF_PRIM_QUADS:
11153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (numverts % 4 || numverts == 0) {
11163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "Bad nr verts for quad %d\n", numverts);
11173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 return -1;
11183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      }
11193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      break;
11203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_VF_PRIM_QUAD_STRIP:
11213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (numverts % 2 || numverts < 4) {
11223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "Bad nr verts for quadstrip %d\n", numverts);
11233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 return -1;
11243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      }
11253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      break;
11263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   default:
11273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      fprintf(stderr, "Bad primitive\n");
11283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      return -1;
11293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
11303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   return 0;
11313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}
11323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
11333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* build in knowledge about each packet type
11343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */
11353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic int radeon_emit_packet3( drm_radeon_cmd_buffer_t *cmdbuf )
11363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{
11373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int cmdsz;
11383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int *cmd = (int *)cmdbuf->buf;
11393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int *tmp;
11403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int i, stride, size, start;
11413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
11423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   cmdsz = 2 + ((cmd[0] & RADEON_CP_PACKET_COUNT_MASK) >> 16);
11433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
11443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   if ((cmd[0] & RADEON_CP_PACKET_MASK) != RADEON_CP_PACKET3 ||
11453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org       cmdsz * 4 > cmdbuf->bufsz ||
11463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org       cmdsz > RADEON_CP_PACKET_MAX_DWORDS) {
11473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      fprintf(stderr, "Bad packet\n");
11483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      return -EINVAL;
11493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
11503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
11513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   switch( cmd[0] & ~RADEON_CP_PACKET_COUNT_MASK ) {
11523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_CP_CMD_NOP:
11533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (NORMAL)
11543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "PACKET3_NOP, %d dwords\n", cmdsz);
11553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      break;
11563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_CP_CMD_NEXT_CHAR:
11573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (NORMAL)
11583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "PACKET3_NEXT_CHAR, %d dwords\n", cmdsz);
11593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      break;
11603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_CP_CMD_PLY_NEXTSCAN:
11613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (NORMAL)
11623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "PACKET3_PLY_NEXTSCAN, %d dwords\n", cmdsz);
11633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      break;
11643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_CP_CMD_SET_SCISSORS:
11653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (NORMAL)
11663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "PACKET3_SET_SCISSORS, %d dwords\n", cmdsz);
11673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      break;
11683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_CP_CMD_LOAD_MICROCODE:
11693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (NORMAL)
11703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "PACKET3_LOAD_MICROCODE, %d dwords\n", cmdsz);
11713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      break;
11723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_CP_CMD_WAIT_FOR_IDLE:
11733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (NORMAL)
11743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "PACKET3_WAIT_FOR_IDLE, %d dwords\n", cmdsz);
11753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      break;
11763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
11773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_CP_CMD_3D_DRAW_VBUF:
11783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (NORMAL)
11793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "PACKET3_3D_DRAW_VBUF, %d dwords\n", cmdsz);
11803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/*       print_vertex_format(cmd[1]); */
11813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (print_prim_and_flags(cmd[2]))
11823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 return -EINVAL;
11833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      break;
11843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
11853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_CP_CMD_3D_DRAW_IMMD:
11863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (NORMAL)
11873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "PACKET3_3D_DRAW_IMMD, %d dwords\n", cmdsz);
11883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      break;
11893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_CP_CMD_3D_DRAW_INDX: {
11903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      int neltdwords;
11913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (NORMAL)
11923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "PACKET3_3D_DRAW_INDX, %d dwords\n", cmdsz);
11933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/*       print_vertex_format(cmd[1]); */
11943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (print_prim_and_flags(cmd[2]))
11953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 return -EINVAL;
11963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      neltdwords = cmd[2]>>16;
11973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      neltdwords += neltdwords & 1;
11983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      neltdwords /= 2;
11993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (neltdwords + 3 != cmdsz)
12003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "Mismatch in DRAW_INDX, %d vs cmdsz %d\n",
12013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org		 neltdwords, cmdsz);
12023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      break;
12033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
12043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_CP_CMD_LOAD_PALETTE:
12053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (NORMAL)
12063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "PACKET3_LOAD_PALETTE, %d dwords\n", cmdsz);
12073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      break;
12083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_CP_CMD_3D_LOAD_VBPNTR:
12093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (NORMAL) {
12103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "PACKET3_3D_LOAD_VBPNTR, %d dwords\n", cmdsz);
12113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "   nr arrays: %d\n", cmd[1]);
12123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      }
12133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
12143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (((cmd[1]/2)*3) + ((cmd[1]%2)*2) != cmdsz - 2) {
12153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "  ****** MISMATCH %d/%d *******\n",
12163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org		 ((cmd[1]/2)*3) + ((cmd[1]%2)*2) + 2, cmdsz);
12173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 return -EINVAL;
12183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      }
12193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
12203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (NORMAL) {
12213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 tmp = cmd+2;
12223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 for (i = 0 ; i < cmd[1] ; i++) {
12233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	    if (i & 1) {
12243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	       stride = (tmp[0]>>24) & 0xff;
12253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	       size = (tmp[0]>>16) & 0xff;
12263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	       start = tmp[2];
12273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	       tmp += 3;
12283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	    }
12293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	    else {
12303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	       stride = (tmp[0]>>8) & 0xff;
12313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	       size = (tmp[0]) & 0xff;
12323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	       start = tmp[1];
12333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	    }
12343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	    fprintf(stderr, "   array %d: start 0x%x vsize %d vstride %d\n",
12353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org		    i, start, size, stride );
12363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 }
12373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      }
12383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      break;
12393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_CP_CMD_PAINT:
12403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (NORMAL)
12413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "PACKET3_CNTL_PAINT, %d dwords\n", cmdsz);
12423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      break;
12433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_CP_CMD_BITBLT:
12443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (NORMAL)
12453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "PACKET3_CNTL_BITBLT, %d dwords\n", cmdsz);
12463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      break;
12473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_CP_CMD_SMALLTEXT:
12483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (NORMAL)
12493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "PACKET3_CNTL_SMALLTEXT, %d dwords\n", cmdsz);
12503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      break;
12513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_CP_CMD_HOSTDATA_BLT:
12523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (NORMAL)
12533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "PACKET3_CNTL_HOSTDATA_BLT, %d dwords\n",
12543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      cmdsz);
12553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      break;
12563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_CP_CMD_POLYLINE:
12573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (NORMAL)
12583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "PACKET3_CNTL_POLYLINE, %d dwords\n", cmdsz);
12593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      break;
12603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_CP_CMD_POLYSCANLINES:
12613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (NORMAL)
12623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "PACKET3_CNTL_POLYSCANLINES, %d dwords\n",
12633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      cmdsz);
12643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      break;
12653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_CP_CMD_PAINT_MULTI:
12663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (NORMAL)
12673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "PACKET3_CNTL_PAINT_MULTI, %d dwords\n",
12683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      cmdsz);
12693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      break;
12703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_CP_CMD_BITBLT_MULTI:
12713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (NORMAL)
12723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "PACKET3_CNTL_BITBLT_MULTI, %d dwords\n",
12733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      cmdsz);
12743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      break;
12753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_CP_CMD_TRANS_BITBLT:
12763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (NORMAL)
12773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "PACKET3_CNTL_TRANS_BITBLT, %d dwords\n",
12783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      cmdsz);
12793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      break;
12803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_CP_CMD_3D_DRAW_VBUF_2:
12813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (NORMAL)
12823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "R200_CP_CMD_3D_DRAW_VBUF_2, %d dwords\n",
12833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      cmdsz);
12843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (print_prim_and_flags(cmd[1]))
12853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 return -EINVAL;
12863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      break;
12873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_CP_CMD_3D_DRAW_IMMD_2:
12883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (NORMAL)
12893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "R200_CP_CMD_3D_DRAW_IMMD_2, %d dwords\n",
12903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      cmdsz);
12913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (print_prim_and_flags(cmd[1]))
12923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 return -EINVAL;
12933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      break;
12943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   case R200_CP_CMD_3D_DRAW_INDX_2:
12953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (NORMAL)
12963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "R200_CP_CMD_3D_DRAW_INDX_2, %d dwords\n",
12973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	      cmdsz);
12983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (print_prim_and_flags(cmd[1]))
12993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 return -EINVAL;
13003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      break;
13013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   default:
13023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      fprintf(stderr, "UNKNOWN PACKET, %d dwords\n", cmdsz);
13033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      break;
13043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
13053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
13063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   cmdbuf->buf += cmdsz * 4;
13073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   cmdbuf->bufsz -= cmdsz * 4;
13083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   return 0;
13093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}
13103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
13113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
13123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* Check cliprects for bounds, then pass on to above:
13133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */
13143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic int radeon_emit_packet3_cliprect( drm_radeon_cmd_buffer_t *cmdbuf )
13153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{
13163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   drm_clip_rect_t *boxes = (drm_clip_rect_t *)cmdbuf->boxes;
13173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int i = 0;
13183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
13193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   if (VERBOSE && total_changed) {
13203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      dump_state();
13213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      total_changed = 0;
13223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
13233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
13243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   if (NORMAL) {
13253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      do {
13263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 if ( i < cmdbuf->nbox ) {
13273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	    fprintf(stderr, "Emit box %d/%d %d,%d %d,%d\n",
13283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org		    i, cmdbuf->nbox,
13293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org		    boxes[i].x1, boxes[i].y1, boxes[i].x2, boxes[i].y2);
13303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 }
13313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      } while ( ++i < cmdbuf->nbox );
13323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
13333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
13343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   if (cmdbuf->nbox == 1)
13353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      cmdbuf->nbox = 0;
13363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
13373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   return radeon_emit_packet3( cmdbuf );
13383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}
13393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
13403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
13413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgint r200SanityCmdBuffer( r200ContextPtr rmesa,
13423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org			   int nbox,
13433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org			   drm_clip_rect_t *boxes )
13443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{
13453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int idx;
13463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   drm_radeon_cmd_buffer_t cmdbuf;
13473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   drm_radeon_cmd_header_t header;
13483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   static int inited = 0;
13493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
13503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   if (!inited) {
13513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      init_regs();
13523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      inited = 1;
13533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
13543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
13553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
13563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   cmdbuf.buf = rmesa->store.cmd_buf;
13573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   cmdbuf.bufsz = rmesa->store.cmd_used;
13583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   cmdbuf.boxes = (drm_clip_rect_t *)boxes;
13593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   cmdbuf.nbox = nbox;
13603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
13613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   while ( cmdbuf.bufsz >= sizeof(header) ) {
13623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
13633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      header.i = *(int *)cmdbuf.buf;
13643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      cmdbuf.buf += sizeof(header);
13653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      cmdbuf.bufsz -= sizeof(header);
13663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
13673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      switch (header.header.cmd_type) {
13683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      case RADEON_CMD_PACKET:
13693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 if (radeon_emit_packets( header, &cmdbuf )) {
13703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	    fprintf(stderr,"radeon_emit_packets failed\n");
13713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	    return -EINVAL;
13723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 }
13733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 break;
13743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
13753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      case RADEON_CMD_SCALARS:
13763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 if (radeon_emit_scalars( header, &cmdbuf )) {
13773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	    fprintf(stderr,"radeon_emit_scalars failed\n");
13783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	    return -EINVAL;
13793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 }
13803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 break;
13813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
13823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      case RADEON_CMD_SCALARS2:
13833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 if (radeon_emit_scalars2( header, &cmdbuf )) {
13843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	    fprintf(stderr,"radeon_emit_scalars failed\n");
13853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	    return -EINVAL;
13863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 }
13873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 break;
13883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
13893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      case RADEON_CMD_VECTORS:
13903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 if (radeon_emit_vectors( header, &cmdbuf )) {
13913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	    fprintf(stderr,"radeon_emit_vectors failed\n");
13923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	    return -EINVAL;
13933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 }
13943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 break;
13953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
13963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      case RADEON_CMD_DMA_DISCARD:
13973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 idx = header.dma.buf_idx;
13983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 if (NORMAL)
13993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	    fprintf(stderr, "RADEON_CMD_DMA_DISCARD buf %d\n", idx);
14003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 bufs++;
14013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 break;
14023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
14033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      case RADEON_CMD_PACKET3:
14043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 if (radeon_emit_packet3( &cmdbuf )) {
14053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	    fprintf(stderr,"radeon_emit_packet3 failed\n");
14063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	    return -EINVAL;
14073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 }
14083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 break;
14093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
14103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      case RADEON_CMD_PACKET3_CLIP:
14113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 if (radeon_emit_packet3_cliprect( &cmdbuf )) {
14123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	    fprintf(stderr,"radeon_emit_packet3_clip failed\n");
14133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	    return -EINVAL;
14143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 }
14153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 break;
14163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
14173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      case RADEON_CMD_WAIT:
14183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 break;
14193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
14203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      case RADEON_CMD_VECLINEAR:
14213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 if (radeon_emit_veclinear( header, &cmdbuf )) {
14223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	    fprintf(stderr,"radeon_emit_veclinear failed\n");
14233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	    return -EINVAL;
14243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 }
14253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 break;
14263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
14273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      default:
14283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr,"bad cmd_type %d at %p\n",
14293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org		   header.header.cmd_type,
14303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org		   cmdbuf.buf - sizeof(header));
14313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 return -EINVAL;
14323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      }
14333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
14343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
14353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   if (0)
14363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   {
14373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      static int n = 0;
14383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      n++;
14393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      if (n == 10) {
14403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "Bufs %d Total emitted %d real changes %d (%.2f%%)\n",
14413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org		 bufs,
14423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org		 total, total_changed,
14433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org		 ((float)total_changed/(float)total*100.0));
14443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "Total emitted per buf: %.2f\n",
14453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org		 (float)total/(float)bufs);
14463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 fprintf(stderr, "Real changes per buf: %.2f\n",
14473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org		 (float)total_changed/(float)bufs);
14483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
14493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 bufs = n = total = total_changed = 0;
14503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      }
14513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
14523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
14533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   fprintf(stderr, "leaving %s\n\n\n", __FUNCTION__);
14543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
14553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   return 0;
14563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}
1457