📄 r300_reg.h
字号:
/**************************************************************************Copyright (C) 2004-2005 Nicolai Haehnle et al.Permission is hereby granted, free of charge, to any person obtaining acopy of this software and associated documentation files (the "Software"),to deal in the Software without restriction, including without limitationon the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whomthe Software is furnished to do so, subject to the following conditions:The above copyright notice and this permission notice (including the nextparagraph) shall be included in all copies or substantial portions of theSoftware.THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ORIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALLTHE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OROTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THEUSE OR OTHER DEALINGS IN THE SOFTWARE.**************************************************************************/#ifndef _R300_REG_H#define _R300_REG_H#define R300_MC_INIT_MISC_LAT_TIMER 0x180# define R300_MC_MISC__MC_CPR_INIT_LAT_SHIFT 0# define R300_MC_MISC__MC_VF_INIT_LAT_SHIFT 4# define R300_MC_MISC__MC_DISP0R_INIT_LAT_SHIFT 8# define R300_MC_MISC__MC_DISP1R_INIT_LAT_SHIFT 12# define R300_MC_MISC__MC_FIXED_INIT_LAT_SHIFT 16# define R300_MC_MISC__MC_E2R_INIT_LAT_SHIFT 20# define R300_MC_MISC__MC_SAME_PAGE_PRIO_SHIFT 24# define R300_MC_MISC__MC_GLOBW_INIT_LAT_SHIFT 28#define R300_MC_INIT_GFX_LAT_TIMER 0x154# define R300_MC_MISC__MC_G3D0R_INIT_LAT_SHIFT 0# define R300_MC_MISC__MC_G3D1R_INIT_LAT_SHIFT 4# define R300_MC_MISC__MC_G3D2R_INIT_LAT_SHIFT 8# define R300_MC_MISC__MC_G3D3R_INIT_LAT_SHIFT 12# define R300_MC_MISC__MC_TX0R_INIT_LAT_SHIFT 16# define R300_MC_MISC__MC_TX1R_INIT_LAT_SHIFT 20# define R300_MC_MISC__MC_GLOBR_INIT_LAT_SHIFT 24# define R300_MC_MISC__MC_GLOBW_FULL_LAT_SHIFT 28/*This file contains registers and constants for the R300. They have beenfound mostly by examining command buffers captured using glxtest, as wellas by extrapolating some known registers and constants from the R200.I am fairly certain that they are correct unless stated otherwise in comments.*/#define R300_SE_VPORT_XSCALE 0x1D98#define R300_SE_VPORT_XOFFSET 0x1D9C#define R300_SE_VPORT_YSCALE 0x1DA0#define R300_SE_VPORT_YOFFSET 0x1DA4#define R300_SE_VPORT_ZSCALE 0x1DA8#define R300_SE_VPORT_ZOFFSET 0x1DAC/* This register is written directly and also starts data section in many 3d CP_PACKET3's */#define R300_VAP_VF_CNTL 0x2084# define R300_VAP_VF_CNTL__PRIM_TYPE__SHIFT 0# define R300_VAP_VF_CNTL__PRIM_NONE (0<<0)# define R300_VAP_VF_CNTL__PRIM_POINTS (1<<0)# define R300_VAP_VF_CNTL__PRIM_LINES (2<<0)# define R300_VAP_VF_CNTL__PRIM_LINE_STRIP (3<<0)# define R300_VAP_VF_CNTL__PRIM_TRIANGLES (4<<0)# define R300_VAP_VF_CNTL__PRIM_TRIANGLE_FAN (5<<0)# define R300_VAP_VF_CNTL__PRIM_TRIANGLE_STRIP (6<<0)# define R300_VAP_VF_CNTL__PRIM_LINE_LOOP (12<<0)# define R300_VAP_VF_CNTL__PRIM_QUADS (13<<0)# define R300_VAP_VF_CNTL__PRIM_QUAD_STRIP (14<<0)# define R300_VAP_VF_CNTL__PRIM_POLYGON (15<<0)# define R300_VAP_VF_CNTL__PRIM_WALK__SHIFT 4 /* State based - direct writes to registers trigger vertex generation */# define R300_VAP_VF_CNTL__PRIM_WALK_STATE_BASED (0<<4)# define R300_VAP_VF_CNTL__PRIM_WALK_INDICES (1<<4)# define R300_VAP_VF_CNTL__PRIM_WALK_VERTEX_LIST (2<<4)# define R300_VAP_VF_CNTL__PRIM_WALK_VERTEX_EMBEDDED (3<<4) /* I don't think I saw these three used.. */# define R300_VAP_VF_CNTL__COLOR_ORDER__SHIFT 6# define R300_VAP_VF_CNTL__TCL_OUTPUT_CTL_ENA__SHIFT 9# define R300_VAP_VF_CNTL__PROG_STREAM_ENA__SHIFT 10 /* index size - when not set the indices are assumed to be 16 bit */# define R300_VAP_VF_CNTL__INDEX_SIZE_32bit (1<<11) /* number of vertices */# define R300_VAP_VF_CNTL__NUM_VERTICES__SHIFT 16/* BEGIN: Wild guesses */#define R300_VAP_OUTPUT_VTX_FMT_0 0x2090# define R300_VAP_OUTPUT_VTX_FMT_0__POS_PRESENT (1<<0)# define R300_VAP_OUTPUT_VTX_FMT_0__COLOR_PRESENT (1<<1)# define R300_VAP_OUTPUT_VTX_FMT_0__COLOR_1_PRESENT (1<<2) /* GUESS */# define R300_VAP_OUTPUT_VTX_FMT_0__COLOR_2_PRESENT (1<<3) /* GUESS */# define R300_VAP_OUTPUT_VTX_FMT_0__COLOR_3_PRESENT (1<<4) /* GUESS */# define R300_VAP_OUTPUT_VTX_FMT_0__PT_SIZE_PRESENT (1<<16) /* GUESS */#define R300_VAP_OUTPUT_VTX_FMT_1 0x2094# define R300_VAP_OUTPUT_VTX_FMT_1__TEX_0_COMP_CNT_SHIFT 0# define R300_VAP_OUTPUT_VTX_FMT_1__TEX_1_COMP_CNT_SHIFT 3# define R300_VAP_OUTPUT_VTX_FMT_1__TEX_2_COMP_CNT_SHIFT 6# define R300_VAP_OUTPUT_VTX_FMT_1__TEX_3_COMP_CNT_SHIFT 9# define R300_VAP_OUTPUT_VTX_FMT_1__TEX_4_COMP_CNT_SHIFT 12# define R300_VAP_OUTPUT_VTX_FMT_1__TEX_5_COMP_CNT_SHIFT 15# define R300_VAP_OUTPUT_VTX_FMT_1__TEX_6_COMP_CNT_SHIFT 18# define R300_VAP_OUTPUT_VTX_FMT_1__TEX_7_COMP_CNT_SHIFT 21/* END */#define R300_SE_VTE_CNTL 0x20b0# define R300_VPORT_X_SCALE_ENA 0x00000001# define R300_VPORT_X_OFFSET_ENA 0x00000002# define R300_VPORT_Y_SCALE_ENA 0x00000004# define R300_VPORT_Y_OFFSET_ENA 0x00000008# define R300_VPORT_Z_SCALE_ENA 0x00000010# define R300_VPORT_Z_OFFSET_ENA 0x00000020# define R300_VTX_XY_FMT 0x00000100# define R300_VTX_Z_FMT 0x00000200# define R300_VTX_W0_FMT 0x00000400# define R300_VTX_W0_NORMALIZE 0x00000800# define R300_VTX_ST_DENORMALIZED 0x00001000/* BEGIN: Vertex data assembly - lots of uncertainties *//* gap *//* Where do we get our vertex data?//// Vertex data either comes either from immediate mode registers or from// vertex arrays.// There appears to be no mixed mode (though we can force the pitch of// vertex arrays to 0, effectively reusing the same element over and over// again).//// Immediate mode is controlled by the INPUT_CNTL registers. I am not sure// if these registers influence vertex array processing.//// Vertex arrays are controlled via the 3D_LOAD_VBPNTR packet3.//// In both cases, vertex attributes are then passed through INPUT_ROUTE.// Beginning with INPUT_ROUTE_0_0 is a list of WORDs that route vertex data// into the vertex processor's input registers.// The first word routes the first input, the second word the second, etc.// The corresponding input is routed into the register with the given index.// The list is ended by a word with INPUT_ROUTE_END set.//// Always set COMPONENTS_4 in immediate mode. */#define R300_VAP_INPUT_ROUTE_0_0 0x2150# define R300_INPUT_ROUTE_COMPONENTS_1 (0 << 0)# define R300_INPUT_ROUTE_COMPONENTS_2 (1 << 0)# define R300_INPUT_ROUTE_COMPONENTS_3 (2 << 0)# define R300_INPUT_ROUTE_COMPONENTS_4 (3 << 0)# define R300_INPUT_ROUTE_COMPONENTS_RGBA (4 << 0) /* GUESS */# define R300_VAP_INPUT_ROUTE_IDX_SHIFT 8# define R300_VAP_INPUT_ROUTE_IDX_MASK (31 << 8) /* GUESS */# define R300_VAP_INPUT_ROUTE_END (1 << 13)# define R300_INPUT_ROUTE_IMMEDIATE_MODE (0 << 14) /* GUESS */# define R300_INPUT_ROUTE_FLOAT (1 << 14) /* GUESS */# define R300_INPUT_ROUTE_UNSIGNED_BYTE (2 << 14) /* GUESS */# define R300_INPUT_ROUTE_FLOAT_COLOR (3 << 14) /* GUESS */#define R300_VAP_INPUT_ROUTE_0_1 0x2154#define R300_VAP_INPUT_ROUTE_0_2 0x2158#define R300_VAP_INPUT_ROUTE_0_3 0x215C#define R300_VAP_INPUT_ROUTE_0_4 0x2160#define R300_VAP_INPUT_ROUTE_0_5 0x2164#define R300_VAP_INPUT_ROUTE_0_6 0x2168#define R300_VAP_INPUT_ROUTE_0_7 0x216C/* gap *//* Notes:// - always set up to produce at least two attributes:// if vertex program uses only position, fglrx will set normal, too// - INPUT_CNTL_0_COLOR and INPUT_CNTL_COLOR bits are always equal */#define R300_VAP_INPUT_CNTL_0 0x2180# define R300_INPUT_CNTL_0_COLOR 0x00000001#define R300_VAP_INPUT_CNTL_1 0x2184# define R300_INPUT_CNTL_POS 0x00000001# define R300_INPUT_CNTL_NORMAL 0x00000002# define R300_INPUT_CNTL_COLOR 0x00000004# define R300_INPUT_CNTL_TC0 0x00000400# define R300_INPUT_CNTL_TC1 0x00000800# define R300_INPUT_CNTL_TC2 0x00001000 /* GUESS */# define R300_INPUT_CNTL_TC3 0x00002000 /* GUESS */# define R300_INPUT_CNTL_TC4 0x00004000 /* GUESS */# define R300_INPUT_CNTL_TC5 0x00008000 /* GUESS */# define R300_INPUT_CNTL_TC6 0x00010000 /* GUESS */# define R300_INPUT_CNTL_TC7 0x00020000 /* GUESS *//* gap *//* Words parallel to INPUT_ROUTE_0; All words that are active in INPUT_ROUTE_0// are set to a swizzling bit pattern, other words are 0.//// In immediate mode, the pattern is always set to xyzw. In vertex array// mode, the swizzling pattern is e.g. used to set zw components in texture// coordinates with only tweo components. */#define R300_VAP_INPUT_ROUTE_1_0 0x21E0# define R300_INPUT_ROUTE_SELECT_X 0# define R300_INPUT_ROUTE_SELECT_Y 1# define R300_INPUT_ROUTE_SELECT_Z 2# define R300_INPUT_ROUTE_SELECT_W 3# define R300_INPUT_ROUTE_SELECT_ZERO 4# define R300_INPUT_ROUTE_SELECT_ONE 5# define R300_INPUT_ROUTE_SELECT_MASK 7# define R300_INPUT_ROUTE_X_SHIFT 0# define R300_INPUT_ROUTE_Y_SHIFT 3# define R300_INPUT_ROUTE_Z_SHIFT 6# define R300_INPUT_ROUTE_W_SHIFT 9# define R300_INPUT_ROUTE_ENABLE (15 << 12)#define R300_VAP_INPUT_ROUTE_1_1 0x21E4#define R300_VAP_INPUT_ROUTE_1_2 0x21E8#define R300_VAP_INPUT_ROUTE_1_3 0x21EC#define R300_VAP_INPUT_ROUTE_1_4 0x21F0#define R300_VAP_INPUT_ROUTE_1_5 0x21F4#define R300_VAP_INPUT_ROUTE_1_6 0x21F8#define R300_VAP_INPUT_ROUTE_1_7 0x21FC/* END *//* gap *//* BEGIN: Upload vertex program and data// The programmable vertex shader unit has a memory bank of unknown size// that can be written to in 16 byte units by writing the address into// UPLOAD_ADDRESS, followed by data in UPLOAD_DATA (multiples of 4 DWORDs).//// Pointers into the memory bank are always in multiples of 16 bytes.//// The memory bank is divided into areas with fixed meaning.//// Starting at address UPLOAD_PROGRAM: Vertex program instructions.// Native limits reported by drivers from ATI suggest size 256 (i.e. 4KB),// whereas the difference between known addresses suggests size 512.//// Starting at address UPLOAD_PARAMETERS: Vertex program parameters.// Native reported limits and the VPI layout suggest size 256, whereas// difference between known addresses suggests size 512.//// At address UPLOAD_POINTSIZE is a vector (0, 0, ps, 0), where ps is the// floating point pointsize. The exact purpose of this state is uncertain,// as there is also the R300_RE_POINTSIZE register.//// Multiple vertex programs and parameter sets can be loaded at once,// which could explain the size discrepancy. */#define R300_VAP_PVS_UPLOAD_ADDRESS 0x2200# define R300_PVS_UPLOAD_PROGRAM 0x00000000# define R300_PVS_UPLOAD_PARAMETERS 0x00000200# define R300_PVS_UPLOAD_POINTSIZE 0x00000406/* gap */#define R300_VAP_PVS_UPLOAD_DATA 0x2208/* END *//* gap *//* I do not know the purpose of this register. However, I do know that// it is set to 221C_CLEAR for clear operations and to 221C_NORMAL// for normal rendering. */#define R300_VAP_UNKNOWN_221C 0x221C# define R300_221C_NORMAL 0x00000000# define R300_221C_CLEAR 0x0001C000/* gap *//* Sometimes, END_OF_PKT and 0x2284=0 are the only commands sent between// rendering commands and overwriting vertex program parameters.// Therefore, I suspect writing zero to 0x2284 synchronizes the engine and// avoids bugs caused by still running shaders reading bad data from memory. */#define R300_VAP_PVS_WAITIDLE 0x2284 /* GUESS */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -