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#include <errno.h> 353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "main/glheader.h" 373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "radeon_context.h" 393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "radeon_sanity.h" 403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* Set this '1' to get more verbiage. 423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define MORE_VERBOSE 1 443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#if MORE_VERBOSE 463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define VERBOSE (RADEON_DEBUG & RADEON_VERBOSE) 473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define NORMAL (1) 483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#else 493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define VERBOSE 0 503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define NORMAL (RADEON_DEBUG & RADEON_VERBOSE) 513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#endif 523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* New (1.3) state mechanism. 3 commands (packet, scalar, vector) in 553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 1.3 cmdbuffers allow all previous state to be updated as well as 563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * the tcl scalar and vector areas. 573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic struct { 593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int start; 603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int len; 613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org const char *name; 623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} packet[RADEON_MAX_STATE_PACKETS] = { 633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_MISC,7,"RADEON_PP_MISC" }, 643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_CNTL,3,"RADEON_PP_CNTL" }, 653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_RB3D_COLORPITCH,1,"RADEON_RB3D_COLORPITCH" }, 663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_RE_LINE_PATTERN,2,"RADEON_RE_LINE_PATTERN" }, 673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_LINE_WIDTH,1,"RADEON_SE_LINE_WIDTH" }, 683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_LUM_MATRIX,1,"RADEON_PP_LUM_MATRIX" }, 693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_ROT_MATRIX_0,2,"RADEON_PP_ROT_MATRIX_0" }, 703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_RB3D_STENCILREFMASK,3,"RADEON_RB3D_STENCILREFMASK" }, 713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_VPORT_XSCALE,6,"RADEON_SE_VPORT_XSCALE" }, 723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_CNTL,2,"RADEON_SE_CNTL" }, 733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_CNTL_STATUS,1,"RADEON_SE_CNTL_STATUS" }, 743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_RE_MISC,1,"RADEON_RE_MISC" }, 753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_TXFILTER_0,6,"RADEON_PP_TXFILTER_0" }, 763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_BORDER_COLOR_0,1,"RADEON_PP_BORDER_COLOR_0" }, 773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_TXFILTER_1,6,"RADEON_PP_TXFILTER_1" }, 783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_BORDER_COLOR_1,1,"RADEON_PP_BORDER_COLOR_1" }, 793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_TXFILTER_2,6,"RADEON_PP_TXFILTER_2" }, 803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_BORDER_COLOR_2,1,"RADEON_PP_BORDER_COLOR_2" }, 813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_ZBIAS_FACTOR,2,"RADEON_SE_ZBIAS_FACTOR" }, 823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_TCL_OUTPUT_VTX_FMT,11,"RADEON_SE_TCL_OUTPUT_VTX_FMT" }, 833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_TCL_MATERIAL_EMMISSIVE_RED,17,"RADEON_SE_TCL_MATERIAL_EMMISSIVE_RED" }, 843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 4, "R200_PP_TXCBLEND_0" }, 853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 4, "R200_PP_TXCBLEND_1" }, 863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 4, "R200_PP_TXCBLEND_2" }, 873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 4, "R200_PP_TXCBLEND_3" }, 883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 4, "R200_PP_TXCBLEND_4" }, 893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 4, "R200_PP_TXCBLEND_5" }, 903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 4, "R200_PP_TXCBLEND_6" }, 913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 4, "R200_PP_TXCBLEND_7" }, 923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 6, "R200_SE_TCL_LIGHT_MODEL_CTL_0" }, 933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 6, "R200_PP_TFACTOR_0" }, 943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 4, "R200_SE_VTX_FMT_0" }, 953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 1, "R200_SE_VAP_CNTL" }, 963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 5, "R200_SE_TCL_MATRIX_SEL_0" }, 973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 5, "R200_SE_TCL_TEX_PROC_CTL_2" }, 983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 1, "R200_SE_TCL_UCP_VERT_BLEND_CTL" }, 993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 6, "R200_PP_TXFILTER_0" }, 1003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 6, "R200_PP_TXFILTER_1" }, 1013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 6, "R200_PP_TXFILTER_2" }, 1023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 6, "R200_PP_TXFILTER_3" }, 1033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 6, "R200_PP_TXFILTER_4" }, 1043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 6, "R200_PP_TXFILTER_5" }, 1053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 1, "R200_PP_TXOFFSET_0" }, 1063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 1, "R200_PP_TXOFFSET_1" }, 1073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 1, "R200_PP_TXOFFSET_2" }, 1083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 1, "R200_PP_TXOFFSET_3" }, 1093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 1, "R200_PP_TXOFFSET_4" }, 1103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 1, "R200_PP_TXOFFSET_5" }, 1113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 1, "R200_SE_VTE_CNTL" }, 1123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 1, "R200_SE_TCL_OUTPUT_VTX_COMP_SEL" }, 1133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 1, "R200_PP_TAM_DEBUG3" }, 1143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 1, "R200_PP_CNTL_X" }, 1153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 1, "R200_RB3D_DEPTHXY_OFFSET" }, 1163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 1, "R200_RE_AUX_SCISSOR_CNTL" }, 1173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 2, "R200_RE_SCISSOR_TL_0" }, 1183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 2, "R200_RE_SCISSOR_TL_1" }, 1193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 2, "R200_RE_SCISSOR_TL_2" }, 1203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 1, "R200_SE_VAP_CNTL_STATUS" }, 1213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 1, "R200_SE_VTX_STATE_CNTL" }, 1223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 1, "R200_RE_POINTSIZE" }, 1233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 4, "R200_SE_TCL_INPUT_VTX_VECTOR_ADDR_0" }, 1243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 1, "R200_PP_CUBIC_FACES_0" }, /* 61 */ 1253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 5, "R200_PP_CUBIC_OFFSET_F1_0" }, /* 62 */ 1263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 1, "R200_PP_CUBIC_FACES_1" }, 1273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 5, "R200_PP_CUBIC_OFFSET_F1_1" }, 1283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 1, "R200_PP_CUBIC_FACES_2" }, 1293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 5, "R200_PP_CUBIC_OFFSET_F1_2" }, 1303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 1, "R200_PP_CUBIC_FACES_3" }, 1313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 5, "R200_PP_CUBIC_OFFSET_F1_3" }, 1323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 1, "R200_PP_CUBIC_FACES_4" }, 1333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 5, "R200_PP_CUBIC_OFFSET_F1_4" }, 1343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 1, "R200_PP_CUBIC_FACES_5" }, 1353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 5, "R200_PP_CUBIC_OFFSET_F1_5" }, 1363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_TEX_SIZE_0, 2, "RADEON_PP_TEX_SIZE_0" }, 1373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_TEX_SIZE_1, 2, "RADEON_PP_TEX_SIZE_1" }, 1383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_TEX_SIZE_2, 2, "RADEON_PP_TEX_SIZE_2" }, 1393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 3, "R200_RB3D_BLENDCOLOR" }, 1403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 1, "R200_SE_TCL_POINT_SPRITE_CNTL" }, 1413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_CUBIC_FACES_0, 1, "RADEON_PP_CUBIC_FACES_0" }, 1423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_CUBIC_OFFSET_T0_0, 5, "RADEON_PP_CUBIC_OFFSET_T0_0" }, 1433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_CUBIC_FACES_1, 1, "RADEON_PP_CUBIC_FACES_1" }, 1443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_CUBIC_OFFSET_T1_0, 5, "RADEON_PP_CUBIC_OFFSET_T1_0" }, 1453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_CUBIC_FACES_2, 1, "RADEON_PP_CUBIC_FACES_2" }, 1463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_CUBIC_OFFSET_T2_0, 5, "RADEON_PP_CUBIC_OFFSET_T2_0" }, 1473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 2, "R200_PP_TRI_PERF" }, 1483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 32, "R200_PP_AFS_0"}, /* 85 */ 1493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 32, "R200_PP_AFS_1"}, 1503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 8, "R200_ATF_TFACTOR"}, 1513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 8, "R200_PP_TXCTLALL_0"}, 1523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 8, "R200_PP_TXCTLALL_1"}, 1533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 8, "R200_PP_TXCTLALL_2"}, 1543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 8, "R200_PP_TXCTLALL_3"}, 1553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 8, "R200_PP_TXCTLALL_4"}, 1563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 8, "R200_PP_TXCTLALL_5"}, 1573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 0, 2, "R200_VAP_PVS_CNTL"}, 1583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}; 1593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstruct reg_names { 1613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int idx; 1623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org const char *name; 1633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}; 1643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic struct reg_names reg_names[] = { 1663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_MISC, "RADEON_PP_MISC" }, 1673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_FOG_COLOR, "RADEON_PP_FOG_COLOR" }, 1683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_RE_SOLID_COLOR, "RADEON_RE_SOLID_COLOR" }, 1693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_RB3D_BLENDCNTL, "RADEON_RB3D_BLENDCNTL" }, 1703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_RB3D_DEPTHOFFSET, "RADEON_RB3D_DEPTHOFFSET" }, 1713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_RB3D_DEPTHPITCH, "RADEON_RB3D_DEPTHPITCH" }, 1723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_RB3D_ZSTENCILCNTL, "RADEON_RB3D_ZSTENCILCNTL" }, 1733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_CNTL, "RADEON_PP_CNTL" }, 1743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_RB3D_CNTL, "RADEON_RB3D_CNTL" }, 1753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_RB3D_COLOROFFSET, "RADEON_RB3D_COLOROFFSET" }, 1763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_RB3D_COLORPITCH, "RADEON_RB3D_COLORPITCH" }, 1773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_CNTL, "RADEON_SE_CNTL" }, 1783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_COORD_FMT, "RADEON_SE_COORDFMT" }, 1793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_CNTL_STATUS, "RADEON_SE_CNTL_STATUS" }, 1803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_RE_LINE_PATTERN, "RADEON_RE_LINE_PATTERN" }, 1813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_RE_LINE_STATE, "RADEON_RE_LINE_STATE" }, 1823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_LINE_WIDTH, "RADEON_SE_LINE_WIDTH" }, 1833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_RB3D_STENCILREFMASK, "RADEON_RB3D_STENCILREFMASK" }, 1843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_RB3D_ROPCNTL, "RADEON_RB3D_ROPCNTL" }, 1853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_RB3D_PLANEMASK, "RADEON_RB3D_PLANEMASK" }, 1863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_VPORT_XSCALE, "RADEON_SE_VPORT_XSCALE" }, 1873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_VPORT_XOFFSET, "RADEON_SE_VPORT_XOFFSET" }, 1883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_VPORT_YSCALE, "RADEON_SE_VPORT_YSCALE" }, 1893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_VPORT_YOFFSET, "RADEON_SE_VPORT_YOFFSET" }, 1903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_VPORT_ZSCALE, "RADEON_SE_VPORT_ZSCALE" }, 1913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_VPORT_ZOFFSET, "RADEON_SE_VPORT_ZOFFSET" }, 1923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_RE_MISC, "RADEON_RE_MISC" }, 1933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_TXFILTER_0, "RADEON_PP_TXFILTER_0" }, 1943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_TXFILTER_1, "RADEON_PP_TXFILTER_1" }, 1953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_TXFILTER_2, "RADEON_PP_TXFILTER_2" }, 1963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_TXFORMAT_0, "RADEON_PP_TXFORMAT_0" }, 1973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_TXFORMAT_1, "RADEON_PP_TXFORMAT_1" }, 1983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_TXFORMAT_2, "RADEON_PP_TXFORMAT_2" }, 1993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_TXOFFSET_0, "RADEON_PP_TXOFFSET_0" }, 2003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_TXOFFSET_1, "RADEON_PP_TXOFFSET_1" }, 2013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_TXOFFSET_2, "RADEON_PP_TXOFFSET_2" }, 2023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_TXCBLEND_0, "RADEON_PP_TXCBLEND_0" }, 2033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_TXCBLEND_1, "RADEON_PP_TXCBLEND_1" }, 2043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_TXCBLEND_2, "RADEON_PP_TXCBLEND_2" }, 2053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_TXABLEND_0, "RADEON_PP_TXABLEND_0" }, 2063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_TXABLEND_1, "RADEON_PP_TXABLEND_1" }, 2073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_TXABLEND_2, "RADEON_PP_TXABLEND_2" }, 2083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_TFACTOR_0, "RADEON_PP_TFACTOR_0" }, 2093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_TFACTOR_1, "RADEON_PP_TFACTOR_1" }, 2103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_TFACTOR_2, "RADEON_PP_TFACTOR_2" }, 2113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_BORDER_COLOR_0, "RADEON_PP_BORDER_COLOR_0" }, 2123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_BORDER_COLOR_1, "RADEON_PP_BORDER_COLOR_1" }, 2133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_BORDER_COLOR_2, "RADEON_PP_BORDER_COLOR_2" }, 2143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_ZBIAS_FACTOR, "RADEON_SE_ZBIAS_FACTOR" }, 2153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_ZBIAS_CONSTANT, "RADEON_SE_ZBIAS_CONSTANT" }, 2163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_TCL_OUTPUT_VTX_FMT, "RADEON_SE_TCL_OUTPUT_VTXFMT" }, 2173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_TCL_OUTPUT_VTX_SEL, "RADEON_SE_TCL_OUTPUT_VTXSEL" }, 2183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_TCL_MATRIX_SELECT_0, "RADEON_SE_TCL_MATRIX_SELECT_0" }, 2193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_TCL_MATRIX_SELECT_1, "RADEON_SE_TCL_MATRIX_SELECT_1" }, 2203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_TCL_UCP_VERT_BLEND_CTL, "RADEON_SE_TCL_UCP_VERT_BLEND_CTL" }, 2213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_TCL_TEXTURE_PROC_CTL, "RADEON_SE_TCL_TEXTURE_PROC_CTL" }, 2223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_TCL_LIGHT_MODEL_CTL, "RADEON_SE_TCL_LIGHT_MODEL_CTL" }, 2233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_TCL_PER_LIGHT_CTL_0, "RADEON_SE_TCL_PER_LIGHT_CTL_0" }, 2243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_TCL_PER_LIGHT_CTL_1, "RADEON_SE_TCL_PER_LIGHT_CTL_1" }, 2253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_TCL_PER_LIGHT_CTL_2, "RADEON_SE_TCL_PER_LIGHT_CTL_2" }, 2263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_TCL_PER_LIGHT_CTL_3, "RADEON_SE_TCL_PER_LIGHT_CTL_3" }, 2273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_TCL_MATERIAL_EMMISSIVE_RED, "RADEON_SE_TCL_EMMISSIVE_RED" }, 2283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_TCL_MATERIAL_EMMISSIVE_GREEN, "RADEON_SE_TCL_EMMISSIVE_GREEN" }, 2293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_TCL_MATERIAL_EMMISSIVE_BLUE, "RADEON_SE_TCL_EMMISSIVE_BLUE" }, 2303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_TCL_MATERIAL_EMMISSIVE_ALPHA, "RADEON_SE_TCL_EMMISSIVE_ALPHA" }, 2313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_TCL_MATERIAL_AMBIENT_RED, "RADEON_SE_TCL_AMBIENT_RED" }, 2323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_TCL_MATERIAL_AMBIENT_GREEN, "RADEON_SE_TCL_AMBIENT_GREEN" }, 2333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_TCL_MATERIAL_AMBIENT_BLUE, "RADEON_SE_TCL_AMBIENT_BLUE" }, 2343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_TCL_MATERIAL_AMBIENT_ALPHA, "RADEON_SE_TCL_AMBIENT_ALPHA" }, 2353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_TCL_MATERIAL_DIFFUSE_RED, "RADEON_SE_TCL_DIFFUSE_RED" }, 2363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_TCL_MATERIAL_DIFFUSE_GREEN, "RADEON_SE_TCL_DIFFUSE_GREEN" }, 2373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_TCL_MATERIAL_DIFFUSE_BLUE, "RADEON_SE_TCL_DIFFUSE_BLUE" }, 2383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_TCL_MATERIAL_DIFFUSE_ALPHA, "RADEON_SE_TCL_DIFFUSE_ALPHA" }, 2393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_TCL_MATERIAL_SPECULAR_RED, "RADEON_SE_TCL_SPECULAR_RED" }, 2403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_TCL_MATERIAL_SPECULAR_GREEN, "RADEON_SE_TCL_SPECULAR_GREEN" }, 2413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_TCL_MATERIAL_SPECULAR_BLUE, "RADEON_SE_TCL_SPECULAR_BLUE" }, 2423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_TCL_MATERIAL_SPECULAR_ALPHA, "RADEON_SE_TCL_SPECULAR_ALPHA" }, 2433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_TCL_SHININESS, "RADEON_SE_TCL_SHININESS" }, 2443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SE_COORD_FMT, "RADEON_SE_COORD_FMT" }, 2453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_TEX_SIZE_0, "RADEON_PP_TEX_SIZE_0" }, 2463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_TEX_SIZE_1, "RADEON_PP_TEX_SIZE_1" }, 2473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_TEX_SIZE_2, "RADEON_PP_TEX_SIZE_2" }, 2483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_TEX_SIZE_0+4, "RADEON_PP_TEX_PITCH_0" }, 2493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_TEX_SIZE_1+4, "RADEON_PP_TEX_PITCH_1" }, 2503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_TEX_SIZE_2+4, "RADEON_PP_TEX_PITCH_2" }, 2513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_CUBIC_FACES_0, "RADEON_PP_CUBIC_FACES_0" }, 2523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_CUBIC_FACES_1, "RADEON_PP_CUBIC_FACES_1" }, 2533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_CUBIC_FACES_2, "RADEON_PP_CUBIC_FACES_2" }, 2543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_CUBIC_OFFSET_T0_0, "RADEON_PP_CUBIC_OFFSET_T0_0" }, 2553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_CUBIC_OFFSET_T0_1, "RADEON_PP_CUBIC_OFFSET_T0_1" }, 2563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_CUBIC_OFFSET_T0_2, "RADEON_PP_CUBIC_OFFSET_T0_2" }, 2573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_CUBIC_OFFSET_T0_3, "RADEON_PP_CUBIC_OFFSET_T0_3" }, 2583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_CUBIC_OFFSET_T0_4, "RADEON_PP_CUBIC_OFFSET_T0_4" }, 2593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_CUBIC_OFFSET_T1_0, "RADEON_PP_CUBIC_OFFSET_T1_0" }, 2603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_CUBIC_OFFSET_T1_1, "RADEON_PP_CUBIC_OFFSET_T1_1" }, 2613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_CUBIC_OFFSET_T1_2, "RADEON_PP_CUBIC_OFFSET_T1_2" }, 2623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_CUBIC_OFFSET_T1_3, "RADEON_PP_CUBIC_OFFSET_T1_3" }, 2633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_CUBIC_OFFSET_T1_4, "RADEON_PP_CUBIC_OFFSET_T1_4" }, 2643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_CUBIC_OFFSET_T2_0, "RADEON_PP_CUBIC_OFFSET_T2_0" }, 2653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_CUBIC_OFFSET_T2_1, "RADEON_PP_CUBIC_OFFSET_T2_1" }, 2663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_CUBIC_OFFSET_T2_2, "RADEON_PP_CUBIC_OFFSET_T2_2" }, 2673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_CUBIC_OFFSET_T2_3, "RADEON_PP_CUBIC_OFFSET_T2_3" }, 2683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_PP_CUBIC_OFFSET_T2_4, "RADEON_PP_CUBIC_OFFSET_T2_4" }, 2693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}; 2703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic struct reg_names scalar_names[] = { 2723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SS_LIGHT_DCD_ADDR, "LIGHT_DCD" }, 2733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SS_LIGHT_SPOT_EXPONENT_ADDR, "LIGHT_SPOT_EXPONENT" }, 2743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SS_LIGHT_SPOT_CUTOFF_ADDR, "LIGHT_SPOT_CUTOFF" }, 2753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SS_LIGHT_SPECULAR_THRESH_ADDR, "LIGHT_SPECULAR_THRESH" }, 2763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SS_LIGHT_RANGE_CUTOFF_ADDR, "LIGHT_RANGE_CUTOFF" }, 2773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SS_VERT_GUARD_CLIP_ADJ_ADDR, "VERT_GUARD_CLIP" }, 2783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SS_VERT_GUARD_DISCARD_ADJ_ADDR, "VERT_GUARD_DISCARD" }, 2793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SS_HORZ_GUARD_CLIP_ADJ_ADDR, "HORZ_GUARD_CLIP" }, 2803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SS_HORZ_GUARD_DISCARD_ADJ_ADDR, "HORZ_GUARD_DISCARD" }, 2813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_SS_SHININESS, "SHININESS" }, 2823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 1000, "" }, 2833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}; 2843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* Puff these out to make them look like normal (dword) registers. 2863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 2873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic struct reg_names vector_names[] = { 2883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_VS_MATRIX_0_ADDR * 4, "MATRIX_0" }, 2893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_VS_MATRIX_1_ADDR * 4, "MATRIX_1" }, 2903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_VS_MATRIX_2_ADDR * 4, "MATRIX_2" }, 2913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_VS_MATRIX_3_ADDR * 4, "MATRIX_3" }, 2923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_VS_MATRIX_4_ADDR * 4, "MATRIX_4" }, 2933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_VS_MATRIX_5_ADDR * 4, "MATRIX_5" }, 2943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_VS_MATRIX_6_ADDR * 4, "MATRIX_6" }, 2953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_VS_MATRIX_7_ADDR * 4, "MATRIX_7" }, 2963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_VS_MATRIX_8_ADDR * 4, "MATRIX_8" }, 2973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_VS_MATRIX_9_ADDR * 4, "MATRIX_9" }, 2983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_VS_MATRIX_10_ADDR * 4, "MATRIX_10" }, 2993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_VS_MATRIX_11_ADDR * 4, "MATRIX_11" }, 3003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_VS_MATRIX_12_ADDR * 4, "MATRIX_12" }, 3013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_VS_MATRIX_13_ADDR * 4, "MATRIX_13" }, 3023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_VS_MATRIX_14_ADDR * 4, "MATRIX_14" }, 3033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_VS_MATRIX_15_ADDR * 4, "MATRIX_15" }, 3043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_VS_LIGHT_AMBIENT_ADDR * 4, "LIGHT_AMBIENT" }, 3053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_VS_LIGHT_DIFFUSE_ADDR * 4, "LIGHT_DIFFUSE" }, 3063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_VS_LIGHT_SPECULAR_ADDR * 4, "LIGHT_SPECULAR" }, 3073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_VS_LIGHT_DIRPOS_ADDR * 4, "LIGHT_DIRPOS" }, 3083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_VS_LIGHT_HWVSPOT_ADDR * 4, "LIGHT_HWVSPOT" }, 3093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_VS_LIGHT_ATTENUATION_ADDR * 4, "LIGHT_ATTENUATION" }, 3103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_VS_MATRIX_EYE2CLIP_ADDR * 4, "MATRIX_EYE2CLIP" }, 3113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_VS_UCP_ADDR * 4, "UCP" }, 3123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_VS_GLOBAL_AMBIENT_ADDR * 4, "GLOBAL_AMBIENT" }, 3133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_VS_FOG_PARAM_ADDR * 4, "FOG_PARAM" }, 3143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { RADEON_VS_EYE_VECTOR_ADDR * 4, "EYE_VECTOR" }, 3153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 1000, "" }, 3163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}; 3173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgunion fi { float f; int i; }; 3193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define ISVEC 1 3213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define ISFLOAT 2 3223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define TOUCHED 4 3233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstruct reg { 3253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int idx; 3263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org struct reg_names *closest; 3273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int flags; 3283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org union fi current; 3293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org union fi *values; 3303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int nvalues; 3313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int nalloc; 3323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org float vmin, vmax; 3333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}; 3343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic struct reg regs[Elements(reg_names)+1]; 3373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic struct reg scalars[512+1]; 3383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic struct reg vectors[512*4+1]; 3393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic int total, total_changed, bufs; 3413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic void init_regs( void ) 3433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 3443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org struct reg_names *tmp; 3453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int i; 3463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org for (i = 0 ; i < Elements(regs)-1 ; i++) { 3483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org regs[i].idx = reg_names[i].idx; 3493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org regs[i].closest = ®_names[i]; 3503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org regs[i].flags = 0; 3513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 3523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org for (i = 0, tmp = scalar_names ; i < Elements(scalars) ; i++) { 3543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (tmp[1].idx == i) tmp++; 3553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org scalars[i].idx = i; 3563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org scalars[i].closest = tmp; 3573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org scalars[i].flags = ISFLOAT; 3583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 3593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org for (i = 0, tmp = vector_names ; i < Elements(vectors) ; i++) { 3613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (tmp[1].idx*4 == i) tmp++; 3623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org vectors[i].idx = i; 3633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org vectors[i].closest = tmp; 3643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org vectors[i].flags = ISFLOAT|ISVEC; 3653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 3663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org regs[Elements(regs)-1].idx = -1; 3683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org scalars[Elements(scalars)-1].idx = -1; 3693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org vectors[Elements(vectors)-1].idx = -1; 3703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 3713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic int find_or_add_value( struct reg *reg, int val ) 3733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 3743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int j; 3753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org for ( j = 0 ; j < reg->nvalues ; j++) 3773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if ( val == reg->values[j].i ) 3783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return 1; 3793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (j == reg->nalloc) { 3813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org reg->nalloc += 5; 3823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org reg->nalloc *= 2; 3833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org reg->values = (union fi *) realloc( reg->values, 3843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org reg->nalloc * sizeof(union fi) ); 3853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 3863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org reg->values[reg->nvalues++].i = val; 3883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return 0; 3893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 3903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic struct reg *lookup_reg( struct reg *tab, int reg ) 3923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 3933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int i; 3943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org for (i = 0 ; tab[i].idx != -1 ; i++) { 3963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (tab[i].idx == reg) 3973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return &tab[i]; 3983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 3993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "*** unknown reg 0x%x\n", reg); 4013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return NULL; 4023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 4033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic const char *get_reg_name( struct reg *reg ) 4063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 4073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org static char tmp[80]; 4083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (reg->idx == reg->closest->idx) 4103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return reg->closest->name; 4113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (reg->flags & ISVEC) { 4143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (reg->idx/4 != reg->closest->idx) 4153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org sprintf(tmp, "%s+%d[%d]", 4163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org reg->closest->name, 4173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (reg->idx/4) - reg->closest->idx, 4183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org reg->idx%4); 4193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else 4203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org sprintf(tmp, "%s[%d]", reg->closest->name, reg->idx%4); 4213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 4223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else { 4233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (reg->idx != reg->closest->idx) 4243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org sprintf(tmp, "%s+%d", reg->closest->name, reg->idx - reg->closest->idx); 4253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else 4263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org sprintf(tmp, "%s", reg->closest->name); 4273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 4283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return tmp; 4303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 4313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic int print_int_reg_assignment( struct reg *reg, int data ) 4333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 4343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int changed = (reg->current.i != data); 4353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int ever_seen = find_or_add_value( reg, data ); 4363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (VERBOSE || (NORMAL && (changed || !ever_seen))) 4383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, " %s <-- 0x%x", get_reg_name(reg), data); 4393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (NORMAL) { 4413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (!ever_seen) 4423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, " *** BRAND NEW VALUE"); 4433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else if (changed) 4443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, " *** CHANGED"); 4453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 4463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org reg->current.i = data; 4483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (VERBOSE || (NORMAL && (changed || !ever_seen))) 4503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "\n"); 4513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return changed; 4533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 4543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic int print_float_reg_assignment( struct reg *reg, float data ) 4573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 4583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int changed = (reg->current.f != data); 4593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int newmin = (data < reg->vmin); 4603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int newmax = (data > reg->vmax); 4613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (VERBOSE || (NORMAL && (newmin || newmax || changed))) 4633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, " %s <-- %.3f", get_reg_name(reg), data); 4643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (NORMAL) { 4663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (newmin) { 4673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, " *** NEW MIN (prev %.3f)", reg->vmin); 4683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org reg->vmin = data; 4693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 4703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else if (newmax) { 4713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, " *** NEW MAX (prev %.3f)", reg->vmax); 4723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org reg->vmax = data; 4733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 4743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else if (changed) { 4753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, " *** CHANGED"); 4763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 4773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 4783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org reg->current.f = data; 4803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (VERBOSE || (NORMAL && (newmin || newmax || changed))) 4823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "\n"); 4833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return changed; 4853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 4863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic int print_reg_assignment( struct reg *reg, int data ) 4883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 4893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org float_ui32_type datau; 4903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org datau.ui32 = data; 4913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org reg->flags |= TOUCHED; 4923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (reg->flags & ISFLOAT) 4933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return print_float_reg_assignment( reg, datau.f ); 4943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else 4953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return print_int_reg_assignment( reg, data ); 4963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 4973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic void print_reg( struct reg *reg ) 4993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 5003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (reg->flags & TOUCHED) { 5013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (reg->flags & ISFLOAT) { 5023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, " %s == %f\n", get_reg_name(reg), reg->current.f); 5033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } else { 5043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, " %s == 0x%x\n", get_reg_name(reg), reg->current.i); 5053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 5063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 5073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 5083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 5093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 5103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic void dump_state( void ) 5113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 5123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int i; 5133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 5143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org for (i = 0 ; i < Elements(regs) ; i++) 5153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org print_reg( ®s[i] ); 5163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 5173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org for (i = 0 ; i < Elements(scalars) ; i++) 5183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org print_reg( &scalars[i] ); 5193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 5203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org for (i = 0 ; i < Elements(vectors) ; i++) 5213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org print_reg( &vectors[i] ); 5223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 5233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 5243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 5253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 5263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic int radeon_emit_packets( 5273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org drm_radeon_cmd_header_t header, 5283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org drm_radeon_cmd_buffer_t *cmdbuf ) 5293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 5303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int id = (int)header.packet.packet_id; 5313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int sz = packet[id].len; 5323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int *data = (int *)cmdbuf->buf; 5333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int i; 5343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 5353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (sz * sizeof(int) > cmdbuf->bufsz) { 5363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "Packet overflows cmdbuf\n"); 5373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return -EINVAL; 5383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 5393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 5403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (!packet[id].name) { 5413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "*** Unknown packet 0 nr %d\n", id ); 5423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return -EINVAL; 5433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 5443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 5453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 5463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (VERBOSE) 5473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "Packet 0 reg %s nr %d\n", packet[id].name, sz ); 5483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 5493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org for ( i = 0 ; i < sz ; i++) { 5503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org struct reg *reg = lookup_reg( regs, packet[id].start + i*4 ); 5513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (print_reg_assignment( reg, data[i] )) 5523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org total_changed++; 5533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org total++; 5543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 5553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 5563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmdbuf->buf += sz * sizeof(int); 5573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmdbuf->bufsz -= sz * sizeof(int); 5583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return 0; 5593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 5603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 5613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 5623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic int radeon_emit_scalars( 5633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org drm_radeon_cmd_header_t header, 5643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org drm_radeon_cmd_buffer_t *cmdbuf ) 5653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 5663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int sz = header.scalars.count; 5673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int *data = (int *)cmdbuf->buf; 5683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int start = header.scalars.offset; 5693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int stride = header.scalars.stride; 5703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int i; 5713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 5723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (VERBOSE) 5733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "emit scalars, start %d stride %d nr %d (end %d)\n", 5743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org start, stride, sz, start + stride * sz); 5753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 5763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 5773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org for (i = 0 ; i < sz ; i++, start += stride) { 5783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org struct reg *reg = lookup_reg( scalars, start ); 5793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (print_reg_assignment( reg, data[i] )) 5803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org total_changed++; 5813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org total++; 5823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 5833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 5843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmdbuf->buf += sz * sizeof(int); 5853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmdbuf->bufsz -= sz * sizeof(int); 5863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return 0; 5873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 5883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 5893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 5903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic int radeon_emit_scalars2( 5913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org drm_radeon_cmd_header_t header, 5923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org drm_radeon_cmd_buffer_t *cmdbuf ) 5933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 5943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int sz = header.scalars.count; 5953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int *data = (int *)cmdbuf->buf; 5963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int start = header.scalars.offset + 0x100; 5973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int stride = header.scalars.stride; 5983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int i; 5993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 6003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (VERBOSE) 6013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "emit scalars2, start %d stride %d nr %d (end %d)\n", 6023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org start, stride, sz, start + stride * sz); 6033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 6043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (start + stride * sz > 257) { 6053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "emit scalars OVERFLOW %d/%d/%d\n", start, stride, sz); 6063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return -1; 6073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 6083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 6093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org for (i = 0 ; i < sz ; i++, start += stride) { 6103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org struct reg *reg = lookup_reg( scalars, start ); 6113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (print_reg_assignment( reg, data[i] )) 6123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org total_changed++; 6133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org total++; 6143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 6153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 6163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmdbuf->buf += sz * sizeof(int); 6173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmdbuf->bufsz -= sz * sizeof(int); 6183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return 0; 6193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 6203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 6213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* Check: inf/nan/extreme-size? 6223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Check: table start, end, nr, etc. 6233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 6243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic int radeon_emit_vectors( 6253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org drm_radeon_cmd_header_t header, 6263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org drm_radeon_cmd_buffer_t *cmdbuf ) 6273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 6283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int sz = header.vectors.count; 6293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int *data = (int *)cmdbuf->buf; 6303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int start = header.vectors.offset; 6313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int stride = header.vectors.stride; 6323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int i,j; 6333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 6343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (VERBOSE) 6353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "emit vectors, start %d stride %d nr %d (end %d) (0x%x)\n", 6363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org start, stride, sz, start + stride * sz, header.i); 6373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 6383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* if (start + stride * (sz/4) > 128) { */ 6393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* fprintf(stderr, "emit vectors OVERFLOW %d/%d/%d\n", start, stride, sz); */ 6403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* return -1; */ 6413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* } */ 6423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 6433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org for (i = 0 ; i < sz ; start += stride) { 6443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int changed = 0; 6453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org for (j = 0 ; j < 4 ; i++,j++) { 6463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org struct reg *reg = lookup_reg( vectors, start*4+j ); 6473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (print_reg_assignment( reg, data[i] )) 6483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org changed = 1; 6493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 6503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (changed) 6513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org total_changed += 4; 6523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org total += 4; 6533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 6543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 6553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 6563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmdbuf->buf += sz * sizeof(int); 6573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmdbuf->bufsz -= sz * sizeof(int); 6583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return 0; 6593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 6603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 6613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 6623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic int print_vertex_format( int vfmt ) 6633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 6643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (NORMAL) { 6653a0db227ffe90888ad760c61a63226988c974e0apatrick@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", 6663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org "vertex format", 6673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org vfmt, 6683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org "xy,", 6693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (vfmt & RADEON_CP_VC_FRMT_Z) ? "z," : "", 6703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (vfmt & RADEON_CP_VC_FRMT_W0) ? "w0," : "", 6713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (vfmt & RADEON_CP_VC_FRMT_FPCOLOR) ? "fpcolor," : "", 6723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (vfmt & RADEON_CP_VC_FRMT_FPALPHA) ? "fpalpha," : "", 6733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (vfmt & RADEON_CP_VC_FRMT_PKCOLOR) ? "pkcolor," : "", 6743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (vfmt & RADEON_CP_VC_FRMT_FPSPEC) ? "fpspec," : "", 6753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (vfmt & RADEON_CP_VC_FRMT_FPFOG) ? "fpfog," : "", 6763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (vfmt & RADEON_CP_VC_FRMT_PKSPEC) ? "pkspec," : "", 6773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (vfmt & RADEON_CP_VC_FRMT_ST0) ? "st0," : "", 6783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (vfmt & RADEON_CP_VC_FRMT_ST1) ? "st1," : "", 6793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (vfmt & RADEON_CP_VC_FRMT_Q1) ? "q1," : "", 6803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (vfmt & RADEON_CP_VC_FRMT_ST2) ? "st2," : "", 6813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (vfmt & RADEON_CP_VC_FRMT_Q2) ? "q2," : "", 6823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (vfmt & RADEON_CP_VC_FRMT_ST3) ? "st3," : "", 6833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (vfmt & RADEON_CP_VC_FRMT_Q3) ? "q3," : "", 6843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (vfmt & RADEON_CP_VC_FRMT_Q0) ? "q0," : "", 6853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (vfmt & RADEON_CP_VC_FRMT_N0) ? "n0," : "", 6863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (vfmt & RADEON_CP_VC_FRMT_XY1) ? "xy1," : "", 6873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (vfmt & RADEON_CP_VC_FRMT_Z1) ? "z1," : "", 6883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (vfmt & RADEON_CP_VC_FRMT_W1) ? "w1," : "", 6893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (vfmt & RADEON_CP_VC_FRMT_N1) ? "n1," : ""); 6903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 6913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 6923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* if (!find_or_add_value( &others[V_VTXFMT], vfmt )) */ 6933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* fprintf(stderr, " *** NEW VALUE"); */ 6943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 6953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "\n"); 6963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 6973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 6983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return 0; 6993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 7003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 7013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic char *primname[0xf] = { 7023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org "NONE", 7033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org "POINTS", 7043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org "LINES", 7053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org "LINE_STRIP", 7063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org "TRIANGLES", 7073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org "TRIANGLE_FAN", 7083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org "TRIANGLE_STRIP", 7093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org "TRI_TYPE_2", 7103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org "RECT_LIST", 7113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org "3VRT_POINTS", 7123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org "3VRT_LINES", 7133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}; 7143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 7153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic int print_prim_and_flags( int prim ) 7163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 7173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int numverts; 7183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 7193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (NORMAL) 7203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, " %s(%x): %s%s%s%s%s%s%s\n", 7213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org "prim flags", 7223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org prim, 7233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ((prim & 0x30) == RADEON_CP_VC_CNTL_PRIM_WALK_IND) ? "IND," : "", 7243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ((prim & 0x30) == RADEON_CP_VC_CNTL_PRIM_WALK_LIST) ? "LIST," : "", 7253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ((prim & 0x30) == RADEON_CP_VC_CNTL_PRIM_WALK_RING) ? "RING," : "", 7263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (prim & RADEON_CP_VC_CNTL_COLOR_ORDER_RGBA) ? "RGBA," : "BGRA, ", 7273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (prim & RADEON_CP_VC_CNTL_MAOS_ENABLE) ? "MAOS," : "", 7283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (prim & RADEON_CP_VC_CNTL_VTX_FMT_RADEON_MODE) ? "RADEON," : "", 7293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (prim & RADEON_CP_VC_CNTL_TCL_ENABLE) ? "TCL," : ""); 7303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 7313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if ((prim & 0xf) > RADEON_CP_VC_CNTL_PRIM_TYPE_3VRT_LINE_LIST) { 7323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, " *** Bad primitive: %x\n", prim & 0xf); 7333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return -1; 7343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 7353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 7363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org numverts = prim>>16; 7373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 7383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (NORMAL) 7393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, " prim: %s numverts %d\n", primname[prim&0xf], numverts); 7403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 7413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org switch (prim & 0xf) { 7423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CP_VC_CNTL_PRIM_TYPE_NONE: 7433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CP_VC_CNTL_PRIM_TYPE_POINT: 7443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (numverts < 1) { 7453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "Bad nr verts for line %d\n", numverts); 7463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return -1; 7473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 7483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 7493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CP_VC_CNTL_PRIM_TYPE_LINE: 7503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if ((numverts & 1) || numverts == 0) { 7513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "Bad nr verts for line %d\n", numverts); 7523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return -1; 7533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 7543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 7553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CP_VC_CNTL_PRIM_TYPE_LINE_STRIP: 7563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (numverts < 2) { 7573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "Bad nr verts for line_strip %d\n", numverts); 7583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return -1; 7593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 7603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 7613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CP_VC_CNTL_PRIM_TYPE_TRI_LIST: 7623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CP_VC_CNTL_PRIM_TYPE_3VRT_POINT_LIST: 7633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CP_VC_CNTL_PRIM_TYPE_3VRT_LINE_LIST: 7643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CP_VC_CNTL_PRIM_TYPE_RECT_LIST: 7653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (numverts % 3 || numverts == 0) { 7663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "Bad nr verts for tri %d\n", numverts); 7673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return -1; 7683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 7693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 7703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CP_VC_CNTL_PRIM_TYPE_TRI_FAN: 7713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CP_VC_CNTL_PRIM_TYPE_TRI_STRIP: 7723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (numverts < 3) { 7733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "Bad nr verts for strip/fan %d\n", numverts); 7743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return -1; 7753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 7763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 7773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org default: 7783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "Bad primitive\n"); 7793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return -1; 7803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 7813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return 0; 7823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 7833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 7843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* build in knowledge about each packet type 7853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 7863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic int radeon_emit_packet3( drm_radeon_cmd_buffer_t *cmdbuf ) 7873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 7883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int cmdsz; 7893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int *cmd = (int *)cmdbuf->buf; 7903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int *tmp; 7913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int i, stride, size, start; 7923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 7933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmdsz = 2 + ((cmd[0] & RADEON_CP_PACKET_COUNT_MASK) >> 16); 7943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 7953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if ((cmd[0] & RADEON_CP_PACKET_MASK) != RADEON_CP_PACKET3 || 7963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmdsz * 4 > cmdbuf->bufsz || 7973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmdsz > RADEON_CP_PACKET_MAX_DWORDS) { 7983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "Bad packet\n"); 7993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return -EINVAL; 8003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 8013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 8023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org switch( cmd[0] & ~RADEON_CP_PACKET_COUNT_MASK ) { 8033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CP_PACKET3_NOP: 8043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (NORMAL) 8053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "PACKET3_NOP, %d dwords\n", cmdsz); 8063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 8073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CP_PACKET3_NEXT_CHAR: 8083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (NORMAL) 8093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "PACKET3_NEXT_CHAR, %d dwords\n", cmdsz); 8103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 8113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CP_PACKET3_PLY_NEXTSCAN: 8123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (NORMAL) 8133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "PACKET3_PLY_NEXTSCAN, %d dwords\n", cmdsz); 8143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 8153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CP_PACKET3_SET_SCISSORS: 8163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (NORMAL) 8173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "PACKET3_SET_SCISSORS, %d dwords\n", cmdsz); 8183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 8193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CP_PACKET3_3D_RNDR_GEN_INDX_PRIM: 8203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (NORMAL) 8213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "PACKET3_3D_RNDR_GEN_INDX_PRIM, %d dwords\n", 8223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmdsz); 8233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 8243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CP_PACKET3_LOAD_MICROCODE: 8253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (NORMAL) 8263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "PACKET3_LOAD_MICROCODE, %d dwords\n", cmdsz); 8273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 8283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CP_PACKET3_WAIT_FOR_IDLE: 8293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (NORMAL) 8303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "PACKET3_WAIT_FOR_IDLE, %d dwords\n", cmdsz); 8313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 8323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 8333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CP_PACKET3_3D_DRAW_VBUF: 8343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (NORMAL) 8353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "PACKET3_3D_DRAW_VBUF, %d dwords\n", cmdsz); 8363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org print_vertex_format(cmd[1]); 8373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org print_prim_and_flags(cmd[2]); 8383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 8393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 8403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CP_PACKET3_3D_DRAW_IMMD: 8413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (NORMAL) 8423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "PACKET3_3D_DRAW_IMMD, %d dwords\n", cmdsz); 8433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 8443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CP_PACKET3_3D_DRAW_INDX: { 8453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int neltdwords; 8463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (NORMAL) 8473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "PACKET3_3D_DRAW_INDX, %d dwords\n", cmdsz); 8483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org print_vertex_format(cmd[1]); 8493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org print_prim_and_flags(cmd[2]); 8503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org neltdwords = cmd[2]>>16; 8513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org neltdwords += neltdwords & 1; 8523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org neltdwords /= 2; 8533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (neltdwords + 3 != cmdsz) 8543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "Mismatch in DRAW_INDX, %d vs cmdsz %d\n", 8553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org neltdwords, cmdsz); 8563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 8573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 8583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CP_PACKET3_LOAD_PALETTE: 8593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (NORMAL) 8603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "PACKET3_LOAD_PALETTE, %d dwords\n", cmdsz); 8613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 8623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CP_PACKET3_3D_LOAD_VBPNTR: 8633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (NORMAL) { 8643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "PACKET3_3D_LOAD_VBPNTR, %d dwords\n", cmdsz); 8653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, " nr arrays: %d\n", cmd[1]); 8663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 8673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 8683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (cmd[1]/2 + cmd[1]%2 != cmdsz - 3) { 8693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, " ****** MISMATCH %d/%d *******\n", 8703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmd[1]/2 + cmd[1]%2 + 3, cmdsz); 8713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return -EINVAL; 8723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 8733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 8743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (NORMAL) { 8753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org tmp = cmd+2; 8763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org for (i = 0 ; i < cmd[1] ; i++) { 8773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (i & 1) { 8783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org stride = (tmp[0]>>24) & 0xff; 8793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org size = (tmp[0]>>16) & 0xff; 8803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org start = tmp[2]; 8813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org tmp += 3; 8823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 8833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else { 8843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org stride = (tmp[0]>>8) & 0xff; 8853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org size = (tmp[0]) & 0xff; 8863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org start = tmp[1]; 8873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 8883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, " array %d: start 0x%x vsize %d vstride %d\n", 8893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org i, start, size, stride ); 8903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 8913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 8923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 8933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CP_PACKET3_CNTL_PAINT: 8943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (NORMAL) 8953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "PACKET3_CNTL_PAINT, %d dwords\n", cmdsz); 8963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 8973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CP_PACKET3_CNTL_BITBLT: 8983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (NORMAL) 8993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "PACKET3_CNTL_BITBLT, %d dwords\n", cmdsz); 9003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 9013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CP_PACKET3_CNTL_SMALLTEXT: 9023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (NORMAL) 9033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "PACKET3_CNTL_SMALLTEXT, %d dwords\n", cmdsz); 9043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 9053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CP_PACKET3_CNTL_HOSTDATA_BLT: 9063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (NORMAL) 9073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "PACKET3_CNTL_HOSTDATA_BLT, %d dwords\n", 9083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmdsz); 9093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 9103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CP_PACKET3_CNTL_POLYLINE: 9113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (NORMAL) 9123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "PACKET3_CNTL_POLYLINE, %d dwords\n", cmdsz); 9133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 9143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CP_PACKET3_CNTL_POLYSCANLINES: 9153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (NORMAL) 9163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "PACKET3_CNTL_POLYSCANLINES, %d dwords\n", 9173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmdsz); 9183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 9193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CP_PACKET3_CNTL_PAINT_MULTI: 9203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (NORMAL) 9213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "PACKET3_CNTL_PAINT_MULTI, %d dwords\n", 9223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmdsz); 9233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 9243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CP_PACKET3_CNTL_BITBLT_MULTI: 9253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (NORMAL) 9263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "PACKET3_CNTL_BITBLT_MULTI, %d dwords\n", 9273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmdsz); 9283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 9293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CP_PACKET3_CNTL_TRANS_BITBLT: 9303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (NORMAL) 9313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "PACKET3_CNTL_TRANS_BITBLT, %d dwords\n", 9323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmdsz); 9333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 9343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org default: 9353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "UNKNOWN PACKET, %d dwords\n", cmdsz); 9363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 9373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 9383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 9393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmdbuf->buf += cmdsz * 4; 9403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmdbuf->bufsz -= cmdsz * 4; 9413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return 0; 9423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 9433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 9443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 9453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* Check cliprects for bounds, then pass on to above: 9463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 9473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic int radeon_emit_packet3_cliprect( drm_radeon_cmd_buffer_t *cmdbuf ) 9483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 9493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org drm_clip_rect_t *boxes = cmdbuf->boxes; 9503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int i = 0; 9513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 9523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (VERBOSE && total_changed) { 9533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org dump_state(); 9543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org total_changed = 0; 9553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 9563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else fprintf(stderr, "total_changed zero\n"); 9573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 9583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (NORMAL) { 9593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org do { 9603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if ( i < cmdbuf->nbox ) { 9613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "Emit box %d/%d %d,%d %d,%d\n", 9623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org i, cmdbuf->nbox, 9633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org boxes[i].x1, boxes[i].y1, boxes[i].x2, boxes[i].y2); 9643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 9653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } while ( ++i < cmdbuf->nbox ); 9663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 9673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 9683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (cmdbuf->nbox == 1) 9693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmdbuf->nbox = 0; 9703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 9713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return radeon_emit_packet3( cmdbuf ); 9723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 9733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 9743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 9753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgint radeonSanityCmdBuffer( r100ContextPtr rmesa, 9763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int nbox, 9773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org drm_clip_rect_t *boxes ) 9783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 9793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int idx; 9803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org drm_radeon_cmd_buffer_t cmdbuf; 9813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org drm_radeon_cmd_header_t header; 9823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org static int inited = 0; 9833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 9843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (!inited) { 9853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org init_regs(); 9863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org inited = 1; 9873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 9883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 9893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmdbuf.buf = rmesa->store.cmd_buf; 9903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmdbuf.bufsz = rmesa->store.cmd_used; 9913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmdbuf.boxes = boxes; 9923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmdbuf.nbox = nbox; 9933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 9943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org while ( cmdbuf.bufsz >= sizeof(header) ) { 9953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 9963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org header.i = *(int *)cmdbuf.buf; 9973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmdbuf.buf += sizeof(header); 9983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmdbuf.bufsz -= sizeof(header); 9993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 10003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org switch (header.header.cmd_type) { 10013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CMD_PACKET: 10023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (radeon_emit_packets( header, &cmdbuf )) { 10033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr,"radeon_emit_packets failed\n"); 10043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return -EINVAL; 10053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 10063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 10073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 10083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CMD_SCALARS: 10093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (radeon_emit_scalars( header, &cmdbuf )) { 10103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr,"radeon_emit_scalars failed\n"); 10113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return -EINVAL; 10123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 10133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 10143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 10153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CMD_SCALARS2: 10163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (radeon_emit_scalars2( header, &cmdbuf )) { 10173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr,"radeon_emit_scalars failed\n"); 10183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return -EINVAL; 10193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 10203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 10213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 10223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CMD_VECTORS: 10233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (radeon_emit_vectors( header, &cmdbuf )) { 10243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr,"radeon_emit_vectors failed\n"); 10253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return -EINVAL; 10263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 10273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 10283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 10293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CMD_DMA_DISCARD: 10303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org idx = header.dma.buf_idx; 10313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (NORMAL) 10323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "RADEON_CMD_DMA_DISCARD buf %d\n", idx); 10333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org bufs++; 10343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 10353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 10363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CMD_PACKET3: 10373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (radeon_emit_packet3( &cmdbuf )) { 10383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr,"radeon_emit_packet3 failed\n"); 10393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return -EINVAL; 10403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 10413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 10423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 10433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CMD_PACKET3_CLIP: 10443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (radeon_emit_packet3_cliprect( &cmdbuf )) { 10453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr,"radeon_emit_packet3_clip failed\n"); 10463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return -EINVAL; 10473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 10483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 10493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 10503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case RADEON_CMD_WAIT: 10513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 10523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 10533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org default: 10543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr,"bad cmd_type %d at %p\n", 10553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org header.header.cmd_type, 10563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmdbuf.buf - sizeof(header)); 10573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return -EINVAL; 10583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 10593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 10603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 10613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (0) 10623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 10633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org static int n = 0; 10643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org n++; 10653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (n == 10) { 10663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "Bufs %d Total emitted %d real changes %d (%.2f%%)\n", 10673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org bufs, 10683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org total, total_changed, 10693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ((float)total_changed/(float)total*100.0)); 10703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "Total emitted per buf: %.2f\n", 10713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (float)total/(float)bufs); 10723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fprintf(stderr, "Real changes per buf: %.2f\n", 10733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org (float)total_changed/(float)bufs); 10743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 10753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org bufs = n = total = total_changed = 0; 10763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 10773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 10783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 10793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return 0; 10803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 1081