1bf215546Sopenharmony_ci/************************************************************************** 2bf215546Sopenharmony_ci 3bf215546Sopenharmony_ciCopyright (C) 2004-2005 Nicolai Haehnle et al. 4bf215546Sopenharmony_ci 5bf215546Sopenharmony_ciPermission is hereby granted, free of charge, to any person obtaining a 6bf215546Sopenharmony_cicopy of this software and associated documentation files (the "Software"), 7bf215546Sopenharmony_cito deal in the Software without restriction, including without limitation 8bf215546Sopenharmony_cion the rights to use, copy, modify, merge, publish, distribute, sub 9bf215546Sopenharmony_cilicense, and/or sell copies of the Software, and to permit persons to whom 10bf215546Sopenharmony_cithe Software is furnished to do so, subject to the following conditions: 11bf215546Sopenharmony_ci 12bf215546Sopenharmony_ciThe above copyright notice and this permission notice (including the next 13bf215546Sopenharmony_ciparagraph) shall be included in all copies or substantial portions of the 14bf215546Sopenharmony_ciSoftware. 15bf215546Sopenharmony_ci 16bf215546Sopenharmony_ciTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17bf215546Sopenharmony_ciIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18bf215546Sopenharmony_ciFITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 19bf215546Sopenharmony_ciTHE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, 20bf215546Sopenharmony_ciDAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 21bf215546Sopenharmony_ciOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 22bf215546Sopenharmony_ciUSE OR OTHER DEALINGS IN THE SOFTWARE. 23bf215546Sopenharmony_ci 24bf215546Sopenharmony_ci**************************************************************************/ 25bf215546Sopenharmony_ci 26bf215546Sopenharmony_ci/* *INDENT-OFF* */ 27bf215546Sopenharmony_ci 28bf215546Sopenharmony_ci#ifndef _R300_REG_H 29bf215546Sopenharmony_ci#define _R300_REG_H 30bf215546Sopenharmony_ci 31bf215546Sopenharmony_ci#define R300_MC_INIT_MISC_LAT_TIMER 0x180 32bf215546Sopenharmony_ci# define R300_MC_MISC__MC_CPR_INIT_LAT_SHIFT 0 33bf215546Sopenharmony_ci# define R300_MC_MISC__MC_VF_INIT_LAT_SHIFT 4 34bf215546Sopenharmony_ci# define R300_MC_MISC__MC_DISP0R_INIT_LAT_SHIFT 8 35bf215546Sopenharmony_ci# define R300_MC_MISC__MC_DISP1R_INIT_LAT_SHIFT 12 36bf215546Sopenharmony_ci# define R300_MC_MISC__MC_FIXED_INIT_LAT_SHIFT 16 37bf215546Sopenharmony_ci# define R300_MC_MISC__MC_E2R_INIT_LAT_SHIFT 20 38bf215546Sopenharmony_ci# define R300_MC_MISC__MC_SAME_PAGE_PRIO_SHIFT 24 39bf215546Sopenharmony_ci# define R300_MC_MISC__MC_GLOBW_INIT_LAT_SHIFT 28 40bf215546Sopenharmony_ci 41bf215546Sopenharmony_ci 42bf215546Sopenharmony_ci#define R300_MC_INIT_GFX_LAT_TIMER 0x154 43bf215546Sopenharmony_ci# define R300_MC_MISC__MC_G3D0R_INIT_LAT_SHIFT 0 44bf215546Sopenharmony_ci# define R300_MC_MISC__MC_G3D1R_INIT_LAT_SHIFT 4 45bf215546Sopenharmony_ci# define R300_MC_MISC__MC_G3D2R_INIT_LAT_SHIFT 8 46bf215546Sopenharmony_ci# define R300_MC_MISC__MC_G3D3R_INIT_LAT_SHIFT 12 47bf215546Sopenharmony_ci# define R300_MC_MISC__MC_TX0R_INIT_LAT_SHIFT 16 48bf215546Sopenharmony_ci# define R300_MC_MISC__MC_TX1R_INIT_LAT_SHIFT 20 49bf215546Sopenharmony_ci# define R300_MC_MISC__MC_GLOBR_INIT_LAT_SHIFT 24 50bf215546Sopenharmony_ci# define R300_MC_MISC__MC_GLOBW_FULL_LAT_SHIFT 28 51bf215546Sopenharmony_ci 52bf215546Sopenharmony_ci/* 53bf215546Sopenharmony_ci * This file contains registers and constants for the R300. They have been 54bf215546Sopenharmony_ci * found mostly by examining command buffers captured using glxtest, as well 55bf215546Sopenharmony_ci * as by extrapolating some known registers and constants from the R200. 56bf215546Sopenharmony_ci * I am fairly certain that they are correct unless stated otherwise 57bf215546Sopenharmony_ci * in comments. 58bf215546Sopenharmony_ci */ 59bf215546Sopenharmony_ci 60bf215546Sopenharmony_ci#define R300_SE_VPORT_XSCALE 0x1D98 61bf215546Sopenharmony_ci#define R300_SE_VPORT_XOFFSET 0x1D9C 62bf215546Sopenharmony_ci#define R300_SE_VPORT_YSCALE 0x1DA0 63bf215546Sopenharmony_ci#define R300_SE_VPORT_YOFFSET 0x1DA4 64bf215546Sopenharmony_ci#define R300_SE_VPORT_ZSCALE 0x1DA8 65bf215546Sopenharmony_ci#define R300_SE_VPORT_ZOFFSET 0x1DAC 66bf215546Sopenharmony_ci 67bf215546Sopenharmony_ci#define R300_VAP_PORT_IDX0 0x2040 68bf215546Sopenharmony_ci/* 69bf215546Sopenharmony_ci * Vertex Array Processing (VAP) Control 70bf215546Sopenharmony_ci */ 71bf215546Sopenharmony_ci#define R300_VAP_CNTL 0x2080 72bf215546Sopenharmony_ci# define R300_PVS_NUM_SLOTS_SHIFT 0 73bf215546Sopenharmony_ci# define R300_PVS_NUM_CNTLRS_SHIFT 4 74bf215546Sopenharmony_ci# define R300_PVS_NUM_FPUS_SHIFT 8 75bf215546Sopenharmony_ci# define R300_VF_MAX_VTX_NUM_SHIFT 18 76bf215546Sopenharmony_ci# define R300_PVS_NUM_SLOTS(x) ((x) << 0) 77bf215546Sopenharmony_ci# define R300_PVS_NUM_CNTLRS(x) ((x) << 4) 78bf215546Sopenharmony_ci# define R300_PVS_NUM_FPUS(x) ((x) << 8) 79bf215546Sopenharmony_ci# define R300_PVS_VF_MAX_VTX_NUM(x) ((x) << 18) 80bf215546Sopenharmony_ci# define R300_GL_CLIP_SPACE_DEF (0 << 22) 81bf215546Sopenharmony_ci# define R300_DX_CLIP_SPACE_DEF (1 << 22) 82bf215546Sopenharmony_ci# define R500_TCL_STATE_OPTIMIZATION (1 << 23) 83bf215546Sopenharmony_ci 84bf215546Sopenharmony_ci/* This register is written directly and also starts data section 85bf215546Sopenharmony_ci * in many 3d CP_PACKET3's 86bf215546Sopenharmony_ci */ 87bf215546Sopenharmony_ci#define R300_VAP_VF_CNTL 0x2084 88bf215546Sopenharmony_ci# define R300_VAP_VF_CNTL__PRIM_TYPE__SHIFT 0 89bf215546Sopenharmony_ci# define R300_VAP_VF_CNTL__PRIM_NONE (0<<0) 90bf215546Sopenharmony_ci# define R300_VAP_VF_CNTL__PRIM_POINTS (1<<0) 91bf215546Sopenharmony_ci# define R300_VAP_VF_CNTL__PRIM_LINES (2<<0) 92bf215546Sopenharmony_ci# define R300_VAP_VF_CNTL__PRIM_LINE_STRIP (3<<0) 93bf215546Sopenharmony_ci# define R300_VAP_VF_CNTL__PRIM_TRIANGLES (4<<0) 94bf215546Sopenharmony_ci# define R300_VAP_VF_CNTL__PRIM_TRIANGLE_FAN (5<<0) 95bf215546Sopenharmony_ci# define R300_VAP_VF_CNTL__PRIM_TRIANGLE_STRIP (6<<0) 96bf215546Sopenharmony_ci# define R300_VAP_VF_CNTL__PRIM_LINE_LOOP (12<<0) 97bf215546Sopenharmony_ci# define R300_VAP_VF_CNTL__PRIM_QUADS (13<<0) 98bf215546Sopenharmony_ci# define R300_VAP_VF_CNTL__PRIM_QUAD_STRIP (14<<0) 99bf215546Sopenharmony_ci# define R300_VAP_VF_CNTL__PRIM_POLYGON (15<<0) 100bf215546Sopenharmony_ci 101bf215546Sopenharmony_ci# define R300_VAP_VF_CNTL__PRIM_WALK__SHIFT 4 102bf215546Sopenharmony_ci /* State based - direct writes to registers trigger vertex 103bf215546Sopenharmony_ci generation */ 104bf215546Sopenharmony_ci# define R300_VAP_VF_CNTL__PRIM_WALK_STATE_BASED (0<<4) 105bf215546Sopenharmony_ci# define R300_VAP_VF_CNTL__PRIM_WALK_INDICES (1<<4) 106bf215546Sopenharmony_ci# define R300_VAP_VF_CNTL__PRIM_WALK_VERTEX_LIST (2<<4) 107bf215546Sopenharmony_ci# define R300_VAP_VF_CNTL__PRIM_WALK_VERTEX_EMBEDDED (3<<4) 108bf215546Sopenharmony_ci 109bf215546Sopenharmony_ci /* I don't think I saw these three used.. */ 110bf215546Sopenharmony_ci# define R300_VAP_VF_CNTL__COLOR_ORDER__SHIFT 6 111bf215546Sopenharmony_ci# define R300_VAP_VF_CNTL__TCL_OUTPUT_CTL_ENA__SHIFT 9 112bf215546Sopenharmony_ci# define R300_VAP_VF_CNTL__PROG_STREAM_ENA__SHIFT 10 113bf215546Sopenharmony_ci 114bf215546Sopenharmony_ci /* index size - when not set the indices are assumed to be 16 bit */ 115bf215546Sopenharmony_ci# define R300_VAP_VF_CNTL__INDEX_SIZE_32bit (1<<11) 116bf215546Sopenharmony_ci# define R500_VAP_VF_CNTL__USE_ALT_NUM_VERTS (1<<14) 117bf215546Sopenharmony_ci /* number of vertices */ 118bf215546Sopenharmony_ci# define R300_VAP_VF_CNTL__NUM_VERTICES__SHIFT 16 119bf215546Sopenharmony_ci 120bf215546Sopenharmony_ci#define R500_VAP_INDEX_OFFSET 0x208c 121bf215546Sopenharmony_ci 122bf215546Sopenharmony_ci#define R500_VAP_ALT_NUM_VERTICES 0x2088 123bf215546Sopenharmony_ci 124bf215546Sopenharmony_ci#define R300_VAP_OUTPUT_VTX_FMT_0 0x2090 125bf215546Sopenharmony_ci# define R300_VAP_OUTPUT_VTX_FMT_0__POS_PRESENT (1<<0) 126bf215546Sopenharmony_ci# define R300_VAP_OUTPUT_VTX_FMT_0__COLOR_0_PRESENT (1<<1) 127bf215546Sopenharmony_ci# define R300_VAP_OUTPUT_VTX_FMT_0__COLOR_1_PRESENT (1<<2) 128bf215546Sopenharmony_ci# define R300_VAP_OUTPUT_VTX_FMT_0__COLOR_2_PRESENT (1<<3) 129bf215546Sopenharmony_ci# define R300_VAP_OUTPUT_VTX_FMT_0__COLOR_3_PRESENT (1<<4) 130bf215546Sopenharmony_ci# define R300_VAP_OUTPUT_VTX_FMT_0__PT_SIZE_PRESENT (1<<16) 131bf215546Sopenharmony_ci 132bf215546Sopenharmony_ci#define R300_VAP_OUTPUT_VTX_FMT_1 0x2094 133bf215546Sopenharmony_ci /* each of the following is 3 bits wide, specifies number 134bf215546Sopenharmony_ci of components */ 135bf215546Sopenharmony_ci# define R300_VAP_OUTPUT_VTX_FMT_1__TEX_0_COMP_CNT_SHIFT 0 136bf215546Sopenharmony_ci# define R300_VAP_OUTPUT_VTX_FMT_1__TEX_1_COMP_CNT_SHIFT 3 137bf215546Sopenharmony_ci# define R300_VAP_OUTPUT_VTX_FMT_1__TEX_2_COMP_CNT_SHIFT 6 138bf215546Sopenharmony_ci# define R300_VAP_OUTPUT_VTX_FMT_1__TEX_3_COMP_CNT_SHIFT 9 139bf215546Sopenharmony_ci# define R300_VAP_OUTPUT_VTX_FMT_1__TEX_4_COMP_CNT_SHIFT 12 140bf215546Sopenharmony_ci# define R300_VAP_OUTPUT_VTX_FMT_1__TEX_5_COMP_CNT_SHIFT 15 141bf215546Sopenharmony_ci# define R300_VAP_OUTPUT_VTX_FMT_1__TEX_6_COMP_CNT_SHIFT 18 142bf215546Sopenharmony_ci# define R300_VAP_OUTPUT_VTX_FMT_1__TEX_7_COMP_CNT_SHIFT 21 143bf215546Sopenharmony_ci# define R300_VAP_OUTPUT_VTX_FMT_1__NOT_PRESENT 0 144bf215546Sopenharmony_ci# define R300_VAP_OUTPUT_VTX_FMT_1__1_COMPONENT 1 145bf215546Sopenharmony_ci# define R300_VAP_OUTPUT_VTX_FMT_1__2_COMPONENTS 2 146bf215546Sopenharmony_ci# define R300_VAP_OUTPUT_VTX_FMT_1__3_COMPONENTS 3 147bf215546Sopenharmony_ci# define R300_VAP_OUTPUT_VTX_FMT_1__4_COMPONENTS 4 148bf215546Sopenharmony_ci 149bf215546Sopenharmony_ci#define R300_VAP_VPORT_XSCALE 0x2098 150bf215546Sopenharmony_ci#define R300_VAP_VPORT_XOFFSET 0x209c 151bf215546Sopenharmony_ci#define R300_VAP_VPORT_YSCALE 0x20a0 152bf215546Sopenharmony_ci#define R300_VAP_VPORT_YOFFSET 0x20a4 153bf215546Sopenharmony_ci#define R300_VAP_VPORT_ZSCALE 0x20a8 154bf215546Sopenharmony_ci#define R300_VAP_VPORT_ZOFFSET 0x20ac 155bf215546Sopenharmony_ci 156bf215546Sopenharmony_ci#define R300_VAP_VTE_CNTL 0x20b0 157bf215546Sopenharmony_ci#define R300_SE_VTE_CNTL R300_VAP_VTE_CNTL 158bf215546Sopenharmony_ci# define R300_VPORT_X_SCALE_ENA (1 << 0) 159bf215546Sopenharmony_ci# define R300_VPORT_X_OFFSET_ENA (1 << 1) 160bf215546Sopenharmony_ci# define R300_VPORT_Y_SCALE_ENA (1 << 2) 161bf215546Sopenharmony_ci# define R300_VPORT_Y_OFFSET_ENA (1 << 3) 162bf215546Sopenharmony_ci# define R300_VPORT_Z_SCALE_ENA (1 << 4) 163bf215546Sopenharmony_ci# define R300_VPORT_Z_OFFSET_ENA (1 << 5) 164bf215546Sopenharmony_ci# define R300_VTX_XY_FMT (1 << 8) 165bf215546Sopenharmony_ci# define R300_VTX_Z_FMT (1 << 9) 166bf215546Sopenharmony_ci# define R300_VTX_W0_FMT (1 << 10) 167bf215546Sopenharmony_ci# define R300_SERIAL_PROC_ENA (1 << 11) 168bf215546Sopenharmony_ci 169bf215546Sopenharmony_ci#define R300_VAP_VTX_SIZE 0x20b4 170bf215546Sopenharmony_ci 171bf215546Sopenharmony_ci/* BEGIN: Vertex data assembly - lots of uncertainties */ 172bf215546Sopenharmony_ci 173bf215546Sopenharmony_ci/* gap */ 174bf215546Sopenharmony_ci 175bf215546Sopenharmony_ci/* Maximum Vertex Indx Clamp */ 176bf215546Sopenharmony_ci#define R300_VAP_VF_MAX_VTX_INDX 0x2134 177bf215546Sopenharmony_ci/* Minimum Vertex Indx Clamp */ 178bf215546Sopenharmony_ci#define R300_VAP_VF_MIN_VTX_INDX 0x2138 179bf215546Sopenharmony_ci 180bf215546Sopenharmony_ci/** Vertex assembler/processor control status */ 181bf215546Sopenharmony_ci#define R300_VAP_CNTL_STATUS 0x2140 182bf215546Sopenharmony_ci/* No swap at all (default) */ 183bf215546Sopenharmony_ci# define R300_VC_NO_SWAP (0 << 0) 184bf215546Sopenharmony_ci/* 16-bit swap: 0xAABBCCDD becomes 0xBBAADDCC */ 185bf215546Sopenharmony_ci# define R300_VC_16BIT_SWAP (1 << 0) 186bf215546Sopenharmony_ci/* 32-bit swap: 0xAABBCCDD becomes 0xDDCCBBAA */ 187bf215546Sopenharmony_ci# define R300_VC_32BIT_SWAP (2 << 0) 188bf215546Sopenharmony_ci/* Half-dword swap: 0xAABBCCDD becomes 0xCCDDAABB */ 189bf215546Sopenharmony_ci# define R300_VC_HALF_DWORD_SWAP (3 << 0) 190bf215546Sopenharmony_ci/* The TCL engine will not be used (as it is logically or even physically removed) */ 191bf215546Sopenharmony_ci# define R300_VAP_TCL_BYPASS (1 << 8) 192bf215546Sopenharmony_ci/* Read only flag if TCL engine is busy. */ 193bf215546Sopenharmony_ci# define R300_VAP_PVS_BUSY (1 << 11) 194bf215546Sopenharmony_ci/* Read only flag if the vertex store is busy. */ 195bf215546Sopenharmony_ci# define R300_VAP_VS_BUSY (1 << 24) 196bf215546Sopenharmony_ci/* Read only flag if the reciprocal engine is busy. */ 197bf215546Sopenharmony_ci# define R300_VAP_RCP_BUSY (1 << 25) 198bf215546Sopenharmony_ci/* Read only flag if the viewport transform engine is busy. */ 199bf215546Sopenharmony_ci# define R300_VAP_VTE_BUSY (1 << 26) 200bf215546Sopenharmony_ci/* Read only flag if the memory interface unit is busy. */ 201bf215546Sopenharmony_ci# define R300_VAP_MUI_BUSY (1 << 27) 202bf215546Sopenharmony_ci/* Read only flag if the vertex cache is busy. */ 203bf215546Sopenharmony_ci# define R300_VAP_VC_BUSY (1 << 28) 204bf215546Sopenharmony_ci/* Read only flag if the vertex fetcher is busy. */ 205bf215546Sopenharmony_ci# define R300_VAP_VF_BUSY (1 << 29) 206bf215546Sopenharmony_ci/* Read only flag if the register pipeline is busy. */ 207bf215546Sopenharmony_ci# define R300_VAP_REGPIPE_BUSY (1 << 30) 208bf215546Sopenharmony_ci/* Read only flag if the VAP engine is busy. */ 209bf215546Sopenharmony_ci# define R300_VAP_VAP_BUSY (1 << 31) 210bf215546Sopenharmony_ci 211bf215546Sopenharmony_ci/* gap */ 212bf215546Sopenharmony_ci 213bf215546Sopenharmony_ci/* Where do we get our vertex data? 214bf215546Sopenharmony_ci * 215bf215546Sopenharmony_ci * Vertex data either comes either from immediate mode registers or from 216bf215546Sopenharmony_ci * vertex arrays. 217bf215546Sopenharmony_ci * There appears to be no mixed mode (though we can force the pitch of 218bf215546Sopenharmony_ci * vertex arrays to 0, effectively reusing the same element over and over 219bf215546Sopenharmony_ci * again). 220bf215546Sopenharmony_ci * 221bf215546Sopenharmony_ci * Immediate mode is controlled by the INPUT_CNTL registers. I am not sure 222bf215546Sopenharmony_ci * if these registers influence vertex array processing. 223bf215546Sopenharmony_ci * 224bf215546Sopenharmony_ci * Vertex arrays are controlled via the 3D_LOAD_VBPNTR packet3. 225bf215546Sopenharmony_ci * 226bf215546Sopenharmony_ci * In both cases, vertex attributes are then passed through INPUT_ROUTE. 227bf215546Sopenharmony_ci * 228bf215546Sopenharmony_ci * Beginning with INPUT_ROUTE_0_0 is a list of WORDs that route vertex data 229bf215546Sopenharmony_ci * into the vertex processor's input registers. 230bf215546Sopenharmony_ci * The first word routes the first input, the second word the second, etc. 231bf215546Sopenharmony_ci * The corresponding input is routed into the register with the given index. 232bf215546Sopenharmony_ci * The list is ended by a word with INPUT_ROUTE_END set. 233bf215546Sopenharmony_ci * 234bf215546Sopenharmony_ci * Always set COMPONENTS_4 in immediate mode. 235bf215546Sopenharmony_ci */ 236bf215546Sopenharmony_ci 237bf215546Sopenharmony_ci#define R300_VAP_PROG_STREAM_CNTL_0 0x2150 238bf215546Sopenharmony_ci# define R300_DATA_TYPE_0_SHIFT 0 239bf215546Sopenharmony_ci# define R300_DATA_TYPE_FLOAT_1 0 240bf215546Sopenharmony_ci# define R300_DATA_TYPE_FLOAT_2 1 241bf215546Sopenharmony_ci# define R300_DATA_TYPE_FLOAT_3 2 242bf215546Sopenharmony_ci# define R300_DATA_TYPE_FLOAT_4 3 243bf215546Sopenharmony_ci# define R300_DATA_TYPE_BYTE 4 244bf215546Sopenharmony_ci# define R300_DATA_TYPE_D3DCOLOR 5 245bf215546Sopenharmony_ci# define R300_DATA_TYPE_SHORT_2 6 246bf215546Sopenharmony_ci# define R300_DATA_TYPE_SHORT_4 7 247bf215546Sopenharmony_ci# define R300_DATA_TYPE_VECTOR_3_TTT 8 248bf215546Sopenharmony_ci# define R300_DATA_TYPE_VECTOR_3_EET 9 249bf215546Sopenharmony_ci# define R300_DATA_TYPE_FLOAT_8 10 250bf215546Sopenharmony_ci# define R300_DATA_TYPE_FLT16_2 11 251bf215546Sopenharmony_ci# define R300_DATA_TYPE_FLT16_4 12 252bf215546Sopenharmony_ci# define R300_SKIP_DWORDS_SHIFT 4 253bf215546Sopenharmony_ci# define R300_DST_VEC_LOC_SHIFT 8 254bf215546Sopenharmony_ci# define R300_LAST_VEC (1 << 13) 255bf215546Sopenharmony_ci# define R300_SIGNED (1 << 14) 256bf215546Sopenharmony_ci# define R300_NORMALIZE (1 << 15) 257bf215546Sopenharmony_ci# define R300_DATA_TYPE_1_SHIFT 16 258bf215546Sopenharmony_ci#define R300_VAP_PROG_STREAM_CNTL_1 0x2154 259bf215546Sopenharmony_ci#define R300_VAP_PROG_STREAM_CNTL_2 0x2158 260bf215546Sopenharmony_ci#define R300_VAP_PROG_STREAM_CNTL_3 0x215C 261bf215546Sopenharmony_ci#define R300_VAP_PROG_STREAM_CNTL_4 0x2160 262bf215546Sopenharmony_ci#define R300_VAP_PROG_STREAM_CNTL_5 0x2164 263bf215546Sopenharmony_ci#define R300_VAP_PROG_STREAM_CNTL_6 0x2168 264bf215546Sopenharmony_ci#define R300_VAP_PROG_STREAM_CNTL_7 0x216C 265bf215546Sopenharmony_ci/* gap */ 266bf215546Sopenharmony_ci 267bf215546Sopenharmony_ci/* Notes: 268bf215546Sopenharmony_ci * - always set up to produce at least two attributes: 269bf215546Sopenharmony_ci * if vertex program uses only position, fglrx will set normal, too 270bf215546Sopenharmony_ci * - INPUT_CNTL_0_COLOR and INPUT_CNTL_COLOR bits are always equal. 271bf215546Sopenharmony_ci */ 272bf215546Sopenharmony_ci#define R300_VAP_VTX_STATE_CNTL 0x2180 273bf215546Sopenharmony_ci# define R300_COLOR_0_ASSEMBLY_SHIFT 0 274bf215546Sopenharmony_ci# define R300_SEL_COLOR 0 275bf215546Sopenharmony_ci# define R300_SEL_USER_COLOR_0 1 276bf215546Sopenharmony_ci# define R300_SEL_USER_COLOR_1 2 277bf215546Sopenharmony_ci# define R300_COLOR_1_ASSEMBLY_SHIFT 2 278bf215546Sopenharmony_ci# define R300_COLOR_2_ASSEMBLY_SHIFT 4 279bf215546Sopenharmony_ci# define R300_COLOR_3_ASSEMBLY_SHIFT 6 280bf215546Sopenharmony_ci# define R300_COLOR_4_ASSEMBLY_SHIFT 8 281bf215546Sopenharmony_ci# define R300_COLOR_5_ASSEMBLY_SHIFT 10 282bf215546Sopenharmony_ci# define R300_COLOR_6_ASSEMBLY_SHIFT 12 283bf215546Sopenharmony_ci# define R300_COLOR_7_ASSEMBLY_SHIFT 14 284bf215546Sopenharmony_ci# define R300_UPDATE_USER_COLOR_0_ENA (1 << 16) 285bf215546Sopenharmony_ci 286bf215546Sopenharmony_ci/* 287bf215546Sopenharmony_ci * Each bit in this field applies to the corresponding vector in the VSM 288bf215546Sopenharmony_ci * memory (i.e. Bit 0 applies to VECTOR_0 (POSITION), etc.). If the bit 289bf215546Sopenharmony_ci * is set, then the corresponding 4-Dword Vector is output into the Vertex Stream. 290bf215546Sopenharmony_ci */ 291bf215546Sopenharmony_ci#define R300_VAP_VSM_VTX_ASSM 0x2184 292bf215546Sopenharmony_ci# define R300_INPUT_CNTL_POS 0x00000001 293bf215546Sopenharmony_ci# define R300_INPUT_CNTL_NORMAL 0x00000002 294bf215546Sopenharmony_ci# define R300_INPUT_CNTL_COLOR 0x00000004 295bf215546Sopenharmony_ci# define R300_INPUT_CNTL_TC0 0x00000400 296bf215546Sopenharmony_ci# define R300_INPUT_CNTL_TC1 0x00000800 297bf215546Sopenharmony_ci# define R300_INPUT_CNTL_TC2 0x00001000 /* GUESS */ 298bf215546Sopenharmony_ci# define R300_INPUT_CNTL_TC3 0x00002000 /* GUESS */ 299bf215546Sopenharmony_ci# define R300_INPUT_CNTL_TC4 0x00004000 /* GUESS */ 300bf215546Sopenharmony_ci# define R300_INPUT_CNTL_TC5 0x00008000 /* GUESS */ 301bf215546Sopenharmony_ci# define R300_INPUT_CNTL_TC6 0x00010000 /* GUESS */ 302bf215546Sopenharmony_ci# define R300_INPUT_CNTL_TC7 0x00020000 /* GUESS */ 303bf215546Sopenharmony_ci 304bf215546Sopenharmony_ci/* Programmable Stream Control Signed Normalize Control */ 305bf215546Sopenharmony_ci#define R300_VAP_PSC_SGN_NORM_CNTL 0x21dc 306bf215546Sopenharmony_ci# define SGN_NORM_ZERO 0 307bf215546Sopenharmony_ci# define SGN_NORM_ZERO_CLAMP_MINUS_ONE 1 308bf215546Sopenharmony_ci# define SGN_NORM_NO_ZERO 2U 309bf215546Sopenharmony_ci# define R300_SGN_NORM_NO_ZERO (SGN_NORM_NO_ZERO | \ 310bf215546Sopenharmony_ci (SGN_NORM_NO_ZERO << 2) | (SGN_NORM_NO_ZERO << 4) | \ 311bf215546Sopenharmony_ci (SGN_NORM_NO_ZERO << 6) | (SGN_NORM_NO_ZERO << 8) | \ 312bf215546Sopenharmony_ci (SGN_NORM_NO_ZERO << 10) | (SGN_NORM_NO_ZERO << 12) | \ 313bf215546Sopenharmony_ci (SGN_NORM_NO_ZERO << 14) | (SGN_NORM_NO_ZERO << 16) | \ 314bf215546Sopenharmony_ci (SGN_NORM_NO_ZERO << 18) | (SGN_NORM_NO_ZERO << 20) | \ 315bf215546Sopenharmony_ci (SGN_NORM_NO_ZERO << 22) | (SGN_NORM_NO_ZERO << 24) | \ 316bf215546Sopenharmony_ci (SGN_NORM_NO_ZERO << 26) | (SGN_NORM_NO_ZERO << 28) | \ 317bf215546Sopenharmony_ci (SGN_NORM_NO_ZERO << 30)) 318bf215546Sopenharmony_ci 319bf215546Sopenharmony_ci/* gap */ 320bf215546Sopenharmony_ci 321bf215546Sopenharmony_ci/* Words parallel to INPUT_ROUTE_0; All words that are active in INPUT_ROUTE_0 322bf215546Sopenharmony_ci * are set to a swizzling bit pattern, other words are 0. 323bf215546Sopenharmony_ci * 324bf215546Sopenharmony_ci * In immediate mode, the pattern is always set to xyzw. In vertex array 325bf215546Sopenharmony_ci * mode, the swizzling pattern is e.g. used to set zw components in texture 326bf215546Sopenharmony_ci * coordinates with only two components. 327bf215546Sopenharmony_ci */ 328bf215546Sopenharmony_ci#define R300_VAP_PROG_STREAM_CNTL_EXT_0 0x21e0 329bf215546Sopenharmony_ci# define R300_SWIZZLE0_SHIFT 0 330bf215546Sopenharmony_ci# define R300_SWIZZLE_SELECT_X_SHIFT 0 331bf215546Sopenharmony_ci# define R300_SWIZZLE_SELECT_Y_SHIFT 3 332bf215546Sopenharmony_ci# define R300_SWIZZLE_SELECT_Z_SHIFT 6 333bf215546Sopenharmony_ci# define R300_SWIZZLE_SELECT_W_SHIFT 9 334bf215546Sopenharmony_ci 335bf215546Sopenharmony_ci# define R300_SWIZZLE_SELECT_X 0 336bf215546Sopenharmony_ci# define R300_SWIZZLE_SELECT_Y 1 337bf215546Sopenharmony_ci# define R300_SWIZZLE_SELECT_Z 2 338bf215546Sopenharmony_ci# define R300_SWIZZLE_SELECT_W 3 339bf215546Sopenharmony_ci# define R300_SWIZZLE_SELECT_FP_ZERO 4 340bf215546Sopenharmony_ci# define R300_SWIZZLE_SELECT_FP_ONE 5 341bf215546Sopenharmony_ci/* alternate forms for r300_emit.c */ 342bf215546Sopenharmony_ci# define R300_INPUT_ROUTE_SELECT_X 0 343bf215546Sopenharmony_ci# define R300_INPUT_ROUTE_SELECT_Y 1 344bf215546Sopenharmony_ci# define R300_INPUT_ROUTE_SELECT_Z 2 345bf215546Sopenharmony_ci# define R300_INPUT_ROUTE_SELECT_W 3 346bf215546Sopenharmony_ci# define R300_INPUT_ROUTE_SELECT_ZERO 4 347bf215546Sopenharmony_ci# define R300_INPUT_ROUTE_SELECT_ONE 5 348bf215546Sopenharmony_ci 349bf215546Sopenharmony_ci# define R300_WRITE_ENA_SHIFT 12 350bf215546Sopenharmony_ci# define R300_WRITE_ENA_X 1 351bf215546Sopenharmony_ci# define R300_WRITE_ENA_Y 2 352bf215546Sopenharmony_ci# define R300_WRITE_ENA_Z 4 353bf215546Sopenharmony_ci# define R300_WRITE_ENA_W 8 354bf215546Sopenharmony_ci# define R300_SWIZZLE1_SHIFT 16 355bf215546Sopenharmony_ci 356bf215546Sopenharmony_ci# define R300_VAP_SWIZZLE_X001 \ 357bf215546Sopenharmony_ci ((R300_SWIZZLE_SELECT_X << R300_SWIZZLE_SELECT_X_SHIFT) | \ 358bf215546Sopenharmony_ci (R300_SWIZZLE_SELECT_FP_ZERO << R300_SWIZZLE_SELECT_Y_SHIFT) | \ 359bf215546Sopenharmony_ci (R300_SWIZZLE_SELECT_FP_ZERO << R300_SWIZZLE_SELECT_Z_SHIFT) | \ 360bf215546Sopenharmony_ci (R300_SWIZZLE_SELECT_FP_ONE << R300_SWIZZLE_SELECT_W_SHIFT) | \ 361bf215546Sopenharmony_ci (0xf << R300_WRITE_ENA_SHIFT)) 362bf215546Sopenharmony_ci 363bf215546Sopenharmony_ci# define R300_VAP_SWIZZLE_XY01 \ 364bf215546Sopenharmony_ci ((R300_SWIZZLE_SELECT_X << R300_SWIZZLE_SELECT_X_SHIFT) | \ 365bf215546Sopenharmony_ci (R300_SWIZZLE_SELECT_Y << R300_SWIZZLE_SELECT_Y_SHIFT) | \ 366bf215546Sopenharmony_ci (R300_SWIZZLE_SELECT_FP_ZERO << R300_SWIZZLE_SELECT_Z_SHIFT) | \ 367bf215546Sopenharmony_ci (R300_SWIZZLE_SELECT_FP_ONE << R300_SWIZZLE_SELECT_W_SHIFT) | \ 368bf215546Sopenharmony_ci (0xf << R300_WRITE_ENA_SHIFT)) 369bf215546Sopenharmony_ci 370bf215546Sopenharmony_ci# define R300_VAP_SWIZZLE_XYZ1 \ 371bf215546Sopenharmony_ci ((R300_SWIZZLE_SELECT_X << R300_SWIZZLE_SELECT_X_SHIFT) | \ 372bf215546Sopenharmony_ci (R300_SWIZZLE_SELECT_Y << R300_SWIZZLE_SELECT_Y_SHIFT) | \ 373bf215546Sopenharmony_ci (R300_SWIZZLE_SELECT_Z << R300_SWIZZLE_SELECT_Z_SHIFT) | \ 374bf215546Sopenharmony_ci (R300_SWIZZLE_SELECT_FP_ONE << R300_SWIZZLE_SELECT_W_SHIFT) | \ 375bf215546Sopenharmony_ci (0xf << R300_WRITE_ENA_SHIFT)) 376bf215546Sopenharmony_ci 377bf215546Sopenharmony_ci# define R300_VAP_SWIZZLE_XYZW \ 378bf215546Sopenharmony_ci ((R300_SWIZZLE_SELECT_X << R300_SWIZZLE_SELECT_X_SHIFT) | \ 379bf215546Sopenharmony_ci (R300_SWIZZLE_SELECT_Y << R300_SWIZZLE_SELECT_Y_SHIFT) | \ 380bf215546Sopenharmony_ci (R300_SWIZZLE_SELECT_Z << R300_SWIZZLE_SELECT_Z_SHIFT) | \ 381bf215546Sopenharmony_ci (R300_SWIZZLE_SELECT_W << R300_SWIZZLE_SELECT_W_SHIFT) | \ 382bf215546Sopenharmony_ci (0xf << R300_WRITE_ENA_SHIFT)) 383bf215546Sopenharmony_ci 384bf215546Sopenharmony_ci#define R300_VAP_PROG_STREAM_CNTL_EXT_1 0x21e4 385bf215546Sopenharmony_ci#define R300_VAP_PROG_STREAM_CNTL_EXT_2 0x21e8 386bf215546Sopenharmony_ci#define R300_VAP_PROG_STREAM_CNTL_EXT_3 0x21ec 387bf215546Sopenharmony_ci#define R300_VAP_PROG_STREAM_CNTL_EXT_4 0x21f0 388bf215546Sopenharmony_ci#define R300_VAP_PROG_STREAM_CNTL_EXT_5 0x21f4 389bf215546Sopenharmony_ci#define R300_VAP_PROG_STREAM_CNTL_EXT_6 0x21f8 390bf215546Sopenharmony_ci#define R300_VAP_PROG_STREAM_CNTL_EXT_7 0x21fc 391bf215546Sopenharmony_ci 392bf215546Sopenharmony_ci/* END: Vertex data assembly */ 393bf215546Sopenharmony_ci 394bf215546Sopenharmony_ci/* gap */ 395bf215546Sopenharmony_ci 396bf215546Sopenharmony_ci/* BEGIN: Upload vertex program and data */ 397bf215546Sopenharmony_ci 398bf215546Sopenharmony_ci/* 399bf215546Sopenharmony_ci * The programmable vertex shader unit has a memory bank of unknown size 400bf215546Sopenharmony_ci * that can be written to in 16 byte units by writing the address into 401bf215546Sopenharmony_ci * UPLOAD_ADDRESS, followed by data in UPLOAD_DATA (multiples of 4 DWORDs). 402bf215546Sopenharmony_ci * 403bf215546Sopenharmony_ci * Pointers into the memory bank are always in multiples of 16 bytes. 404bf215546Sopenharmony_ci * 405bf215546Sopenharmony_ci * The memory bank is divided into areas with fixed meaning. 406bf215546Sopenharmony_ci * 407bf215546Sopenharmony_ci * Starting at address UPLOAD_PROGRAM: Vertex program instructions. 408bf215546Sopenharmony_ci * Native limits reported by drivers from ATI suggest size 256 (i.e. 4KB), 409bf215546Sopenharmony_ci * whereas the difference between known addresses suggests size 512. 410bf215546Sopenharmony_ci * 411bf215546Sopenharmony_ci * Starting at address UPLOAD_PARAMETERS: Vertex program parameters. 412bf215546Sopenharmony_ci * Native reported limits and the VPI layout suggest size 256, whereas 413bf215546Sopenharmony_ci * difference between known addresses suggests size 512. 414bf215546Sopenharmony_ci * 415bf215546Sopenharmony_ci * At address UPLOAD_POINTSIZE is a vector (0, 0, ps, 0), where ps is the 416bf215546Sopenharmony_ci * floating point pointsize. The exact purpose of this state is uncertain, 417bf215546Sopenharmony_ci * as there is also the R300_RE_POINTSIZE register. 418bf215546Sopenharmony_ci * 419bf215546Sopenharmony_ci * Multiple vertex programs and parameter sets can be loaded at once, 420bf215546Sopenharmony_ci * which could explain the size discrepancy. 421bf215546Sopenharmony_ci */ 422bf215546Sopenharmony_ci#define R300_VAP_PVS_VECTOR_INDX_REG 0x2200 423bf215546Sopenharmony_ci# define R300_PVS_CODE_START 0 424bf215546Sopenharmony_ci# define R300_MAX_PVS_CODE_LINES 256 425bf215546Sopenharmony_ci# define R500_MAX_PVS_CODE_LINES 1024 426bf215546Sopenharmony_ci# define R300_PVS_CONST_START 512 427bf215546Sopenharmony_ci# define R500_PVS_CONST_START 1024 428bf215546Sopenharmony_ci# define R300_MAX_PVS_CONST_VECS 256 429bf215546Sopenharmony_ci# define R500_MAX_PVS_CONST_VECS 256 430bf215546Sopenharmony_ci# define R300_PVS_UCP_START 1024 431bf215546Sopenharmony_ci# define R500_PVS_UCP_START 1536 432bf215546Sopenharmony_ci# define R300_POINT_VPORT_SCALE_OFFSET 1030 433bf215546Sopenharmony_ci# define R500_POINT_VPORT_SCALE_OFFSET 1542 434bf215546Sopenharmony_ci# define R300_POINT_GEN_TEX_OFFSET 1031 435bf215546Sopenharmony_ci# define R500_POINT_GEN_TEX_OFFSET 1543 436bf215546Sopenharmony_ci 437bf215546Sopenharmony_ci/* 438bf215546Sopenharmony_ci * These are obsolete defines form r300_context.h, but they might give some 439bf215546Sopenharmony_ci * clues when investigating the addresses further... 440bf215546Sopenharmony_ci */ 441bf215546Sopenharmony_ci#if 0 442bf215546Sopenharmony_ci#define VSF_DEST_PROGRAM 0x0 443bf215546Sopenharmony_ci#define VSF_DEST_MATRIX0 0x200 444bf215546Sopenharmony_ci#define VSF_DEST_MATRIX1 0x204 445bf215546Sopenharmony_ci#define VSF_DEST_MATRIX2 0x208 446bf215546Sopenharmony_ci#define VSF_DEST_VECTOR0 0x20c 447bf215546Sopenharmony_ci#define VSF_DEST_VECTOR1 0x20d 448bf215546Sopenharmony_ci#define VSF_DEST_UNKNOWN1 0x400 449bf215546Sopenharmony_ci#define VSF_DEST_UNKNOWN2 0x406 450bf215546Sopenharmony_ci#endif 451bf215546Sopenharmony_ci 452bf215546Sopenharmony_ci/* gap */ 453bf215546Sopenharmony_ci 454bf215546Sopenharmony_ci#define R300_VAP_PVS_UPLOAD_DATA 0x2208 455bf215546Sopenharmony_ci 456bf215546Sopenharmony_ci/* END: Upload vertex program and data */ 457bf215546Sopenharmony_ci 458bf215546Sopenharmony_ci/* gap */ 459bf215546Sopenharmony_ci 460bf215546Sopenharmony_ci/* I do not know the purpose of this register. However, I do know that 461bf215546Sopenharmony_ci * it is set to 221C_CLEAR for clear operations and to 221C_NORMAL 462bf215546Sopenharmony_ci * for normal rendering. 463bf215546Sopenharmony_ci * 464bf215546Sopenharmony_ci * 2007-11-05: This register is the user clip plane control register, but there 465bf215546Sopenharmony_ci * also seems to be a rendering mode control; the NORMAL/CLEAR defines. 466bf215546Sopenharmony_ci * 467bf215546Sopenharmony_ci * See bug #9871. http://bugs.freedesktop.org/attachment.cgi?id=10672&action=view 468bf215546Sopenharmony_ci */ 469bf215546Sopenharmony_ci#define R500_VAP_TEX_TO_COLOR_CNTL 0x2218 470bf215546Sopenharmony_ci 471bf215546Sopenharmony_ci#define R300_VAP_CLIP_CNTL 0x221C 472bf215546Sopenharmony_ci# define R300_VAP_UCP_ENABLE_0 (1 << 0) 473bf215546Sopenharmony_ci# define R300_VAP_UCP_ENABLE_1 (1 << 1) 474bf215546Sopenharmony_ci# define R300_VAP_UCP_ENABLE_2 (1 << 2) 475bf215546Sopenharmony_ci# define R300_VAP_UCP_ENABLE_3 (1 << 3) 476bf215546Sopenharmony_ci# define R300_VAP_UCP_ENABLE_4 (1 << 4) 477bf215546Sopenharmony_ci# define R300_VAP_UCP_ENABLE_5 (1 << 5) 478bf215546Sopenharmony_ci# define R300_PS_UCP_MODE_DIST_COP (0 << 14) 479bf215546Sopenharmony_ci# define R300_PS_UCP_MODE_RADIUS_COP (1 << 14) 480bf215546Sopenharmony_ci# define R300_PS_UCP_MODE_RADIUS_COP_CLIP (2 << 14) 481bf215546Sopenharmony_ci# define R300_PS_UCP_MODE_CLIP_AS_TRIFAN (3 << 14) 482bf215546Sopenharmony_ci# define R300_CLIP_DISABLE (1 << 16) 483bf215546Sopenharmony_ci# define R300_UCP_CULL_ONLY_ENABLE (1 << 17) 484bf215546Sopenharmony_ci# define R300_BOUNDARY_EDGE_FLAG_ENABLE (1 << 18) 485bf215546Sopenharmony_ci# define R500_COLOR2_IS_TEXTURE (1 << 20) 486bf215546Sopenharmony_ci# define R500_COLOR3_IS_TEXTURE (1 << 21) 487bf215546Sopenharmony_ci 488bf215546Sopenharmony_ci/* These seem to be per-pixel and per-vertex X and Y clipping planes. The first 489bf215546Sopenharmony_ci * plane is per-pixel and the second plane is per-vertex. 490bf215546Sopenharmony_ci * 491bf215546Sopenharmony_ci * This was determined by experimentation alone but I believe it is correct. 492bf215546Sopenharmony_ci * 493bf215546Sopenharmony_ci * These registers are called X_QUAD0_1_FL to X_QUAD0_4_FL by glxtest. 494bf215546Sopenharmony_ci */ 495bf215546Sopenharmony_ci#define R300_VAP_GB_VERT_CLIP_ADJ 0x2220 496bf215546Sopenharmony_ci#define R300_VAP_GB_VERT_DISC_ADJ 0x2224 497bf215546Sopenharmony_ci#define R300_VAP_GB_HORZ_CLIP_ADJ 0x2228 498bf215546Sopenharmony_ci#define R300_VAP_GB_HORZ_DISC_ADJ 0x222c 499bf215546Sopenharmony_ci 500bf215546Sopenharmony_ci#define R300_VAP_PVS_FLOW_CNTL_ADDRS_0 0x2230 501bf215546Sopenharmony_ci#define R300_PVS_FC_ACT_ADRS(x) ((x) << 0) 502bf215546Sopenharmony_ci#define R300_PVS_FC_LOOP_CNT_JMP_INST(x) ((x) << 8) 503bf215546Sopenharmony_ci#define R300_PVS_FC_LAST_INST(x) ((x) << 16) 504bf215546Sopenharmony_ci#define R300_PVS_FC_RTN_INST(x) ((x) << 24) 505bf215546Sopenharmony_ci 506bf215546Sopenharmony_ci/* gap */ 507bf215546Sopenharmony_ci 508bf215546Sopenharmony_ci/* Sometimes, END_OF_PKT and 0x2284=0 are the only commands sent between 509bf215546Sopenharmony_ci * rendering commands and overwriting vertex program parameters. 510bf215546Sopenharmony_ci * Therefore, I suspect writing zero to 0x2284 synchronizes the engine and 511bf215546Sopenharmony_ci * avoids bugs caused by still running shaders reading bad data from memory. 512bf215546Sopenharmony_ci */ 513bf215546Sopenharmony_ci#define R300_VAP_PVS_STATE_FLUSH_REG 0x2284 514bf215546Sopenharmony_ci 515bf215546Sopenharmony_ci/* This register is used to define the number of core clocks to wait for a 516bf215546Sopenharmony_ci * vertex to be received by the VAP input controller (while the primitive 517bf215546Sopenharmony_ci * path is backed up) before forcing any accumulated vertices to be submitted 518bf215546Sopenharmony_ci * to the vertex processing path. 519bf215546Sopenharmony_ci */ 520bf215546Sopenharmony_ci#define VAP_PVS_VTX_TIMEOUT_REG 0x2288 521bf215546Sopenharmony_ci# define R300_2288_R300 0x00750000 /* -- nh */ 522bf215546Sopenharmony_ci# define R300_2288_RV350 0x0000FFFF /* -- Vladimir */ 523bf215546Sopenharmony_ci 524bf215546Sopenharmony_ci#define R300_VAP_PVS_FLOW_CNTL_LOOP_INDEX_0 0x2290 525bf215546Sopenharmony_ci#define R300_PVS_FC_LOOP_INIT_VAL(x) ((x) << 0) 526bf215546Sopenharmony_ci#define R300_PVS_FC_LOOP_STEP_VAL(x) ((x) << 8) 527bf215546Sopenharmony_ci 528bf215546Sopenharmony_ci/* gap */ 529bf215546Sopenharmony_ci 530bf215546Sopenharmony_ci/* Addresses are relative to the vertex program instruction area of the 531bf215546Sopenharmony_ci * memory bank. PROGRAM_END points to the last instruction of the active 532bf215546Sopenharmony_ci * program 533bf215546Sopenharmony_ci * 534bf215546Sopenharmony_ci * The meaning of the two UNKNOWN fields is obviously not known. However, 535bf215546Sopenharmony_ci * experiments so far have shown that both *must* point to an instruction 536bf215546Sopenharmony_ci * inside the vertex program, otherwise the GPU locks up. 537bf215546Sopenharmony_ci * 538bf215546Sopenharmony_ci * fglrx usually sets CNTL_3_UNKNOWN to the end of the program and 539bf215546Sopenharmony_ci * R300_PVS_CNTL_1_POS_END_SHIFT points to instruction where last write to 540bf215546Sopenharmony_ci * position takes place. 541bf215546Sopenharmony_ci * 542bf215546Sopenharmony_ci * Most likely this is used to ignore rest of the program in cases 543bf215546Sopenharmony_ci * where group of verts arent visible. For some reason this "section" 544bf215546Sopenharmony_ci * is sometimes accepted other instruction that have no relationship with 545bf215546Sopenharmony_ci * position calculations. 546bf215546Sopenharmony_ci */ 547bf215546Sopenharmony_ci#define R300_VAP_PVS_CODE_CNTL_0 0x22D0 548bf215546Sopenharmony_ci# define R300_PVS_FIRST_INST_SHIFT 0 549bf215546Sopenharmony_ci# define R300_PVS_XYZW_VALID_INST_SHIFT 10 550bf215546Sopenharmony_ci# define R300_PVS_LAST_INST_SHIFT 20 551bf215546Sopenharmony_ci# define R300_PVS_FIRST_INST(x) ((x) << 0) 552bf215546Sopenharmony_ci# define R300_PVS_XYZW_VALID_INST(x) ((x) << 10) 553bf215546Sopenharmony_ci# define R300_PVS_LAST_INST(x) ((x) << 20) 554bf215546Sopenharmony_ci/* Addresses are relative to the vertex program parameters area. */ 555bf215546Sopenharmony_ci#define R300_VAP_PVS_CONST_CNTL 0x22D4 556bf215546Sopenharmony_ci# define R300_PVS_CONST_BASE_OFFSET_SHIFT 0 557bf215546Sopenharmony_ci# define R300_PVS_CONST_BASE_OFFSET(x) (x) 558bf215546Sopenharmony_ci# define R300_PVS_MAX_CONST_ADDR_SHIFT 16 559bf215546Sopenharmony_ci# define R300_PVS_MAX_CONST_ADDR(x) ((x) << 16) 560bf215546Sopenharmony_ci#define R300_VAP_PVS_CODE_CNTL_1 0x22D8 561bf215546Sopenharmony_ci# define R300_PVS_LAST_VTX_SRC_INST_SHIFT 0 562bf215546Sopenharmony_ci#define R300_VAP_PVS_FLOW_CNTL_OPC 0x22DC 563bf215546Sopenharmony_ci#define R300_VAP_PVS_FC_OPC_JUMP(x) (1 << (2 * (x))) 564bf215546Sopenharmony_ci#define R300_VAP_PVS_FC_OPC_LOOP(x) (2 << (2 * (x))) 565bf215546Sopenharmony_ci#define R300_VAP_PVS_FC_OPC_JSR(x) (3 << (2 * (x))) 566bf215546Sopenharmony_ci 567bf215546Sopenharmony_ci/* The entire range from 0x2300 to 0x2AC inclusive seems to be used for 568bf215546Sopenharmony_ci * immediate vertices 569bf215546Sopenharmony_ci */ 570bf215546Sopenharmony_ci#define R300_VAP_VTX_COLOR_R 0x2464 571bf215546Sopenharmony_ci#define R300_VAP_VTX_COLOR_G 0x2468 572bf215546Sopenharmony_ci#define R300_VAP_VTX_COLOR_B 0x246C 573bf215546Sopenharmony_ci#define R300_VAP_VTX_POS_0_X_1 0x2490 /* used for glVertex2*() */ 574bf215546Sopenharmony_ci#define R300_VAP_VTX_POS_0_Y_1 0x2494 575bf215546Sopenharmony_ci#define R300_VAP_VTX_COLOR_PKD 0x249C /* RGBA */ 576bf215546Sopenharmony_ci#define R300_VAP_VTX_POS_0_X_2 0x24A0 /* used for glVertex3*() */ 577bf215546Sopenharmony_ci#define R300_VAP_VTX_POS_0_Y_2 0x24A4 578bf215546Sopenharmony_ci#define R300_VAP_VTX_POS_0_Z_2 0x24A8 579bf215546Sopenharmony_ci/* write 0 to indicate end of packet? */ 580bf215546Sopenharmony_ci#define R300_VAP_VTX_END_OF_PKT 0x24AC 581bf215546Sopenharmony_ci 582bf215546Sopenharmony_ci#define R500_VAP_PVS_FLOW_CNTL_ADDRS_LW_0 0x2500 583bf215546Sopenharmony_ci#define R500_PVS_FC_ACT_ADRS(x) ((x) << 0) 584bf215546Sopenharmony_ci#define R500_PVS_FC_LOOP_CNT_JMP_INST(x) ((x) << 16) 585bf215546Sopenharmony_ci 586bf215546Sopenharmony_ci#define R500_VAP_PVS_FLOW_CNTL_ADDRS_UW_0 0x2504 587bf215546Sopenharmony_ci#define R500_PVS_FC_LAST_INST(x) ((x) << 0) 588bf215546Sopenharmony_ci#define R500_PVS_FC_RTN_INST(x) ((x) << 16) 589bf215546Sopenharmony_ci 590bf215546Sopenharmony_ci/* gap */ 591bf215546Sopenharmony_ci 592bf215546Sopenharmony_ci/* These are values from r300_reg/r300_reg.h - they are known to be correct 593bf215546Sopenharmony_ci * and are here so we can use one register file instead of several 594bf215546Sopenharmony_ci * - Vladimir 595bf215546Sopenharmony_ci */ 596bf215546Sopenharmony_ci#define R300_GB_VAP_RASTER_VTX_FMT_0 0x4000 597bf215546Sopenharmony_ci# define R300_GB_VAP_RASTER_VTX_FMT_0__POS_PRESENT (1<<0) 598bf215546Sopenharmony_ci# define R300_GB_VAP_RASTER_VTX_FMT_0__COLOR_0_PRESENT (1<<1) 599bf215546Sopenharmony_ci# define R300_GB_VAP_RASTER_VTX_FMT_0__COLOR_1_PRESENT (1<<2) 600bf215546Sopenharmony_ci# define R300_GB_VAP_RASTER_VTX_FMT_0__COLOR_2_PRESENT (1<<3) 601bf215546Sopenharmony_ci# define R300_GB_VAP_RASTER_VTX_FMT_0__COLOR_3_PRESENT (1<<4) 602bf215546Sopenharmony_ci# define R300_GB_VAP_RASTER_VTX_FMT_0__COLOR_SPACE (0xf<<5) 603bf215546Sopenharmony_ci# define R300_GB_VAP_RASTER_VTX_FMT_0__PT_SIZE_PRESENT (0x1<<16) 604bf215546Sopenharmony_ci 605bf215546Sopenharmony_ci#define R300_GB_VAP_RASTER_VTX_FMT_1 0x4004 606bf215546Sopenharmony_ci /* each of the following is 3 bits wide, specifies number 607bf215546Sopenharmony_ci of components */ 608bf215546Sopenharmony_ci# define R300_GB_VAP_RASTER_VTX_FMT_1__TEX_0_COMP_CNT_SHIFT 0 609bf215546Sopenharmony_ci# define R300_GB_VAP_RASTER_VTX_FMT_1__TEX_1_COMP_CNT_SHIFT 3 610bf215546Sopenharmony_ci# define R300_GB_VAP_RASTER_VTX_FMT_1__TEX_2_COMP_CNT_SHIFT 6 611bf215546Sopenharmony_ci# define R300_GB_VAP_RASTER_VTX_FMT_1__TEX_3_COMP_CNT_SHIFT 9 612bf215546Sopenharmony_ci# define R300_GB_VAP_RASTER_VTX_FMT_1__TEX_4_COMP_CNT_SHIFT 12 613bf215546Sopenharmony_ci# define R300_GB_VAP_RASTER_VTX_FMT_1__TEX_5_COMP_CNT_SHIFT 15 614bf215546Sopenharmony_ci# define R300_GB_VAP_RASTER_VTX_FMT_1__TEX_6_COMP_CNT_SHIFT 18 615bf215546Sopenharmony_ci# define R300_GB_VAP_RASTER_VTX_FMT_1__TEX_7_COMP_CNT_SHIFT 21 616bf215546Sopenharmony_ci 617bf215546Sopenharmony_ci/* UNK30 seems to enables point to quad transformation on textures 618bf215546Sopenharmony_ci * (or something closely related to that). 619bf215546Sopenharmony_ci * This bit is rather fatal at the time being due to lackings at pixel 620bf215546Sopenharmony_ci * shader side 621bf215546Sopenharmony_ci * Specifies top of Raster pipe specific enable controls. 622bf215546Sopenharmony_ci */ 623bf215546Sopenharmony_ci#define R300_GB_ENABLE 0x4008 624bf215546Sopenharmony_ci# define R300_GB_POINT_STUFF_DISABLE (0 << 0) 625bf215546Sopenharmony_ci# define R300_GB_POINT_STUFF_ENABLE (1 << 0) /* Specifies if points will have stuffed texture coordinates. */ 626bf215546Sopenharmony_ci# define R300_GB_LINE_STUFF_DISABLE (0 << 1) 627bf215546Sopenharmony_ci# define R300_GB_LINE_STUFF_ENABLE (1 << 1) /* Specifies if lines will have stuffed texture coordinates. */ 628bf215546Sopenharmony_ci# define R300_GB_TRIANGLE_STUFF_DISABLE (0 << 2) 629bf215546Sopenharmony_ci# define R300_GB_TRIANGLE_STUFF_ENABLE (1 << 2) /* Specifies if triangles will have stuffed texture coordinates. */ 630bf215546Sopenharmony_ci# define R300_GB_STENCIL_AUTO_DISABLE (0 << 4) 631bf215546Sopenharmony_ci# define R300_GB_STENCIL_AUTO_ENABLE (1 << 4) /* Enable stencil auto inc/dec based on triangle cw/ccw, force into dzy low bit. */ 632bf215546Sopenharmony_ci# define R300_GB_STENCIL_AUTO_FORCE (2 << 4) /* Force 0 into dzy low bit. */ 633bf215546Sopenharmony_ci 634bf215546Sopenharmony_ci /* each of the following is 2 bits wide */ 635bf215546Sopenharmony_ci#define R300_GB_TEX_REPLICATE 0 /* Replicate VAP source texture coordinates (S,T,[R,Q]). */ 636bf215546Sopenharmony_ci#define R300_GB_TEX_ST 1 /* Stuff with source texture coordinates (S,T). */ 637bf215546Sopenharmony_ci#define R300_GB_TEX_STR 2 /* Stuff with source texture coordinates (S,T,R). */ 638bf215546Sopenharmony_ci# define R300_GB_TEX0_SOURCE_SHIFT 16 639bf215546Sopenharmony_ci# define R300_GB_TEX1_SOURCE_SHIFT 18 640bf215546Sopenharmony_ci# define R300_GB_TEX2_SOURCE_SHIFT 20 641bf215546Sopenharmony_ci# define R300_GB_TEX3_SOURCE_SHIFT 22 642bf215546Sopenharmony_ci# define R300_GB_TEX4_SOURCE_SHIFT 24 643bf215546Sopenharmony_ci# define R300_GB_TEX5_SOURCE_SHIFT 26 644bf215546Sopenharmony_ci# define R300_GB_TEX6_SOURCE_SHIFT 28 645bf215546Sopenharmony_ci# define R300_GB_TEX7_SOURCE_SHIFT 30 646bf215546Sopenharmony_ci 647bf215546Sopenharmony_ci/* MSPOS - positions for multisample antialiasing (?) */ 648bf215546Sopenharmony_ci#define R300_GB_MSPOS0 0x4010 649bf215546Sopenharmony_ci /* shifts - each of the fields is 4 bits */ 650bf215546Sopenharmony_ci# define R300_GB_MSPOS0__MS_X0_SHIFT 0 651bf215546Sopenharmony_ci# define R300_GB_MSPOS0__MS_Y0_SHIFT 4 652bf215546Sopenharmony_ci# define R300_GB_MSPOS0__MS_X1_SHIFT 8 653bf215546Sopenharmony_ci# define R300_GB_MSPOS0__MS_Y1_SHIFT 12 654bf215546Sopenharmony_ci# define R300_GB_MSPOS0__MS_X2_SHIFT 16 655bf215546Sopenharmony_ci# define R300_GB_MSPOS0__MS_Y2_SHIFT 20 656bf215546Sopenharmony_ci# define R300_GB_MSPOS0__MSBD0_Y 24 657bf215546Sopenharmony_ci# define R300_GB_MSPOS0__MSBD0_X 28 658bf215546Sopenharmony_ci 659bf215546Sopenharmony_ci#define R300_GB_MSPOS1 0x4014 660bf215546Sopenharmony_ci# define R300_GB_MSPOS1__MS_X3_SHIFT 0 661bf215546Sopenharmony_ci# define R300_GB_MSPOS1__MS_Y3_SHIFT 4 662bf215546Sopenharmony_ci# define R300_GB_MSPOS1__MS_X4_SHIFT 8 663bf215546Sopenharmony_ci# define R300_GB_MSPOS1__MS_Y4_SHIFT 12 664bf215546Sopenharmony_ci# define R300_GB_MSPOS1__MS_X5_SHIFT 16 665bf215546Sopenharmony_ci# define R300_GB_MSPOS1__MS_Y5_SHIFT 20 666bf215546Sopenharmony_ci# define R300_GB_MSPOS1__MSBD1 24 667bf215546Sopenharmony_ci 668bf215546Sopenharmony_ci/* Specifies the graphics pipeline configuration for rasterization. */ 669bf215546Sopenharmony_ci#define R300_GB_TILE_CONFIG 0x4018 670bf215546Sopenharmony_ci# define R300_GB_TILE_DISABLE (0 << 0) 671bf215546Sopenharmony_ci# define R300_GB_TILE_ENABLE (1 << 0) 672bf215546Sopenharmony_ci# define R300_GB_TILE_PIPE_COUNT_RV300 (0 << 1) /* RV350 (1 pipe, 1 ctx) */ 673bf215546Sopenharmony_ci# define R300_GB_TILE_PIPE_COUNT_R300 (3 << 1) /* R300 (2 pipes, 1 ctx) */ 674bf215546Sopenharmony_ci# define R300_GB_TILE_PIPE_COUNT_R420_3P (6 << 1) /* R420-3P (3 pipes, 1 ctx) */ 675bf215546Sopenharmony_ci# define R300_GB_TILE_PIPE_COUNT_R420 (7 << 1) /* R420 (4 pipes, 1 ctx) */ 676bf215546Sopenharmony_ci# define R300_GB_TILE_SIZE_8 (0 << 4) 677bf215546Sopenharmony_ci# define R300_GB_TILE_SIZE_16 (1 << 4) 678bf215546Sopenharmony_ci# define R300_GB_TILE_SIZE_32 (2 << 4) 679bf215546Sopenharmony_ci# define R300_GB_SUPER_SIZE_1 (0 << 6) 680bf215546Sopenharmony_ci# define R300_GB_SUPER_SIZE_2 (1 << 6) 681bf215546Sopenharmony_ci# define R300_GB_SUPER_SIZE_4 (2 << 6) 682bf215546Sopenharmony_ci# define R300_GB_SUPER_SIZE_8 (3 << 6) 683bf215546Sopenharmony_ci# define R300_GB_SUPER_SIZE_16 (4 << 6) 684bf215546Sopenharmony_ci# define R300_GB_SUPER_SIZE_32 (5 << 6) 685bf215546Sopenharmony_ci# define R300_GB_SUPER_SIZE_64 (6 << 6) 686bf215546Sopenharmony_ci# define R300_GB_SUPER_SIZE_128 (7 << 6) 687bf215546Sopenharmony_ci# define R300_GB_SUPER_X_SHIFT 9 /* 3 bits wide */ 688bf215546Sopenharmony_ci# define R300_GB_SUPER_Y_SHIFT 12 /* 3 bits wide */ 689bf215546Sopenharmony_ci# define R300_GB_SUPER_TILE_A (0 << 15) 690bf215546Sopenharmony_ci# define R300_GB_SUPER_TILE_B (1 << 15) 691bf215546Sopenharmony_ci# define R300_GB_SUBPIXEL_1_12 (0 << 16) 692bf215546Sopenharmony_ci# define R300_GB_SUBPIXEL_1_16 (1 << 16) 693bf215546Sopenharmony_ci# define R300_GB_TILE_CONFIG_QUADS_PER_RAS_4 (0 << 17) 694bf215546Sopenharmony_ci# define R300_GB_TILE_CONFIG_QUADS_PER_RAS_8 (1 << 17) 695bf215546Sopenharmony_ci# define R300_GB_TILE_CONFIG_QUADS_PER_RAS_16 (2 << 17) 696bf215546Sopenharmony_ci# define R300_GB_TILE_CONFIG_QUADS_PER_RAS_32 (3 << 17) 697bf215546Sopenharmony_ci# define R300_GB_TILE_CONFIG_BB_SCAN_INTERCEPT (0 << 19) 698bf215546Sopenharmony_ci# define R300_GB_TILE_CONFIG_BB_SCAN_BOUND_BOX (1 << 19) 699bf215546Sopenharmony_ci# define R300_GB_TILE_CONFIG_ALT_SCAN_EN_LR (0 << 20) 700bf215546Sopenharmony_ci# define R300_GB_TILE_CONFIG_ALT_SCAN_EN_LRL (1 << 20) 701bf215546Sopenharmony_ci# define R300_GB_TILE_CONFIG_ALT_OFFSET (0 << 21) 702bf215546Sopenharmony_ci# define R300_GB_TILE_CONFIG_SUBPRECISION (0 << 22) 703bf215546Sopenharmony_ci# define R300_GB_TILE_CONFIG_ALT_TILING_DEF (0 << 23) 704bf215546Sopenharmony_ci# define R300_GB_TILE_CONFIG_ALT_TILING_3_2 (1 << 23) 705bf215546Sopenharmony_ci# define R300_GB_TILE_CONFIG_Z_EXTENDED_24_1 (0 << 24) 706bf215546Sopenharmony_ci# define R300_GB_TILE_CONFIG_Z_EXTENDED_S25_1 (1 << 24) 707bf215546Sopenharmony_ci 708bf215546Sopenharmony_ci/* Specifies the sizes of the various FIFO`s in the sc/rs/us. This register must be the first one written */ 709bf215546Sopenharmony_ci#define R300_GB_FIFO_SIZE 0x4024 710bf215546Sopenharmony_ci /* each of the following is 2 bits wide */ 711bf215546Sopenharmony_ci#define R300_GB_FIFO_SIZE_32 0 712bf215546Sopenharmony_ci#define R300_GB_FIFO_SIZE_64 1 713bf215546Sopenharmony_ci#define R300_GB_FIFO_SIZE_128 2 714bf215546Sopenharmony_ci#define R300_GB_FIFO_SIZE_256 3 715bf215546Sopenharmony_ci# define R300_SC_IFIFO_SIZE_SHIFT 0 716bf215546Sopenharmony_ci# define R300_SC_TZFIFO_SIZE_SHIFT 2 717bf215546Sopenharmony_ci# define R300_SC_BFIFO_SIZE_SHIFT 4 718bf215546Sopenharmony_ci 719bf215546Sopenharmony_ci# define R300_US_OFIFO_SIZE_SHIFT 12 720bf215546Sopenharmony_ci# define R300_US_WFIFO_SIZE_SHIFT 14 721bf215546Sopenharmony_ci /* the following use the same constants as above, but meaning is 722bf215546Sopenharmony_ci is times 2 (i.e. instead of 32 words it means 64 */ 723bf215546Sopenharmony_ci# define R300_RS_TFIFO_SIZE_SHIFT 6 724bf215546Sopenharmony_ci# define R300_RS_CFIFO_SIZE_SHIFT 8 725bf215546Sopenharmony_ci# define R300_US_RAM_SIZE_SHIFT 10 726bf215546Sopenharmony_ci /* watermarks, 3 bits wide */ 727bf215546Sopenharmony_ci# define R300_RS_HIGHWATER_COL_SHIFT 16 728bf215546Sopenharmony_ci# define R300_RS_HIGHWATER_TEX_SHIFT 19 729bf215546Sopenharmony_ci# define R300_OFIFO_HIGHWATER_SHIFT 22 /* two bits only */ 730bf215546Sopenharmony_ci# define R300_CUBE_FIFO_HIGHWATER_COL_SHIFT 24 731bf215546Sopenharmony_ci 732bf215546Sopenharmony_ci#define R300_GB_Z_PEQ_CONFIG 0x4028 733bf215546Sopenharmony_ci# define R300_GB_Z_PEQ_CONFIG_Z_PEQ_SIZE_4_4 (0 << 0) 734bf215546Sopenharmony_ci# define R300_GB_Z_PEQ_CONFIG_Z_PEQ_SIZE_8_8 (1 << 0) 735bf215546Sopenharmony_ci 736bf215546Sopenharmony_ci/* Specifies various polygon specific selects (fog, depth, perspective). */ 737bf215546Sopenharmony_ci#define R300_GB_SELECT 0x401c 738bf215546Sopenharmony_ci# define R300_GB_FOG_SELECT_C0A (0 << 0) 739bf215546Sopenharmony_ci# define R300_GB_FOG_SELECT_C1A (1 << 0) 740bf215546Sopenharmony_ci# define R300_GB_FOG_SELECT_C2A (2 << 0) 741bf215546Sopenharmony_ci# define R300_GB_FOG_SELECT_C3A (3 << 0) 742bf215546Sopenharmony_ci# define R300_GB_FOG_SELECT_1_1_W (4 << 0) 743bf215546Sopenharmony_ci# define R300_GB_FOG_SELECT_Z (5 << 0) 744bf215546Sopenharmony_ci# define R300_GB_DEPTH_SELECT_Z (0 << 3) 745bf215546Sopenharmony_ci# define R300_GB_DEPTH_SELECT_1_1_W (1 << 3) 746bf215546Sopenharmony_ci# define R300_GB_W_SELECT_1_W (0 << 4) 747bf215546Sopenharmony_ci# define R300_GB_W_SELECT_1 (1 << 4) 748bf215546Sopenharmony_ci# define R300_GB_FOG_STUFF_DISABLE (0 << 5) 749bf215546Sopenharmony_ci# define R300_GB_FOG_STUFF_ENABLE (1 << 5) 750bf215546Sopenharmony_ci# define R300_GB_FOG_STUFF_TEX_SHIFT 6 751bf215546Sopenharmony_ci# define R300_GB_FOG_STUFF_TEX_MASK 0x000003c0 752bf215546Sopenharmony_ci# define R300_GB_FOG_STUFF_COMP_SHIFT 10 753bf215546Sopenharmony_ci# define R300_GB_FOG_STUFF_COMP_MASK 0x00000c00 754bf215546Sopenharmony_ci 755bf215546Sopenharmony_ci/* Specifies the graphics pipeline configuration for antialiasing. */ 756bf215546Sopenharmony_ci#define R300_GB_AA_CONFIG 0x4020 757bf215546Sopenharmony_ci# define R300_GB_AA_CONFIG_AA_DISABLE (0 << 0) 758bf215546Sopenharmony_ci# define R300_GB_AA_CONFIG_AA_ENABLE (1 << 0) 759bf215546Sopenharmony_ci# define R300_GB_AA_CONFIG_NUM_AA_SUBSAMPLES_2 (0 << 1) 760bf215546Sopenharmony_ci# define R300_GB_AA_CONFIG_NUM_AA_SUBSAMPLES_3 (1 << 1) 761bf215546Sopenharmony_ci# define R300_GB_AA_CONFIG_NUM_AA_SUBSAMPLES_4 (2 << 1) 762bf215546Sopenharmony_ci# define R300_GB_AA_CONFIG_NUM_AA_SUBSAMPLES_6 (3 << 1) 763bf215546Sopenharmony_ci 764bf215546Sopenharmony_ci/* Selects which of 4 pipes are active. */ 765bf215546Sopenharmony_ci#define R300_GB_PIPE_SELECT 0x402c 766bf215546Sopenharmony_ci# define R300_GB_PIPE_SELECT_PIPE0_ID_SHIFT 0 767bf215546Sopenharmony_ci# define R300_GB_PIPE_SELECT_PIPE1_ID_SHIFT 2 768bf215546Sopenharmony_ci# define R300_GB_PIPE_SELECT_PIPE2_ID_SHIFT 4 769bf215546Sopenharmony_ci# define R300_GB_PIPE_SELECT_PIPE3_ID_SHIFT 6 770bf215546Sopenharmony_ci# define R300_GB_PIPE_SELECT_PIPE_MASK_SHIFT 8 771bf215546Sopenharmony_ci# define R300_GB_PIPE_SELECT_MAX_PIPE 12 772bf215546Sopenharmony_ci# define R300_GB_PIPE_SELECT_BAD_PIPES 14 773bf215546Sopenharmony_ci# define R300_GB_PIPE_SELECT_CONFIG_PIPES 18 774bf215546Sopenharmony_ci 775bf215546Sopenharmony_ci 776bf215546Sopenharmony_ci/* Specifies the sizes of the various FIFO`s in the sc/rs. */ 777bf215546Sopenharmony_ci#define R300_GB_FIFO_SIZE1 0x4070 778bf215546Sopenharmony_ci/* High water mark for SC input fifo */ 779bf215546Sopenharmony_ci# define R300_GB_FIFO_SIZE1_SC_HIGHWATER_IFIFO_SHIFT 0 780bf215546Sopenharmony_ci# define R300_GB_FIFO_SIZE1_SC_HIGHWATER_IFIFO_MASK 0x0000003f 781bf215546Sopenharmony_ci/* High water mark for SC input fifo (B) */ 782bf215546Sopenharmony_ci# define R300_GB_FIFO_SIZE1_SC_HIGHWATER_BFIFO_SHIFT 6 783bf215546Sopenharmony_ci# define R300_GB_FIFO_SIZE1_SC_HIGHWATER_BFIFO_MASK 0x00000fc0 784bf215546Sopenharmony_ci/* High water mark for RS colors' fifo */ 785bf215546Sopenharmony_ci# define R300_GB_FIFO_SIZE1_SC_HIGHWATER_COL_SHIFT 12 786bf215546Sopenharmony_ci# define R300_GB_FIFO_SIZE1_SC_HIGHWATER_COL_MASK 0x0003f000 787bf215546Sopenharmony_ci/* High water mark for RS textures' fifo */ 788bf215546Sopenharmony_ci# define R300_GB_FIFO_SIZE1_SC_HIGHWATER_TEX_SHIFT 18 789bf215546Sopenharmony_ci# define R300_GB_FIFO_SIZE1_SC_HIGHWATER_TEX_MASK 0x00fc0000 790bf215546Sopenharmony_ci 791bf215546Sopenharmony_ci/* This table specifies the source location and format for up to 16 texture 792bf215546Sopenharmony_ci * addresses (i[0]:i[15]) and four colors (c[0]:c[3]) 793bf215546Sopenharmony_ci */ 794bf215546Sopenharmony_ci#define R500_RS_IP_0 0x4074 795bf215546Sopenharmony_ci#define R500_RS_IP_1 0x4078 796bf215546Sopenharmony_ci#define R500_RS_IP_2 0x407C 797bf215546Sopenharmony_ci#define R500_RS_IP_3 0x4080 798bf215546Sopenharmony_ci#define R500_RS_IP_4 0x4084 799bf215546Sopenharmony_ci#define R500_RS_IP_5 0x4088 800bf215546Sopenharmony_ci#define R500_RS_IP_6 0x408C 801bf215546Sopenharmony_ci#define R500_RS_IP_7 0x4090 802bf215546Sopenharmony_ci#define R500_RS_IP_8 0x4094 803bf215546Sopenharmony_ci#define R500_RS_IP_9 0x4098 804bf215546Sopenharmony_ci#define R500_RS_IP_10 0x409C 805bf215546Sopenharmony_ci#define R500_RS_IP_11 0x40A0 806bf215546Sopenharmony_ci#define R500_RS_IP_12 0x40A4 807bf215546Sopenharmony_ci#define R500_RS_IP_13 0x40A8 808bf215546Sopenharmony_ci#define R500_RS_IP_14 0x40AC 809bf215546Sopenharmony_ci#define R500_RS_IP_15 0x40B0 810bf215546Sopenharmony_ci#define R500_RS_IP_PTR_K0 62 811bf215546Sopenharmony_ci#define R500_RS_IP_PTR_K1 63 812bf215546Sopenharmony_ci#define R500_RS_IP_TEX_PTR_S_SHIFT 0 813bf215546Sopenharmony_ci#define R500_RS_IP_TEX_PTR_T_SHIFT 6 814bf215546Sopenharmony_ci#define R500_RS_IP_TEX_PTR_R_SHIFT 12 815bf215546Sopenharmony_ci#define R500_RS_IP_TEX_PTR_Q_SHIFT 18 816bf215546Sopenharmony_ci#define R500_RS_IP_COL_PTR_SHIFT 24 817bf215546Sopenharmony_ci#define R500_RS_IP_COL_FMT_SHIFT 27 818bf215546Sopenharmony_ci# define R500_RS_SEL_S(x) ((x) << 0) 819bf215546Sopenharmony_ci# define R500_RS_SEL_T(x) ((x) << 6) 820bf215546Sopenharmony_ci# define R500_RS_SEL_R(x) ((x) << 12) 821bf215546Sopenharmony_ci# define R500_RS_SEL_Q(x) ((x) << 18) 822bf215546Sopenharmony_ci# define R500_RS_COL_PTR(x) ((x) << 24) 823bf215546Sopenharmony_ci# define R500_RS_COL_FMT(x) ((x) << 27) 824bf215546Sopenharmony_ci/* gap */ 825bf215546Sopenharmony_ci#define R500_RS_IP_OFFSET_DIS (0U << 31) 826bf215546Sopenharmony_ci#define R500_RS_IP_OFFSET_EN (1U << 31) 827bf215546Sopenharmony_ci 828bf215546Sopenharmony_ci/* gap */ 829bf215546Sopenharmony_ci 830bf215546Sopenharmony_ci/* Zero to flush caches. */ 831bf215546Sopenharmony_ci#define R300_TX_INVALTAGS 0x4100 832bf215546Sopenharmony_ci#define R300_TX_FLUSH 0x0 833bf215546Sopenharmony_ci 834bf215546Sopenharmony_ci/* The upper enable bits are guessed, based on fglrx reported limits. */ 835bf215546Sopenharmony_ci#define R300_TX_ENABLE 0x4104 836bf215546Sopenharmony_ci# define R300_TX_ENABLE_0 (1 << 0) 837bf215546Sopenharmony_ci# define R300_TX_ENABLE_1 (1 << 1) 838bf215546Sopenharmony_ci# define R300_TX_ENABLE_2 (1 << 2) 839bf215546Sopenharmony_ci# define R300_TX_ENABLE_3 (1 << 3) 840bf215546Sopenharmony_ci# define R300_TX_ENABLE_4 (1 << 4) 841bf215546Sopenharmony_ci# define R300_TX_ENABLE_5 (1 << 5) 842bf215546Sopenharmony_ci# define R300_TX_ENABLE_6 (1 << 6) 843bf215546Sopenharmony_ci# define R300_TX_ENABLE_7 (1 << 7) 844bf215546Sopenharmony_ci# define R300_TX_ENABLE_8 (1 << 8) 845bf215546Sopenharmony_ci# define R300_TX_ENABLE_9 (1 << 9) 846bf215546Sopenharmony_ci# define R300_TX_ENABLE_10 (1 << 10) 847bf215546Sopenharmony_ci# define R300_TX_ENABLE_11 (1 << 11) 848bf215546Sopenharmony_ci# define R300_TX_ENABLE_12 (1 << 12) 849bf215546Sopenharmony_ci# define R300_TX_ENABLE_13 (1 << 13) 850bf215546Sopenharmony_ci# define R300_TX_ENABLE_14 (1 << 14) 851bf215546Sopenharmony_ci# define R300_TX_ENABLE_15 (1 << 15) 852bf215546Sopenharmony_ci 853bf215546Sopenharmony_ci#define R500_TX_FILTER_4 0x4110 854bf215546Sopenharmony_ci# define R500_TX_WEIGHT_1_SHIFT (0) 855bf215546Sopenharmony_ci# define R500_TX_WEIGHT_0_SHIFT (11) 856bf215546Sopenharmony_ci# define R500_TX_WEIGHT_PAIR (1<<22) 857bf215546Sopenharmony_ci# define R500_TX_PHASE_SHIFT (23) 858bf215546Sopenharmony_ci# define R500_TX_DIRECTION_HORIZONTAL (0<<27) 859bf215546Sopenharmony_ci# define R500_TX_DIRECTION_VERTICAL (1<<27) 860bf215546Sopenharmony_ci 861bf215546Sopenharmony_ci#define R500_SU_TEX_WRAP_PS3 0x4114 862bf215546Sopenharmony_ci 863bf215546Sopenharmony_ci/* S Texture Coordinate of Vertex 0 for Point texture stuffing (LLC) */ 864bf215546Sopenharmony_ci#define R300_GA_POINT_S0 0x4200 865bf215546Sopenharmony_ci 866bf215546Sopenharmony_ci/* T Texture Coordinate of Vertex 0 for Point texture stuffing (LLC) */ 867bf215546Sopenharmony_ci#define R300_GA_POINT_T0 0x4204 868bf215546Sopenharmony_ci 869bf215546Sopenharmony_ci/* S Texture Coordinate of Vertex 2 for Point texture stuffing (URC) */ 870bf215546Sopenharmony_ci#define R300_GA_POINT_S1 0x4208 871bf215546Sopenharmony_ci 872bf215546Sopenharmony_ci/* T Texture Coordinate of Vertex 2 for Point texture stuffing (URC) */ 873bf215546Sopenharmony_ci#define R300_GA_POINT_T1 0x420c 874bf215546Sopenharmony_ci 875bf215546Sopenharmony_ci/* Specifies amount to shift integer position of vertex (screen space) before 876bf215546Sopenharmony_ci * converting to float for triangle stipple. 877bf215546Sopenharmony_ci */ 878bf215546Sopenharmony_ci#define R300_GA_TRIANGLE_STIPPLE 0x4214 879bf215546Sopenharmony_ci# define R300_GA_TRIANGLE_STIPPLE_X_SHIFT_SHIFT 0 880bf215546Sopenharmony_ci# define R300_GA_TRIANGLE_STIPPLE_X_SHIFT_MASK 0x0000000f 881bf215546Sopenharmony_ci# define R300_GA_TRIANGLE_STIPPLE_Y_SHIFT_SHIFT 16 882bf215546Sopenharmony_ci# define R300_GA_TRIANGLE_STIPPLE_Y_SHIFT_MASK 0x000f0000 883bf215546Sopenharmony_ci 884bf215546Sopenharmony_ci/* The pointsize is given in multiples of 6. The pointsize can be enormous: 885bf215546Sopenharmony_ci * Clear() renders a single point that fills the entire framebuffer. 886bf215546Sopenharmony_ci * 1/2 Height of point; fixed (16.0), subpixel format (1/12 or 1/16, even if in 887bf215546Sopenharmony_ci * 8b precision). 888bf215546Sopenharmony_ci */ 889bf215546Sopenharmony_ci#define R300_GA_POINT_SIZE 0x421C 890bf215546Sopenharmony_ci# define R300_POINTSIZE_Y_SHIFT 0 891bf215546Sopenharmony_ci# define R300_POINTSIZE_Y_MASK 0x0000ffff 892bf215546Sopenharmony_ci# define R300_POINTSIZE_X_SHIFT 16 893bf215546Sopenharmony_ci# define R300_POINTSIZE_X_MASK 0xffff0000 894bf215546Sopenharmony_ci# define R300_POINTSIZE_MAX (R300_POINTSIZE_Y_MASK / 6) 895bf215546Sopenharmony_ci 896bf215546Sopenharmony_ci/* Red fill color */ 897bf215546Sopenharmony_ci#define R500_GA_FILL_R 0x4220 898bf215546Sopenharmony_ci 899bf215546Sopenharmony_ci/* Green fill color */ 900bf215546Sopenharmony_ci#define R500_GA_FILL_G 0x4224 901bf215546Sopenharmony_ci 902bf215546Sopenharmony_ci/* Blue fill color */ 903bf215546Sopenharmony_ci#define R500_GA_FILL_B 0x4228 904bf215546Sopenharmony_ci 905bf215546Sopenharmony_ci/* Alpha fill color */ 906bf215546Sopenharmony_ci#define R500_GA_FILL_A 0x422c 907bf215546Sopenharmony_ci 908bf215546Sopenharmony_ci 909bf215546Sopenharmony_ci/* Specifies maximum and minimum point & sprite sizes for per vertex size 910bf215546Sopenharmony_ci * specification. The lower part (15:0) is MIN and (31:16) is max. 911bf215546Sopenharmony_ci */ 912bf215546Sopenharmony_ci#define R300_GA_POINT_MINMAX 0x4230 913bf215546Sopenharmony_ci# define R300_GA_POINT_MINMAX_MIN_SHIFT 0 914bf215546Sopenharmony_ci# define R300_GA_POINT_MINMAX_MIN_MASK (0xFFFF << 0) 915bf215546Sopenharmony_ci# define R300_GA_POINT_MINMAX_MAX_SHIFT 16 916bf215546Sopenharmony_ci# define R300_GA_POINT_MINMAX_MAX_MASK (0xFFFF << 16) 917bf215546Sopenharmony_ci 918bf215546Sopenharmony_ci/* 1/2 width of line, in subpixels (1/12 or 1/16 only, even in 8b 919bf215546Sopenharmony_ci * subprecision); (16.0) fixed format. 920bf215546Sopenharmony_ci * 921bf215546Sopenharmony_ci * The line width is given in multiples of 6. 922bf215546Sopenharmony_ci * In default mode lines are classified as vertical lines. 923bf215546Sopenharmony_ci */ 924bf215546Sopenharmony_ci#define R300_GA_LINE_CNTL 0x4234 925bf215546Sopenharmony_ci# define R300_GA_LINE_CNTL_WIDTH_SHIFT 0 926bf215546Sopenharmony_ci# define R300_GA_LINE_CNTL_WIDTH_MASK 0x0000ffff 927bf215546Sopenharmony_ci# define R300_GA_LINE_CNTL_END_TYPE_HOR (0 << 16) 928bf215546Sopenharmony_ci# define R300_GA_LINE_CNTL_END_TYPE_VER (1 << 16) 929bf215546Sopenharmony_ci# define R300_GA_LINE_CNTL_END_TYPE_SQR (2 << 16) /* horizontal or vertical depending upon slope */ 930bf215546Sopenharmony_ci# define R300_GA_LINE_CNTL_END_TYPE_COMP (3 << 16) /* Computed (perpendicular to slope) */ 931bf215546Sopenharmony_ci# define R500_GA_LINE_CNTL_SORT_NO (0 << 18) 932bf215546Sopenharmony_ci# define R500_GA_LINE_CNTL_SORT_MINX_MINY (1 << 18) 933bf215546Sopenharmony_ci 934bf215546Sopenharmony_ci/* Line Stipple configuration information. */ 935bf215546Sopenharmony_ci#define R300_GA_LINE_STIPPLE_CONFIG 0x4238 936bf215546Sopenharmony_ci# define R300_GA_LINE_STIPPLE_CONFIG_LINE_RESET_NO (0 << 0) 937bf215546Sopenharmony_ci# define R300_GA_LINE_STIPPLE_CONFIG_LINE_RESET_LINE (1 << 0) 938bf215546Sopenharmony_ci# define R300_GA_LINE_STIPPLE_CONFIG_LINE_RESET_PACKET (2 << 0) 939bf215546Sopenharmony_ci# define R300_GA_LINE_STIPPLE_CONFIG_STIPPLE_SCALE_SHIFT 2 940bf215546Sopenharmony_ci# define R300_GA_LINE_STIPPLE_CONFIG_STIPPLE_SCALE_MASK 0xfffffffc 941bf215546Sopenharmony_ci 942bf215546Sopenharmony_ci/* Used to load US instructions and constants */ 943bf215546Sopenharmony_ci#define R500_GA_US_VECTOR_INDEX 0x4250 944bf215546Sopenharmony_ci# define R500_GA_US_VECTOR_INDEX_SHIFT 0 945bf215546Sopenharmony_ci# define R500_GA_US_VECTOR_INDEX_MASK 0x000000ff 946bf215546Sopenharmony_ci# define R500_GA_US_VECTOR_INDEX_TYPE_INSTR (0 << 16) 947bf215546Sopenharmony_ci# define R500_GA_US_VECTOR_INDEX_TYPE_CONST (1 << 16) 948bf215546Sopenharmony_ci# define R500_GA_US_VECTOR_INDEX_CLAMP_NO (0 << 17) 949bf215546Sopenharmony_ci# define R500_GA_US_VECTOR_INDEX_CLAMP_CONST (1 << 17) 950bf215546Sopenharmony_ci 951bf215546Sopenharmony_ci/* Data register for loading US instructions and constants */ 952bf215546Sopenharmony_ci#define R500_GA_US_VECTOR_DATA 0x4254 953bf215546Sopenharmony_ci 954bf215546Sopenharmony_ci/* Specifies color properties and mappings of textures. */ 955bf215546Sopenharmony_ci#define R500_GA_COLOR_CONTROL_PS3 0x4258 956bf215546Sopenharmony_ci# define R500_TEX0_SHADING_PS3_SOLID (0 << 0) 957bf215546Sopenharmony_ci# define R500_TEX0_SHADING_PS3_FLAT (1 << 0) 958bf215546Sopenharmony_ci# define R500_TEX0_SHADING_PS3_GOURAUD (2 << 0) 959bf215546Sopenharmony_ci# define R500_TEX1_SHADING_PS3_SOLID (0 << 2) 960bf215546Sopenharmony_ci# define R500_TEX1_SHADING_PS3_FLAT (1 << 2) 961bf215546Sopenharmony_ci# define R500_TEX1_SHADING_PS3_GOURAUD (2 << 2) 962bf215546Sopenharmony_ci# define R500_TEX2_SHADING_PS3_SOLID (0 << 4) 963bf215546Sopenharmony_ci# define R500_TEX2_SHADING_PS3_FLAT (1 << 4) 964bf215546Sopenharmony_ci# define R500_TEX2_SHADING_PS3_GOURAUD (2 << 4) 965bf215546Sopenharmony_ci# define R500_TEX3_SHADING_PS3_SOLID (0 << 6) 966bf215546Sopenharmony_ci# define R500_TEX3_SHADING_PS3_FLAT (1 << 6) 967bf215546Sopenharmony_ci# define R500_TEX3_SHADING_PS3_GOURAUD (2 << 6) 968bf215546Sopenharmony_ci# define R500_TEX4_SHADING_PS3_SOLID (0 << 8) 969bf215546Sopenharmony_ci# define R500_TEX4_SHADING_PS3_FLAT (1 << 8) 970bf215546Sopenharmony_ci# define R500_TEX4_SHADING_PS3_GOURAUD (2 << 8) 971bf215546Sopenharmony_ci# define R500_TEX5_SHADING_PS3_SOLID (0 << 10) 972bf215546Sopenharmony_ci# define R500_TEX5_SHADING_PS3_FLAT (1 << 10) 973bf215546Sopenharmony_ci# define R500_TEX5_SHADING_PS3_GOURAUD (2 << 10) 974bf215546Sopenharmony_ci# define R500_TEX6_SHADING_PS3_SOLID (0 << 12) 975bf215546Sopenharmony_ci# define R500_TEX6_SHADING_PS3_FLAT (1 << 12) 976bf215546Sopenharmony_ci# define R500_TEX6_SHADING_PS3_GOURAUD (2 << 12) 977bf215546Sopenharmony_ci# define R500_TEX7_SHADING_PS3_SOLID (0 << 14) 978bf215546Sopenharmony_ci# define R500_TEX7_SHADING_PS3_FLAT (1 << 14) 979bf215546Sopenharmony_ci# define R500_TEX7_SHADING_PS3_GOURAUD (2 << 14) 980bf215546Sopenharmony_ci# define R500_TEX8_SHADING_PS3_SOLID (0 << 16) 981bf215546Sopenharmony_ci# define R500_TEX8_SHADING_PS3_FLAT (1 << 16) 982bf215546Sopenharmony_ci# define R500_TEX8_SHADING_PS3_GOURAUD (2 << 16) 983bf215546Sopenharmony_ci# define R500_TEX9_SHADING_PS3_SOLID (0 << 18) 984bf215546Sopenharmony_ci# define R500_TEX9_SHADING_PS3_FLAT (1 << 18) 985bf215546Sopenharmony_ci# define R500_TEX9_SHADING_PS3_GOURAUD (2 << 18) 986bf215546Sopenharmony_ci# define R500_TEX10_SHADING_PS3_SOLID (0 << 20) 987bf215546Sopenharmony_ci# define R500_TEX10_SHADING_PS3_FLAT (1 << 20) 988bf215546Sopenharmony_ci# define R500_TEX10_SHADING_PS3_GOURAUD (2 << 20) 989bf215546Sopenharmony_ci# define R500_COLOR0_TEX_OVERRIDE_NO (0 << 22) 990bf215546Sopenharmony_ci# define R500_COLOR0_TEX_OVERRIDE_TEX_0 (1 << 22) 991bf215546Sopenharmony_ci# define R500_COLOR0_TEX_OVERRIDE_TEX_1 (2 << 22) 992bf215546Sopenharmony_ci# define R500_COLOR0_TEX_OVERRIDE_TEX_2 (3 << 22) 993bf215546Sopenharmony_ci# define R500_COLOR0_TEX_OVERRIDE_TEX_3 (4 << 22) 994bf215546Sopenharmony_ci# define R500_COLOR0_TEX_OVERRIDE_TEX_4 (5 << 22) 995bf215546Sopenharmony_ci# define R500_COLOR0_TEX_OVERRIDE_TEX_5 (6 << 22) 996bf215546Sopenharmony_ci# define R500_COLOR0_TEX_OVERRIDE_TEX_6 (7 << 22) 997bf215546Sopenharmony_ci# define R500_COLOR0_TEX_OVERRIDE_TEX_7 (8 << 22) 998bf215546Sopenharmony_ci# define R500_COLOR0_TEX_OVERRIDE_TEX_8_C2 (9 << 22) 999bf215546Sopenharmony_ci# define R500_COLOR0_TEX_OVERRIDE_TEX_9_C3 (10 << 22) 1000bf215546Sopenharmony_ci# define R500_COLOR1_TEX_OVERRIDE_NO (0 << 26) 1001bf215546Sopenharmony_ci# define R500_COLOR1_TEX_OVERRIDE_TEX_0 (1 << 26) 1002bf215546Sopenharmony_ci# define R500_COLOR1_TEX_OVERRIDE_TEX_1 (2 << 26) 1003bf215546Sopenharmony_ci# define R500_COLOR1_TEX_OVERRIDE_TEX_2 (3 << 26) 1004bf215546Sopenharmony_ci# define R500_COLOR1_TEX_OVERRIDE_TEX_3 (4 << 26) 1005bf215546Sopenharmony_ci# define R500_COLOR1_TEX_OVERRIDE_TEX_4 (5 << 26) 1006bf215546Sopenharmony_ci# define R500_COLOR1_TEX_OVERRIDE_TEX_5 (6 << 26) 1007bf215546Sopenharmony_ci# define R500_COLOR1_TEX_OVERRIDE_TEX_6 (7 << 26) 1008bf215546Sopenharmony_ci# define R500_COLOR1_TEX_OVERRIDE_TEX_7 (8 << 26) 1009bf215546Sopenharmony_ci# define R500_COLOR1_TEX_OVERRIDE_TEX_8_C2 (9 << 26) 1010bf215546Sopenharmony_ci# define R500_COLOR1_TEX_OVERRIDE_TEX_9_C3 (10 << 26) 1011bf215546Sopenharmony_ci 1012bf215546Sopenharmony_ci/* Returns idle status of various G3D block, captured when GA_IDLE written or 1013bf215546Sopenharmony_ci * when hard or soft reset asserted. 1014bf215546Sopenharmony_ci */ 1015bf215546Sopenharmony_ci#define R500_GA_IDLE 0x425c 1016bf215546Sopenharmony_ci# define R500_GA_IDLE_PIPE3_Z_IDLE (0 << 0) 1017bf215546Sopenharmony_ci# define R500_GA_IDLE_PIPE2_Z_IDLE (0 << 1) 1018bf215546Sopenharmony_ci# define R500_GA_IDLE_PIPE3_CD_IDLE (0 << 2) 1019bf215546Sopenharmony_ci# define R500_GA_IDLE_PIPE2_CD_IDLE (0 << 3) 1020bf215546Sopenharmony_ci# define R500_GA_IDLE_PIPE3_FG_IDLE (0 << 4) 1021bf215546Sopenharmony_ci# define R500_GA_IDLE_PIPE2_FG_IDLE (0 << 5) 1022bf215546Sopenharmony_ci# define R500_GA_IDLE_PIPE3_US_IDLE (0 << 6) 1023bf215546Sopenharmony_ci# define R500_GA_IDLE_PIPE2_US_IDLE (0 << 7) 1024bf215546Sopenharmony_ci# define R500_GA_IDLE_PIPE3_SC_IDLE (0 << 8) 1025bf215546Sopenharmony_ci# define R500_GA_IDLE_PIPE2_SC_IDLE (0 << 9) 1026bf215546Sopenharmony_ci# define R500_GA_IDLE_PIPE3_RS_IDLE (0 << 10) 1027bf215546Sopenharmony_ci# define R500_GA_IDLE_PIPE2_RS_IDLE (0 << 11) 1028bf215546Sopenharmony_ci# define R500_GA_IDLE_PIPE1_Z_IDLE (0 << 12) 1029bf215546Sopenharmony_ci# define R500_GA_IDLE_PIPE0_Z_IDLE (0 << 13) 1030bf215546Sopenharmony_ci# define R500_GA_IDLE_PIPE1_CD_IDLE (0 << 14) 1031bf215546Sopenharmony_ci# define R500_GA_IDLE_PIPE0_CD_IDLE (0 << 15) 1032bf215546Sopenharmony_ci# define R500_GA_IDLE_PIPE1_FG_IDLE (0 << 16) 1033bf215546Sopenharmony_ci# define R500_GA_IDLE_PIPE0_FG_IDLE (0 << 17) 1034bf215546Sopenharmony_ci# define R500_GA_IDLE_PIPE1_US_IDLE (0 << 18) 1035bf215546Sopenharmony_ci# define R500_GA_IDLE_PIPE0_US_IDLE (0 << 19) 1036bf215546Sopenharmony_ci# define R500_GA_IDLE_PIPE1_SC_IDLE (0 << 20) 1037bf215546Sopenharmony_ci# define R500_GA_IDLE_PIPE0_SC_IDLE (0 << 21) 1038bf215546Sopenharmony_ci# define R500_GA_IDLE_PIPE1_RS_IDLE (0 << 22) 1039bf215546Sopenharmony_ci# define R500_GA_IDLE_PIPE0_RS_IDLE (0 << 23) 1040bf215546Sopenharmony_ci# define R500_GA_IDLE_SU_IDLE (0 << 24) 1041bf215546Sopenharmony_ci# define R500_GA_IDLE_GA_IDLE (0 << 25) 1042bf215546Sopenharmony_ci# define R500_GA_IDLE_GA_UNIT2_IDLE (0 << 26) 1043bf215546Sopenharmony_ci 1044bf215546Sopenharmony_ci/* Current value of stipple accumulator. */ 1045bf215546Sopenharmony_ci#define R300_GA_LINE_STIPPLE_VALUE 0x4260 1046bf215546Sopenharmony_ci 1047bf215546Sopenharmony_ci/* S Texture Coordinate Value for Vertex 0 of Line (stuff textures -- i.e. AA) */ 1048bf215546Sopenharmony_ci#define R300_GA_LINE_S0 0x4264 1049bf215546Sopenharmony_ci/* S Texture Coordinate Value for Vertex 1 of Lines (V2 of parallelogram -- stuff textures -- i.e. AA) */ 1050bf215546Sopenharmony_ci#define R300_GA_LINE_S1 0x4268 1051bf215546Sopenharmony_ci 1052bf215546Sopenharmony_ci/* GA Input fifo high water marks */ 1053bf215546Sopenharmony_ci#define R500_GA_FIFO_CNTL 0x4270 1054bf215546Sopenharmony_ci# define R500_GA_FIFO_CNTL_VERTEX_FIFO_MASK 0x00000007 1055bf215546Sopenharmony_ci# define R500_GA_FIFO_CNTL_VERTEX_FIFO_SHIFT 0 1056bf215546Sopenharmony_ci# define R500_GA_FIFO_CNTL_VERTEX_INDEX_MASK 0x00000038 1057bf215546Sopenharmony_ci# define R500_GA_FIFO_CNTL_VERTEX_INDEX_SHIFT 3 1058bf215546Sopenharmony_ci# define R500_GA_FIFO_CNTL_VERTEX_REG_MASK 0x00003fc0 1059bf215546Sopenharmony_ci# define R500_GA_FIFO_CNTL_VERTEX_REG_SHIFT 6 1060bf215546Sopenharmony_ci 1061bf215546Sopenharmony_ci/* GA enhance/tweaks */ 1062bf215546Sopenharmony_ci#define R300_GA_ENHANCE 0x4274 1063bf215546Sopenharmony_ci# define R300_GA_ENHANCE_DEADLOCK_CNTL_NO_EFFECT (0 << 0) 1064bf215546Sopenharmony_ci# define R300_GA_ENHANCE_DEADLOCK_CNTL_PREVENT_TCL (1 << 0) /* Prevents TCL interface from deadlocking on GA side. */ 1065bf215546Sopenharmony_ci# define R300_GA_ENHANCE_FASTSYNC_CNTL_NO_EFFECT (0 << 1) 1066bf215546Sopenharmony_ci# define R300_GA_ENHANCE_FASTSYNC_CNTL_ENABLE (1 << 1) /* Enables high-performance register/primitive switching. */ 1067bf215546Sopenharmony_ci# define R500_GA_ENHANCE_REG_READWRITE_NO_EFFECT (0 << 2) /* R520+ only */ 1068bf215546Sopenharmony_ci# define R500_GA_ENHANCE_REG_READWRITE_ENABLE (1 << 2) /* R520+ only, Enables GA support of simultaneous register reads and writes. */ 1069bf215546Sopenharmony_ci# define R500_GA_ENHANCE_REG_NOSTALL_NO_EFFECT (0 << 3) 1070bf215546Sopenharmony_ci# define R500_GA_ENHANCE_REG_NOSTALL_ENABLE (1 << 3) /* Enables GA support of no-stall reads for register read back. */ 1071bf215546Sopenharmony_ci 1072bf215546Sopenharmony_ci#define R300_GA_COLOR_CONTROL 0x4278 1073bf215546Sopenharmony_ci# define R300_GA_COLOR_CONTROL_RGB0_SHADING_SOLID (0 << 0) 1074bf215546Sopenharmony_ci# define R300_GA_COLOR_CONTROL_RGB0_SHADING_FLAT (1 << 0) 1075bf215546Sopenharmony_ci# define R300_GA_COLOR_CONTROL_RGB0_SHADING_GOURAUD (2 << 0) 1076bf215546Sopenharmony_ci# define R300_GA_COLOR_CONTROL_ALPHA0_SHADING_SOLID (0 << 2) 1077bf215546Sopenharmony_ci# define R300_GA_COLOR_CONTROL_ALPHA0_SHADING_FLAT (1 << 2) 1078bf215546Sopenharmony_ci# define R300_GA_COLOR_CONTROL_ALPHA0_SHADING_GOURAUD (2 << 2) 1079bf215546Sopenharmony_ci# define R300_GA_COLOR_CONTROL_RGB1_SHADING_SOLID (0 << 4) 1080bf215546Sopenharmony_ci# define R300_GA_COLOR_CONTROL_RGB1_SHADING_FLAT (1 << 4) 1081bf215546Sopenharmony_ci# define R300_GA_COLOR_CONTROL_RGB1_SHADING_GOURAUD (2 << 4) 1082bf215546Sopenharmony_ci# define R300_GA_COLOR_CONTROL_ALPHA1_SHADING_SOLID (0 << 6) 1083bf215546Sopenharmony_ci# define R300_GA_COLOR_CONTROL_ALPHA1_SHADING_FLAT (1 << 6) 1084bf215546Sopenharmony_ci# define R300_GA_COLOR_CONTROL_ALPHA1_SHADING_GOURAUD (2 << 6) 1085bf215546Sopenharmony_ci# define R300_GA_COLOR_CONTROL_RGB2_SHADING_SOLID (0 << 8) 1086bf215546Sopenharmony_ci# define R300_GA_COLOR_CONTROL_RGB2_SHADING_FLAT (1 << 8) 1087bf215546Sopenharmony_ci# define R300_GA_COLOR_CONTROL_RGB2_SHADING_GOURAUD (2 << 8) 1088bf215546Sopenharmony_ci# define R300_GA_COLOR_CONTROL_ALPHA2_SHADING_SOLID (0 << 10) 1089bf215546Sopenharmony_ci# define R300_GA_COLOR_CONTROL_ALPHA2_SHADING_FLAT (1 << 10) 1090bf215546Sopenharmony_ci# define R300_GA_COLOR_CONTROL_ALPHA2_SHADING_GOURAUD (2 << 10) 1091bf215546Sopenharmony_ci# define R300_GA_COLOR_CONTROL_RGB3_SHADING_SOLID (0 << 12) 1092bf215546Sopenharmony_ci# define R300_GA_COLOR_CONTROL_RGB3_SHADING_FLAT (1 << 12) 1093bf215546Sopenharmony_ci# define R300_GA_COLOR_CONTROL_RGB3_SHADING_GOURAUD (2 << 12) 1094bf215546Sopenharmony_ci# define R300_GA_COLOR_CONTROL_ALPHA3_SHADING_SOLID (0 << 14) 1095bf215546Sopenharmony_ci# define R300_GA_COLOR_CONTROL_ALPHA3_SHADING_FLAT (1 << 14) 1096bf215546Sopenharmony_ci# define R300_GA_COLOR_CONTROL_ALPHA3_SHADING_GOURAUD (2 << 14) 1097bf215546Sopenharmony_ci# define R300_GA_COLOR_CONTROL_PROVOKING_VERTEX_FIRST (0 << 16) 1098bf215546Sopenharmony_ci# define R300_GA_COLOR_CONTROL_PROVOKING_VERTEX_SECOND (1 << 16) 1099bf215546Sopenharmony_ci# define R300_GA_COLOR_CONTROL_PROVOKING_VERTEX_THIRD (2 << 16) 1100bf215546Sopenharmony_ci# define R300_GA_COLOR_CONTROL_PROVOKING_VERTEX_LAST (3 << 16) 1101bf215546Sopenharmony_ci 1102bf215546Sopenharmony_ci# define R300_SHADE_MODEL_FLAT ( \ 1103bf215546Sopenharmony_ci R300_GA_COLOR_CONTROL_RGB0_SHADING_FLAT | \ 1104bf215546Sopenharmony_ci R300_GA_COLOR_CONTROL_ALPHA0_SHADING_FLAT | \ 1105bf215546Sopenharmony_ci R300_GA_COLOR_CONTROL_RGB1_SHADING_FLAT | \ 1106bf215546Sopenharmony_ci R300_GA_COLOR_CONTROL_ALPHA1_SHADING_FLAT | \ 1107bf215546Sopenharmony_ci R300_GA_COLOR_CONTROL_RGB2_SHADING_FLAT | \ 1108bf215546Sopenharmony_ci R300_GA_COLOR_CONTROL_ALPHA2_SHADING_FLAT | \ 1109bf215546Sopenharmony_ci R300_GA_COLOR_CONTROL_RGB3_SHADING_FLAT | \ 1110bf215546Sopenharmony_ci R300_GA_COLOR_CONTROL_ALPHA3_SHADING_FLAT ) 1111bf215546Sopenharmony_ci 1112bf215546Sopenharmony_ci# define R300_SHADE_MODEL_SMOOTH ( \ 1113bf215546Sopenharmony_ci R300_GA_COLOR_CONTROL_RGB0_SHADING_GOURAUD | \ 1114bf215546Sopenharmony_ci R300_GA_COLOR_CONTROL_ALPHA0_SHADING_GOURAUD | \ 1115bf215546Sopenharmony_ci R300_GA_COLOR_CONTROL_RGB1_SHADING_GOURAUD | \ 1116bf215546Sopenharmony_ci R300_GA_COLOR_CONTROL_ALPHA1_SHADING_GOURAUD | \ 1117bf215546Sopenharmony_ci R300_GA_COLOR_CONTROL_RGB2_SHADING_GOURAUD | \ 1118bf215546Sopenharmony_ci R300_GA_COLOR_CONTROL_ALPHA2_SHADING_GOURAUD | \ 1119bf215546Sopenharmony_ci R300_GA_COLOR_CONTROL_RGB3_SHADING_GOURAUD | \ 1120bf215546Sopenharmony_ci R300_GA_COLOR_CONTROL_ALPHA3_SHADING_GOURAUD ) 1121bf215546Sopenharmony_ci 1122bf215546Sopenharmony_ci/* Specifies red & green components of fill color -- S312 format -- Backwards comp. */ 1123bf215546Sopenharmony_ci#define R300_GA_SOLID_RG 0x427c 1124bf215546Sopenharmony_ci# define GA_SOLID_RG_COLOR_GREEN_SHIFT 0 1125bf215546Sopenharmony_ci# define GA_SOLID_RG_COLOR_GREEN_MASK 0x0000ffff 1126bf215546Sopenharmony_ci# define GA_SOLID_RG_COLOR_RED_SHIFT 16 1127bf215546Sopenharmony_ci# define GA_SOLID_RG_COLOR_RED_MASK 0xffff0000 1128bf215546Sopenharmony_ci/* Specifies blue & alpha components of fill color -- S312 format -- Backwards comp. */ 1129bf215546Sopenharmony_ci#define R300_GA_SOLID_BA 0x4280 1130bf215546Sopenharmony_ci# define GA_SOLID_BA_COLOR_ALPHA_SHIFT 0 1131bf215546Sopenharmony_ci# define GA_SOLID_BA_COLOR_ALPHA_MASK 0x0000ffff 1132bf215546Sopenharmony_ci# define GA_SOLID_BA_COLOR_BLUE_SHIFT 16 1133bf215546Sopenharmony_ci# define GA_SOLID_BA_COLOR_BLUE_MASK 0xffff0000 1134bf215546Sopenharmony_ci 1135bf215546Sopenharmony_ci/* Polygon Mode 1136bf215546Sopenharmony_ci * Dangerous 1137bf215546Sopenharmony_ci */ 1138bf215546Sopenharmony_ci#define R300_GA_POLY_MODE 0x4288 1139bf215546Sopenharmony_ci# define R300_GA_POLY_MODE_DISABLE (0 << 0) 1140bf215546Sopenharmony_ci# define R300_GA_POLY_MODE_DUAL (1 << 0) /* send 2 sets of 3 polys with specified poly type */ 1141bf215546Sopenharmony_ci/* reserved */ 1142bf215546Sopenharmony_ci# define R300_GA_POLY_MODE_FRONT_PTYPE_POINT (0 << 4) 1143bf215546Sopenharmony_ci# define R300_GA_POLY_MODE_FRONT_PTYPE_LINE (1 << 4) 1144bf215546Sopenharmony_ci# define R300_GA_POLY_MODE_FRONT_PTYPE_TRI (2 << 4) 1145bf215546Sopenharmony_ci/* reserved */ 1146bf215546Sopenharmony_ci# define R300_GA_POLY_MODE_BACK_PTYPE_POINT (0 << 7) 1147bf215546Sopenharmony_ci# define R300_GA_POLY_MODE_BACK_PTYPE_LINE (1 << 7) 1148bf215546Sopenharmony_ci# define R300_GA_POLY_MODE_BACK_PTYPE_TRI (2 << 7) 1149bf215546Sopenharmony_ci/* reserved */ 1150bf215546Sopenharmony_ci 1151bf215546Sopenharmony_ci/* Specifies the rounding mode for geometry & color SPFP to FP conversions. */ 1152bf215546Sopenharmony_ci#define R300_GA_ROUND_MODE 0x428c 1153bf215546Sopenharmony_ci# define R300_GA_ROUND_MODE_GEOMETRY_ROUND_TRUNC (0 << 0) 1154bf215546Sopenharmony_ci# define R300_GA_ROUND_MODE_GEOMETRY_ROUND_NEAREST (1 << 0) 1155bf215546Sopenharmony_ci# define R300_GA_ROUND_MODE_COLOR_ROUND_TRUNC (0 << 2) 1156bf215546Sopenharmony_ci# define R300_GA_ROUND_MODE_COLOR_ROUND_NEAREST (1 << 2) 1157bf215546Sopenharmony_ci# define R300_GA_ROUND_MODE_RGB_CLAMP_RGB (0 << 4) 1158bf215546Sopenharmony_ci# define R300_GA_ROUND_MODE_RGB_CLAMP_FP20 (1 << 4) 1159bf215546Sopenharmony_ci# define R300_GA_ROUND_MODE_ALPHA_CLAMP_RGB (0 << 5) 1160bf215546Sopenharmony_ci# define R300_GA_ROUND_MODE_ALPHA_CLAMP_FP20 (1 << 5) 1161bf215546Sopenharmony_ci# define R500_GA_ROUND_MODE_GEOMETRY_MASK_SHIFT 6 1162bf215546Sopenharmony_ci# define R500_GA_ROUND_MODE_GEOMETRY_MASK_MASK 0x000003c0 1163bf215546Sopenharmony_ci 1164bf215546Sopenharmony_ci/* Specifies x & y offsets for vertex data after conversion to FP. 1165bf215546Sopenharmony_ci * Offsets are in S15 format (subpixels -- 1/12 or 1/16, even in 8b 1166bf215546Sopenharmony_ci * subprecision). 1167bf215546Sopenharmony_ci */ 1168bf215546Sopenharmony_ci#define R300_GA_OFFSET 0x4290 1169bf215546Sopenharmony_ci# define R300_GA_OFFSET_X_OFFSET_SHIFT 0 1170bf215546Sopenharmony_ci# define R300_GA_OFFSET_X_OFFSET_MASK 0x0000ffff 1171bf215546Sopenharmony_ci# define R300_GA_OFFSET_Y_OFFSET_SHIFT 16 1172bf215546Sopenharmony_ci# define R300_GA_OFFSET_Y_OFFSET_MASK 0xffff0000 1173bf215546Sopenharmony_ci 1174bf215546Sopenharmony_ci/* Specifies the scale to apply to fog. */ 1175bf215546Sopenharmony_ci#define R300_GA_FOG_SCALE 0x4294 1176bf215546Sopenharmony_ci/* Specifies the offset to apply to fog. */ 1177bf215546Sopenharmony_ci#define R300_GA_FOG_OFFSET 0x4298 1178bf215546Sopenharmony_ci/* Specifies number of cycles to assert reset, and also causes RB3D soft reset to assert. */ 1179bf215546Sopenharmony_ci#define R300_GA_SOFT_RESET 0x429c 1180bf215546Sopenharmony_ci 1181bf215546Sopenharmony_ci/* Not sure why there are duplicate of factor and constant values. 1182bf215546Sopenharmony_ci * My best guess so far is that there are separate zbiases for test and write. 1183bf215546Sopenharmony_ci * Ordering might be wrong. 1184bf215546Sopenharmony_ci * Some of the tests indicate that fgl has a fallback implementation of zbias 1185bf215546Sopenharmony_ci * via pixel shaders. 1186bf215546Sopenharmony_ci */ 1187bf215546Sopenharmony_ci#define R300_SU_TEX_WRAP 0x42A0 1188bf215546Sopenharmony_ci#define R300_SU_POLY_OFFSET_FRONT_SCALE 0x42A4 1189bf215546Sopenharmony_ci#define R300_SU_POLY_OFFSET_FRONT_OFFSET 0x42A8 1190bf215546Sopenharmony_ci#define R300_SU_POLY_OFFSET_BACK_SCALE 0x42AC 1191bf215546Sopenharmony_ci#define R300_SU_POLY_OFFSET_BACK_OFFSET 0x42B0 1192bf215546Sopenharmony_ci 1193bf215546Sopenharmony_ci/* This register needs to be set to (1<<1) for RV350 to correctly 1194bf215546Sopenharmony_ci * perform depth test (see --vb-triangles in r300_demo) 1195bf215546Sopenharmony_ci * Don't know about other chips. - Vladimir 1196bf215546Sopenharmony_ci * This is set to 3 when GL_POLYGON_OFFSET_FILL is on. 1197bf215546Sopenharmony_ci * My guess is that there are two bits for each zbias primitive 1198bf215546Sopenharmony_ci * (FILL, LINE, POINT). 1199bf215546Sopenharmony_ci * One to enable depth test and one for depth write. 1200bf215546Sopenharmony_ci * Yet this doesnt explain why depth writes work ... 1201bf215546Sopenharmony_ci */ 1202bf215546Sopenharmony_ci#define R300_SU_POLY_OFFSET_ENABLE 0x42B4 1203bf215546Sopenharmony_ci# define R300_FRONT_ENABLE (1 << 0) 1204bf215546Sopenharmony_ci# define R300_BACK_ENABLE (1 << 1) 1205bf215546Sopenharmony_ci# define R300_PARA_ENABLE (1 << 2) 1206bf215546Sopenharmony_ci 1207bf215546Sopenharmony_ci#define R300_SU_CULL_MODE 0x42B8 1208bf215546Sopenharmony_ci# define R300_CULL_FRONT (1 << 0) 1209bf215546Sopenharmony_ci# define R300_CULL_BACK (1 << 1) 1210bf215546Sopenharmony_ci# define R300_FRONT_FACE_CCW (0 << 2) 1211bf215546Sopenharmony_ci# define R300_FRONT_FACE_CW (1 << 2) 1212bf215546Sopenharmony_ci 1213bf215546Sopenharmony_ci/* SU Depth Scale value */ 1214bf215546Sopenharmony_ci#define R300_SU_DEPTH_SCALE 0x42c0 1215bf215546Sopenharmony_ci/* SU Depth Offset value */ 1216bf215546Sopenharmony_ci#define R300_SU_DEPTH_OFFSET 0x42c4 1217bf215546Sopenharmony_ci 1218bf215546Sopenharmony_ci#define R300_SU_REG_DEST 0x42c8 1219bf215546Sopenharmony_ci# define R300_RASTER_PIPE_SELECT_0 (1 << 0) 1220bf215546Sopenharmony_ci# define R300_RASTER_PIPE_SELECT_1 (1 << 1) 1221bf215546Sopenharmony_ci# define R300_RASTER_PIPE_SELECT_2 (1 << 2) 1222bf215546Sopenharmony_ci# define R300_RASTER_PIPE_SELECT_3 (1 << 3) 1223bf215546Sopenharmony_ci# define R300_RASTER_PIPE_SELECT_ALL 0xf 1224bf215546Sopenharmony_ci 1225bf215546Sopenharmony_ci 1226bf215546Sopenharmony_ci/* BEGIN: Rasterization / Interpolators - many guesses */ 1227bf215546Sopenharmony_ci 1228bf215546Sopenharmony_ci/* 1229bf215546Sopenharmony_ci * TC_CNT is the number of incoming texture coordinate sets (i.e. it depends 1230bf215546Sopenharmony_ci * on the vertex program, *not* the fragment program) 1231bf215546Sopenharmony_ci */ 1232bf215546Sopenharmony_ci#define R300_RS_COUNT 0x4300 1233bf215546Sopenharmony_ci# define R300_IT_COUNT_SHIFT 0 1234bf215546Sopenharmony_ci# define R300_IT_COUNT_MASK 0x0000007f 1235bf215546Sopenharmony_ci# define R300_IC_COUNT_SHIFT 7 1236bf215546Sopenharmony_ci# define R300_IC_COUNT_MASK 0x00000780 1237bf215546Sopenharmony_ci# define R300_W_ADDR_SHIFT 12 1238bf215546Sopenharmony_ci# define R300_W_ADDR_MASK 0x0003f000 1239bf215546Sopenharmony_ci# define R300_HIRES_DIS (0 << 18) 1240bf215546Sopenharmony_ci# define R300_HIRES_EN (1 << 18) 1241bf215546Sopenharmony_ci# define R300_IT_COUNT(x) ((x) << 0) 1242bf215546Sopenharmony_ci# define R300_IC_COUNT(x) ((x) << 7) 1243bf215546Sopenharmony_ci# define R300_W_COUNT(x) ((x) << 12) 1244bf215546Sopenharmony_ci 1245bf215546Sopenharmony_ci#define R300_RS_INST_COUNT 0x4304 1246bf215546Sopenharmony_ci# define R300_RS_INST_COUNT_SHIFT 0 1247bf215546Sopenharmony_ci# define R300_RS_INST_COUNT_MASK 0x0000000f 1248bf215546Sopenharmony_ci# define R300_RS_TX_OFFSET_SHIFT 5 1249bf215546Sopenharmony_ci# define R300_RS_TX_OFFSET_MASK 0x000000e0 1250bf215546Sopenharmony_ci# define R300_RS_TX_OFFSET(x) ((x) << 5) 1251bf215546Sopenharmony_ci 1252bf215546Sopenharmony_ci/* gap */ 1253bf215546Sopenharmony_ci 1254bf215546Sopenharmony_ci/* Only used for texture coordinates. 1255bf215546Sopenharmony_ci * Use the source field to route texture coordinate input from the 1256bf215546Sopenharmony_ci * vertex program to the desired interpolator. Note that the source 1257bf215546Sopenharmony_ci * field is relative to the outputs the vertex program *actually* 1258bf215546Sopenharmony_ci * writes. If a vertex program only writes texcoord[1], this will 1259bf215546Sopenharmony_ci * be source index 0. 1260bf215546Sopenharmony_ci * Set INTERP_USED on all interpolators that produce data used by 1261bf215546Sopenharmony_ci * the fragment program. INTERP_USED looks like a swizzling mask, 1262bf215546Sopenharmony_ci * but I haven't seen it used that way. 1263bf215546Sopenharmony_ci * 1264bf215546Sopenharmony_ci * Note: The _UNKNOWN constants are always set in their respective 1265bf215546Sopenharmony_ci * register. I don't know if this is necessary. 1266bf215546Sopenharmony_ci */ 1267bf215546Sopenharmony_ci#define R300_RS_IP_0 0x4310 1268bf215546Sopenharmony_ci#define R300_RS_IP_1 0x4314 1269bf215546Sopenharmony_ci#define R300_RS_IP_2 0x4318 1270bf215546Sopenharmony_ci#define R300_RS_IP_3 0x431C 1271bf215546Sopenharmony_ci# define R300_RS_TEX_PTR(x) (x << 0) 1272bf215546Sopenharmony_ci# define R300_RS_COL_PTR(x) ((x) << 6) 1273bf215546Sopenharmony_ci# define R300_RS_COL_FMT(x) ((x) << 9) 1274bf215546Sopenharmony_ci# define R300_RS_COL_FMT_RGBA 0 1275bf215546Sopenharmony_ci# define R300_RS_COL_FMT_RGB0 1 1276bf215546Sopenharmony_ci# define R300_RS_COL_FMT_RGB1 2 1277bf215546Sopenharmony_ci# define R300_RS_COL_FMT_000A 4 1278bf215546Sopenharmony_ci# define R300_RS_COL_FMT_0000 5 1279bf215546Sopenharmony_ci# define R300_RS_COL_FMT_0001 6 1280bf215546Sopenharmony_ci# define R300_RS_COL_FMT_111A 8 1281bf215546Sopenharmony_ci# define R300_RS_COL_FMT_1110 9 1282bf215546Sopenharmony_ci# define R300_RS_COL_FMT_1111 10 1283bf215546Sopenharmony_ci# define R300_RS_SEL_S(x) ((x) << 13) 1284bf215546Sopenharmony_ci# define R300_RS_SEL_T(x) ((x) << 16) 1285bf215546Sopenharmony_ci# define R300_RS_SEL_R(x) ((x) << 19) 1286bf215546Sopenharmony_ci# define R300_RS_SEL_Q(x) ((x) << 22) 1287bf215546Sopenharmony_ci# define R300_RS_SEL_C0 0 1288bf215546Sopenharmony_ci# define R300_RS_SEL_C1 1 1289bf215546Sopenharmony_ci# define R300_RS_SEL_C2 2 1290bf215546Sopenharmony_ci# define R300_RS_SEL_C3 3 1291bf215546Sopenharmony_ci# define R300_RS_SEL_K0 4 1292bf215546Sopenharmony_ci# define R300_RS_SEL_K1 5 1293bf215546Sopenharmony_ci 1294bf215546Sopenharmony_ci 1295bf215546Sopenharmony_ci/* */ 1296bf215546Sopenharmony_ci#define R500_RS_INST_0 0x4320 1297bf215546Sopenharmony_ci#define R500_RS_INST_1 0x4324 1298bf215546Sopenharmony_ci#define R500_RS_INST_2 0x4328 1299bf215546Sopenharmony_ci#define R500_RS_INST_3 0x432c 1300bf215546Sopenharmony_ci#define R500_RS_INST_4 0x4330 1301bf215546Sopenharmony_ci#define R500_RS_INST_5 0x4334 1302bf215546Sopenharmony_ci#define R500_RS_INST_6 0x4338 1303bf215546Sopenharmony_ci#define R500_RS_INST_7 0x433c 1304bf215546Sopenharmony_ci#define R500_RS_INST_8 0x4340 1305bf215546Sopenharmony_ci#define R500_RS_INST_9 0x4344 1306bf215546Sopenharmony_ci#define R500_RS_INST_10 0x4348 1307bf215546Sopenharmony_ci#define R500_RS_INST_11 0x434c 1308bf215546Sopenharmony_ci#define R500_RS_INST_12 0x4350 1309bf215546Sopenharmony_ci#define R500_RS_INST_13 0x4354 1310bf215546Sopenharmony_ci#define R500_RS_INST_14 0x4358 1311bf215546Sopenharmony_ci#define R500_RS_INST_15 0x435c 1312bf215546Sopenharmony_ci#define R500_RS_INST_TEX_ID_SHIFT 0 1313bf215546Sopenharmony_ci# define R500_RS_INST_TEX_ID(x) ((x) << 0) 1314bf215546Sopenharmony_ci#define R500_RS_INST_TEX_CN_WRITE (1 << 4) 1315bf215546Sopenharmony_ci#define R500_RS_INST_TEX_ADDR_SHIFT 5 1316bf215546Sopenharmony_ci# define R500_RS_INST_TEX_ADDR(x) ((x) << 5) 1317bf215546Sopenharmony_ci#define R500_RS_INST_COL_ID_SHIFT 12 1318bf215546Sopenharmony_ci# define R500_RS_INST_COL_ID(x) ((x) << 12) 1319bf215546Sopenharmony_ci#define R500_RS_INST_COL_CN_NO_WRITE (0 << 16) 1320bf215546Sopenharmony_ci#define R500_RS_INST_COL_CN_WRITE (1 << 16) 1321bf215546Sopenharmony_ci#define R500_RS_INST_COL_CN_WRITE_FBUFFER (2 << 16) 1322bf215546Sopenharmony_ci#define R500_RS_INST_COL_CN_WRITE_BACKFACE (3 << 16) 1323bf215546Sopenharmony_ci#define R500_RS_INST_COL_ADDR_SHIFT 18 1324bf215546Sopenharmony_ci# define R500_RS_INST_COL_ADDR(x) ((x) << 18) 1325bf215546Sopenharmony_ci#define R500_RS_INST_TEX_ADJ (1 << 25) 1326bf215546Sopenharmony_ci#define R500_RS_INST_W_CN (1 << 26) 1327bf215546Sopenharmony_ci 1328bf215546Sopenharmony_ci/* These DWORDs control how vertex data is routed into fragment program 1329bf215546Sopenharmony_ci * registers, after interpolators. 1330bf215546Sopenharmony_ci */ 1331bf215546Sopenharmony_ci#define R300_RS_INST_0 0x4330 1332bf215546Sopenharmony_ci#define R300_RS_INST_1 0x4334 1333bf215546Sopenharmony_ci#define R300_RS_INST_2 0x4338 1334bf215546Sopenharmony_ci#define R300_RS_INST_3 0x433C 1335bf215546Sopenharmony_ci#define R300_RS_INST_4 0x4340 1336bf215546Sopenharmony_ci#define R300_RS_INST_5 0x4344 1337bf215546Sopenharmony_ci#define R300_RS_INST_6 0x4348 1338bf215546Sopenharmony_ci#define R300_RS_INST_7 0x434C 1339bf215546Sopenharmony_ci# define R300_RS_INST_TEX_ID(x) ((x) << 0) 1340bf215546Sopenharmony_ci# define R300_RS_INST_TEX_CN_WRITE (1 << 3) 1341bf215546Sopenharmony_ci# define R300_RS_INST_TEX_ADDR(x) ((x) << 6) 1342bf215546Sopenharmony_ci# define R300_RS_INST_TEX_ADDR_SHIFT 6 1343bf215546Sopenharmony_ci# define R300_RS_INST_COL_ID(x) ((x) << 11) 1344bf215546Sopenharmony_ci# define R300_RS_INST_COL_CN_WRITE (1 << 14) 1345bf215546Sopenharmony_ci# define R300_RS_INST_COL_ADDR(x) ((x) << 17) 1346bf215546Sopenharmony_ci# define R300_RS_INST_COL_ADDR_SHIFT 17 1347bf215546Sopenharmony_ci# define R300_RS_INST_TEX_ADJ (1 << 22) 1348bf215546Sopenharmony_ci# define R300_RS_COL_BIAS_UNUSED_SHIFT 23 1349bf215546Sopenharmony_ci 1350bf215546Sopenharmony_ci/* END: Rasterization / Interpolators - many guesses */ 1351bf215546Sopenharmony_ci 1352bf215546Sopenharmony_ci/* Hierarchical Z Enable */ 1353bf215546Sopenharmony_ci#define R300_SC_HYPERZ 0x43a4 1354bf215546Sopenharmony_ci# define R300_SC_HYPERZ_DISABLE (0 << 0) 1355bf215546Sopenharmony_ci# define R300_SC_HYPERZ_ENABLE (1 << 0) 1356bf215546Sopenharmony_ci# define R300_SC_HYPERZ_MIN (0 << 1) 1357bf215546Sopenharmony_ci# define R300_SC_HYPERZ_MAX (1 << 1) 1358bf215546Sopenharmony_ci# define R300_SC_HYPERZ_ADJ_256 (0 << 2) 1359bf215546Sopenharmony_ci# define R300_SC_HYPERZ_ADJ_128 (1 << 2) 1360bf215546Sopenharmony_ci# define R300_SC_HYPERZ_ADJ_64 (2 << 2) 1361bf215546Sopenharmony_ci# define R300_SC_HYPERZ_ADJ_32 (3 << 2) 1362bf215546Sopenharmony_ci# define R300_SC_HYPERZ_ADJ_16 (4 << 2) 1363bf215546Sopenharmony_ci# define R300_SC_HYPERZ_ADJ_8 (5 << 2) 1364bf215546Sopenharmony_ci# define R300_SC_HYPERZ_ADJ_4 (6 << 2) 1365bf215546Sopenharmony_ci# define R300_SC_HYPERZ_ADJ_2 (7 << 2) 1366bf215546Sopenharmony_ci# define R300_SC_HYPERZ_HZ_Z0MIN_NO (0 << 5) 1367bf215546Sopenharmony_ci# define R300_SC_HYPERZ_HZ_Z0MIN (1 << 5) 1368bf215546Sopenharmony_ci# define R300_SC_HYPERZ_HZ_Z0MAX_NO (0 << 6) 1369bf215546Sopenharmony_ci# define R300_SC_HYPERZ_HZ_Z0MAX (1 << 6) 1370bf215546Sopenharmony_ci 1371bf215546Sopenharmony_ci#define R300_SC_EDGERULE 0x43a8 1372bf215546Sopenharmony_ci 1373bf215546Sopenharmony_ci/* BEGIN: Scissors and cliprects */ 1374bf215546Sopenharmony_ci 1375bf215546Sopenharmony_ci/* There are four clipping rectangles. Their corner coordinates are inclusive. 1376bf215546Sopenharmony_ci * Every pixel is assigned a number from 0 and 15 by setting bits 0-3 depending 1377bf215546Sopenharmony_ci * on whether the pixel is inside cliprects 0-3, respectively. For example, 1378bf215546Sopenharmony_ci * if a pixel is inside cliprects 0 and 1, but outside 2 and 3, it is assigned 1379bf215546Sopenharmony_ci * the number 3 (binary 0011). 1380bf215546Sopenharmony_ci * Iff the bit corresponding to the pixel's number in RE_CLIPRECT_CNTL is set, 1381bf215546Sopenharmony_ci * the pixel is rasterized. 1382bf215546Sopenharmony_ci * 1383bf215546Sopenharmony_ci * In addition to this, there is a scissors rectangle. Only pixels inside the 1384bf215546Sopenharmony_ci * scissors rectangle are drawn. (coordinates are inclusive) 1385bf215546Sopenharmony_ci * 1386bf215546Sopenharmony_ci * For some reason, the top-left corner of the framebuffer is at (1440, 1440) 1387bf215546Sopenharmony_ci * for the purpose of clipping and scissors. 1388bf215546Sopenharmony_ci */ 1389bf215546Sopenharmony_ci#define R300_SC_CLIPRECT_TL_0 0x43B0 1390bf215546Sopenharmony_ci#define R300_SC_CLIPRECT_BR_0 0x43B4 1391bf215546Sopenharmony_ci#define R300_SC_CLIPRECT_TL_1 0x43B8 1392bf215546Sopenharmony_ci#define R300_SC_CLIPRECT_BR_1 0x43BC 1393bf215546Sopenharmony_ci#define R300_SC_CLIPRECT_TL_2 0x43C0 1394bf215546Sopenharmony_ci#define R300_SC_CLIPRECT_BR_2 0x43C4 1395bf215546Sopenharmony_ci#define R300_SC_CLIPRECT_TL_3 0x43C8 1396bf215546Sopenharmony_ci#define R300_SC_CLIPRECT_BR_3 0x43CC 1397bf215546Sopenharmony_ci# define R300_CLIPRECT_OFFSET 1440 1398bf215546Sopenharmony_ci# define R300_CLIPRECT_MASK 0x1FFF 1399bf215546Sopenharmony_ci# define R300_CLIPRECT_X_SHIFT 0 1400bf215546Sopenharmony_ci# define R300_CLIPRECT_X_MASK (0x1FFF << 0) 1401bf215546Sopenharmony_ci# define R300_CLIPRECT_Y_SHIFT 13 1402bf215546Sopenharmony_ci# define R300_CLIPRECT_Y_MASK (0x1FFF << 13) 1403bf215546Sopenharmony_ci#define R300_SC_CLIP_RULE 0x43D0 1404bf215546Sopenharmony_ci# define R300_CLIP_OUT (1 << 0) 1405bf215546Sopenharmony_ci# define R300_CLIP_0 (1 << 1) 1406bf215546Sopenharmony_ci# define R300_CLIP_1 (1 << 2) 1407bf215546Sopenharmony_ci# define R300_CLIP_10 (1 << 3) 1408bf215546Sopenharmony_ci# define R300_CLIP_2 (1 << 4) 1409bf215546Sopenharmony_ci# define R300_CLIP_20 (1 << 5) 1410bf215546Sopenharmony_ci# define R300_CLIP_21 (1 << 6) 1411bf215546Sopenharmony_ci# define R300_CLIP_210 (1 << 7) 1412bf215546Sopenharmony_ci# define R300_CLIP_3 (1 << 8) 1413bf215546Sopenharmony_ci# define R300_CLIP_30 (1 << 9) 1414bf215546Sopenharmony_ci# define R300_CLIP_31 (1 << 10) 1415bf215546Sopenharmony_ci# define R300_CLIP_310 (1 << 11) 1416bf215546Sopenharmony_ci# define R300_CLIP_32 (1 << 12) 1417bf215546Sopenharmony_ci# define R300_CLIP_320 (1 << 13) 1418bf215546Sopenharmony_ci# define R300_CLIP_321 (1 << 14) 1419bf215546Sopenharmony_ci# define R300_CLIP_3210 (1 << 15) 1420bf215546Sopenharmony_ci 1421bf215546Sopenharmony_ci/* gap */ 1422bf215546Sopenharmony_ci 1423bf215546Sopenharmony_ci#define R300_SC_SCISSORS_TL 0x43E0 1424bf215546Sopenharmony_ci#define R300_SC_SCISSORS_BR 0x43E4 1425bf215546Sopenharmony_ci# define R300_SCISSORS_OFFSET 1440 1426bf215546Sopenharmony_ci# define R300_SCISSORS_X_SHIFT 0 1427bf215546Sopenharmony_ci# define R300_SCISSORS_X_MASK (0x1FFF << 0) 1428bf215546Sopenharmony_ci# define R300_SCISSORS_Y_SHIFT 13 1429bf215546Sopenharmony_ci# define R300_SCISSORS_Y_MASK (0x1FFF << 13) 1430bf215546Sopenharmony_ci 1431bf215546Sopenharmony_ci/* Screen door sample mask */ 1432bf215546Sopenharmony_ci#define R300_SC_SCREENDOOR 0x43e8 1433bf215546Sopenharmony_ci 1434bf215546Sopenharmony_ci/* END: Scissors and cliprects */ 1435bf215546Sopenharmony_ci 1436bf215546Sopenharmony_ci/* BEGIN: Texture specification */ 1437bf215546Sopenharmony_ci 1438bf215546Sopenharmony_ci/* 1439bf215546Sopenharmony_ci * The texture specification dwords are grouped by meaning and not by texture 1440bf215546Sopenharmony_ci * unit. This means that e.g. the offset for texture image unit N is found in 1441bf215546Sopenharmony_ci * register TX_OFFSET_0 + (4*N) 1442bf215546Sopenharmony_ci */ 1443bf215546Sopenharmony_ci#define R300_TX_FILTER0_0 0x4400 1444bf215546Sopenharmony_ci#define R300_TX_FILTER0_1 0x4404 1445bf215546Sopenharmony_ci#define R300_TX_FILTER0_2 0x4408 1446bf215546Sopenharmony_ci#define R300_TX_FILTER0_3 0x440c 1447bf215546Sopenharmony_ci#define R300_TX_FILTER0_4 0x4410 1448bf215546Sopenharmony_ci#define R300_TX_FILTER0_5 0x4414 1449bf215546Sopenharmony_ci#define R300_TX_FILTER0_6 0x4418 1450bf215546Sopenharmony_ci#define R300_TX_FILTER0_7 0x441c 1451bf215546Sopenharmony_ci#define R300_TX_FILTER0_8 0x4420 1452bf215546Sopenharmony_ci#define R300_TX_FILTER0_9 0x4424 1453bf215546Sopenharmony_ci#define R300_TX_FILTER0_10 0x4428 1454bf215546Sopenharmony_ci#define R300_TX_FILTER0_11 0x442c 1455bf215546Sopenharmony_ci#define R300_TX_FILTER0_12 0x4430 1456bf215546Sopenharmony_ci#define R300_TX_FILTER0_13 0x4434 1457bf215546Sopenharmony_ci#define R300_TX_FILTER0_14 0x4438 1458bf215546Sopenharmony_ci#define R300_TX_FILTER0_15 0x443c 1459bf215546Sopenharmony_ci# define R300_TX_REPEAT 0 1460bf215546Sopenharmony_ci# define R300_TX_MIRRORED 1 1461bf215546Sopenharmony_ci# define R300_TX_CLAMP_TO_EDGE 2 1462bf215546Sopenharmony_ci# define R300_TX_MIRROR_ONCE_TO_EDGE 3 1463bf215546Sopenharmony_ci# define R300_TX_CLAMP 4 1464bf215546Sopenharmony_ci# define R300_TX_MIRROR_ONCE 5 1465bf215546Sopenharmony_ci# define R300_TX_CLAMP_TO_BORDER 6 1466bf215546Sopenharmony_ci# define R300_TX_MIRROR_ONCE_TO_BORDER 7 1467bf215546Sopenharmony_ci# define R300_TX_WRAP_S_SHIFT 0 1468bf215546Sopenharmony_ci# define R300_TX_WRAP_S_MASK (7 << 0) 1469bf215546Sopenharmony_ci# define R300_TX_WRAP_T_SHIFT 3 1470bf215546Sopenharmony_ci# define R300_TX_WRAP_T_MASK (7 << 3) 1471bf215546Sopenharmony_ci# define R300_TX_WRAP_R_SHIFT 6 1472bf215546Sopenharmony_ci# define R300_TX_WRAP_R_MASK (7 << 6) 1473bf215546Sopenharmony_ci# define R300_TX_MAG_FILTER_4 (0 << 9) 1474bf215546Sopenharmony_ci# define R300_TX_MAG_FILTER_NEAREST (1 << 9) 1475bf215546Sopenharmony_ci# define R300_TX_MAG_FILTER_LINEAR (2 << 9) 1476bf215546Sopenharmony_ci# define R300_TX_MAG_FILTER_ANISO (3 << 9) 1477bf215546Sopenharmony_ci# define R300_TX_MAG_FILTER_MASK (3 << 9) 1478bf215546Sopenharmony_ci# define R300_TX_MIN_FILTER_NEAREST (1 << 11) 1479bf215546Sopenharmony_ci# define R300_TX_MIN_FILTER_LINEAR (2 << 11) 1480bf215546Sopenharmony_ci# define R300_TX_MIN_FILTER_ANISO (3 << 11) 1481bf215546Sopenharmony_ci# define R300_TX_MIN_FILTER_MASK (3 << 11) 1482bf215546Sopenharmony_ci# define R300_TX_MIN_FILTER_MIP_NONE (0 << 13) 1483bf215546Sopenharmony_ci# define R300_TX_MIN_FILTER_MIP_NEAREST (1 << 13) 1484bf215546Sopenharmony_ci# define R300_TX_MIN_FILTER_MIP_LINEAR (2 << 13) 1485bf215546Sopenharmony_ci# define R300_TX_MIN_FILTER_MIP_MASK (3 << 13) 1486bf215546Sopenharmony_ci# define R300_TX_MAX_MIP_LEVEL_SHIFT 17 1487bf215546Sopenharmony_ci# define R300_TX_MAX_MIP_LEVEL_MASK (0xf << 17) 1488bf215546Sopenharmony_ci# define R300_TX_MAX_ANISO_1_TO_1 (0 << 21) 1489bf215546Sopenharmony_ci# define R300_TX_MAX_ANISO_2_TO_1 (1 << 21) 1490bf215546Sopenharmony_ci# define R300_TX_MAX_ANISO_4_TO_1 (2 << 21) 1491bf215546Sopenharmony_ci# define R300_TX_MAX_ANISO_8_TO_1 (3 << 21) 1492bf215546Sopenharmony_ci# define R300_TX_MAX_ANISO_16_TO_1 (4 << 21) 1493bf215546Sopenharmony_ci# define R300_TX_MAX_ANISO_MASK (7 << 21) 1494bf215546Sopenharmony_ci# define R300_TX_WRAP_S(x) ((x) << 0) 1495bf215546Sopenharmony_ci# define R300_TX_WRAP_T(x) ((x) << 3) 1496bf215546Sopenharmony_ci# define R300_TX_MAX_MIP_LEVEL(x) ((x) << 17) 1497bf215546Sopenharmony_ci 1498bf215546Sopenharmony_ci#define R300_TX_FILTER1_0 0x4440 1499bf215546Sopenharmony_ci# define R300_CHROMA_KEY_MODE_DISABLE 0 1500bf215546Sopenharmony_ci# define R300_CHROMA_KEY_FORCE 1 1501bf215546Sopenharmony_ci# define R300_CHROMA_KEY_BLEND 2 1502bf215546Sopenharmony_ci# define R300_MC_ROUND_NORMAL (0<<2) 1503bf215546Sopenharmony_ci# define R300_MC_ROUND_MPEG4 (1<<2) 1504bf215546Sopenharmony_ci# define R300_LOD_BIAS_SHIFT 3 1505bf215546Sopenharmony_ci# define R300_LOD_BIAS_MASK 0x1ff8 1506bf215546Sopenharmony_ci# define R300_EDGE_ANISO_EDGE_DIAG (0<<13) 1507bf215546Sopenharmony_ci# define R300_EDGE_ANISO_EDGE_ONLY (1<<13) 1508bf215546Sopenharmony_ci# define R300_MC_COORD_TRUNCATE_DISABLE (0<<14) 1509bf215546Sopenharmony_ci# define R300_MC_COORD_TRUNCATE_MPEG (1<<14) 1510bf215546Sopenharmony_ci# define R300_TX_TRI_PERF_0_8 (0<<15) 1511bf215546Sopenharmony_ci# define R300_TX_TRI_PERF_1_8 (1<<15) 1512bf215546Sopenharmony_ci# define R300_TX_TRI_PERF_1_4 (2<<15) 1513bf215546Sopenharmony_ci# define R300_TX_TRI_PERF_3_8 (3<<15) 1514bf215546Sopenharmony_ci# define R300_ANISO_THRESHOLD_MASK (7<<17) 1515bf215546Sopenharmony_ci 1516bf215546Sopenharmony_ci# define R400_DXTC_SWIZZLE_ENABLE (1<<21) 1517bf215546Sopenharmony_ci# define R500_MACRO_SWITCH (1<<22) 1518bf215546Sopenharmony_ci# define R500_TX_MAX_ANISO(x) ((x) << 23) 1519bf215546Sopenharmony_ci# define R500_TX_MAX_ANISO_MASK (63 << 23) 1520bf215546Sopenharmony_ci# define R500_TX_ANISO_HIGH_QUALITY (1 << 30) 1521bf215546Sopenharmony_ci# define R500_BORDER_FIX (1<<31) 1522bf215546Sopenharmony_ci 1523bf215546Sopenharmony_ci#define R300_TX_FORMAT0_0 0x4480 1524bf215546Sopenharmony_ci# define R300_TX_WIDTHMASK_SHIFT 0 1525bf215546Sopenharmony_ci# define R300_TX_WIDTHMASK_MASK (2047 << 0) 1526bf215546Sopenharmony_ci# define R300_TX_HEIGHTMASK_SHIFT 11 1527bf215546Sopenharmony_ci# define R300_TX_HEIGHTMASK_MASK (2047 << 11) 1528bf215546Sopenharmony_ci# define R300_TX_DEPTHMASK_SHIFT 22 1529bf215546Sopenharmony_ci# define R300_TX_DEPTHMASK_MASK (0xf << 22) 1530bf215546Sopenharmony_ci# define R300_TX_SIZE_PROJECTED (1 << 30) 1531bf215546Sopenharmony_ci# define R300_TX_PITCH_EN (1 << 31) 1532bf215546Sopenharmony_ci# define R300_TX_WIDTH(x) ((x) << 0) 1533bf215546Sopenharmony_ci# define R300_TX_HEIGHT(x) ((x) << 11) 1534bf215546Sopenharmony_ci# define R300_TX_DEPTH(x) ((x) << 22) 1535bf215546Sopenharmony_ci# define R300_TX_NUM_LEVELS(x) ((x) << 26) 1536bf215546Sopenharmony_ci 1537bf215546Sopenharmony_ci#define R300_TX_FORMAT1_0 0x44C0 1538bf215546Sopenharmony_ci /* The interpretation of the format word by Wladimir van der Laan */ 1539bf215546Sopenharmony_ci /* The X, Y, Z and W refer to the layout of the components. 1540bf215546Sopenharmony_ci They are given meanings as R, G, B and Alpha by the swizzle 1541bf215546Sopenharmony_ci specification */ 1542bf215546Sopenharmony_ci# define R300_TX_FORMAT_X8 0x0 1543bf215546Sopenharmony_ci# define R300_TX_FORMAT_X16 0x1 1544bf215546Sopenharmony_ci# define R300_TX_FORMAT_Y4X4 0x2 1545bf215546Sopenharmony_ci# define R300_TX_FORMAT_Y8X8 0x3 1546bf215546Sopenharmony_ci# define R300_TX_FORMAT_Y16X16 0x4 1547bf215546Sopenharmony_ci# define R300_TX_FORMAT_Z3Y3X2 0x5 1548bf215546Sopenharmony_ci# define R300_TX_FORMAT_Z5Y6X5 0x6 1549bf215546Sopenharmony_ci# define R300_TX_FORMAT_Z6Y5X5 0x7 1550bf215546Sopenharmony_ci# define R300_TX_FORMAT_Z11Y11X10 0x8 1551bf215546Sopenharmony_ci# define R300_TX_FORMAT_Z10Y11X11 0x9 1552bf215546Sopenharmony_ci# define R300_TX_FORMAT_W4Z4Y4X4 0xA 1553bf215546Sopenharmony_ci# define R300_TX_FORMAT_W1Z5Y5X5 0xB 1554bf215546Sopenharmony_ci# define R300_TX_FORMAT_W8Z8Y8X8 0xC 1555bf215546Sopenharmony_ci# define R300_TX_FORMAT_W2Z10Y10X10 0xD 1556bf215546Sopenharmony_ci# define R300_TX_FORMAT_W16Z16Y16X16 0xE 1557bf215546Sopenharmony_ci# define R300_TX_FORMAT_DXT1 0xF 1558bf215546Sopenharmony_ci# define R300_TX_FORMAT_DXT3 0x10 1559bf215546Sopenharmony_ci# define R300_TX_FORMAT_DXT5 0x11 1560bf215546Sopenharmony_ci# define R300_TX_FORMAT_CxV8U8 0x12 1561bf215546Sopenharmony_ci# define R300_TX_FORMAT_AVYU444 0x13 1562bf215546Sopenharmony_ci# define R300_TX_FORMAT_VYUY422 0x14 1563bf215546Sopenharmony_ci# define R300_TX_FORMAT_YVYU422 0x15 1564bf215546Sopenharmony_ci# define R300_TX_FORMAT_16_MPEG 0x16 1565bf215546Sopenharmony_ci# define R300_TX_FORMAT_16_16_MPEG 0x17 1566bf215546Sopenharmony_ci# define R300_TX_FORMAT_16F 0x18 1567bf215546Sopenharmony_ci# define R300_TX_FORMAT_16F_16F 0x19 1568bf215546Sopenharmony_ci# define R300_TX_FORMAT_16F_16F_16F_16F 0x1A 1569bf215546Sopenharmony_ci# define R300_TX_FORMAT_32F 0x1B 1570bf215546Sopenharmony_ci# define R300_TX_FORMAT_32F_32F 0x1C 1571bf215546Sopenharmony_ci# define R300_TX_FORMAT_32F_32F_32F_32F 0x1D 1572bf215546Sopenharmony_ci# define R300_TX_FORMAT_W24_FP 0x1E 1573bf215546Sopenharmony_ci# define R400_TX_FORMAT_ATI2N 0x1F 1574bf215546Sopenharmony_ci 1575bf215546Sopenharmony_ci/* These need TX_FORMAT2_[0-15].TXFORMAT_MSB set. 1576bf215546Sopenharmony_ci 1577bf215546Sopenharmony_ci My guess is the 10-bit formats are the 8-bit ones but with filtering being 1578bf215546Sopenharmony_ci performed with the precision of 10 bits per channel. This makes sense 1579bf215546Sopenharmony_ci with sRGB textures since the conversion to linear space reduces the precision 1580bf215546Sopenharmony_ci significantly so the shader gets approximately the 8-bit precision 1581bf215546Sopenharmony_ci in the end. It might also improve the quality of HDR rendering where 1582bf215546Sopenharmony_ci high-precision filtering is desirable. 1583bf215546Sopenharmony_ci 1584bf215546Sopenharmony_ci Again, this is guessed, the formats might mean something entirely else. 1585bf215546Sopenharmony_ci The others should be fine. */ 1586bf215546Sopenharmony_ci# define R500_TX_FORMAT_X1 0x0 1587bf215546Sopenharmony_ci# define R500_TX_FORMAT_X1_REV 0x1 1588bf215546Sopenharmony_ci# define R500_TX_FORMAT_X10 0x2 1589bf215546Sopenharmony_ci# define R500_TX_FORMAT_Y10X10 0x3 1590bf215546Sopenharmony_ci# define R500_TX_FORMAT_W10Z10Y10X10 0x4 1591bf215546Sopenharmony_ci# define R500_TX_FORMAT_ATI1N 0x5 1592bf215546Sopenharmony_ci# define R500_TX_FORMAT_Y8X24 0x6 1593bf215546Sopenharmony_ci 1594bf215546Sopenharmony_ci 1595bf215546Sopenharmony_ci# define R300_TX_FORMAT_SIGNED_W (1 << 5) 1596bf215546Sopenharmony_ci# define R300_TX_FORMAT_SIGNED_Z (1 << 6) 1597bf215546Sopenharmony_ci# define R300_TX_FORMAT_SIGNED_Y (1 << 7) 1598bf215546Sopenharmony_ci# define R300_TX_FORMAT_SIGNED_X (1 << 8) 1599bf215546Sopenharmony_ci# define R300_TX_FORMAT_SIGNED (0xf << 5) 1600bf215546Sopenharmony_ci 1601bf215546Sopenharmony_ci# define R300_TX_FORMAT_3D (1 << 25) 1602bf215546Sopenharmony_ci# define R300_TX_FORMAT_CUBIC_MAP (2 << 25) 1603bf215546Sopenharmony_ci# define R300_TX_FORMAT_TEX_COORD_TYPE_MASK (0x3 << 25) 1604bf215546Sopenharmony_ci 1605bf215546Sopenharmony_ci /* alpha modes, convenience mostly */ 1606bf215546Sopenharmony_ci /* if you have alpha, pick constant appropriate to the 1607bf215546Sopenharmony_ci number of channels (1 for I8, 2 for I8A8, 4 for R8G8B8A8, etc */ 1608bf215546Sopenharmony_ci# define R300_TX_FORMAT_ALPHA_1CH 0x000 1609bf215546Sopenharmony_ci# define R300_TX_FORMAT_ALPHA_2CH 0x200 1610bf215546Sopenharmony_ci# define R300_TX_FORMAT_ALPHA_4CH 0x600 1611bf215546Sopenharmony_ci# define R300_TX_FORMAT_ALPHA_NONE 0xA00 1612bf215546Sopenharmony_ci /* Swizzling */ 1613bf215546Sopenharmony_ci /* constants */ 1614bf215546Sopenharmony_ci# define R300_TX_FORMAT_X 0 1615bf215546Sopenharmony_ci# define R300_TX_FORMAT_Y 1 1616bf215546Sopenharmony_ci# define R300_TX_FORMAT_Z 2 1617bf215546Sopenharmony_ci# define R300_TX_FORMAT_W 3 1618bf215546Sopenharmony_ci# define R300_TX_FORMAT_ZERO 4 1619bf215546Sopenharmony_ci# define R300_TX_FORMAT_ONE 5 1620bf215546Sopenharmony_ci /* 2.0*Z, everything above 1.0 is set to 0.0 */ 1621bf215546Sopenharmony_ci# define R300_TX_FORMAT_CUT_Z 6 1622bf215546Sopenharmony_ci /* 2.0*W, everything above 1.0 is set to 0.0 */ 1623bf215546Sopenharmony_ci# define R300_TX_FORMAT_CUT_W 7 1624bf215546Sopenharmony_ci 1625bf215546Sopenharmony_ci# define R300_TX_FORMAT_B_SHIFT 18 1626bf215546Sopenharmony_ci# define R300_TX_FORMAT_G_SHIFT 15 1627bf215546Sopenharmony_ci# define R300_TX_FORMAT_R_SHIFT 12 1628bf215546Sopenharmony_ci# define R300_TX_FORMAT_A_SHIFT 9 1629bf215546Sopenharmony_ci /* Convenience macro to take care of layout and swizzling */ 1630bf215546Sopenharmony_ci# define R300_EASY_TX_FORMAT(B, G, R, A, FMT) ( \ 1631bf215546Sopenharmony_ci ((R300_TX_FORMAT_##B)<<R300_TX_FORMAT_B_SHIFT) \ 1632bf215546Sopenharmony_ci | ((R300_TX_FORMAT_##G)<<R300_TX_FORMAT_G_SHIFT) \ 1633bf215546Sopenharmony_ci | ((R300_TX_FORMAT_##R)<<R300_TX_FORMAT_R_SHIFT) \ 1634bf215546Sopenharmony_ci | ((R300_TX_FORMAT_##A)<<R300_TX_FORMAT_A_SHIFT) \ 1635bf215546Sopenharmony_ci | (R300_TX_FORMAT_##FMT) \ 1636bf215546Sopenharmony_ci ) 1637bf215546Sopenharmony_ci /* These can be ORed with result of R300_EASY_TX_FORMAT() 1638bf215546Sopenharmony_ci We don't really know what they do. Take values from a 1639bf215546Sopenharmony_ci constant color ? */ 1640bf215546Sopenharmony_ci# define R300_TX_FORMAT_CONST_X (1<<5) 1641bf215546Sopenharmony_ci# define R300_TX_FORMAT_CONST_Y (2<<5) 1642bf215546Sopenharmony_ci# define R300_TX_FORMAT_CONST_Z (4<<5) 1643bf215546Sopenharmony_ci# define R300_TX_FORMAT_CONST_W (8<<5) 1644bf215546Sopenharmony_ci 1645bf215546Sopenharmony_ci# define R300_TX_FORMAT_GAMMA (1 << 21) 1646bf215546Sopenharmony_ci# define R300_TX_FORMAT_YUV_TO_RGB (1 << 22) 1647bf215546Sopenharmony_ci 1648bf215546Sopenharmony_ci# define R300_TX_CACHE(x) ((x) << 27) 1649bf215546Sopenharmony_ci# define R300_TX_CACHE_WHOLE 0 1650bf215546Sopenharmony_ci/* reserved */ 1651bf215546Sopenharmony_ci# define R300_TX_CACHE_HALF_0 2 1652bf215546Sopenharmony_ci# define R300_TX_CACHE_HALF_1 3 1653bf215546Sopenharmony_ci# define R300_TX_CACHE_FOURTH_0 4 1654bf215546Sopenharmony_ci# define R300_TX_CACHE_FOURTH_1 5 1655bf215546Sopenharmony_ci# define R300_TX_CACHE_FOURTH_2 6 1656bf215546Sopenharmony_ci# define R300_TX_CACHE_FOURTH_3 7 1657bf215546Sopenharmony_ci# define R300_TX_CACHE_EIGHTH_0 8 1658bf215546Sopenharmony_ci# define R300_TX_CACHE_EIGHTH_1 9 1659bf215546Sopenharmony_ci# define R300_TX_CACHE_EIGHTH_2 10 1660bf215546Sopenharmony_ci# define R300_TX_CACHE_EIGHTH_3 11 1661bf215546Sopenharmony_ci# define R300_TX_CACHE_EIGHTH_4 12 1662bf215546Sopenharmony_ci# define R300_TX_CACHE_EIGHTH_5 13 1663bf215546Sopenharmony_ci# define R300_TX_CACHE_EIGHTH_6 14 1664bf215546Sopenharmony_ci# define R300_TX_CACHE_EIGHTH_7 15 1665bf215546Sopenharmony_ci# define R300_TX_CACHE_SIXTEENTH_0 16 1666bf215546Sopenharmony_ci# define R300_TX_CACHE_SIXTEENTH_1 17 1667bf215546Sopenharmony_ci# define R300_TX_CACHE_SIXTEENTH_2 18 1668bf215546Sopenharmony_ci# define R300_TX_CACHE_SIXTEENTH_3 19 1669bf215546Sopenharmony_ci# define R300_TX_CACHE_SIXTEENTH_4 20 1670bf215546Sopenharmony_ci# define R300_TX_CACHE_SIXTEENTH_5 21 1671bf215546Sopenharmony_ci# define R300_TX_CACHE_SIXTEENTH_6 22 1672bf215546Sopenharmony_ci# define R300_TX_CACHE_SIXTEENTH_7 23 1673bf215546Sopenharmony_ci# define R300_TX_CACHE_SIXTEENTH_8 24 1674bf215546Sopenharmony_ci# define R300_TX_CACHE_SIXTEENTH_9 25 1675bf215546Sopenharmony_ci# define R300_TX_CACHE_SIXTEENTH_10 26 1676bf215546Sopenharmony_ci# define R300_TX_CACHE_SIXTEENTH_11 27 1677bf215546Sopenharmony_ci# define R300_TX_CACHE_SIXTEENTH_12 28 1678bf215546Sopenharmony_ci# define R300_TX_CACHE_SIXTEENTH_13 29 1679bf215546Sopenharmony_ci# define R300_TX_CACHE_SIXTEENTH_14 30 1680bf215546Sopenharmony_ci# define R300_TX_CACHE_SIXTEENTH_15 31 1681bf215546Sopenharmony_ci 1682bf215546Sopenharmony_ci#define R300_TX_FORMAT2_0 0x4500 /* obvious missing in gap */ 1683bf215546Sopenharmony_ci# define R300_TX_PITCHMASK_SHIFT 0 1684bf215546Sopenharmony_ci# define R300_TX_PITCHMASK_MASK (2047 << 0) 1685bf215546Sopenharmony_ci# define R500_TXFORMAT_MSB (1 << 14) 1686bf215546Sopenharmony_ci# define R500_TXWIDTH_BIT11 (1 << 15) 1687bf215546Sopenharmony_ci# define R500_TXHEIGHT_BIT11 (1 << 16) 1688bf215546Sopenharmony_ci# define R500_POW2FIX2FLT (1 << 17) 1689bf215546Sopenharmony_ci# define R500_SEL_FILTER4_TC0 (0 << 18) 1690bf215546Sopenharmony_ci# define R500_SEL_FILTER4_TC1 (1 << 18) 1691bf215546Sopenharmony_ci# define R500_SEL_FILTER4_TC2 (2 << 18) 1692bf215546Sopenharmony_ci# define R500_SEL_FILTER4_TC3 (3 << 18) 1693bf215546Sopenharmony_ci 1694bf215546Sopenharmony_ci#define R300_TX_OFFSET_0 0x4540 1695bf215546Sopenharmony_ci#define R300_TX_OFFSET_1 0x4544 1696bf215546Sopenharmony_ci#define R300_TX_OFFSET_2 0x4548 1697bf215546Sopenharmony_ci#define R300_TX_OFFSET_3 0x454C 1698bf215546Sopenharmony_ci#define R300_TX_OFFSET_4 0x4550 1699bf215546Sopenharmony_ci#define R300_TX_OFFSET_5 0x4554 1700bf215546Sopenharmony_ci#define R300_TX_OFFSET_6 0x4558 1701bf215546Sopenharmony_ci#define R300_TX_OFFSET_7 0x455C 1702bf215546Sopenharmony_ci 1703bf215546Sopenharmony_ci# define R300_TXO_ENDIAN(x) ((x) << 0) 1704bf215546Sopenharmony_ci# define R300_TXO_MACRO_TILE_LINEAR (0 << 2) 1705bf215546Sopenharmony_ci# define R300_TXO_MACRO_TILE_TILED (1 << 2) 1706bf215546Sopenharmony_ci# define R300_TXO_MACRO_TILE(x) ((x) << 2) 1707bf215546Sopenharmony_ci# define R300_TXO_MICRO_TILE_LINEAR (0 << 3) 1708bf215546Sopenharmony_ci# define R300_TXO_MICRO_TILE_TILED (1 << 3) 1709bf215546Sopenharmony_ci# define R300_TXO_MICRO_TILE_TILED_SQUARE (2 << 3) 1710bf215546Sopenharmony_ci# define R300_TXO_MICRO_TILE(x) ((x) << 3) 1711bf215546Sopenharmony_ci# define R300_TXO_OFFSET_MASK 0xffffffe0 1712bf215546Sopenharmony_ci# define R300_TXO_OFFSET_SHIFT 5 1713bf215546Sopenharmony_ci 1714bf215546Sopenharmony_ci/* 32 bit chroma key */ 1715bf215546Sopenharmony_ci#define R300_TX_CHROMA_KEY_0 0x4580 1716bf215546Sopenharmony_ci#define R300_TX_CHROMA_KEY_1 0x4584 1717bf215546Sopenharmony_ci#define R300_TX_CHROMA_KEY_2 0x4588 1718bf215546Sopenharmony_ci#define R300_TX_CHROMA_KEY_3 0x458c 1719bf215546Sopenharmony_ci#define R300_TX_CHROMA_KEY_4 0x4590 1720bf215546Sopenharmony_ci#define R300_TX_CHROMA_KEY_5 0x4594 1721bf215546Sopenharmony_ci#define R300_TX_CHROMA_KEY_6 0x4598 1722bf215546Sopenharmony_ci#define R300_TX_CHROMA_KEY_7 0x459c 1723bf215546Sopenharmony_ci#define R300_TX_CHROMA_KEY_8 0x45a0 1724bf215546Sopenharmony_ci#define R300_TX_CHROMA_KEY_9 0x45a4 1725bf215546Sopenharmony_ci#define R300_TX_CHROMA_KEY_10 0x45a8 1726bf215546Sopenharmony_ci#define R300_TX_CHROMA_KEY_11 0x45ac 1727bf215546Sopenharmony_ci#define R300_TX_CHROMA_KEY_12 0x45b0 1728bf215546Sopenharmony_ci#define R300_TX_CHROMA_KEY_13 0x45b4 1729bf215546Sopenharmony_ci#define R300_TX_CHROMA_KEY_14 0x45b8 1730bf215546Sopenharmony_ci#define R300_TX_CHROMA_KEY_15 0x45bc 1731bf215546Sopenharmony_ci/* ff00ff00 == { 0, 1.0, 0, 1.0 } */ 1732bf215546Sopenharmony_ci 1733bf215546Sopenharmony_ci/* Border Color */ 1734bf215546Sopenharmony_ci#define R300_TX_BORDER_COLOR_0 0x45c0 1735bf215546Sopenharmony_ci#define R300_TX_BORDER_COLOR_1 0x45c4 1736bf215546Sopenharmony_ci#define R300_TX_BORDER_COLOR_2 0x45c8 1737bf215546Sopenharmony_ci#define R300_TX_BORDER_COLOR_3 0x45cc 1738bf215546Sopenharmony_ci#define R300_TX_BORDER_COLOR_4 0x45d0 1739bf215546Sopenharmony_ci#define R300_TX_BORDER_COLOR_5 0x45d4 1740bf215546Sopenharmony_ci#define R300_TX_BORDER_COLOR_6 0x45d8 1741bf215546Sopenharmony_ci#define R300_TX_BORDER_COLOR_7 0x45dc 1742bf215546Sopenharmony_ci#define R300_TX_BORDER_COLOR_8 0x45e0 1743bf215546Sopenharmony_ci#define R300_TX_BORDER_COLOR_9 0x45e4 1744bf215546Sopenharmony_ci#define R300_TX_BORDER_COLOR_10 0x45e8 1745bf215546Sopenharmony_ci#define R300_TX_BORDER_COLOR_11 0x45ec 1746bf215546Sopenharmony_ci#define R300_TX_BORDER_COLOR_12 0x45f0 1747bf215546Sopenharmony_ci#define R300_TX_BORDER_COLOR_13 0x45f4 1748bf215546Sopenharmony_ci#define R300_TX_BORDER_COLOR_14 0x45f8 1749bf215546Sopenharmony_ci#define R300_TX_BORDER_COLOR_15 0x45fc 1750bf215546Sopenharmony_ci 1751bf215546Sopenharmony_ci 1752bf215546Sopenharmony_ci/* END: Texture specification */ 1753bf215546Sopenharmony_ci 1754bf215546Sopenharmony_ci/* BEGIN: Fragment program instruction set */ 1755bf215546Sopenharmony_ci 1756bf215546Sopenharmony_ci/* Fragment programs are written directly into register space. 1757bf215546Sopenharmony_ci * There are separate instruction streams for texture instructions and ALU 1758bf215546Sopenharmony_ci * instructions. 1759bf215546Sopenharmony_ci * In order to synchronize these streams, the program is divided into up 1760bf215546Sopenharmony_ci * to 4 nodes. Each node begins with a number of TEX operations, followed 1761bf215546Sopenharmony_ci * by a number of ALU operations. 1762bf215546Sopenharmony_ci * The first node can have zero TEX ops, all subsequent nodes must have at 1763bf215546Sopenharmony_ci * least 1764bf215546Sopenharmony_ci * one TEX ops. 1765bf215546Sopenharmony_ci * All nodes must have at least one ALU op. 1766bf215546Sopenharmony_ci * 1767bf215546Sopenharmony_ci * The index of the last node is stored in PFS_CNTL_0: A value of 0 means 1768bf215546Sopenharmony_ci * 1 node, a value of 3 means 4 nodes. 1769bf215546Sopenharmony_ci * The total amount of instructions is defined in PFS_CNTL_2. The offsets are 1770bf215546Sopenharmony_ci * offsets into the respective instruction streams, while *_END points to the 1771bf215546Sopenharmony_ci * last instruction relative to this offset. 1772bf215546Sopenharmony_ci */ 1773bf215546Sopenharmony_ci#define R300_US_CONFIG 0x4600 1774bf215546Sopenharmony_ci# define R300_PFS_CNTL_LAST_NODES_SHIFT 0 1775bf215546Sopenharmony_ci# define R300_PFS_CNTL_LAST_NODES_MASK (3 << 0) 1776bf215546Sopenharmony_ci# define R300_PFS_CNTL_FIRST_NODE_HAS_TEX (1 << 3) 1777bf215546Sopenharmony_ci#define R300_US_PIXSIZE 0x4604 1778bf215546Sopenharmony_ci/* There is an unshifted value here which has so far always been equal to the 1779bf215546Sopenharmony_ci * index of the highest used temporary register. 1780bf215546Sopenharmony_ci */ 1781bf215546Sopenharmony_ci#define R300_US_CODE_OFFSET 0x4608 1782bf215546Sopenharmony_ci# define R300_PFS_CNTL_ALU_OFFSET_SHIFT 0 1783bf215546Sopenharmony_ci# define R300_PFS_CNTL_ALU_OFFSET_MASK (63 << 0) 1784bf215546Sopenharmony_ci# define R300_PFS_CNTL_ALU_END_SHIFT 6 1785bf215546Sopenharmony_ci# define R300_PFS_CNTL_ALU_END_MASK (63 << 6) 1786bf215546Sopenharmony_ci# define R300_PFS_CNTL_TEX_OFFSET_SHIFT 13 1787bf215546Sopenharmony_ci# define R300_PFS_CNTL_TEX_OFFSET_MASK (31 << 13) 1788bf215546Sopenharmony_ci# define R300_PFS_CNTL_TEX_END_SHIFT 18 1789bf215546Sopenharmony_ci# define R300_PFS_CNTL_TEX_END_MASK (31 << 18) 1790bf215546Sopenharmony_ci# define R400_PFS_CNTL_TEX_OFFSET_MSB_SHIFT 24 1791bf215546Sopenharmony_ci# define R400_PFS_CNTL_TEX_OFFSET_MSB_MASK (0xf << 24) 1792bf215546Sopenharmony_ci# define R400_PFS_CNTL_TEX_END_MSB_SHIFT 28 1793bf215546Sopenharmony_ci# define R400_PFS_CNTL_TEX_END_MSB_MASK (0xf << 28) 1794bf215546Sopenharmony_ci 1795bf215546Sopenharmony_ci/* gap */ 1796bf215546Sopenharmony_ci 1797bf215546Sopenharmony_ci/* Nodes are stored backwards. The last active node is always stored in 1798bf215546Sopenharmony_ci * PFS_NODE_3. 1799bf215546Sopenharmony_ci * Example: In a 2-node program, NODE_0 and NODE_1 are set to 0. The 1800bf215546Sopenharmony_ci * first node is stored in NODE_2, the second node is stored in NODE_3. 1801bf215546Sopenharmony_ci * 1802bf215546Sopenharmony_ci * Offsets are relative to the master offset from PFS_CNTL_2. 1803bf215546Sopenharmony_ci */ 1804bf215546Sopenharmony_ci#define R300_US_CODE_ADDR_0 0x4610 1805bf215546Sopenharmony_ci#define R300_US_CODE_ADDR_1 0x4614 1806bf215546Sopenharmony_ci#define R300_US_CODE_ADDR_2 0x4618 1807bf215546Sopenharmony_ci#define R300_US_CODE_ADDR_3 0x461C 1808bf215546Sopenharmony_ci# define R300_ALU_START_SHIFT 0 1809bf215546Sopenharmony_ci# define R300_ALU_START_MASK (63 << 0) 1810bf215546Sopenharmony_ci# define R300_ALU_SIZE_SHIFT 6 1811bf215546Sopenharmony_ci# define R300_ALU_SIZE_MASK (63 << 6) 1812bf215546Sopenharmony_ci# define R300_TEX_START_SHIFT 12 1813bf215546Sopenharmony_ci# define R300_TEX_START_MASK (31 << 12) 1814bf215546Sopenharmony_ci# define R300_TEX_SIZE_SHIFT 17 1815bf215546Sopenharmony_ci# define R300_TEX_SIZE_MASK (31 << 17) 1816bf215546Sopenharmony_ci# define R300_RGBA_OUT (1 << 22) 1817bf215546Sopenharmony_ci# define R300_W_OUT (1 << 23) 1818bf215546Sopenharmony_ci# define R400_TEX_START_MSB_SHIFT 24 1819bf215546Sopenharmony_ci# define R400_TEX_START_MSG_MASK (0xf << 24) 1820bf215546Sopenharmony_ci# define R400_TEX_SIZE_MSB_SHIFT 28 1821bf215546Sopenharmony_ci# define R400_TEX_SIZE_MSG_MASK (0xf << 28) 1822bf215546Sopenharmony_ci 1823bf215546Sopenharmony_ci/* TEX 1824bf215546Sopenharmony_ci * As far as I can tell, texture instructions cannot write into output 1825bf215546Sopenharmony_ci * registers directly. A subsequent ALU instruction is always necessary, 1826bf215546Sopenharmony_ci * even if it's just MAD o0, r0, 1, 0 1827bf215546Sopenharmony_ci */ 1828bf215546Sopenharmony_ci#define R300_US_TEX_INST_0 0x4620 1829bf215546Sopenharmony_ci# define R300_SRC_ADDR_SHIFT 0 1830bf215546Sopenharmony_ci# define R300_SRC_ADDR_MASK (31 << 0) 1831bf215546Sopenharmony_ci# define R300_DST_ADDR_SHIFT 6 1832bf215546Sopenharmony_ci# define R300_DST_ADDR_MASK (31 << 6) 1833bf215546Sopenharmony_ci# define R300_TEX_ID_SHIFT 11 1834bf215546Sopenharmony_ci# define R300_TEX_ID_MASK (15 << 11) 1835bf215546Sopenharmony_ci# define R300_TEX_INST_SHIFT 15 1836bf215546Sopenharmony_ci# define R300_TEX_OP_NOP 0 1837bf215546Sopenharmony_ci# define R300_TEX_OP_LD 1 1838bf215546Sopenharmony_ci# define R300_TEX_OP_KIL 2 1839bf215546Sopenharmony_ci# define R300_TEX_OP_TXP 3 1840bf215546Sopenharmony_ci# define R300_TEX_OP_TXB 4 1841bf215546Sopenharmony_ci# define R300_TEX_INST_MASK (7 << 15) 1842bf215546Sopenharmony_ci# define R400_SRC_ADDR_EXT_BIT (1 << 19) 1843bf215546Sopenharmony_ci# define R400_DST_ADDR_EXT_BIT (1 << 20) 1844bf215546Sopenharmony_ci 1845bf215546Sopenharmony_ci/* Output format from the unified shader */ 1846bf215546Sopenharmony_ci#define R300_US_OUT_FMT_0 0x46A4 1847bf215546Sopenharmony_ci# define R300_US_OUT_FMT_C4_8 (0 << 0) 1848bf215546Sopenharmony_ci# define R300_US_OUT_FMT_C4_10 (1 << 0) 1849bf215546Sopenharmony_ci# define R300_US_OUT_FMT_C4_10_GAMMA (2 << 0) 1850bf215546Sopenharmony_ci# define R300_US_OUT_FMT_C_16 (3 << 0) 1851bf215546Sopenharmony_ci# define R300_US_OUT_FMT_C2_16 (4 << 0) 1852bf215546Sopenharmony_ci# define R300_US_OUT_FMT_C4_16 (5 << 0) 1853bf215546Sopenharmony_ci# define R300_US_OUT_FMT_C_16_MPEG (6 << 0) 1854bf215546Sopenharmony_ci# define R300_US_OUT_FMT_C2_16_MPEG (7 << 0) 1855bf215546Sopenharmony_ci# define R300_US_OUT_FMT_C2_4 (8 << 0) 1856bf215546Sopenharmony_ci# define R300_US_OUT_FMT_C_3_3_2 (9 << 0) 1857bf215546Sopenharmony_ci# define R300_US_OUT_FMT_C_6_5_6 (10 << 0) 1858bf215546Sopenharmony_ci# define R300_US_OUT_FMT_C_11_11_10 (11 << 0) 1859bf215546Sopenharmony_ci# define R300_US_OUT_FMT_C_10_11_11 (12 << 0) 1860bf215546Sopenharmony_ci# define R300_US_OUT_FMT_C_2_10_10_10 (13 << 0) 1861bf215546Sopenharmony_ci/* reserved */ 1862bf215546Sopenharmony_ci# define R300_US_OUT_FMT_UNUSED (15 << 0) 1863bf215546Sopenharmony_ci# define R300_US_OUT_FMT_C_16_FP (16 << 0) 1864bf215546Sopenharmony_ci# define R300_US_OUT_FMT_C2_16_FP (17 << 0) 1865bf215546Sopenharmony_ci# define R300_US_OUT_FMT_C4_16_FP (18 << 0) 1866bf215546Sopenharmony_ci# define R300_US_OUT_FMT_C_32_FP (19 << 0) 1867bf215546Sopenharmony_ci# define R300_US_OUT_FMT_C2_32_FP (20 << 0) 1868bf215546Sopenharmony_ci# define R300_US_OUT_FMT_C4_32_FP (21 << 0) 1869bf215546Sopenharmony_ci# define R300_C0_SEL_A (0 << 8) 1870bf215546Sopenharmony_ci# define R300_C0_SEL_R (1 << 8) 1871bf215546Sopenharmony_ci# define R300_C0_SEL_G (2 << 8) 1872bf215546Sopenharmony_ci# define R300_C0_SEL_B (3 << 8) 1873bf215546Sopenharmony_ci# define R300_C1_SEL_A (0 << 10) 1874bf215546Sopenharmony_ci# define R300_C1_SEL_R (1 << 10) 1875bf215546Sopenharmony_ci# define R300_C1_SEL_G (2 << 10) 1876bf215546Sopenharmony_ci# define R300_C1_SEL_B (3 << 10) 1877bf215546Sopenharmony_ci# define R300_C2_SEL_A (0 << 12) 1878bf215546Sopenharmony_ci# define R300_C2_SEL_R (1 << 12) 1879bf215546Sopenharmony_ci# define R300_C2_SEL_G (2 << 12) 1880bf215546Sopenharmony_ci# define R300_C2_SEL_B (3 << 12) 1881bf215546Sopenharmony_ci# define R300_C3_SEL_A (0 << 14) 1882bf215546Sopenharmony_ci# define R300_C3_SEL_R (1 << 14) 1883bf215546Sopenharmony_ci# define R300_C3_SEL_G (2 << 14) 1884bf215546Sopenharmony_ci# define R300_C3_SEL_B (3 << 14) 1885bf215546Sopenharmony_ci# define R300_OUT_SIGN(x) ((x) << 16) 1886bf215546Sopenharmony_ci# define R500_ROUND_ADJ (1 << 20) 1887bf215546Sopenharmony_ci 1888bf215546Sopenharmony_ci/* ALU 1889bf215546Sopenharmony_ci * The ALU instructions register blocks are enumerated according to the order 1890bf215546Sopenharmony_ci * in which fglrx. I assume there is space for 64 instructions, since 1891bf215546Sopenharmony_ci * each block has space for a maximum of 64 DWORDs, and this matches reported 1892bf215546Sopenharmony_ci * native limits. 1893bf215546Sopenharmony_ci * 1894bf215546Sopenharmony_ci * The basic functional block seems to be one MAD for each color and alpha, 1895bf215546Sopenharmony_ci * and an adder that adds all components after the MUL. 1896bf215546Sopenharmony_ci * - ADD, MUL, MAD etc.: use MAD with appropriate neutral operands 1897bf215546Sopenharmony_ci * - DP4: Use OUTC_DP4, OUTA_DP4 1898bf215546Sopenharmony_ci * - DP3: Use OUTC_DP3, OUTA_DP4, appropriate alpha operands 1899bf215546Sopenharmony_ci * - DPH: Use OUTC_DP4, OUTA_DP4, appropriate alpha operands 1900bf215546Sopenharmony_ci * - CMPH: If ARG2 > 0.5, return ARG0, else return ARG1 1901bf215546Sopenharmony_ci * - CMP: If ARG2 < 0, return ARG1, else return ARG0 1902bf215546Sopenharmony_ci * - FLR: use FRC+MAD 1903bf215546Sopenharmony_ci * - SGE, SLT: use MAD+CMP 1904bf215546Sopenharmony_ci * - RSQ: use ABS modifier for argument 1905bf215546Sopenharmony_ci * - Use OUTC_REPL_ALPHA to write results of an alpha-only operation 1906bf215546Sopenharmony_ci * (e.g. RCP) into color register 1907bf215546Sopenharmony_ci * - apparently, there's no quick DST operation 1908bf215546Sopenharmony_ci * - fglrx set FPI2_UNKNOWN_31 on a "MAD fragment.color, tmp0, tmp1, tmp2" 1909bf215546Sopenharmony_ci * - fglrx set FPI2_UNKNOWN_31 on a "MAX r2, r1, c0" 1910bf215546Sopenharmony_ci * - fglrx once set FPI0_UNKNOWN_31 on a "FRC r1, r1" 1911bf215546Sopenharmony_ci * 1912bf215546Sopenharmony_ci * Operand selection 1913bf215546Sopenharmony_ci * First stage selects three sources from the available registers and 1914bf215546Sopenharmony_ci * constant parameters. This is defined in INSTR1 (color) and INSTR3 (alpha). 1915bf215546Sopenharmony_ci * fglrx sorts the three source fields: Registers before constants, 1916bf215546Sopenharmony_ci * lower indices before higher indices; I do not know whether this is 1917bf215546Sopenharmony_ci * necessary. 1918bf215546Sopenharmony_ci * 1919bf215546Sopenharmony_ci * fglrx fills unused sources with "read constant 0" 1920bf215546Sopenharmony_ci * According to specs, you cannot select more than two different constants. 1921bf215546Sopenharmony_ci * 1922bf215546Sopenharmony_ci * Second stage selects the operands from the sources. This is defined in 1923bf215546Sopenharmony_ci * INSTR0 (color) and INSTR2 (alpha). You can also select the special constants 1924bf215546Sopenharmony_ci * zero and one. 1925bf215546Sopenharmony_ci * Swizzling and negation happens in this stage, as well. 1926bf215546Sopenharmony_ci * 1927bf215546Sopenharmony_ci * Important: Color and alpha seem to be mostly separate, i.e. their sources 1928bf215546Sopenharmony_ci * selection appears to be fully independent (the register storage is probably 1929bf215546Sopenharmony_ci * physically split into a color and an alpha section). 1930bf215546Sopenharmony_ci * However (because of the apparent physical split), there is some interaction 1931bf215546Sopenharmony_ci * WRT swizzling. If, for example, you want to load an R component into an 1932bf215546Sopenharmony_ci * Alpha operand, this R component is taken from a *color* source, not from 1933bf215546Sopenharmony_ci * an alpha source. The corresponding register doesn't even have to appear in 1934bf215546Sopenharmony_ci * the alpha sources list. (I hope this all makes sense to you) 1935bf215546Sopenharmony_ci * 1936bf215546Sopenharmony_ci * Destination selection 1937bf215546Sopenharmony_ci * The destination register index is in FPI1 (color) and FPI3 (alpha) 1938bf215546Sopenharmony_ci * together with enable bits. 1939bf215546Sopenharmony_ci * There are separate enable bits for writing into temporary registers 1940bf215546Sopenharmony_ci * (DSTC_REG_* /DSTA_REG) and program output registers (DSTC_OUTPUT_* 1941bf215546Sopenharmony_ci * /DSTA_OUTPUT). You can write to both at once, or not write at all (the 1942bf215546Sopenharmony_ci * same index must be used for both). 1943bf215546Sopenharmony_ci * 1944bf215546Sopenharmony_ci * Note: There is a special form for LRP 1945bf215546Sopenharmony_ci * - Argument order is the same as in ARB_fragment_program. 1946bf215546Sopenharmony_ci * - Operation is MAD 1947bf215546Sopenharmony_ci * - ARG1 is set to ARGC_SRC1C_LRP/ARGC_SRC1A_LRP 1948bf215546Sopenharmony_ci * - Set FPI0/FPI2_SPECIAL_LRP 1949bf215546Sopenharmony_ci * Arbitrary LRP (including support for swizzling) requires vanilla MAD+MAD 1950bf215546Sopenharmony_ci */ 1951bf215546Sopenharmony_ci#define R300_US_ALU_RGB_ADDR_0 0x46C0 1952bf215546Sopenharmony_ci# define R300_ALU_SRC0C_SHIFT 0 1953bf215546Sopenharmony_ci# define R300_ALU_SRC0C_MASK (31 << 0) 1954bf215546Sopenharmony_ci# define R300_ALU_SRC0C_CONST (1 << 5) 1955bf215546Sopenharmony_ci# define R300_ALU_SRC1C_SHIFT 6 1956bf215546Sopenharmony_ci# define R300_ALU_SRC1C_MASK (31 << 6) 1957bf215546Sopenharmony_ci# define R300_ALU_SRC1C_CONST (1 << 11) 1958bf215546Sopenharmony_ci# define R300_ALU_SRC2C_SHIFT 12 1959bf215546Sopenharmony_ci# define R300_ALU_SRC2C_MASK (31 << 12) 1960bf215546Sopenharmony_ci# define R300_ALU_SRC2C_CONST (1 << 17) 1961bf215546Sopenharmony_ci# define R300_ALU_SRC_MASK 0x0003ffff 1962bf215546Sopenharmony_ci# define R300_ALU_DSTC_SHIFT 18 1963bf215546Sopenharmony_ci# define R300_ALU_DSTC_MASK (31 << 18) 1964bf215546Sopenharmony_ci# define R300_ALU_DSTC_REG_MASK_SHIFT 23 1965bf215546Sopenharmony_ci# define R300_ALU_DSTC_REG_X (1 << 23) 1966bf215546Sopenharmony_ci# define R300_ALU_DSTC_REG_Y (1 << 24) 1967bf215546Sopenharmony_ci# define R300_ALU_DSTC_REG_Z (1 << 25) 1968bf215546Sopenharmony_ci# define R300_ALU_DSTC_OUTPUT_MASK_SHIFT 26 1969bf215546Sopenharmony_ci# define R300_ALU_DSTC_OUTPUT_X (1 << 26) 1970bf215546Sopenharmony_ci# define R300_ALU_DSTC_OUTPUT_Y (1 << 27) 1971bf215546Sopenharmony_ci# define R300_ALU_DSTC_OUTPUT_Z (1 << 28) 1972bf215546Sopenharmony_ci# define R300_ALU_DSTC_OUTPUT_XYZ (7 << 26) 1973bf215546Sopenharmony_ci# define R300_RGB_ADDR0(x) ((x) << 0) 1974bf215546Sopenharmony_ci# define R300_RGB_ADDR1(x) ((x) << 6) 1975bf215546Sopenharmony_ci# define R300_RGB_ADDR2(x) ((x) << 12) 1976bf215546Sopenharmony_ci# define R300_RGB_TARGET(x) ((x) << 29) 1977bf215546Sopenharmony_ci 1978bf215546Sopenharmony_ci#define R300_US_ALU_ALPHA_ADDR_0 0x47C0 1979bf215546Sopenharmony_ci# define R300_ALU_SRC0A_SHIFT 0 1980bf215546Sopenharmony_ci# define R300_ALU_SRC0A_MASK (31 << 0) 1981bf215546Sopenharmony_ci# define R300_ALU_SRC0A_CONST (1 << 5) 1982bf215546Sopenharmony_ci# define R300_ALU_SRC1A_SHIFT 6 1983bf215546Sopenharmony_ci# define R300_ALU_SRC1A_MASK (31 << 6) 1984bf215546Sopenharmony_ci# define R300_ALU_SRC1A_CONST (1 << 11) 1985bf215546Sopenharmony_ci# define R300_ALU_SRC2A_SHIFT 12 1986bf215546Sopenharmony_ci# define R300_ALU_SRC2A_MASK (31 << 12) 1987bf215546Sopenharmony_ci# define R300_ALU_SRC2A_CONST (1 << 17) 1988bf215546Sopenharmony_ci# define R300_ALU_SRC_MASK 0x0003ffff 1989bf215546Sopenharmony_ci# define R300_ALU_DSTA_SHIFT 18 1990bf215546Sopenharmony_ci# define R300_ALU_DSTA_MASK (31 << 18) 1991bf215546Sopenharmony_ci# define R300_ALU_DSTA_REG (1 << 23) 1992bf215546Sopenharmony_ci# define R300_ALU_DSTA_OUTPUT (1 << 24) 1993bf215546Sopenharmony_ci# define R300_ALU_DSTA_DEPTH (1 << 27) 1994bf215546Sopenharmony_ci# define R300_ALPHA_ADDR0(x) ((x) << 0) 1995bf215546Sopenharmony_ci# define R300_ALPHA_ADDR1(x) ((x) << 6) 1996bf215546Sopenharmony_ci# define R300_ALPHA_ADDR2(x) ((x) << 12) 1997bf215546Sopenharmony_ci# define R300_ALPHA_TARGET(x) ((x) << 25) 1998bf215546Sopenharmony_ci 1999bf215546Sopenharmony_ci#define R300_US_ALU_RGB_INST_0 0x48C0 2000bf215546Sopenharmony_ci# define R300_ALU_ARGC_SRC0C_XYZ 0 2001bf215546Sopenharmony_ci# define R300_ALU_ARGC_SRC0C_XXX 1 2002bf215546Sopenharmony_ci# define R300_ALU_ARGC_SRC0C_YYY 2 2003bf215546Sopenharmony_ci# define R300_ALU_ARGC_SRC0C_ZZZ 3 2004bf215546Sopenharmony_ci# define R300_ALU_ARGC_SRC1C_XYZ 4 2005bf215546Sopenharmony_ci# define R300_ALU_ARGC_SRC1C_XXX 5 2006bf215546Sopenharmony_ci# define R300_ALU_ARGC_SRC1C_YYY 6 2007bf215546Sopenharmony_ci# define R300_ALU_ARGC_SRC1C_ZZZ 7 2008bf215546Sopenharmony_ci# define R300_ALU_ARGC_SRC2C_XYZ 8 2009bf215546Sopenharmony_ci# define R300_ALU_ARGC_SRC2C_XXX 9 2010bf215546Sopenharmony_ci# define R300_ALU_ARGC_SRC2C_YYY 10 2011bf215546Sopenharmony_ci# define R300_ALU_ARGC_SRC2C_ZZZ 11 2012bf215546Sopenharmony_ci# define R300_ALU_ARGC_SRC0A 12 2013bf215546Sopenharmony_ci# define R300_ALU_ARGC_SRC1A 13 2014bf215546Sopenharmony_ci# define R300_ALU_ARGC_SRC2A 14 2015bf215546Sopenharmony_ci# define R300_ALU_ARGC_SRCP_XYZ 15 2016bf215546Sopenharmony_ci# define R300_ALU_ARGC_SRCP_XXX 16 2017bf215546Sopenharmony_ci# define R300_ALU_ARGC_SRCP_YYY 17 2018bf215546Sopenharmony_ci# define R300_ALU_ARGC_SRCP_ZZZ 18 2019bf215546Sopenharmony_ci# define R300_ALU_ARGC_SRCP_WWW 19 2020bf215546Sopenharmony_ci# define R300_ALU_ARGC_ZERO 20 2021bf215546Sopenharmony_ci# define R300_ALU_ARGC_ONE 21 2022bf215546Sopenharmony_ci# define R300_ALU_ARGC_HALF 22 2023bf215546Sopenharmony_ci# define R300_ALU_ARGC_SRC0C_YZX 23 2024bf215546Sopenharmony_ci# define R300_ALU_ARGC_SRC1C_YZX 24 2025bf215546Sopenharmony_ci# define R300_ALU_ARGC_SRC2C_YZX 25 2026bf215546Sopenharmony_ci# define R300_ALU_ARGC_SRC0C_ZXY 26 2027bf215546Sopenharmony_ci# define R300_ALU_ARGC_SRC1C_ZXY 27 2028bf215546Sopenharmony_ci# define R300_ALU_ARGC_SRC2C_ZXY 28 2029bf215546Sopenharmony_ci# define R300_ALU_ARGC_SRC0CA_WZY 29 2030bf215546Sopenharmony_ci# define R300_ALU_ARGC_SRC1CA_WZY 30 2031bf215546Sopenharmony_ci# define R300_ALU_ARGC_SRC2CA_WZY 31 2032bf215546Sopenharmony_ci# define R300_RGB_SWIZA(x) ((x) << 0) 2033bf215546Sopenharmony_ci# define R300_RGB_SWIZB(x) ((x) << 7) 2034bf215546Sopenharmony_ci# define R300_RGB_SWIZC(x) ((x) << 14) 2035bf215546Sopenharmony_ci 2036bf215546Sopenharmony_ci# define R300_ALU_ARG0C_SHIFT 0 2037bf215546Sopenharmony_ci# define R300_ALU_ARG0C_MASK (31 << 0) 2038bf215546Sopenharmony_ci# define R300_ALU_ARG0C_NOP (0 << 5) 2039bf215546Sopenharmony_ci# define R300_ALU_ARG0C_NEG (1 << 5) 2040bf215546Sopenharmony_ci# define R300_ALU_ARG0C_ABS (2 << 5) 2041bf215546Sopenharmony_ci# define R300_ALU_ARG0C_NAB (3 << 5) 2042bf215546Sopenharmony_ci# define R300_ALU_ARG1C_SHIFT 7 2043bf215546Sopenharmony_ci# define R300_ALU_ARG1C_MASK (31 << 7) 2044bf215546Sopenharmony_ci# define R300_ALU_ARG1C_NOP (0 << 12) 2045bf215546Sopenharmony_ci# define R300_ALU_ARG1C_NEG (1 << 12) 2046bf215546Sopenharmony_ci# define R300_ALU_ARG1C_ABS (2 << 12) 2047bf215546Sopenharmony_ci# define R300_ALU_ARG1C_NAB (3 << 12) 2048bf215546Sopenharmony_ci# define R300_ALU_ARG2C_SHIFT 14 2049bf215546Sopenharmony_ci# define R300_ALU_ARG2C_MASK (31 << 14) 2050bf215546Sopenharmony_ci# define R300_ALU_ARG2C_NOP (0 << 19) 2051bf215546Sopenharmony_ci# define R300_ALU_ARG2C_NEG (1 << 19) 2052bf215546Sopenharmony_ci# define R300_ALU_ARG2C_ABS (2 << 19) 2053bf215546Sopenharmony_ci# define R300_ALU_ARG2C_NAB (3 << 19) 2054bf215546Sopenharmony_ci# define R300_ALU_SRCP_1_MINUS_2_SRC0 (0 << 21) 2055bf215546Sopenharmony_ci# define R300_ALU_SRCP_SRC1_MINUS_SRC0 (1 << 21) 2056bf215546Sopenharmony_ci# define R300_ALU_SRCP_SRC1_PLUS_SRC0 (2 << 21) 2057bf215546Sopenharmony_ci# define R300_ALU_SRCP_1_MINUS_SRC0 (3 << 21) 2058bf215546Sopenharmony_ci 2059bf215546Sopenharmony_ci# define R300_ALU_OUTC_MAD (0 << 23) 2060bf215546Sopenharmony_ci# define R300_ALU_OUTC_DP3 (1 << 23) 2061bf215546Sopenharmony_ci# define R300_ALU_OUTC_DP4 (2 << 23) 2062bf215546Sopenharmony_ci# define R300_ALU_OUTC_D2A (3 << 23) 2063bf215546Sopenharmony_ci# define R300_ALU_OUTC_MIN (4 << 23) 2064bf215546Sopenharmony_ci# define R300_ALU_OUTC_MAX (5 << 23) 2065bf215546Sopenharmony_ci# define R300_ALU_OUTC_CND (7 << 23) 2066bf215546Sopenharmony_ci# define R300_ALU_OUTC_CMP (8 << 23) 2067bf215546Sopenharmony_ci# define R300_ALU_OUTC_FRC (9 << 23) 2068bf215546Sopenharmony_ci# define R300_ALU_OUTC_REPL_ALPHA (10 << 23) 2069bf215546Sopenharmony_ci 2070bf215546Sopenharmony_ci# define R300_ALU_OUTC_MOD_SHIFT 27 2071bf215546Sopenharmony_ci# define R300_ALU_OUTC_MOD_NOP (0 << R300_ALU_OUTC_MOD_SHIFT) 2072bf215546Sopenharmony_ci# define R300_ALU_OUTC_MOD_MUL2 (1 << R300_ALU_OUTC_MOD_SHIFT) 2073bf215546Sopenharmony_ci# define R300_ALU_OUTC_MOD_MUL4 (2 << R300_ALU_OUTC_MOD_SHIFT) 2074bf215546Sopenharmony_ci# define R300_ALU_OUTC_MOD_MUL8 (3 << R300_ALU_OUTC_MOD_SHIFT) 2075bf215546Sopenharmony_ci# define R300_ALU_OUTC_MOD_DIV2 (4 << R300_ALU_OUTC_MOD_SHIFT) 2076bf215546Sopenharmony_ci# define R300_ALU_OUTC_MOD_DIV4 (5 << R300_ALU_OUTC_MOD_SHIFT) 2077bf215546Sopenharmony_ci# define R300_ALU_OUTC_MOD_DIV8 (6 << R300_ALU_OUTC_MOD_SHIFT) 2078bf215546Sopenharmony_ci 2079bf215546Sopenharmony_ci# define R300_ALU_OUTC_CLAMP (1 << 30) 2080bf215546Sopenharmony_ci# define R300_ALU_INSERT_NOP (1U << 31) 2081bf215546Sopenharmony_ci 2082bf215546Sopenharmony_ci#define R300_US_ALU_ALPHA_INST_0 0x49C0 2083bf215546Sopenharmony_ci# define R300_ALU_ARGA_SRC0C_X 0 2084bf215546Sopenharmony_ci# define R300_ALU_ARGA_SRC0C_Y 1 2085bf215546Sopenharmony_ci# define R300_ALU_ARGA_SRC0C_Z 2 2086bf215546Sopenharmony_ci# define R300_ALU_ARGA_SRC1C_X 3 2087bf215546Sopenharmony_ci# define R300_ALU_ARGA_SRC1C_Y 4 2088bf215546Sopenharmony_ci# define R300_ALU_ARGA_SRC1C_Z 5 2089bf215546Sopenharmony_ci# define R300_ALU_ARGA_SRC2C_X 6 2090bf215546Sopenharmony_ci# define R300_ALU_ARGA_SRC2C_Y 7 2091bf215546Sopenharmony_ci# define R300_ALU_ARGA_SRC2C_Z 8 2092bf215546Sopenharmony_ci# define R300_ALU_ARGA_SRC0A 9 2093bf215546Sopenharmony_ci# define R300_ALU_ARGA_SRC1A 10 2094bf215546Sopenharmony_ci# define R300_ALU_ARGA_SRC2A 11 2095bf215546Sopenharmony_ci# define R300_ALU_ARGA_SRCP_X 12 2096bf215546Sopenharmony_ci# define R300_ALU_ARGA_SRCP_Y 13 2097bf215546Sopenharmony_ci# define R300_ALU_ARGA_SRCP_Z 14 2098bf215546Sopenharmony_ci# define R300_ALU_ARGA_SRCP_W 15 2099bf215546Sopenharmony_ci# define R300_ALU_ARGA_ZERO 16 2100bf215546Sopenharmony_ci# define R300_ALU_ARGA_ONE 17 2101bf215546Sopenharmony_ci# define R300_ALU_ARGA_HALF 18 2102bf215546Sopenharmony_ci# define R300_ALPHA_SWIZA(x) ((x) << 0) 2103bf215546Sopenharmony_ci# define R300_ALPHA_SWIZB(x) ((x) << 7) 2104bf215546Sopenharmony_ci# define R300_ALPHA_SWIZC(x) ((x) << 14) 2105bf215546Sopenharmony_ci 2106bf215546Sopenharmony_ci# define R300_ALU_ARG0A_SHIFT 0 2107bf215546Sopenharmony_ci# define R300_ALU_ARG0A_MASK (31 << 0) 2108bf215546Sopenharmony_ci# define R300_ALU_ARG0A_NOP (0 << 5) 2109bf215546Sopenharmony_ci# define R300_ALU_ARG0A_NEG (1 << 5) 2110bf215546Sopenharmony_ci# define R300_ALU_ARG0A_ABS (2 << 5) 2111bf215546Sopenharmony_ci# define R300_ALU_ARG0A_NAB (3 << 5) 2112bf215546Sopenharmony_ci# define R300_ALU_ARG1A_SHIFT 7 2113bf215546Sopenharmony_ci# define R300_ALU_ARG1A_MASK (31 << 7) 2114bf215546Sopenharmony_ci# define R300_ALU_ARG1A_NOP (0 << 12) 2115bf215546Sopenharmony_ci# define R300_ALU_ARG1A_NEG (1 << 12) 2116bf215546Sopenharmony_ci# define R300_ALU_ARG1A_ABS (2 << 12) 2117bf215546Sopenharmony_ci# define R300_ALU_ARG1A_NAB (3 << 12) 2118bf215546Sopenharmony_ci# define R300_ALU_ARG2A_SHIFT 14 2119bf215546Sopenharmony_ci# define R300_ALU_ARG2A_MASK (31 << 14) 2120bf215546Sopenharmony_ci# define R300_ALU_ARG2A_NOP (0 << 19) 2121bf215546Sopenharmony_ci# define R300_ALU_ARG2A_NEG (1 << 19) 2122bf215546Sopenharmony_ci# define R300_ALU_ARG2A_ABS (2 << 19) 2123bf215546Sopenharmony_ci# define R300_ALU_ARG2A_NAB (3 << 19) 2124bf215546Sopenharmony_ci# define R300_ALU_SRCP_1_MINUS_2_SRC0 (0 << 21) 2125bf215546Sopenharmony_ci# define R300_ALU_SRCP_SRC1_MINUS_SRC0 (1 << 21) 2126bf215546Sopenharmony_ci# define R300_ALU_SRCP_SRC1_PLUS_SRC0 (2 << 21) 2127bf215546Sopenharmony_ci# define R300_ALU_SRCP_1_MINUS_SRC0 (3 << 21) 2128bf215546Sopenharmony_ci 2129bf215546Sopenharmony_ci# define R300_ALU_OUTA_MAD (0 << 23) 2130bf215546Sopenharmony_ci# define R300_ALU_OUTA_DP4 (1 << 23) 2131bf215546Sopenharmony_ci# define R300_ALU_OUTA_MIN (2 << 23) 2132bf215546Sopenharmony_ci# define R300_ALU_OUTA_MAX (3 << 23) 2133bf215546Sopenharmony_ci# define R300_ALU_OUTA_CND (5 << 23) 2134bf215546Sopenharmony_ci# define R300_ALU_OUTA_CMP (6 << 23) 2135bf215546Sopenharmony_ci# define R300_ALU_OUTA_FRC (7 << 23) 2136bf215546Sopenharmony_ci# define R300_ALU_OUTA_EX2 (8 << 23) 2137bf215546Sopenharmony_ci# define R300_ALU_OUTA_LG2 (9 << 23) 2138bf215546Sopenharmony_ci# define R300_ALU_OUTA_RCP (10 << 23) 2139bf215546Sopenharmony_ci# define R300_ALU_OUTA_RSQ (11 << 23) 2140bf215546Sopenharmony_ci 2141bf215546Sopenharmony_ci# define R300_ALU_OUTA_MOD_NOP (0 << 27) 2142bf215546Sopenharmony_ci# define R300_ALU_OUTA_MOD_MUL2 (1 << 27) 2143bf215546Sopenharmony_ci# define R300_ALU_OUTA_MOD_MUL4 (2 << 27) 2144bf215546Sopenharmony_ci# define R300_ALU_OUTA_MOD_MUL8 (3 << 27) 2145bf215546Sopenharmony_ci# define R300_ALU_OUTA_MOD_DIV2 (4 << 27) 2146bf215546Sopenharmony_ci# define R300_ALU_OUTA_MOD_DIV4 (5 << 27) 2147bf215546Sopenharmony_ci# define R300_ALU_OUTA_MOD_DIV8 (6 << 27) 2148bf215546Sopenharmony_ci 2149bf215546Sopenharmony_ci# define R300_ALU_OUTA_CLAMP (1 << 30) 2150bf215546Sopenharmony_ci/* END: Fragment program instruction set */ 2151bf215546Sopenharmony_ci 2152bf215546Sopenharmony_ci/* R4xx extended fragment shader registers. */ 2153bf215546Sopenharmony_ci#define R400_US_ALU_EXT_ADDR_0 0x4ac0 /* up to 63 (0x4bbc) */ 2154bf215546Sopenharmony_ci# define R400_ADDR_EXT_RGB_MSB_BIT(x) (1 << (x)) 2155bf215546Sopenharmony_ci# define R400_ADDRD_EXT_RGB_MSB_BIT 0x08 2156bf215546Sopenharmony_ci# define R400_ADDR_EXT_A_MSB_BIT(x) (1 << ((x) + 4)) 2157bf215546Sopenharmony_ci# define R400_ADDRD_EXT_A_MSB_BIT 0x80 2158bf215546Sopenharmony_ci 2159bf215546Sopenharmony_ci#define R400_US_CODE_BANK 0x46b8 2160bf215546Sopenharmony_ci# define R400_BANK_SHIFT 0 2161bf215546Sopenharmony_ci# define R400_BANK_MASK 0xf 2162bf215546Sopenharmony_ci# define R400_R390_MODE_ENABLE (1 << 4) 2163bf215546Sopenharmony_ci#define R400_US_CODE_EXT 0x46bc 2164bf215546Sopenharmony_ci# define R400_ALU_OFFSET_MSB_SHIFT 0 2165bf215546Sopenharmony_ci# define R400_ALU_OFFSET_MSB_MASK (0x7 << 0) 2166bf215546Sopenharmony_ci# define R400_ALU_SIZE_MSB_SHIFT 3 2167bf215546Sopenharmony_ci# define R400_ALU_SIZE_MSB_MASK (0x7 << 3) 2168bf215546Sopenharmony_ci# define R400_ALU_START0_MSB_SHIFT 6 2169bf215546Sopenharmony_ci# define R400_ALU_START0_MSB_MASK (0x7 << 6) 2170bf215546Sopenharmony_ci# define R400_ALU_SIZE0_MSB_SHIFT 9 2171bf215546Sopenharmony_ci# define R400_ALU_SIZE0_MSB_MASK (0x7 << 9) 2172bf215546Sopenharmony_ci# define R400_ALU_START1_MSB_SHIFT 12 2173bf215546Sopenharmony_ci# define R400_ALU_START1_MSB_MASK (0x7 << 12) 2174bf215546Sopenharmony_ci# define R400_ALU_SIZE1_MSB_SHIFT 15 2175bf215546Sopenharmony_ci# define R400_ALU_SIZE1_MSB_MASK (0x7 << 15) 2176bf215546Sopenharmony_ci# define R400_ALU_START2_MSB_SHIFT 18 2177bf215546Sopenharmony_ci# define R400_ALU_START2_MSB_MASK (0x7 << 18) 2178bf215546Sopenharmony_ci# define R400_ALU_SIZE2_MSB_SHIFT 21 2179bf215546Sopenharmony_ci# define R400_ALU_SIZE2_MSB_MASK (0x7 << 21) 2180bf215546Sopenharmony_ci# define R400_ALU_START3_MSB_SHIFT 24 2181bf215546Sopenharmony_ci# define R400_ALU_START3_MSB_MASK (0x7 << 24) 2182bf215546Sopenharmony_ci# define R400_ALU_SIZE3_MSB_SHIFT 27 2183bf215546Sopenharmony_ci# define R400_ALU_SIZE3_MSB_MASK (0x7 << 27) 2184bf215546Sopenharmony_ci/* END: R4xx extended fragment shader registers. */ 2185bf215546Sopenharmony_ci 2186bf215546Sopenharmony_ci/* Fog: Fog Blending Enable */ 2187bf215546Sopenharmony_ci#define R300_FG_FOG_BLEND 0x4bc0 2188bf215546Sopenharmony_ci# define R300_FG_FOG_BLEND_DISABLE (0 << 0) 2189bf215546Sopenharmony_ci# define R300_FG_FOG_BLEND_ENABLE (1 << 0) 2190bf215546Sopenharmony_ci# define R300_FG_FOG_BLEND_FN_LINEAR (0 << 1) 2191bf215546Sopenharmony_ci# define R300_FG_FOG_BLEND_FN_EXP (1 << 1) 2192bf215546Sopenharmony_ci# define R300_FG_FOG_BLEND_FN_EXP2 (2 << 1) 2193bf215546Sopenharmony_ci# define R300_FG_FOG_BLEND_FN_CONSTANT (3 << 1) 2194bf215546Sopenharmony_ci# define R300_FG_FOG_BLEND_FN_MASK (3 << 1) 2195bf215546Sopenharmony_ci 2196bf215546Sopenharmony_ci/* Fog: Red Component of Fog Color */ 2197bf215546Sopenharmony_ci#define R300_FG_FOG_COLOR_R 0x4bc8 2198bf215546Sopenharmony_ci/* Fog: Green Component of Fog Color */ 2199bf215546Sopenharmony_ci#define R300_FG_FOG_COLOR_G 0x4bcc 2200bf215546Sopenharmony_ci/* Fog: Blue Component of Fog Color */ 2201bf215546Sopenharmony_ci#define R300_FG_FOG_COLOR_B 0x4bd0 2202bf215546Sopenharmony_ci# define R300_FG_FOG_COLOR_MASK 0x000003ff 2203bf215546Sopenharmony_ci 2204bf215546Sopenharmony_ci/* Fog: Constant Factor for Fog Blending */ 2205bf215546Sopenharmony_ci#define R300_FG_FOG_FACTOR 0x4bc4 2206bf215546Sopenharmony_ci# define FG_FOG_FACTOR_MASK 0x000003ff 2207bf215546Sopenharmony_ci 2208bf215546Sopenharmony_ci/* Fog: Alpha function */ 2209bf215546Sopenharmony_ci#define R300_FG_ALPHA_FUNC 0x4bd4 2210bf215546Sopenharmony_ci# define R300_FG_ALPHA_FUNC_VAL_MASK 0x000000ff 2211bf215546Sopenharmony_ci# define R300_FG_ALPHA_FUNC_NEVER (0 << 8) 2212bf215546Sopenharmony_ci# define R300_FG_ALPHA_FUNC_LESS (1 << 8) 2213bf215546Sopenharmony_ci# define R300_FG_ALPHA_FUNC_EQUAL (2 << 8) 2214bf215546Sopenharmony_ci# define R300_FG_ALPHA_FUNC_LE (3 << 8) 2215bf215546Sopenharmony_ci# define R300_FG_ALPHA_FUNC_GREATER (4 << 8) 2216bf215546Sopenharmony_ci# define R300_FG_ALPHA_FUNC_NOTEQUAL (5 << 8) 2217bf215546Sopenharmony_ci# define R300_FG_ALPHA_FUNC_GE (6 << 8) 2218bf215546Sopenharmony_ci# define R300_FG_ALPHA_FUNC_ALWAYS (7 << 8) 2219bf215546Sopenharmony_ci# define R300_ALPHA_TEST_OP_MASK (7 << 8) 2220bf215546Sopenharmony_ci# define R300_FG_ALPHA_FUNC_DISABLE (0 << 11) 2221bf215546Sopenharmony_ci# define R300_FG_ALPHA_FUNC_ENABLE (1 << 11) 2222bf215546Sopenharmony_ci 2223bf215546Sopenharmony_ci# define R500_FG_ALPHA_FUNC_10BIT (0 << 12) 2224bf215546Sopenharmony_ci# define R500_FG_ALPHA_FUNC_8BIT (1 << 12) 2225bf215546Sopenharmony_ci 2226bf215546Sopenharmony_ci# define R300_FG_ALPHA_FUNC_MASK_DISABLE (0 << 16) 2227bf215546Sopenharmony_ci# define R300_FG_ALPHA_FUNC_MASK_ENABLE (1 << 16) 2228bf215546Sopenharmony_ci# define R300_FG_ALPHA_FUNC_CFG_2_OF_4 (0 << 17) 2229bf215546Sopenharmony_ci# define R300_FG_ALPHA_FUNC_CFG_3_OF_6 (1 << 17) 2230bf215546Sopenharmony_ci 2231bf215546Sopenharmony_ci# define R300_FG_ALPHA_FUNC_DITH_DISABLE (0 << 20) 2232bf215546Sopenharmony_ci# define R300_FG_ALPHA_FUNC_DITH_ENABLE (1 << 20) 2233bf215546Sopenharmony_ci 2234bf215546Sopenharmony_ci# define R500_FG_ALPHA_FUNC_OFFSET_DISABLE (0 << 24) 2235bf215546Sopenharmony_ci# define R500_FG_ALPHA_FUNC_OFFSET_ENABLE (1 << 24) /* Not supported in R520 */ 2236bf215546Sopenharmony_ci# define R500_FG_ALPHA_FUNC_DISC_ZERO_MASK_DISABLE (0 << 25) 2237bf215546Sopenharmony_ci# define R500_FG_ALPHA_FUNC_DISC_ZERO_MASK_ENABLE (1 << 25) 2238bf215546Sopenharmony_ci 2239bf215546Sopenharmony_ci# define R500_FG_ALPHA_FUNC_FP16_DISABLE (0 << 28) 2240bf215546Sopenharmony_ci# define R500_FG_ALPHA_FUNC_FP16_ENABLE (1 << 28) 2241bf215546Sopenharmony_ci 2242bf215546Sopenharmony_ci 2243bf215546Sopenharmony_ci/* Fog: Where does the depth come from? */ 2244bf215546Sopenharmony_ci#define R300_FG_DEPTH_SRC 0x4bd8 2245bf215546Sopenharmony_ci# define R300_FG_DEPTH_SRC_SCAN (0 << 0) 2246bf215546Sopenharmony_ci# define R300_FG_DEPTH_SRC_SHADER (1 << 0) 2247bf215546Sopenharmony_ci 2248bf215546Sopenharmony_ci/* Fog: Alpha Compare Value */ 2249bf215546Sopenharmony_ci#define R500_FG_ALPHA_VALUE 0x4be0 2250bf215546Sopenharmony_ci# define R500_FG_ALPHA_VALUE_MASK 0x0000ffff 2251bf215546Sopenharmony_ci 2252bf215546Sopenharmony_ci#define RV530_FG_ZBREG_DEST 0x4be8 2253bf215546Sopenharmony_ci# define RV530_FG_ZBREG_DEST_PIPE_SELECT_0 (1 << 0) 2254bf215546Sopenharmony_ci# define RV530_FG_ZBREG_DEST_PIPE_SELECT_1 (1 << 1) 2255bf215546Sopenharmony_ci# define RV530_FG_ZBREG_DEST_PIPE_SELECT_ALL (3 << 0) 2256bf215546Sopenharmony_ci/* gap */ 2257bf215546Sopenharmony_ci 2258bf215546Sopenharmony_ci/* Fragment program parameters in 7.16 floating point */ 2259bf215546Sopenharmony_ci#define R300_PFS_PARAM_0_X 0x4C00 2260bf215546Sopenharmony_ci#define R300_PFS_PARAM_0_Y 0x4C04 2261bf215546Sopenharmony_ci#define R300_PFS_PARAM_0_Z 0x4C08 2262bf215546Sopenharmony_ci#define R300_PFS_PARAM_0_W 0x4C0C 2263bf215546Sopenharmony_ci/* last consts */ 2264bf215546Sopenharmony_ci#define R300_PFS_PARAM_31_X 0x4DF0 2265bf215546Sopenharmony_ci#define R300_PFS_PARAM_31_Y 0x4DF4 2266bf215546Sopenharmony_ci#define R300_PFS_PARAM_31_Z 0x4DF8 2267bf215546Sopenharmony_ci#define R300_PFS_PARAM_31_W 0x4DFC 2268bf215546Sopenharmony_ci 2269bf215546Sopenharmony_ci/* Unpipelined. */ 2270bf215546Sopenharmony_ci#define R300_RB3D_CCTL 0x4e00 2271bf215546Sopenharmony_ci# define R300_RB3D_CCTL_NUM_MULTIWRITES(x) (MAX2(((x)-1), 0) << 5) 2272bf215546Sopenharmony_ci# define R300_RB3D_CCTL_NUM_MULTIWRITES_1_BUFFER (0 << 5) 2273bf215546Sopenharmony_ci# define R300_RB3D_CCTL_NUM_MULTIWRITES_2_BUFFERS (1 << 5) 2274bf215546Sopenharmony_ci# define R300_RB3D_CCTL_NUM_MULTIWRITES_3_BUFFERS (2 << 5) 2275bf215546Sopenharmony_ci# define R300_RB3D_CCTL_NUM_MULTIWRITES_4_BUFFERS (3 << 5) 2276bf215546Sopenharmony_ci# define R300_RB3D_CCTL_CLRCMP_FLIPE_DISABLE (0 << 7) 2277bf215546Sopenharmony_ci# define R300_RB3D_CCTL_CLRCMP_FLIPE_ENABLE (1 << 7) 2278bf215546Sopenharmony_ci# define R300_RB3D_CCTL_AA_COMPRESSION_DISABLE (0 << 9) 2279bf215546Sopenharmony_ci# define R300_RB3D_CCTL_AA_COMPRESSION_ENABLE (1 << 9) 2280bf215546Sopenharmony_ci# define R300_RB3D_CCTL_CMASK_DISABLE (0 << 10) 2281bf215546Sopenharmony_ci# define R300_RB3D_CCTL_CMASK_ENABLE (1 << 10) 2282bf215546Sopenharmony_ci/* reserved */ 2283bf215546Sopenharmony_ci# define R300_RB3D_CCTL_INDEPENDENT_COLOR_CHANNEL_MASK_DISABLE (0 << 12) 2284bf215546Sopenharmony_ci# define R300_RB3D_CCTL_INDEPENDENT_COLOR_CHANNEL_MASK_ENABLE (1 << 12) 2285bf215546Sopenharmony_ci# define R300_RB3D_CCTL_WRITE_COMPRESSION_ENABLE (0 << 13) 2286bf215546Sopenharmony_ci# define R300_RB3D_CCTL_WRITE_COMPRESSION_DISABLE (1 << 13) 2287bf215546Sopenharmony_ci# define R300_RB3D_CCTL_INDEPENDENT_COLORFORMAT_ENABLE_DISABLE (0 << 14) 2288bf215546Sopenharmony_ci# define R300_RB3D_CCTL_INDEPENDENT_COLORFORMAT_ENABLE_ENABLE (1 << 14) 2289bf215546Sopenharmony_ci 2290bf215546Sopenharmony_ci 2291bf215546Sopenharmony_ci/* Notes: 2292bf215546Sopenharmony_ci * - AFAIK fglrx always sets BLEND_UNKNOWN when blending is used in 2293bf215546Sopenharmony_ci * the application 2294bf215546Sopenharmony_ci * - AFAIK fglrx always sets BLEND_NO_SEPARATE when CBLEND and ABLEND 2295bf215546Sopenharmony_ci * are set to the same 2296bf215546Sopenharmony_ci * function (both registers are always set up completely in any case) 2297bf215546Sopenharmony_ci * - Most blend flags are simply copied from R200 and not tested yet 2298bf215546Sopenharmony_ci */ 2299bf215546Sopenharmony_ci#define R300_RB3D_CBLEND 0x4E04 2300bf215546Sopenharmony_ci#define R300_RB3D_ABLEND 0x4E08 2301bf215546Sopenharmony_ci/* the following only appear in CBLEND */ 2302bf215546Sopenharmony_ci# define R300_ALPHA_BLEND_ENABLE (1 << 0) 2303bf215546Sopenharmony_ci# define R300_SEPARATE_ALPHA_ENABLE (1 << 1) 2304bf215546Sopenharmony_ci# define R300_READ_ENABLE (1 << 2) 2305bf215546Sopenharmony_ci# define R300_DISCARD_SRC_PIXELS_DIS (0 << 3) 2306bf215546Sopenharmony_ci# define R300_DISCARD_SRC_PIXELS_SRC_ALPHA_0 (1 << 3) 2307bf215546Sopenharmony_ci# define R300_DISCARD_SRC_PIXELS_SRC_COLOR_0 (2 << 3) 2308bf215546Sopenharmony_ci# define R300_DISCARD_SRC_PIXELS_SRC_ALPHA_COLOR_0 (3 << 3) 2309bf215546Sopenharmony_ci# define R300_DISCARD_SRC_PIXELS_SRC_ALPHA_1 (4 << 3) 2310bf215546Sopenharmony_ci# define R300_DISCARD_SRC_PIXELS_SRC_COLOR_1 (5 << 3) 2311bf215546Sopenharmony_ci# define R300_DISCARD_SRC_PIXELS_SRC_ALPHA_COLOR_1 (6 << 3) 2312bf215546Sopenharmony_ci# define R500_SRC_ALPHA_0_NO_READ (1 << 30) 2313bf215546Sopenharmony_ci# define R500_SRC_ALPHA_1_NO_READ (1U << 31) 2314bf215546Sopenharmony_ci 2315bf215546Sopenharmony_ci/* the following are shared between CBLEND and ABLEND */ 2316bf215546Sopenharmony_ci# define R300_FCN_MASK (3 << 12) 2317bf215546Sopenharmony_ci# define R300_COMB_FCN_ADD_CLAMP (0 << 12) 2318bf215546Sopenharmony_ci# define R300_COMB_FCN_ADD_NOCLAMP (1 << 12) 2319bf215546Sopenharmony_ci# define R300_COMB_FCN_SUB_CLAMP (2 << 12) 2320bf215546Sopenharmony_ci# define R300_COMB_FCN_SUB_NOCLAMP (3 << 12) 2321bf215546Sopenharmony_ci# define R300_COMB_FCN_MIN (4 << 12) 2322bf215546Sopenharmony_ci# define R300_COMB_FCN_MAX (5 << 12) 2323bf215546Sopenharmony_ci# define R300_COMB_FCN_RSUB_CLAMP (6 << 12) 2324bf215546Sopenharmony_ci# define R300_COMB_FCN_RSUB_NOCLAMP (7 << 12) 2325bf215546Sopenharmony_ci# define R300_BLEND_GL_ZERO (32) 2326bf215546Sopenharmony_ci# define R300_BLEND_GL_ONE (33) 2327bf215546Sopenharmony_ci# define R300_BLEND_GL_SRC_COLOR (34) 2328bf215546Sopenharmony_ci# define R300_BLEND_GL_ONE_MINUS_SRC_COLOR (35) 2329bf215546Sopenharmony_ci# define R300_BLEND_GL_DST_COLOR (36) 2330bf215546Sopenharmony_ci# define R300_BLEND_GL_ONE_MINUS_DST_COLOR (37) 2331bf215546Sopenharmony_ci# define R300_BLEND_GL_SRC_ALPHA (38) 2332bf215546Sopenharmony_ci# define R300_BLEND_GL_ONE_MINUS_SRC_ALPHA (39) 2333bf215546Sopenharmony_ci# define R300_BLEND_GL_DST_ALPHA (40) 2334bf215546Sopenharmony_ci# define R300_BLEND_GL_ONE_MINUS_DST_ALPHA (41) 2335bf215546Sopenharmony_ci# define R300_BLEND_GL_SRC_ALPHA_SATURATE (42) 2336bf215546Sopenharmony_ci# define R300_BLEND_GL_CONST_COLOR (43) 2337bf215546Sopenharmony_ci# define R300_BLEND_GL_ONE_MINUS_CONST_COLOR (44) 2338bf215546Sopenharmony_ci# define R300_BLEND_GL_CONST_ALPHA (45) 2339bf215546Sopenharmony_ci# define R300_BLEND_GL_ONE_MINUS_CONST_ALPHA (46) 2340bf215546Sopenharmony_ci# define R300_BLEND_MASK (63) 2341bf215546Sopenharmony_ci# define R300_SRC_BLEND_SHIFT (16) 2342bf215546Sopenharmony_ci# define R300_DST_BLEND_SHIFT (24) 2343bf215546Sopenharmony_ci 2344bf215546Sopenharmony_ci/* Constant color used by the blender. Pipelined through the blender. 2345bf215546Sopenharmony_ci * Note: For R520, this field is ignored, use RB3D_CONSTANT_COLOR_GB__BLUE, 2346bf215546Sopenharmony_ci * RB3D_CONSTANT_COLOR_GB__GREEN, etc. instead. 2347bf215546Sopenharmony_ci */ 2348bf215546Sopenharmony_ci#define R300_RB3D_BLEND_COLOR 0x4E10 2349bf215546Sopenharmony_ci 2350bf215546Sopenharmony_ci 2351bf215546Sopenharmony_ci/* 3D Color Channel Mask. If all the channels used in the current color format 2352bf215546Sopenharmony_ci * are disabled, then the cb will discard all the incoming quads. Pipelined 2353bf215546Sopenharmony_ci * through the blender. 2354bf215546Sopenharmony_ci */ 2355bf215546Sopenharmony_ci#define RB3D_COLOR_CHANNEL_MASK 0x4E0C 2356bf215546Sopenharmony_ci# define RB3D_COLOR_CHANNEL_MASK_BLUE_MASK0 (1 << 0) 2357bf215546Sopenharmony_ci# define RB3D_COLOR_CHANNEL_MASK_GREEN_MASK0 (1 << 1) 2358bf215546Sopenharmony_ci# define RB3D_COLOR_CHANNEL_MASK_RED_MASK0 (1 << 2) 2359bf215546Sopenharmony_ci# define RB3D_COLOR_CHANNEL_MASK_ALPHA_MASK0 (1 << 3) 2360bf215546Sopenharmony_ci# define RB3D_COLOR_CHANNEL_MASK_BLUE_MASK1 (1 << 4) 2361bf215546Sopenharmony_ci# define RB3D_COLOR_CHANNEL_MASK_GREEN_MASK1 (1 << 5) 2362bf215546Sopenharmony_ci# define RB3D_COLOR_CHANNEL_MASK_RED_MASK1 (1 << 6) 2363bf215546Sopenharmony_ci# define RB3D_COLOR_CHANNEL_MASK_ALPHA_MASK1 (1 << 7) 2364bf215546Sopenharmony_ci# define RB3D_COLOR_CHANNEL_MASK_BLUE_MASK2 (1 << 8) 2365bf215546Sopenharmony_ci# define RB3D_COLOR_CHANNEL_MASK_GREEN_MASK2 (1 << 9) 2366bf215546Sopenharmony_ci# define RB3D_COLOR_CHANNEL_MASK_RED_MASK2 (1 << 10) 2367bf215546Sopenharmony_ci# define RB3D_COLOR_CHANNEL_MASK_ALPHA_MASK2 (1 << 11) 2368bf215546Sopenharmony_ci# define RB3D_COLOR_CHANNEL_MASK_BLUE_MASK3 (1 << 12) 2369bf215546Sopenharmony_ci# define RB3D_COLOR_CHANNEL_MASK_GREEN_MASK3 (1 << 13) 2370bf215546Sopenharmony_ci# define RB3D_COLOR_CHANNEL_MASK_RED_MASK3 (1 << 14) 2371bf215546Sopenharmony_ci# define RB3D_COLOR_CHANNEL_MASK_ALPHA_MASK3 (1 << 15) 2372bf215546Sopenharmony_ci 2373bf215546Sopenharmony_ci/* Clear color that is used when the color mask is set to 00. Unpipelined. 2374bf215546Sopenharmony_ci * Program this register with a 32-bit value in ARGB8888 or ARGB2101010 2375bf215546Sopenharmony_ci * formats, ignoring the fields. 2376bf215546Sopenharmony_ci */ 2377bf215546Sopenharmony_ci#define R300_RB3D_COLOR_CLEAR_VALUE 0x4E14 2378bf215546Sopenharmony_ci/* For FP16 AA. */ 2379bf215546Sopenharmony_ci#define R500_RB3D_COLOR_CLEAR_VALUE_AR 0x46C0 2380bf215546Sopenharmony_ci#define R500_RB3D_COLOR_CLEAR_VALUE_GB 0x46C4 2381bf215546Sopenharmony_ci 2382bf215546Sopenharmony_ci/* gap */ 2383bf215546Sopenharmony_ci 2384bf215546Sopenharmony_ci/* Color Compare Color. Stalls the 2d/3d datapath until it is idle. */ 2385bf215546Sopenharmony_ci#define RB3D_CLRCMP_CLR 0x4e20 2386bf215546Sopenharmony_ci 2387bf215546Sopenharmony_ci/* Color Compare Mask. Stalls the 2d/3d datapath until it is idle. */ 2388bf215546Sopenharmony_ci#define RB3D_CLRCMP_MSK 0x4e24 2389bf215546Sopenharmony_ci 2390bf215546Sopenharmony_ci/* Color Buffer Address Offset of multibuffer 0. Unpipelined. */ 2391bf215546Sopenharmony_ci#define R300_RB3D_COLOROFFSET0 0x4E28 2392bf215546Sopenharmony_ci# define R300_COLOROFFSET_MASK 0xFFFFFFE0 2393bf215546Sopenharmony_ci/* Color Buffer Address Offset of multibuffer 1. Unpipelined. */ 2394bf215546Sopenharmony_ci#define R300_RB3D_COLOROFFSET1 0x4E2C 2395bf215546Sopenharmony_ci/* Color Buffer Address Offset of multibuffer 2. Unpipelined. */ 2396bf215546Sopenharmony_ci#define R300_RB3D_COLOROFFSET2 0x4E30 2397bf215546Sopenharmony_ci/* Color Buffer Address Offset of multibuffer 3. Unpipelined. */ 2398bf215546Sopenharmony_ci#define R300_RB3D_COLOROFFSET3 0x4E34 2399bf215546Sopenharmony_ci 2400bf215546Sopenharmony_ci/* Color buffer format and tiling control for all the multibuffers and the 2401bf215546Sopenharmony_ci * pitch of multibuffer 0 to 3. Unpipelined. The cache must be empty before any 2402bf215546Sopenharmony_ci * of the registers are changed. 2403bf215546Sopenharmony_ci * 2404bf215546Sopenharmony_ci * Bit 16: Larger tiles 2405bf215546Sopenharmony_ci * Bit 17: 4x2 tiles 2406bf215546Sopenharmony_ci * Bit 18: Extremely weird tile like, but some pixels duplicated? 2407bf215546Sopenharmony_ci */ 2408bf215546Sopenharmony_ci#define R300_RB3D_COLORPITCH0 0x4E38 2409bf215546Sopenharmony_ci# define R300_COLORPITCH_MASK 0x00003FFE 2410bf215546Sopenharmony_ci# define R300_COLOR_TILE_DISABLE (0 << 16) 2411bf215546Sopenharmony_ci# define R300_COLOR_TILE_ENABLE (1 << 16) 2412bf215546Sopenharmony_ci# define R300_COLOR_TILE(x) ((x) << 16) 2413bf215546Sopenharmony_ci# define R300_COLOR_MICROTILE_DISABLE (0 << 17) 2414bf215546Sopenharmony_ci# define R300_COLOR_MICROTILE_ENABLE (1 << 17) 2415bf215546Sopenharmony_ci# define R300_COLOR_MICROTILE_ENABLE_SQUARE (2 << 17) /* Only available in 16-bit */ 2416bf215546Sopenharmony_ci# define R300_COLOR_MICROTILE(x) ((x) << 17) 2417bf215546Sopenharmony_ci# define R300_COLOR_ENDIAN(x) ((x) << 19) 2418bf215546Sopenharmony_ci# define R500_COLOR_FORMAT_ARGB10101010 (0 << 21) 2419bf215546Sopenharmony_ci# define R500_COLOR_FORMAT_UV1010 (1 << 21) 2420bf215546Sopenharmony_ci# define R500_COLOR_FORMAT_CI8 (2 << 21) /* 2D only */ 2421bf215546Sopenharmony_ci# define R300_COLOR_FORMAT_ARGB1555 (3 << 21) 2422bf215546Sopenharmony_ci# define R300_COLOR_FORMAT_RGB565 (4 << 21) 2423bf215546Sopenharmony_ci# define R500_COLOR_FORMAT_ARGB2101010 (5 << 21) 2424bf215546Sopenharmony_ci# define R300_COLOR_FORMAT_ARGB8888 (6 << 21) 2425bf215546Sopenharmony_ci# define R300_COLOR_FORMAT_ARGB32323232 (7 << 21) 2426bf215546Sopenharmony_ci/* reserved */ 2427bf215546Sopenharmony_ci# define R300_COLOR_FORMAT_I8 (9 << 21) 2428bf215546Sopenharmony_ci# define R300_COLOR_FORMAT_ARGB16161616 (10 << 21) 2429bf215546Sopenharmony_ci# define R300_COLOR_FORMAT_VYUY (11 << 21) 2430bf215546Sopenharmony_ci# define R300_COLOR_FORMAT_YVYU (12 << 21) 2431bf215546Sopenharmony_ci# define R300_COLOR_FORMAT_UV88 (13 << 21) 2432bf215546Sopenharmony_ci# define R500_COLOR_FORMAT_I10 (14 << 21) 2433bf215546Sopenharmony_ci# define R300_COLOR_FORMAT_ARGB4444 (15 << 21) 2434bf215546Sopenharmony_ci#define R300_RB3D_COLORPITCH1 0x4E3C 2435bf215546Sopenharmony_ci#define R300_RB3D_COLORPITCH2 0x4E40 2436bf215546Sopenharmony_ci#define R300_RB3D_COLORPITCH3 0x4E44 2437bf215546Sopenharmony_ci 2438bf215546Sopenharmony_ci/* gap */ 2439bf215546Sopenharmony_ci 2440bf215546Sopenharmony_ci/* Destination Color Buffer Cache Control/Status. If the cb is in e2 mode, then 2441bf215546Sopenharmony_ci * a flush or free will not occur upon a write to this register, but a sync 2442bf215546Sopenharmony_ci * will be immediately sent if one is requested. If both DC_FLUSH and DC_FREE 2443bf215546Sopenharmony_ci * are zero but DC_FINISH is one, then a sync will be sent immediately -- the 2444bf215546Sopenharmony_ci * cb will not wait for all the previous operations to complete before sending 2445bf215546Sopenharmony_ci * the sync. Unpipelined except when DC_FINISH and DC_FREE are both set to 2446bf215546Sopenharmony_ci * zero. 2447bf215546Sopenharmony_ci * 2448bf215546Sopenharmony_ci * Set to 0A before 3D operations, set to 02 afterwards. 2449bf215546Sopenharmony_ci */ 2450bf215546Sopenharmony_ci#define R300_RB3D_DSTCACHE_CTLSTAT 0x4e4c 2451bf215546Sopenharmony_ci# define R300_RB3D_DSTCACHE_CTLSTAT_DC_FLUSH_NO_EFFECT (0 << 0) 2452bf215546Sopenharmony_ci# define R300_RB3D_DSTCACHE_CTLSTAT_DC_FLUSH_NO_EFFECT_1 (1 << 0) 2453bf215546Sopenharmony_ci# define R300_RB3D_DSTCACHE_CTLSTAT_DC_FLUSH_FLUSH_DIRTY_3D (2 << 0) 2454bf215546Sopenharmony_ci# define R300_RB3D_DSTCACHE_CTLSTAT_DC_FLUSH_FLUSH_DIRTY_3D_1 (3 << 0) 2455bf215546Sopenharmony_ci# define R300_RB3D_DSTCACHE_CTLSTAT_DC_FREE_NO_EFFECT (0 << 2) 2456bf215546Sopenharmony_ci# define R300_RB3D_DSTCACHE_CTLSTAT_DC_FREE_NO_EFFECT_1 (1 << 2) 2457bf215546Sopenharmony_ci# define R300_RB3D_DSTCACHE_CTLSTAT_DC_FREE_FREE_3D_TAGS (2 << 2) 2458bf215546Sopenharmony_ci# define R300_RB3D_DSTCACHE_CTLSTAT_DC_FREE_FREE_3D_TAGS_1 (3 << 2) 2459bf215546Sopenharmony_ci# define R300_RB3D_DSTCACHE_CTLSTAT_DC_FINISH_NO_SIGNAL (0 << 4) 2460bf215546Sopenharmony_ci# define R300_RB3D_DSTCACHE_CTLSTAT_DC_FINISH_SIGNAL (1 << 4) 2461bf215546Sopenharmony_ci 2462bf215546Sopenharmony_ci#define R300_RB3D_DITHER_CTL 0x4E50 2463bf215546Sopenharmony_ci# define R300_RB3D_DITHER_CTL_DITHER_MODE_TRUNCATE (0 << 0) 2464bf215546Sopenharmony_ci# define R300_RB3D_DITHER_CTL_DITHER_MODE_ROUND (1 << 0) 2465bf215546Sopenharmony_ci# define R300_RB3D_DITHER_CTL_DITHER_MODE_LUT (2 << 0) 2466bf215546Sopenharmony_ci/* reserved */ 2467bf215546Sopenharmony_ci# define R300_RB3D_DITHER_CTL_ALPHA_DITHER_MODE_TRUNCATE (0 << 2) 2468bf215546Sopenharmony_ci# define R300_RB3D_DITHER_CTL_ALPHA_DITHER_MODE_ROUND (1 << 2) 2469bf215546Sopenharmony_ci# define R300_RB3D_DITHER_CTL_ALPHA_DITHER_MODE_LUT (2 << 2) 2470bf215546Sopenharmony_ci/* reserved */ 2471bf215546Sopenharmony_ci 2472bf215546Sopenharmony_ci#define R300_RB3D_CMASK_OFFSET0 0x4E54 2473bf215546Sopenharmony_ci#define R300_RB3D_CMASK_OFFSET1 0x4E58 2474bf215546Sopenharmony_ci#define R300_RB3D_CMASK_OFFSET2 0x4E5C 2475bf215546Sopenharmony_ci#define R300_RB3D_CMASK_OFFSET3 0x4E60 2476bf215546Sopenharmony_ci#define R300_RB3D_CMASK_PITCH0 0x4E64 2477bf215546Sopenharmony_ci#define R300_RB3D_CMASK_PITCH1 0x4E68 2478bf215546Sopenharmony_ci#define R300_RB3D_CMASK_PITCH2 0x4E6C 2479bf215546Sopenharmony_ci#define R300_RB3D_CMASK_PITCH3 0x4E70 2480bf215546Sopenharmony_ci#define R300_RB3D_CMASK_WRINDEX 0x4E74 2481bf215546Sopenharmony_ci#define R300_RB3D_CMASK_DWORD 0x4E78 2482bf215546Sopenharmony_ci#define R300_RB3D_CMASK_RDINDEX 0x4E7C 2483bf215546Sopenharmony_ci 2484bf215546Sopenharmony_ci/* Resolve buffer destination address. The cache must be empty before changing 2485bf215546Sopenharmony_ci * this register if the cb is in resolve mode. Unpipelined 2486bf215546Sopenharmony_ci */ 2487bf215546Sopenharmony_ci#define R300_RB3D_AARESOLVE_OFFSET 0x4e80 2488bf215546Sopenharmony_ci# define R300_RB3D_AARESOLVE_OFFSET_SHIFT 5 2489bf215546Sopenharmony_ci# define R300_RB3D_AARESOLVE_OFFSET_MASK 0xffffffe0 /* At least according to the calculations of Christoph Brill */ 2490bf215546Sopenharmony_ci 2491bf215546Sopenharmony_ci/* Resolve Buffer Pitch and Tiling Control. The cache must be empty before 2492bf215546Sopenharmony_ci * changing this register if the cb is in resolve mode. Unpipelined 2493bf215546Sopenharmony_ci */ 2494bf215546Sopenharmony_ci#define R300_RB3D_AARESOLVE_PITCH 0x4e84 2495bf215546Sopenharmony_ci# define R300_RB3D_AARESOLVE_PITCH_SHIFT 1 2496bf215546Sopenharmony_ci# define R300_RB3D_AARESOLVE_PITCH_MASK 0x00003ffe /* At least according to the calculations of Christoph Brill */ 2497bf215546Sopenharmony_ci 2498bf215546Sopenharmony_ci/* Resolve Buffer Control. Unpipelined */ 2499bf215546Sopenharmony_ci#define R300_RB3D_AARESOLVE_CTL 0x4e88 2500bf215546Sopenharmony_ci# define R300_RB3D_AARESOLVE_CTL_AARESOLVE_MODE_NORMAL (0 << 0) 2501bf215546Sopenharmony_ci# define R300_RB3D_AARESOLVE_CTL_AARESOLVE_MODE_RESOLVE (1 << 0) 2502bf215546Sopenharmony_ci# define R300_RB3D_AARESOLVE_CTL_AARESOLVE_GAMMA_10 (0 << 1) 2503bf215546Sopenharmony_ci# define R300_RB3D_AARESOLVE_CTL_AARESOLVE_GAMMA_22 (1 << 1) 2504bf215546Sopenharmony_ci# define R300_RB3D_AARESOLVE_CTL_AARESOLVE_ALPHA_SAMPLE0 (0 << 2) 2505bf215546Sopenharmony_ci# define R300_RB3D_AARESOLVE_CTL_AARESOLVE_ALPHA_AVERAGE (1 << 2) 2506bf215546Sopenharmony_ci 2507bf215546Sopenharmony_ci 2508bf215546Sopenharmony_ci/* Discard src pixels less than or equal to threshold. */ 2509bf215546Sopenharmony_ci#define R500_RB3D_DISCARD_SRC_PIXEL_LTE_THRESHOLD 0x4ea0 2510bf215546Sopenharmony_ci/* Discard src pixels greater than or equal to threshold. */ 2511bf215546Sopenharmony_ci#define R500_RB3D_DISCARD_SRC_PIXEL_GTE_THRESHOLD 0x4ea4 2512bf215546Sopenharmony_ci# define R500_RB3D_DISCARD_SRC_PIXEL_THRESHOLD_BLUE_SHIFT 0 2513bf215546Sopenharmony_ci# define R500_RB3D_DISCARD_SRC_PIXEL_THRESHOLD_BLUE_MASK 0x000000ff 2514bf215546Sopenharmony_ci# define R500_RB3D_DISCARD_SRC_PIXEL_THRESHOLD_GREEN_SHIFT 8 2515bf215546Sopenharmony_ci# define R500_RB3D_DISCARD_SRC_PIXEL_THRESHOLD_GREEN_MASK 0x0000ff00 2516bf215546Sopenharmony_ci# define R500_RB3D_DISCARD_SRC_PIXEL_THRESHOLD_RED_SHIFT 16 2517bf215546Sopenharmony_ci# define R500_RB3D_DISCARD_SRC_PIXEL_THRESHOLD_RED_MASK 0x00ff0000 2518bf215546Sopenharmony_ci# define R500_RB3D_DISCARD_SRC_PIXEL_THRESHOLD_ALPHA_SHIFT 24 2519bf215546Sopenharmony_ci# define R500_RB3D_DISCARD_SRC_PIXEL_THRESHOLD_ALPHA_MASK 0xff000000 2520bf215546Sopenharmony_ci 2521bf215546Sopenharmony_ci/* 3D ROP Control. Stalls the 2d/3d datapath until it is idle. */ 2522bf215546Sopenharmony_ci#define R300_RB3D_ROPCNTL 0x4e18 2523bf215546Sopenharmony_ci# define R300_RB3D_ROPCNTL_ROP_ENABLE 0x00000004 2524bf215546Sopenharmony_ci# define R300_RB3D_ROPCNTL_ROP_MASK (15 << 8) 2525bf215546Sopenharmony_ci# define R300_RB3D_ROPCNTL_ROP_SHIFT 8 2526bf215546Sopenharmony_ci 2527bf215546Sopenharmony_ci/* Color Compare Flip. Stalls the 2d/3d datapath until it is idle. */ 2528bf215546Sopenharmony_ci#define R300_RB3D_CLRCMP_FLIPE 0x4e1c 2529bf215546Sopenharmony_ci 2530bf215546Sopenharmony_ci/* Sets the fifo sizes */ 2531bf215546Sopenharmony_ci#define R500_RB3D_FIFO_SIZE 0x4ef4 2532bf215546Sopenharmony_ci# define R500_RB3D_FIFO_SIZE_OP_FIFO_SIZE_FULL (0 << 0) 2533bf215546Sopenharmony_ci# define R500_RB3D_FIFO_SIZE_OP_FIFO_SIZE_HALF (1 << 0) 2534bf215546Sopenharmony_ci# define R500_RB3D_FIFO_SIZE_OP_FIFO_SIZE_QUATER (2 << 0) 2535bf215546Sopenharmony_ci# define R500_RB3D_FIFO_SIZE_OP_FIFO_SIZE_EIGTHS (3 << 0) 2536bf215546Sopenharmony_ci 2537bf215546Sopenharmony_ci/* Constant color used by the blender. Pipelined through the blender. */ 2538bf215546Sopenharmony_ci#define R500_RB3D_CONSTANT_COLOR_AR 0x4ef8 2539bf215546Sopenharmony_ci# define R500_RB3D_CONSTANT_COLOR_AR_RED_MASK 0x0000ffff 2540bf215546Sopenharmony_ci# define R500_RB3D_CONSTANT_COLOR_AR_RED_SHIFT 0 2541bf215546Sopenharmony_ci# define R500_RB3D_CONSTANT_COLOR_AR_ALPHA_MASK 0xffff0000 2542bf215546Sopenharmony_ci# define R500_RB3D_CONSTANT_COLOR_AR_ALPHA_SHIFT 16 2543bf215546Sopenharmony_ci 2544bf215546Sopenharmony_ci/* Constant color used by the blender. Pipelined through the blender. */ 2545bf215546Sopenharmony_ci#define R500_RB3D_CONSTANT_COLOR_GB 0x4efc 2546bf215546Sopenharmony_ci# define R500_RB3D_CONSTANT_COLOR_AR_BLUE_MASK 0x0000ffff 2547bf215546Sopenharmony_ci# define R500_RB3D_CONSTANT_COLOR_AR_BLUE_SHIFT 0 2548bf215546Sopenharmony_ci# define R500_RB3D_CONSTANT_COLOR_AR_GREEN_MASK 0xffff0000 2549bf215546Sopenharmony_ci# define R500_RB3D_CONSTANT_COLOR_AR_GREEN_SHIFT 16 2550bf215546Sopenharmony_ci 2551bf215546Sopenharmony_ci/* gap */ 2552bf215546Sopenharmony_ci/* There seems to be no "write only" setting, so use Z-test = ALWAYS 2553bf215546Sopenharmony_ci * for this. 2554bf215546Sopenharmony_ci * Bit (1<<8) is the "test" bit. so plain write is 6 - vd 2555bf215546Sopenharmony_ci */ 2556bf215546Sopenharmony_ci#define R300_ZB_CNTL 0x4F00 2557bf215546Sopenharmony_ci# define R300_STENCIL_ENABLE (1 << 0) 2558bf215546Sopenharmony_ci# define R300_Z_ENABLE (1 << 1) 2559bf215546Sopenharmony_ci# define R300_Z_WRITE_ENABLE (1 << 2) 2560bf215546Sopenharmony_ci# define R300_Z_SIGNED_COMPARE (1 << 3) 2561bf215546Sopenharmony_ci# define R300_STENCIL_FRONT_BACK (1 << 4) 2562bf215546Sopenharmony_ci# define R500_STENCIL_ZSIGNED_MAGNITUDE (1 << 5) 2563bf215546Sopenharmony_ci# define R500_STENCIL_REFMASK_FRONT_BACK (1 << 6) 2564bf215546Sopenharmony_ci 2565bf215546Sopenharmony_ci#define R300_ZB_ZSTENCILCNTL 0x4f04 2566bf215546Sopenharmony_ci /* functions */ 2567bf215546Sopenharmony_ci# define R300_ZS_NEVER 0 2568bf215546Sopenharmony_ci# define R300_ZS_LESS 1 2569bf215546Sopenharmony_ci# define R300_ZS_LEQUAL 2 2570bf215546Sopenharmony_ci# define R300_ZS_EQUAL 3 2571bf215546Sopenharmony_ci# define R300_ZS_GEQUAL 4 2572bf215546Sopenharmony_ci# define R300_ZS_GREATER 5 2573bf215546Sopenharmony_ci# define R300_ZS_NOTEQUAL 6 2574bf215546Sopenharmony_ci# define R300_ZS_ALWAYS 7 2575bf215546Sopenharmony_ci# define R300_ZS_MASK 7 2576bf215546Sopenharmony_ci /* operations */ 2577bf215546Sopenharmony_ci# define R300_ZS_KEEP 0 2578bf215546Sopenharmony_ci# define R300_ZS_ZERO 1 2579bf215546Sopenharmony_ci# define R300_ZS_REPLACE 2 2580bf215546Sopenharmony_ci# define R300_ZS_INCR 3 2581bf215546Sopenharmony_ci# define R300_ZS_DECR 4 2582bf215546Sopenharmony_ci# define R300_ZS_INVERT 5 2583bf215546Sopenharmony_ci# define R300_ZS_INCR_WRAP 6 2584bf215546Sopenharmony_ci# define R300_ZS_DECR_WRAP 7 2585bf215546Sopenharmony_ci# define R300_Z_FUNC_SHIFT 0 2586bf215546Sopenharmony_ci /* front and back refer to operations done for front 2587bf215546Sopenharmony_ci and back faces, i.e. separate stencil function support */ 2588bf215546Sopenharmony_ci# define R300_S_FRONT_FUNC_SHIFT 3 2589bf215546Sopenharmony_ci# define R300_S_FRONT_SFAIL_OP_SHIFT 6 2590bf215546Sopenharmony_ci# define R300_S_FRONT_ZPASS_OP_SHIFT 9 2591bf215546Sopenharmony_ci# define R300_S_FRONT_ZFAIL_OP_SHIFT 12 2592bf215546Sopenharmony_ci# define R300_S_BACK_FUNC_SHIFT 15 2593bf215546Sopenharmony_ci# define R300_S_BACK_SFAIL_OP_SHIFT 18 2594bf215546Sopenharmony_ci# define R300_S_BACK_ZPASS_OP_SHIFT 21 2595bf215546Sopenharmony_ci# define R300_S_BACK_ZFAIL_OP_SHIFT 24 2596bf215546Sopenharmony_ci 2597bf215546Sopenharmony_ci#define R300_ZB_STENCILREFMASK 0x4f08 2598bf215546Sopenharmony_ci# define R300_STENCILREF_SHIFT 0 2599bf215546Sopenharmony_ci# define R300_STENCILREF_MASK 0x000000ff 2600bf215546Sopenharmony_ci# define R300_STENCILMASK_SHIFT 8 2601bf215546Sopenharmony_ci# define R300_STENCILMASK_MASK 0x0000ff00 2602bf215546Sopenharmony_ci# define R300_STENCILWRITEMASK_SHIFT 16 2603bf215546Sopenharmony_ci# define R300_STENCILWRITEMASK_MASK 0x00ff0000 2604bf215546Sopenharmony_ci 2605bf215546Sopenharmony_ci/* gap */ 2606bf215546Sopenharmony_ci 2607bf215546Sopenharmony_ci#define R300_ZB_FORMAT 0x4f10 2608bf215546Sopenharmony_ci# define R300_DEPTHFORMAT_16BIT_INT_Z (0 << 0) 2609bf215546Sopenharmony_ci# define R300_DEPTHFORMAT_16BIT_13E3 (1 << 0) 2610bf215546Sopenharmony_ci# define R300_DEPTHFORMAT_24BIT_INT_Z_8BIT_STENCIL (2 << 0) 2611bf215546Sopenharmony_ci/* reserved up to (15 << 0) */ 2612bf215546Sopenharmony_ci# define R300_INVERT_13E3_LEADING_ONES (0 << 4) 2613bf215546Sopenharmony_ci# define R300_INVERT_13E3_LEADING_ZEROS (1 << 4) 2614bf215546Sopenharmony_ci 2615bf215546Sopenharmony_ci#define R300_ZB_ZTOP 0x4F14 2616bf215546Sopenharmony_ci# define R300_ZTOP_DISABLE (0 << 0) 2617bf215546Sopenharmony_ci# define R300_ZTOP_ENABLE (1 << 0) 2618bf215546Sopenharmony_ci 2619bf215546Sopenharmony_ci/* gap */ 2620bf215546Sopenharmony_ci 2621bf215546Sopenharmony_ci#define R300_ZB_ZCACHE_CTLSTAT 0x4f18 2622bf215546Sopenharmony_ci# define R300_ZB_ZCACHE_CTLSTAT_ZC_FLUSH_NO_EFFECT (0 << 0) 2623bf215546Sopenharmony_ci# define R300_ZB_ZCACHE_CTLSTAT_ZC_FLUSH_FLUSH_AND_FREE (1 << 0) 2624bf215546Sopenharmony_ci# define R300_ZB_ZCACHE_CTLSTAT_ZC_FREE_NO_EFFECT (0 << 1) 2625bf215546Sopenharmony_ci# define R300_ZB_ZCACHE_CTLSTAT_ZC_FREE_FREE (1 << 1) 2626bf215546Sopenharmony_ci# define R300_ZB_ZCACHE_CTLSTAT_ZC_BUSY_IDLE (0 << 31) 2627bf215546Sopenharmony_ci# define R300_ZB_ZCACHE_CTLSTAT_ZC_BUSY_BUSY (1 << 31) 2628bf215546Sopenharmony_ci 2629bf215546Sopenharmony_ci#define R300_ZB_BW_CNTL 0x4f1c 2630bf215546Sopenharmony_ci# define R300_HIZ_DISABLE (0 << 0) 2631bf215546Sopenharmony_ci# define R300_HIZ_ENABLE (1 << 0) 2632bf215546Sopenharmony_ci# define R300_HIZ_MAX (0 << 1) 2633bf215546Sopenharmony_ci# define R300_HIZ_MIN (1 << 1) 2634bf215546Sopenharmony_ci# define R300_FAST_FILL_DISABLE (0 << 2) 2635bf215546Sopenharmony_ci# define R300_FAST_FILL_ENABLE (1 << 2) 2636bf215546Sopenharmony_ci# define R300_RD_COMP_DISABLE (0 << 3) 2637bf215546Sopenharmony_ci# define R300_RD_COMP_ENABLE (1 << 3) 2638bf215546Sopenharmony_ci# define R300_WR_COMP_DISABLE (0 << 4) 2639bf215546Sopenharmony_ci# define R300_WR_COMP_ENABLE (1 << 4) 2640bf215546Sopenharmony_ci# define R300_ZB_CB_CLEAR_RMW (0 << 5) 2641bf215546Sopenharmony_ci# define R300_ZB_CB_CLEAR_CACHE_LINE_WRITE_ONLY (1 << 5) 2642bf215546Sopenharmony_ci# define R300_FORCE_COMPRESSED_STENCIL_VALUE_DISABLE (0 << 6) 2643bf215546Sopenharmony_ci# define R300_FORCE_COMPRESSED_STENCIL_VALUE_ENABLE (1 << 6) 2644bf215546Sopenharmony_ci 2645bf215546Sopenharmony_ci# define R500_ZEQUAL_OPTIMIZE_ENABLE (0 << 7) 2646bf215546Sopenharmony_ci# define R500_ZEQUAL_OPTIMIZE_DISABLE (1 << 7) 2647bf215546Sopenharmony_ci# define R500_SEQUAL_OPTIMIZE_ENABLE (0 << 8) 2648bf215546Sopenharmony_ci# define R500_SEQUAL_OPTIMIZE_DISABLE (1 << 8) 2649bf215546Sopenharmony_ci 2650bf215546Sopenharmony_ci# define R500_BMASK_ENABLE (0 << 10) 2651bf215546Sopenharmony_ci# define R500_BMASK_DISABLE (1 << 10) 2652bf215546Sopenharmony_ci# define R500_HIZ_EQUAL_REJECT_DISABLE (0 << 11) 2653bf215546Sopenharmony_ci# define R500_HIZ_EQUAL_REJECT_ENABLE (1 << 11) 2654bf215546Sopenharmony_ci# define R500_HIZ_FP_EXP_BITS_DISABLE (0 << 12) 2655bf215546Sopenharmony_ci# define R500_HIZ_FP_EXP_BITS_1 (1 << 12) 2656bf215546Sopenharmony_ci# define R500_HIZ_FP_EXP_BITS_2 (2 << 12) 2657bf215546Sopenharmony_ci# define R500_HIZ_FP_EXP_BITS_3 (3 << 12) 2658bf215546Sopenharmony_ci# define R500_HIZ_FP_EXP_BITS_4 (4 << 12) 2659bf215546Sopenharmony_ci# define R500_HIZ_FP_EXP_BITS_5 (5 << 12) 2660bf215546Sopenharmony_ci# define R500_HIZ_FP_INVERT_LEADING_ONES (0 << 15) 2661bf215546Sopenharmony_ci# define R500_HIZ_FP_INVERT_LEADING_ZEROS (1 << 15) 2662bf215546Sopenharmony_ci# define R500_TILE_OVERWRITE_RECOMPRESSION_ENABLE (0 << 16) 2663bf215546Sopenharmony_ci# define R500_TILE_OVERWRITE_RECOMPRESSION_DISABLE (1 << 16) 2664bf215546Sopenharmony_ci# define R500_CONTIGUOUS_6XAA_SAMPLES_ENABLE (0 << 17) 2665bf215546Sopenharmony_ci# define R500_CONTIGUOUS_6XAA_SAMPLES_DISABLE (1 << 17) 2666bf215546Sopenharmony_ci# define R500_PEQ_PACKING_DISABLE (0 << 18) 2667bf215546Sopenharmony_ci# define R500_PEQ_PACKING_ENABLE (1 << 18) 2668bf215546Sopenharmony_ci# define R500_COVERED_PTR_MASKING_DISABLE (0 << 19) 2669bf215546Sopenharmony_ci# define R500_COVERED_PTR_MASKING_ENABLE (1 << 19) 2670bf215546Sopenharmony_ci 2671bf215546Sopenharmony_ci 2672bf215546Sopenharmony_ci/* gap */ 2673bf215546Sopenharmony_ci 2674bf215546Sopenharmony_ci/* Z Buffer Address Offset. 2675bf215546Sopenharmony_ci * Bits 31 to 5 are used for aligned Z buffer address offset for macro tiles. 2676bf215546Sopenharmony_ci */ 2677bf215546Sopenharmony_ci#define R300_ZB_DEPTHOFFSET 0x4f20 2678bf215546Sopenharmony_ci 2679bf215546Sopenharmony_ci/* Z Buffer Pitch and Endian Control */ 2680bf215546Sopenharmony_ci#define R300_ZB_DEPTHPITCH 0x4f24 2681bf215546Sopenharmony_ci# define R300_DEPTHPITCH_MASK 0x00003FFC 2682bf215546Sopenharmony_ci# define R300_DEPTHMACROTILE_DISABLE (0 << 16) 2683bf215546Sopenharmony_ci# define R300_DEPTHMACROTILE_ENABLE (1 << 16) 2684bf215546Sopenharmony_ci# define R300_DEPTHMACROTILE(x) ((x) << 16) 2685bf215546Sopenharmony_ci# define R300_DEPTHMICROTILE_LINEAR (0 << 17) 2686bf215546Sopenharmony_ci# define R300_DEPTHMICROTILE_TILED (1 << 17) 2687bf215546Sopenharmony_ci# define R300_DEPTHMICROTILE_TILED_SQUARE (2 << 17) 2688bf215546Sopenharmony_ci# define R300_DEPTHMICROTILE(x) ((x) << 17) 2689bf215546Sopenharmony_ci# define R300_DEPTHENDIAN(x) ((x) << 19) 2690bf215546Sopenharmony_ci 2691bf215546Sopenharmony_ci#define R300_SURF_NO_SWAP 0 2692bf215546Sopenharmony_ci#define R300_SURF_WORD_SWAP 1 2693bf215546Sopenharmony_ci#define R300_SURF_DWORD_SWAP 2 2694bf215546Sopenharmony_ci#define R300_SURF_HALF_DWORD_SWAP 3 2695bf215546Sopenharmony_ci 2696bf215546Sopenharmony_ci/* Z Buffer Clear Value */ 2697bf215546Sopenharmony_ci#define R300_ZB_DEPTHCLEARVALUE 0x4f28 2698bf215546Sopenharmony_ci 2699bf215546Sopenharmony_ci/* Z Mask RAM is a Z compression buffer. 2700bf215546Sopenharmony_ci * Each dword of the Z Mask contains compression info for 16 4x4 pixel blocks, 2701bf215546Sopenharmony_ci * that is 2 bits for each block. 2702bf215546Sopenharmony_ci * On chips with 2 Z pipes, every other dword maps to a different pipe. 2703bf215546Sopenharmony_ci */ 2704bf215546Sopenharmony_ci 2705bf215546Sopenharmony_ci/* The dword offset into Z mask RAM (bits 18:4) */ 2706bf215546Sopenharmony_ci#define R300_ZB_ZMASK_OFFSET 0x4f30 2707bf215546Sopenharmony_ci 2708bf215546Sopenharmony_ci/* Z Mask Pitch. */ 2709bf215546Sopenharmony_ci#define R300_ZB_ZMASK_PITCH 0x4f34 2710bf215546Sopenharmony_ci 2711bf215546Sopenharmony_ci/* Access to Z Mask RAM in a manner similar to HiZ RAM. 2712bf215546Sopenharmony_ci * The indices are autoincrementing. */ 2713bf215546Sopenharmony_ci#define R300_ZB_ZMASK_WRINDEX 0x4f38 2714bf215546Sopenharmony_ci#define R300_ZB_ZMASK_DWORD 0x4f3c 2715bf215546Sopenharmony_ci#define R300_ZB_ZMASK_RDINDEX 0x4f40 2716bf215546Sopenharmony_ci 2717bf215546Sopenharmony_ci/* Hierarchical Z Memory Offset */ 2718bf215546Sopenharmony_ci#define R300_ZB_HIZ_OFFSET 0x4f44 2719bf215546Sopenharmony_ci 2720bf215546Sopenharmony_ci/* Hierarchical Z Write Index */ 2721bf215546Sopenharmony_ci#define R300_ZB_HIZ_WRINDEX 0x4f48 2722bf215546Sopenharmony_ci 2723bf215546Sopenharmony_ci/* Hierarchical Z Data */ 2724bf215546Sopenharmony_ci#define R300_ZB_HIZ_DWORD 0x4f4c 2725bf215546Sopenharmony_ci 2726bf215546Sopenharmony_ci/* Hierarchical Z Read Index */ 2727bf215546Sopenharmony_ci#define R300_ZB_HIZ_RDINDEX 0x4f50 2728bf215546Sopenharmony_ci 2729bf215546Sopenharmony_ci/* Hierarchical Z Pitch */ 2730bf215546Sopenharmony_ci#define R300_ZB_HIZ_PITCH 0x4f54 2731bf215546Sopenharmony_ci 2732bf215546Sopenharmony_ci/* Z Buffer Z Pass Counter Data */ 2733bf215546Sopenharmony_ci#define R300_ZB_ZPASS_DATA 0x4f58 2734bf215546Sopenharmony_ci 2735bf215546Sopenharmony_ci/* Z Buffer Z Pass Counter Address */ 2736bf215546Sopenharmony_ci#define R300_ZB_ZPASS_ADDR 0x4f5c 2737bf215546Sopenharmony_ci 2738bf215546Sopenharmony_ci/* Depth buffer X and Y coordinate offset */ 2739bf215546Sopenharmony_ci#define R300_ZB_DEPTHXY_OFFSET 0x4f60 2740bf215546Sopenharmony_ci# define R300_DEPTHX_OFFSET_SHIFT 1 2741bf215546Sopenharmony_ci# define R300_DEPTHX_OFFSET_MASK 0x000007FE 2742bf215546Sopenharmony_ci# define R300_DEPTHY_OFFSET_SHIFT 17 2743bf215546Sopenharmony_ci# define R300_DEPTHY_OFFSET_MASK 0x07FE0000 2744bf215546Sopenharmony_ci 2745bf215546Sopenharmony_ci/* Sets the fifo sizes */ 2746bf215546Sopenharmony_ci#define R500_ZB_FIFO_SIZE 0x4fd0 2747bf215546Sopenharmony_ci# define R500_OP_FIFO_SIZE_FULL (0 << 0) 2748bf215546Sopenharmony_ci# define R500_OP_FIFO_SIZE_HALF (1 << 0) 2749bf215546Sopenharmony_ci# define R500_OP_FIFO_SIZE_QUATER (2 << 0) 2750bf215546Sopenharmony_ci# define R500_OP_FIFO_SIZE_EIGTHS (4 << 0) 2751bf215546Sopenharmony_ci 2752bf215546Sopenharmony_ci/* Stencil Reference Value and Mask for backfacing quads */ 2753bf215546Sopenharmony_ci/* R300_ZB_STENCILREFMASK handles front face */ 2754bf215546Sopenharmony_ci#define R500_ZB_STENCILREFMASK_BF 0x4fd4 2755bf215546Sopenharmony_ci# define R500_STENCILREF_SHIFT 0 2756bf215546Sopenharmony_ci# define R500_STENCILREF_MASK 0x000000ff 2757bf215546Sopenharmony_ci# define R500_STENCILMASK_SHIFT 8 2758bf215546Sopenharmony_ci# define R500_STENCILMASK_MASK 0x0000ff00 2759bf215546Sopenharmony_ci# define R500_STENCILWRITEMASK_SHIFT 16 2760bf215546Sopenharmony_ci# define R500_STENCILWRITEMASK_MASK 0x00ff0000 2761bf215546Sopenharmony_ci 2762bf215546Sopenharmony_ci/** 2763bf215546Sopenharmony_ci * \defgroup R3XX_R5XX_PROGRAMMABLE_VERTEX_SHADER_DESCRIPTION R3XX-R5XX PROGRAMMABLE VERTEX SHADER DESCRIPTION 2764bf215546Sopenharmony_ci * 2765bf215546Sopenharmony_ci * The PVS_DST_MATH_INST is used to identify whether the instruction is a Vector 2766bf215546Sopenharmony_ci * Engine instruction or a Math Engine instruction. 2767bf215546Sopenharmony_ci */ 2768bf215546Sopenharmony_ci 2769bf215546Sopenharmony_ci/*\{*/ 2770bf215546Sopenharmony_ci 2771bf215546Sopenharmony_cienum { 2772bf215546Sopenharmony_ci /* R3XX */ 2773bf215546Sopenharmony_ci VECTOR_NO_OP = 0, 2774bf215546Sopenharmony_ci VE_DOT_PRODUCT = 1, 2775bf215546Sopenharmony_ci VE_MULTIPLY = 2, 2776bf215546Sopenharmony_ci VE_ADD = 3, 2777bf215546Sopenharmony_ci VE_MULTIPLY_ADD = 4, 2778bf215546Sopenharmony_ci VE_DISTANCE_VECTOR = 5, 2779bf215546Sopenharmony_ci VE_FRACTION = 6, 2780bf215546Sopenharmony_ci VE_MAXIMUM = 7, 2781bf215546Sopenharmony_ci VE_MINIMUM = 8, 2782bf215546Sopenharmony_ci VE_SET_GREATER_THAN_EQUAL = 9, 2783bf215546Sopenharmony_ci VE_SET_LESS_THAN = 10, 2784bf215546Sopenharmony_ci VE_MULTIPLYX2_ADD = 11, 2785bf215546Sopenharmony_ci VE_MULTIPLY_CLAMP = 12, 2786bf215546Sopenharmony_ci VE_FLT2FIX_DX = 13, 2787bf215546Sopenharmony_ci VE_FLT2FIX_DX_RND = 14, 2788bf215546Sopenharmony_ci /* R5XX */ 2789bf215546Sopenharmony_ci VE_PRED_SET_EQ_PUSH = 15, 2790bf215546Sopenharmony_ci VE_PRED_SET_GT_PUSH = 16, 2791bf215546Sopenharmony_ci VE_PRED_SET_GTE_PUSH = 17, 2792bf215546Sopenharmony_ci VE_PRED_SET_NEQ_PUSH = 18, 2793bf215546Sopenharmony_ci VE_COND_WRITE_EQ = 19, 2794bf215546Sopenharmony_ci VE_COND_WRITE_GT = 20, 2795bf215546Sopenharmony_ci VE_COND_WRITE_GTE = 21, 2796bf215546Sopenharmony_ci VE_COND_WRITE_NEQ = 22, 2797bf215546Sopenharmony_ci VE_COND_MUX_EQ = 23, 2798bf215546Sopenharmony_ci VE_COND_MUX_GT = 24, 2799bf215546Sopenharmony_ci VE_COND_MUX_GTE = 25, 2800bf215546Sopenharmony_ci VE_SET_GREATER_THAN = 26, 2801bf215546Sopenharmony_ci VE_SET_EQUAL = 27, 2802bf215546Sopenharmony_ci VE_SET_NOT_EQUAL = 28 2803bf215546Sopenharmony_ci}; 2804bf215546Sopenharmony_ci 2805bf215546Sopenharmony_cienum { 2806bf215546Sopenharmony_ci /* R3XX */ 2807bf215546Sopenharmony_ci MATH_NO_OP = 0, 2808bf215546Sopenharmony_ci ME_EXP_BASE2_DX = 1, 2809bf215546Sopenharmony_ci ME_LOG_BASE2_DX = 2, 2810bf215546Sopenharmony_ci ME_EXP_BASEE_FF = 3, 2811bf215546Sopenharmony_ci ME_LIGHT_COEFF_DX = 4, 2812bf215546Sopenharmony_ci ME_POWER_FUNC_FF = 5, 2813bf215546Sopenharmony_ci ME_RECIP_DX = 6, 2814bf215546Sopenharmony_ci ME_RECIP_FF = 7, 2815bf215546Sopenharmony_ci ME_RECIP_SQRT_DX = 8, 2816bf215546Sopenharmony_ci ME_RECIP_SQRT_FF = 9, 2817bf215546Sopenharmony_ci ME_MULTIPLY = 10, 2818bf215546Sopenharmony_ci ME_EXP_BASE2_FULL_DX = 11, 2819bf215546Sopenharmony_ci ME_LOG_BASE2_FULL_DX = 12, 2820bf215546Sopenharmony_ci ME_POWER_FUNC_FF_CLAMP_B = 13, 2821bf215546Sopenharmony_ci ME_POWER_FUNC_FF_CLAMP_B1 = 14, 2822bf215546Sopenharmony_ci ME_POWER_FUNC_FF_CLAMP_01 = 15, 2823bf215546Sopenharmony_ci ME_SIN = 16, 2824bf215546Sopenharmony_ci ME_COS = 17, 2825bf215546Sopenharmony_ci /* R5XX */ 2826bf215546Sopenharmony_ci ME_LOG_BASE2_IEEE = 18, 2827bf215546Sopenharmony_ci ME_RECIP_IEEE = 19, 2828bf215546Sopenharmony_ci ME_RECIP_SQRT_IEEE = 20, 2829bf215546Sopenharmony_ci ME_PRED_SET_EQ = 21, 2830bf215546Sopenharmony_ci ME_PRED_SET_GT = 22, 2831bf215546Sopenharmony_ci ME_PRED_SET_GTE = 23, 2832bf215546Sopenharmony_ci ME_PRED_SET_NEQ = 24, 2833bf215546Sopenharmony_ci ME_PRED_SET_CLR = 25, 2834bf215546Sopenharmony_ci ME_PRED_SET_INV = 26, 2835bf215546Sopenharmony_ci ME_PRED_SET_POP = 27, 2836bf215546Sopenharmony_ci ME_PRED_SET_RESTORE = 28 2837bf215546Sopenharmony_ci}; 2838bf215546Sopenharmony_ci 2839bf215546Sopenharmony_cienum { 2840bf215546Sopenharmony_ci /* R3XX */ 2841bf215546Sopenharmony_ci PVS_MACRO_OP_2CLK_MADD = 0, 2842bf215546Sopenharmony_ci PVS_MACRO_OP_2CLK_M2X_ADD = 1 2843bf215546Sopenharmony_ci}; 2844bf215546Sopenharmony_ci 2845bf215546Sopenharmony_cienum { 2846bf215546Sopenharmony_ci PVS_SRC_REG_TEMPORARY = 0, /* Intermediate Storage */ 2847bf215546Sopenharmony_ci PVS_SRC_REG_INPUT = 1, /* Input Vertex Storage */ 2848bf215546Sopenharmony_ci PVS_SRC_REG_CONSTANT = 2, /* Constant State Storage */ 2849bf215546Sopenharmony_ci PVS_SRC_REG_ALT_TEMPORARY = 3 /* Alternate Intermediate Storage */ 2850bf215546Sopenharmony_ci}; 2851bf215546Sopenharmony_ci 2852bf215546Sopenharmony_cienum { 2853bf215546Sopenharmony_ci PVS_DST_REG_TEMPORARY = 0, /* Intermediate Storage */ 2854bf215546Sopenharmony_ci PVS_DST_REG_A0 = 1, /* Address Register Storage */ 2855bf215546Sopenharmony_ci PVS_DST_REG_OUT = 2, /* Output Memory. Used for all outputs */ 2856bf215546Sopenharmony_ci PVS_DST_REG_OUT_REPL_X = 3, /* Output Memory & Replicate X to all channels */ 2857bf215546Sopenharmony_ci PVS_DST_REG_ALT_TEMPORARY = 4, /* Alternate Intermediate Storage */ 2858bf215546Sopenharmony_ci PVS_DST_REG_INPUT = 5 /* Output Memory & Replicate X to all channels */ 2859bf215546Sopenharmony_ci}; 2860bf215546Sopenharmony_ci 2861bf215546Sopenharmony_cienum { 2862bf215546Sopenharmony_ci PVS_SRC_SELECT_X = 0, /* Select X Component */ 2863bf215546Sopenharmony_ci PVS_SRC_SELECT_Y = 1, /* Select Y Component */ 2864bf215546Sopenharmony_ci PVS_SRC_SELECT_Z = 2, /* Select Z Component */ 2865bf215546Sopenharmony_ci PVS_SRC_SELECT_W = 3, /* Select W Component */ 2866bf215546Sopenharmony_ci PVS_SRC_SELECT_FORCE_0 = 4, /* Force Component to 0.0 */ 2867bf215546Sopenharmony_ci PVS_SRC_SELECT_FORCE_1 = 5 /* Force Component to 1.0 */ 2868bf215546Sopenharmony_ci}; 2869bf215546Sopenharmony_ci 2870bf215546Sopenharmony_ci/* PVS Opcode & Destination Operand Description */ 2871bf215546Sopenharmony_ci 2872bf215546Sopenharmony_cienum { 2873bf215546Sopenharmony_ci PVS_DST_OPCODE_MASK = 0x3f, 2874bf215546Sopenharmony_ci PVS_DST_OPCODE_SHIFT = 0, 2875bf215546Sopenharmony_ci PVS_DST_MATH_INST_MASK = 0x1, 2876bf215546Sopenharmony_ci PVS_DST_MATH_INST_SHIFT = 6, 2877bf215546Sopenharmony_ci PVS_DST_MACRO_INST_MASK = 0x1, 2878bf215546Sopenharmony_ci PVS_DST_MACRO_INST_SHIFT = 7, 2879bf215546Sopenharmony_ci PVS_DST_REG_TYPE_MASK = 0xf, 2880bf215546Sopenharmony_ci PVS_DST_REG_TYPE_SHIFT = 8, 2881bf215546Sopenharmony_ci PVS_DST_ADDR_MODE_1_MASK = 0x1, 2882bf215546Sopenharmony_ci PVS_DST_ADDR_MODE_1_SHIFT = 12, 2883bf215546Sopenharmony_ci PVS_DST_OFFSET_MASK = 0x7f, 2884bf215546Sopenharmony_ci PVS_DST_OFFSET_SHIFT = 13, 2885bf215546Sopenharmony_ci PVS_DST_WE_X_MASK = 0x1, 2886bf215546Sopenharmony_ci PVS_DST_WE_X_SHIFT = 20, 2887bf215546Sopenharmony_ci PVS_DST_WE_Y_MASK = 0x1, 2888bf215546Sopenharmony_ci PVS_DST_WE_Y_SHIFT = 21, 2889bf215546Sopenharmony_ci PVS_DST_WE_Z_MASK = 0x1, 2890bf215546Sopenharmony_ci PVS_DST_WE_Z_SHIFT = 22, 2891bf215546Sopenharmony_ci PVS_DST_WE_W_MASK = 0x1, 2892bf215546Sopenharmony_ci PVS_DST_WE_W_SHIFT = 23, 2893bf215546Sopenharmony_ci PVS_DST_VE_SAT_MASK = 0x1, 2894bf215546Sopenharmony_ci PVS_DST_VE_SAT_SHIFT = 24, 2895bf215546Sopenharmony_ci PVS_DST_ME_SAT_MASK = 0x1, 2896bf215546Sopenharmony_ci PVS_DST_ME_SAT_SHIFT = 25, 2897bf215546Sopenharmony_ci PVS_DST_PRED_ENABLE_MASK = 0x1, 2898bf215546Sopenharmony_ci PVS_DST_PRED_ENABLE_SHIFT = 26, 2899bf215546Sopenharmony_ci PVS_DST_PRED_SENSE_MASK = 0x1, 2900bf215546Sopenharmony_ci PVS_DST_PRED_SENSE_SHIFT = 27, 2901bf215546Sopenharmony_ci PVS_DST_DUAL_MATH_OP_MASK = 0x3, 2902bf215546Sopenharmony_ci PVS_DST_DUAL_MATH_OP_SHIFT = 27, 2903bf215546Sopenharmony_ci PVS_DST_ADDR_SEL_MASK = 0x3, 2904bf215546Sopenharmony_ci PVS_DST_ADDR_SEL_SHIFT = 29, 2905bf215546Sopenharmony_ci PVS_DST_ADDR_MODE_0_MASK = 0x1, 2906bf215546Sopenharmony_ci PVS_DST_ADDR_MODE_0_SHIFT = 31 2907bf215546Sopenharmony_ci}; 2908bf215546Sopenharmony_ci 2909bf215546Sopenharmony_ci/* PVS Source Operand Description */ 2910bf215546Sopenharmony_ci 2911bf215546Sopenharmony_cienum { 2912bf215546Sopenharmony_ci PVS_SRC_REG_TYPE_MASK = 0x3, 2913bf215546Sopenharmony_ci PVS_SRC_REG_TYPE_SHIFT = 0, 2914bf215546Sopenharmony_ci SPARE_0_MASK = 0x1, 2915bf215546Sopenharmony_ci SPARE_0_SHIFT = 2, 2916bf215546Sopenharmony_ci PVS_SRC_ABS_XYZW_MASK = 0x1, 2917bf215546Sopenharmony_ci PVS_SRC_ABS_XYZW_SHIFT = 3, 2918bf215546Sopenharmony_ci PVS_SRC_ADDR_MODE_0_MASK = 0x1, 2919bf215546Sopenharmony_ci PVS_SRC_ADDR_MODE_0_SHIFT = 4, 2920bf215546Sopenharmony_ci PVS_SRC_OFFSET_MASK = 0xff, 2921bf215546Sopenharmony_ci PVS_SRC_OFFSET_SHIFT = 5, 2922bf215546Sopenharmony_ci PVS_SRC_SWIZZLE_X_MASK = 0x7, 2923bf215546Sopenharmony_ci PVS_SRC_SWIZZLE_X_SHIFT = 13, 2924bf215546Sopenharmony_ci PVS_SRC_SWIZZLE_Y_MASK = 0x7, 2925bf215546Sopenharmony_ci PVS_SRC_SWIZZLE_Y_SHIFT = 16, 2926bf215546Sopenharmony_ci PVS_SRC_SWIZZLE_Z_MASK = 0x7, 2927bf215546Sopenharmony_ci PVS_SRC_SWIZZLE_Z_SHIFT = 19, 2928bf215546Sopenharmony_ci PVS_SRC_SWIZZLE_W_MASK = 0x7, 2929bf215546Sopenharmony_ci PVS_SRC_SWIZZLE_W_SHIFT = 22, 2930bf215546Sopenharmony_ci PVS_SRC_MODIFIER_X_MASK = 0x1, 2931bf215546Sopenharmony_ci PVS_SRC_MODIFIER_X_SHIFT = 25, 2932bf215546Sopenharmony_ci PVS_SRC_MODIFIER_Y_MASK = 0x1, 2933bf215546Sopenharmony_ci PVS_SRC_MODIFIER_Y_SHIFT = 26, 2934bf215546Sopenharmony_ci PVS_SRC_MODIFIER_Z_MASK = 0x1, 2935bf215546Sopenharmony_ci PVS_SRC_MODIFIER_Z_SHIFT = 27, 2936bf215546Sopenharmony_ci PVS_SRC_MODIFIER_W_MASK = 0x1, 2937bf215546Sopenharmony_ci PVS_SRC_MODIFIER_W_SHIFT = 28, 2938bf215546Sopenharmony_ci PVS_SRC_ADDR_SEL_MASK = 0x3, 2939bf215546Sopenharmony_ci PVS_SRC_ADDR_SEL_SHIFT = 29, 2940bf215546Sopenharmony_ci PVS_SRC_ADDR_MODE_1_MASK = 0x0, 2941bf215546Sopenharmony_ci PVS_SRC_ADDR_MODE_1_SHIFT = 32 2942bf215546Sopenharmony_ci}; 2943bf215546Sopenharmony_ci 2944bf215546Sopenharmony_ci/*\}*/ 2945bf215546Sopenharmony_ci 2946bf215546Sopenharmony_ci#define PVS_OP_DST_OPERAND(opcode, math_inst, macro_inst, reg_index, reg_writemask, reg_class, saturate) \ 2947bf215546Sopenharmony_ci (((opcode & PVS_DST_OPCODE_MASK) << PVS_DST_OPCODE_SHIFT) \ 2948bf215546Sopenharmony_ci | ((math_inst & PVS_DST_MATH_INST_MASK) << PVS_DST_MATH_INST_SHIFT) \ 2949bf215546Sopenharmony_ci | ((macro_inst & PVS_DST_MACRO_INST_MASK) << PVS_DST_MACRO_INST_SHIFT) \ 2950bf215546Sopenharmony_ci | ((reg_index & PVS_DST_OFFSET_MASK) << PVS_DST_OFFSET_SHIFT) \ 2951bf215546Sopenharmony_ci | ((reg_writemask & 0xf) << PVS_DST_WE_X_SHIFT) /* X Y Z W */ \ 2952bf215546Sopenharmony_ci | ((reg_class & PVS_DST_REG_TYPE_MASK) << PVS_DST_REG_TYPE_SHIFT)) \ 2953bf215546Sopenharmony_ci | ((math_inst) ? (((saturate) & PVS_DST_ME_SAT_MASK) << PVS_DST_ME_SAT_SHIFT) : \ 2954bf215546Sopenharmony_ci (((saturate) & PVS_DST_VE_SAT_MASK) << PVS_DST_VE_SAT_SHIFT)) 2955bf215546Sopenharmony_ci 2956bf215546Sopenharmony_ci#define PVS_SRC_OPERAND(in_reg_index, comp_x, comp_y, comp_z, comp_w, reg_class, negate) \ 2957bf215546Sopenharmony_ci (((in_reg_index & PVS_SRC_OFFSET_MASK) << PVS_SRC_OFFSET_SHIFT) \ 2958bf215546Sopenharmony_ci | ((comp_x & PVS_SRC_SWIZZLE_X_MASK) << PVS_SRC_SWIZZLE_X_SHIFT) \ 2959bf215546Sopenharmony_ci | ((comp_y & PVS_SRC_SWIZZLE_Y_MASK) << PVS_SRC_SWIZZLE_Y_SHIFT) \ 2960bf215546Sopenharmony_ci | ((comp_z & PVS_SRC_SWIZZLE_Z_MASK) << PVS_SRC_SWIZZLE_Z_SHIFT) \ 2961bf215546Sopenharmony_ci | ((comp_w & PVS_SRC_SWIZZLE_W_MASK) << PVS_SRC_SWIZZLE_W_SHIFT) \ 2962bf215546Sopenharmony_ci | ((negate & 0xf) << PVS_SRC_MODIFIER_X_SHIFT) /* X Y Z W */ \ 2963bf215546Sopenharmony_ci | ((reg_class & PVS_SRC_REG_TYPE_MASK) << PVS_SRC_REG_TYPE_SHIFT)) 2964bf215546Sopenharmony_ci 2965bf215546Sopenharmony_ci/* BEGIN: Packet 3 commands */ 2966bf215546Sopenharmony_ci 2967bf215546Sopenharmony_ci/* A primitive emission dword. */ 2968bf215546Sopenharmony_ci#define R300_PRIM_TYPE_NONE (0 << 0) 2969bf215546Sopenharmony_ci#define R300_PRIM_TYPE_POINT (1 << 0) 2970bf215546Sopenharmony_ci#define R300_PRIM_TYPE_LINE (2 << 0) 2971bf215546Sopenharmony_ci#define R300_PRIM_TYPE_LINE_STRIP (3 << 0) 2972bf215546Sopenharmony_ci#define R300_PRIM_TYPE_TRI_LIST (4 << 0) 2973bf215546Sopenharmony_ci#define R300_PRIM_TYPE_TRI_FAN (5 << 0) 2974bf215546Sopenharmony_ci#define R300_PRIM_TYPE_TRI_STRIP (6 << 0) 2975bf215546Sopenharmony_ci#define R300_PRIM_TYPE_TRI_TYPE2 (7 << 0) 2976bf215546Sopenharmony_ci#define R300_PRIM_TYPE_RECT_LIST (8 << 0) 2977bf215546Sopenharmony_ci#define R300_PRIM_TYPE_3VRT_POINT_LIST (9 << 0) 2978bf215546Sopenharmony_ci#define R300_PRIM_TYPE_3VRT_LINE_LIST (10 << 0) 2979bf215546Sopenharmony_ci /* GUESS (based on r200) */ 2980bf215546Sopenharmony_ci#define R300_PRIM_TYPE_POINT_SPRITES (11 << 0) 2981bf215546Sopenharmony_ci#define R300_PRIM_TYPE_LINE_LOOP (12 << 0) 2982bf215546Sopenharmony_ci#define R300_PRIM_TYPE_QUADS (13 << 0) 2983bf215546Sopenharmony_ci#define R300_PRIM_TYPE_QUAD_STRIP (14 << 0) 2984bf215546Sopenharmony_ci#define R300_PRIM_TYPE_POLYGON (15 << 0) 2985bf215546Sopenharmony_ci#define R300_PRIM_TYPE_MASK 0xF 2986bf215546Sopenharmony_ci#define R300_PRIM_WALK_IND (1 << 4) 2987bf215546Sopenharmony_ci#define R300_PRIM_WALK_LIST (2 << 4) 2988bf215546Sopenharmony_ci#define R300_PRIM_WALK_RING (3 << 4) 2989bf215546Sopenharmony_ci#define R300_PRIM_WALK_MASK (3 << 4) 2990bf215546Sopenharmony_ci /* GUESS (based on r200) */ 2991bf215546Sopenharmony_ci#define R300_PRIM_COLOR_ORDER_BGRA (0 << 6) 2992bf215546Sopenharmony_ci#define R300_PRIM_COLOR_ORDER_RGBA (1 << 6) 2993bf215546Sopenharmony_ci#define R300_PRIM_NUM_VERTICES_SHIFT 16 2994bf215546Sopenharmony_ci#define R300_PRIM_NUM_VERTICES_MASK 0xffff 2995bf215546Sopenharmony_ci 2996bf215546Sopenharmony_ci 2997bf215546Sopenharmony_ci 2998bf215546Sopenharmony_ci/* 2999bf215546Sopenharmony_ci * The R500 unified shader (US) registers come in banks of 512 each, one 3000bf215546Sopenharmony_ci * for each instruction slot in the shader. You can't touch them directly. 3001bf215546Sopenharmony_ci * R500_US_VECTOR_INDEX() sets the base instruction to modify; successive 3002bf215546Sopenharmony_ci * writes to R500_GA_US_VECTOR_DATA autoincrement the index after the 3003bf215546Sopenharmony_ci * instruction is fully specified. 3004bf215546Sopenharmony_ci */ 3005bf215546Sopenharmony_ci#define R500_US_ALU_ALPHA_INST_0 0xa800 3006bf215546Sopenharmony_ci# define R500_ALPHA_OP_MAD 0 3007bf215546Sopenharmony_ci# define R500_ALPHA_OP_DP 1 3008bf215546Sopenharmony_ci# define R500_ALPHA_OP_MIN 2 3009bf215546Sopenharmony_ci# define R500_ALPHA_OP_MAX 3 3010bf215546Sopenharmony_ci/* #define R500_ALPHA_OP_RESERVED 4 */ 3011bf215546Sopenharmony_ci# define R500_ALPHA_OP_CND 5 3012bf215546Sopenharmony_ci# define R500_ALPHA_OP_CMP 6 3013bf215546Sopenharmony_ci# define R500_ALPHA_OP_FRC 7 3014bf215546Sopenharmony_ci# define R500_ALPHA_OP_EX2 8 3015bf215546Sopenharmony_ci# define R500_ALPHA_OP_LN2 9 3016bf215546Sopenharmony_ci# define R500_ALPHA_OP_RCP 10 3017bf215546Sopenharmony_ci# define R500_ALPHA_OP_RSQ 11 3018bf215546Sopenharmony_ci# define R500_ALPHA_OP_SIN 12 3019bf215546Sopenharmony_ci# define R500_ALPHA_OP_COS 13 3020bf215546Sopenharmony_ci# define R500_ALPHA_OP_MDH 14 3021bf215546Sopenharmony_ci# define R500_ALPHA_OP_MDV 15 3022bf215546Sopenharmony_ci# define R500_ALPHA_ADDRD(x) ((x) << 4) 3023bf215546Sopenharmony_ci# define R500_ALPHA_ADDRD_REL (1 << 11) 3024bf215546Sopenharmony_ci# define R500_ALPHA_SEL_A_SHIFT 12 3025bf215546Sopenharmony_ci# define R500_ALPHA_SEL_A_SRC0 (0 << 12) 3026bf215546Sopenharmony_ci# define R500_ALPHA_SEL_A_SRC1 (1 << 12) 3027bf215546Sopenharmony_ci# define R500_ALPHA_SEL_A_SRC2 (2 << 12) 3028bf215546Sopenharmony_ci# define R500_ALPHA_SEL_A_SRCP (3 << 12) 3029bf215546Sopenharmony_ci# define R500_ALPHA_SWIZ_A_R (0 << 14) 3030bf215546Sopenharmony_ci# define R500_ALPHA_SWIZ_A_G (1 << 14) 3031bf215546Sopenharmony_ci# define R500_ALPHA_SWIZ_A_B (2 << 14) 3032bf215546Sopenharmony_ci# define R500_ALPHA_SWIZ_A_A (3 << 14) 3033bf215546Sopenharmony_ci# define R500_ALPHA_SWIZ_A_0 (4 << 14) 3034bf215546Sopenharmony_ci# define R500_ALPHA_SWIZ_A_HALF (5 << 14) 3035bf215546Sopenharmony_ci# define R500_ALPHA_SWIZ_A_1 (6 << 14) 3036bf215546Sopenharmony_ci/* #define R500_ALPHA_SWIZ_A_UNUSED (7 << 14) */ 3037bf215546Sopenharmony_ci# define R500_ALPHA_MOD_A_NOP (0 << 17) 3038bf215546Sopenharmony_ci# define R500_ALPHA_MOD_A_NEG (1 << 17) 3039bf215546Sopenharmony_ci# define R500_ALPHA_MOD_A_ABS (2 << 17) 3040bf215546Sopenharmony_ci# define R500_ALPHA_MOD_A_NAB (3 << 17) 3041bf215546Sopenharmony_ci# define R500_ALPHA_SEL_B_SHIFT 19 3042bf215546Sopenharmony_ci# define R500_ALPHA_SEL_B_SRC0 (0 << 19) 3043bf215546Sopenharmony_ci# define R500_ALPHA_SEL_B_SRC1 (1 << 19) 3044bf215546Sopenharmony_ci# define R500_ALPHA_SEL_B_SRC2 (2 << 19) 3045bf215546Sopenharmony_ci# define R500_ALPHA_SEL_B_SRCP (3 << 19) 3046bf215546Sopenharmony_ci# define R500_ALPHA_SWIZ_B_R (0 << 21) 3047bf215546Sopenharmony_ci# define R500_ALPHA_SWIZ_B_G (1 << 21) 3048bf215546Sopenharmony_ci# define R500_ALPHA_SWIZ_B_B (2 << 21) 3049bf215546Sopenharmony_ci# define R500_ALPHA_SWIZ_B_A (3 << 21) 3050bf215546Sopenharmony_ci# define R500_ALPHA_SWIZ_B_0 (4 << 21) 3051bf215546Sopenharmony_ci# define R500_ALPHA_SWIZ_B_HALF (5 << 21) 3052bf215546Sopenharmony_ci# define R500_ALPHA_SWIZ_B_1 (6 << 21) 3053bf215546Sopenharmony_ci/* #define R500_ALPHA_SWIZ_B_UNUSED (7 << 21) */ 3054bf215546Sopenharmony_ci# define R500_ALPHA_MOD_B_NOP (0 << 24) 3055bf215546Sopenharmony_ci# define R500_ALPHA_MOD_B_NEG (1 << 24) 3056bf215546Sopenharmony_ci# define R500_ALPHA_MOD_B_ABS (2 << 24) 3057bf215546Sopenharmony_ci# define R500_ALPHA_MOD_B_NAB (3 << 24) 3058bf215546Sopenharmony_ci# define R500_ALPHA_OMOD_SHIFT 26 3059bf215546Sopenharmony_ci# define R500_ALPHA_OMOD_IDENTITY (0 << R500_ALPHA_OMOD_SHIFT) 3060bf215546Sopenharmony_ci# define R500_ALPHA_OMOD_MUL_2 (1 << R500_ALPHA_OMOD_SHIFT) 3061bf215546Sopenharmony_ci# define R500_ALPHA_OMOD_MUL_4 (2 << R500_ALPHA_OMOD_SHIFT) 3062bf215546Sopenharmony_ci# define R500_ALPHA_OMOD_MUL_8 (3 << R500_ALPHA_OMOD_SHIFT) 3063bf215546Sopenharmony_ci# define R500_ALPHA_OMOD_DIV_2 (4 << R500_ALPHA_OMOD_SHIFT) 3064bf215546Sopenharmony_ci# define R500_ALPHA_OMOD_DIV_4 (5 << R500_ALPHA_OMOD_SHIFT) 3065bf215546Sopenharmony_ci# define R500_ALPHA_OMOD_DIV_8 (6 << R500_ALPHA_OMOD_SHIFT) 3066bf215546Sopenharmony_ci# define R500_ALPHA_OMOD_DISABLE (7 << R500_ALPHA_OMOD_SHIFT) 3067bf215546Sopenharmony_ci# define R500_ALPHA_TARGET(x) ((x) << 29) 3068bf215546Sopenharmony_ci# define R500_ALPHA_W_OMASK (1 << 31) 3069bf215546Sopenharmony_ci#define R500_US_ALU_ALPHA_ADDR_0 0x9800 3070bf215546Sopenharmony_ci# define R500_ALPHA_ADDR0(x) ((x) << 0) 3071bf215546Sopenharmony_ci# define R500_ALPHA_ADDR0_CONST (1 << 8) 3072bf215546Sopenharmony_ci# define R500_ALPHA_ADDR0_REL (1 << 9) 3073bf215546Sopenharmony_ci# define R500_ALPHA_ADDR1(x) ((x) << 10) 3074bf215546Sopenharmony_ci# define R500_ALPHA_ADDR1_CONST (1 << 18) 3075bf215546Sopenharmony_ci# define R500_ALPHA_ADDR1_REL (1 << 19) 3076bf215546Sopenharmony_ci# define R500_ALPHA_ADDR2(x) ((x) << 20) 3077bf215546Sopenharmony_ci# define R500_ALPHA_ADDR2_CONST (1 << 28) 3078bf215546Sopenharmony_ci# define R500_ALPHA_ADDR2_REL (1 << 29) 3079bf215546Sopenharmony_ci# define R500_ALPHA_SRCP_OP_1_MINUS_2A0 (0 << 30) 3080bf215546Sopenharmony_ci# define R500_ALPHA_SRCP_OP_A1_MINUS_A0 (1 << 30) 3081bf215546Sopenharmony_ci# define R500_ALPHA_SRCP_OP_A1_PLUS_A0 (2 << 30) 3082bf215546Sopenharmony_ci# define R500_ALPHA_SRCP_OP_1_MINUS_A0 (3 << 30) 3083bf215546Sopenharmony_ci#define R500_US_ALU_RGBA_INST_0 0xb000 3084bf215546Sopenharmony_ci# define R500_ALU_RGBA_OP_MAD (0 << 0) 3085bf215546Sopenharmony_ci# define R500_ALU_RGBA_OP_DP3 (1 << 0) 3086bf215546Sopenharmony_ci# define R500_ALU_RGBA_OP_DP4 (2 << 0) 3087bf215546Sopenharmony_ci# define R500_ALU_RGBA_OP_D2A (3 << 0) 3088bf215546Sopenharmony_ci# define R500_ALU_RGBA_OP_MIN (4 << 0) 3089bf215546Sopenharmony_ci# define R500_ALU_RGBA_OP_MAX (5 << 0) 3090bf215546Sopenharmony_ci/* #define R500_ALU_RGBA_OP_RESERVED (6 << 0) */ 3091bf215546Sopenharmony_ci# define R500_ALU_RGBA_OP_CND (7 << 0) 3092bf215546Sopenharmony_ci# define R500_ALU_RGBA_OP_CMP (8 << 0) 3093bf215546Sopenharmony_ci# define R500_ALU_RGBA_OP_FRC (9 << 0) 3094bf215546Sopenharmony_ci# define R500_ALU_RGBA_OP_SOP (10 << 0) 3095bf215546Sopenharmony_ci# define R500_ALU_RGBA_OP_MDH (11 << 0) 3096bf215546Sopenharmony_ci# define R500_ALU_RGBA_OP_MDV (12 << 0) 3097bf215546Sopenharmony_ci# define R500_ALU_RGBA_ADDRD(x) ((x) << 4) 3098bf215546Sopenharmony_ci# define R500_ALU_RGBA_ADDRD_REL (1 << 11) 3099bf215546Sopenharmony_ci# define R500_ALU_RGBA_SEL_C_SHIFT 12 3100bf215546Sopenharmony_ci# define R500_ALU_RGBA_SEL_C_SRC0 (0 << 12) 3101bf215546Sopenharmony_ci# define R500_ALU_RGBA_SEL_C_SRC1 (1 << 12) 3102bf215546Sopenharmony_ci# define R500_ALU_RGBA_SEL_C_SRC2 (2 << 12) 3103bf215546Sopenharmony_ci# define R500_ALU_RGBA_SEL_C_SRCP (3 << 12) 3104bf215546Sopenharmony_ci# define R500_ALU_RGBA_R_SWIZ_R (0 << 14) 3105bf215546Sopenharmony_ci# define R500_ALU_RGBA_R_SWIZ_G (1 << 14) 3106bf215546Sopenharmony_ci# define R500_ALU_RGBA_R_SWIZ_B (2 << 14) 3107bf215546Sopenharmony_ci# define R500_ALU_RGBA_R_SWIZ_A (3 << 14) 3108bf215546Sopenharmony_ci# define R500_ALU_RGBA_R_SWIZ_0 (4 << 14) 3109bf215546Sopenharmony_ci# define R500_ALU_RGBA_R_SWIZ_HALF (5 << 14) 3110bf215546Sopenharmony_ci# define R500_ALU_RGBA_R_SWIZ_1 (6 << 14) 3111bf215546Sopenharmony_ci/* #define R500_ALU_RGBA_R_SWIZ_UNUSED (7 << 14) */ 3112bf215546Sopenharmony_ci# define R500_ALU_RGBA_G_SWIZ_R (0 << 17) 3113bf215546Sopenharmony_ci# define R500_ALU_RGBA_G_SWIZ_G (1 << 17) 3114bf215546Sopenharmony_ci# define R500_ALU_RGBA_G_SWIZ_B (2 << 17) 3115bf215546Sopenharmony_ci# define R500_ALU_RGBA_G_SWIZ_A (3 << 17) 3116bf215546Sopenharmony_ci# define R500_ALU_RGBA_G_SWIZ_0 (4 << 17) 3117bf215546Sopenharmony_ci# define R500_ALU_RGBA_G_SWIZ_HALF (5 << 17) 3118bf215546Sopenharmony_ci# define R500_ALU_RGBA_G_SWIZ_1 (6 << 17) 3119bf215546Sopenharmony_ci/* #define R500_ALU_RGBA_G_SWIZ_UNUSED (7 << 17) */ 3120bf215546Sopenharmony_ci# define R500_ALU_RGBA_B_SWIZ_R (0 << 20) 3121bf215546Sopenharmony_ci# define R500_ALU_RGBA_B_SWIZ_G (1 << 20) 3122bf215546Sopenharmony_ci# define R500_ALU_RGBA_B_SWIZ_B (2 << 20) 3123bf215546Sopenharmony_ci# define R500_ALU_RGBA_B_SWIZ_A (3 << 20) 3124bf215546Sopenharmony_ci# define R500_ALU_RGBA_B_SWIZ_0 (4 << 20) 3125bf215546Sopenharmony_ci# define R500_ALU_RGBA_B_SWIZ_HALF (5 << 20) 3126bf215546Sopenharmony_ci# define R500_ALU_RGBA_B_SWIZ_1 (6 << 20) 3127bf215546Sopenharmony_ci/* #define R500_ALU_RGBA_B_SWIZ_UNUSED (7 << 20) */ 3128bf215546Sopenharmony_ci# define R500_ALU_RGBA_MOD_C_NOP (0 << 23) 3129bf215546Sopenharmony_ci# define R500_ALU_RGBA_MOD_C_NEG (1 << 23) 3130bf215546Sopenharmony_ci# define R500_ALU_RGBA_MOD_C_ABS (2 << 23) 3131bf215546Sopenharmony_ci# define R500_ALU_RGBA_MOD_C_NAB (3 << 23) 3132bf215546Sopenharmony_ci# define R500_ALU_RGBA_ALPHA_SEL_C_SHIFT 25 3133bf215546Sopenharmony_ci# define R500_ALU_RGBA_ALPHA_SEL_C_SRC0 (0 << 25) 3134bf215546Sopenharmony_ci# define R500_ALU_RGBA_ALPHA_SEL_C_SRC1 (1 << 25) 3135bf215546Sopenharmony_ci# define R500_ALU_RGBA_ALPHA_SEL_C_SRC2 (2 << 25) 3136bf215546Sopenharmony_ci# define R500_ALU_RGBA_ALPHA_SEL_C_SRCP (3 << 25) 3137bf215546Sopenharmony_ci# define R500_ALU_RGBA_A_SWIZ_R (0 << 27) 3138bf215546Sopenharmony_ci# define R500_ALU_RGBA_A_SWIZ_G (1 << 27) 3139bf215546Sopenharmony_ci# define R500_ALU_RGBA_A_SWIZ_B (2 << 27) 3140bf215546Sopenharmony_ci# define R500_ALU_RGBA_A_SWIZ_A (3 << 27) 3141bf215546Sopenharmony_ci# define R500_ALU_RGBA_A_SWIZ_0 (4 << 27) 3142bf215546Sopenharmony_ci# define R500_ALU_RGBA_A_SWIZ_HALF (5 << 27) 3143bf215546Sopenharmony_ci# define R500_ALU_RGBA_A_SWIZ_1 (6 << 27) 3144bf215546Sopenharmony_ci/* #define R500_ALU_RGBA_A_SWIZ_UNUSED (7 << 27) */ 3145bf215546Sopenharmony_ci# define R500_ALU_RGBA_ALPHA_MOD_C_NOP (0 << 30) 3146bf215546Sopenharmony_ci# define R500_ALU_RGBA_ALPHA_MOD_C_NEG (1 << 30) 3147bf215546Sopenharmony_ci# define R500_ALU_RGBA_ALPHA_MOD_C_ABS (2 << 30) 3148bf215546Sopenharmony_ci# define R500_ALU_RGBA_ALPHA_MOD_C_NAB (3 << 30) 3149bf215546Sopenharmony_ci#define R500_US_ALU_RGB_INST_0 0xa000 3150bf215546Sopenharmony_ci# define R500_ALU_RGB_SEL_A_SHIFT 0 3151bf215546Sopenharmony_ci# define R500_ALU_RGB_SEL_A_SRC0 (0 << 0) 3152bf215546Sopenharmony_ci# define R500_ALU_RGB_SEL_A_SRC1 (1 << 0) 3153bf215546Sopenharmony_ci# define R500_ALU_RGB_SEL_A_SRC2 (2 << 0) 3154bf215546Sopenharmony_ci# define R500_ALU_RGB_SEL_A_SRCP (3 << 0) 3155bf215546Sopenharmony_ci# define R500_ALU_RGB_R_SWIZ_A_R (0 << 2) 3156bf215546Sopenharmony_ci# define R500_ALU_RGB_R_SWIZ_A_G (1 << 2) 3157bf215546Sopenharmony_ci# define R500_ALU_RGB_R_SWIZ_A_B (2 << 2) 3158bf215546Sopenharmony_ci# define R500_ALU_RGB_R_SWIZ_A_A (3 << 2) 3159bf215546Sopenharmony_ci# define R500_ALU_RGB_R_SWIZ_A_0 (4 << 2) 3160bf215546Sopenharmony_ci# define R500_ALU_RGB_R_SWIZ_A_HALF (5 << 2) 3161bf215546Sopenharmony_ci# define R500_ALU_RGB_R_SWIZ_A_1 (6 << 2) 3162bf215546Sopenharmony_ci/* #define R500_ALU_RGB_R_SWIZ_A_UNUSED (7 << 2) */ 3163bf215546Sopenharmony_ci# define R500_ALU_RGB_G_SWIZ_A_R (0 << 5) 3164bf215546Sopenharmony_ci# define R500_ALU_RGB_G_SWIZ_A_G (1 << 5) 3165bf215546Sopenharmony_ci# define R500_ALU_RGB_G_SWIZ_A_B (2 << 5) 3166bf215546Sopenharmony_ci# define R500_ALU_RGB_G_SWIZ_A_A (3 << 5) 3167bf215546Sopenharmony_ci# define R500_ALU_RGB_G_SWIZ_A_0 (4 << 5) 3168bf215546Sopenharmony_ci# define R500_ALU_RGB_G_SWIZ_A_HALF (5 << 5) 3169bf215546Sopenharmony_ci# define R500_ALU_RGB_G_SWIZ_A_1 (6 << 5) 3170bf215546Sopenharmony_ci/* #define R500_ALU_RGB_G_SWIZ_A_UNUSED (7 << 5) */ 3171bf215546Sopenharmony_ci# define R500_ALU_RGB_B_SWIZ_A_R (0 << 8) 3172bf215546Sopenharmony_ci# define R500_ALU_RGB_B_SWIZ_A_G (1 << 8) 3173bf215546Sopenharmony_ci# define R500_ALU_RGB_B_SWIZ_A_B (2 << 8) 3174bf215546Sopenharmony_ci# define R500_ALU_RGB_B_SWIZ_A_A (3 << 8) 3175bf215546Sopenharmony_ci# define R500_ALU_RGB_B_SWIZ_A_0 (4 << 8) 3176bf215546Sopenharmony_ci# define R500_ALU_RGB_B_SWIZ_A_HALF (5 << 8) 3177bf215546Sopenharmony_ci# define R500_ALU_RGB_B_SWIZ_A_1 (6 << 8) 3178bf215546Sopenharmony_ci/* #define R500_ALU_RGB_B_SWIZ_A_UNUSED (7 << 8) */ 3179bf215546Sopenharmony_ci# define R500_ALU_RGB_MOD_A_NOP (0 << 11) 3180bf215546Sopenharmony_ci# define R500_ALU_RGB_MOD_A_NEG (1 << 11) 3181bf215546Sopenharmony_ci# define R500_ALU_RGB_MOD_A_ABS (2 << 11) 3182bf215546Sopenharmony_ci# define R500_ALU_RGB_MOD_A_NAB (3 << 11) 3183bf215546Sopenharmony_ci# define R500_ALU_RGB_SEL_B_SHIFT 13 3184bf215546Sopenharmony_ci# define R500_ALU_RGB_SEL_B_SRC0 (0 << 13) 3185bf215546Sopenharmony_ci# define R500_ALU_RGB_SEL_B_SRC1 (1 << 13) 3186bf215546Sopenharmony_ci# define R500_ALU_RGB_SEL_B_SRC2 (2 << 13) 3187bf215546Sopenharmony_ci# define R500_ALU_RGB_SEL_B_SRCP (3 << 13) 3188bf215546Sopenharmony_ci# define R500_ALU_RGB_R_SWIZ_B_R (0 << 15) 3189bf215546Sopenharmony_ci# define R500_ALU_RGB_R_SWIZ_B_G (1 << 15) 3190bf215546Sopenharmony_ci# define R500_ALU_RGB_R_SWIZ_B_B (2 << 15) 3191bf215546Sopenharmony_ci# define R500_ALU_RGB_R_SWIZ_B_A (3 << 15) 3192bf215546Sopenharmony_ci# define R500_ALU_RGB_R_SWIZ_B_0 (4 << 15) 3193bf215546Sopenharmony_ci# define R500_ALU_RGB_R_SWIZ_B_HALF (5 << 15) 3194bf215546Sopenharmony_ci# define R500_ALU_RGB_R_SWIZ_B_1 (6 << 15) 3195bf215546Sopenharmony_ci/* #define R500_ALU_RGB_R_SWIZ_B_UNUSED (7 << 15) */ 3196bf215546Sopenharmony_ci# define R500_ALU_RGB_G_SWIZ_B_R (0 << 18) 3197bf215546Sopenharmony_ci# define R500_ALU_RGB_G_SWIZ_B_G (1 << 18) 3198bf215546Sopenharmony_ci# define R500_ALU_RGB_G_SWIZ_B_B (2 << 18) 3199bf215546Sopenharmony_ci# define R500_ALU_RGB_G_SWIZ_B_A (3 << 18) 3200bf215546Sopenharmony_ci# define R500_ALU_RGB_G_SWIZ_B_0 (4 << 18) 3201bf215546Sopenharmony_ci# define R500_ALU_RGB_G_SWIZ_B_HALF (5 << 18) 3202bf215546Sopenharmony_ci# define R500_ALU_RGB_G_SWIZ_B_1 (6 << 18) 3203bf215546Sopenharmony_ci/* #define R500_ALU_RGB_G_SWIZ_B_UNUSED (7 << 18) */ 3204bf215546Sopenharmony_ci# define R500_ALU_RGB_B_SWIZ_B_R (0 << 21) 3205bf215546Sopenharmony_ci# define R500_ALU_RGB_B_SWIZ_B_G (1 << 21) 3206bf215546Sopenharmony_ci# define R500_ALU_RGB_B_SWIZ_B_B (2 << 21) 3207bf215546Sopenharmony_ci# define R500_ALU_RGB_B_SWIZ_B_A (3 << 21) 3208bf215546Sopenharmony_ci# define R500_ALU_RGB_B_SWIZ_B_0 (4 << 21) 3209bf215546Sopenharmony_ci# define R500_ALU_RGB_B_SWIZ_B_HALF (5 << 21) 3210bf215546Sopenharmony_ci# define R500_ALU_RGB_B_SWIZ_B_1 (6 << 21) 3211bf215546Sopenharmony_ci/* #define R500_ALU_RGB_B_SWIZ_B_UNUSED (7 << 21) */ 3212bf215546Sopenharmony_ci# define R500_ALU_RGB_MOD_B_NOP (0 << 24) 3213bf215546Sopenharmony_ci# define R500_ALU_RGB_MOD_B_NEG (1 << 24) 3214bf215546Sopenharmony_ci# define R500_ALU_RGB_MOD_B_ABS (2 << 24) 3215bf215546Sopenharmony_ci# define R500_ALU_RGB_MOD_B_NAB (3 << 24) 3216bf215546Sopenharmony_ci# define R500_ALU_RGB_OMOD_SHIFT 26 3217bf215546Sopenharmony_ci# define R500_ALU_RGB_OMOD_IDENTITY (0 << R500_ALU_RGB_OMOD_SHIFT) 3218bf215546Sopenharmony_ci# define R500_ALU_RGB_OMOD_MUL_2 (1 << R500_ALU_RGB_OMOD_SHIFT) 3219bf215546Sopenharmony_ci# define R500_ALU_RGB_OMOD_MUL_4 (2 << R500_ALU_RGB_OMOD_SHIFT) 3220bf215546Sopenharmony_ci# define R500_ALU_RGB_OMOD_MUL_8 (3 << R500_ALU_RGB_OMOD_SHIFT) 3221bf215546Sopenharmony_ci# define R500_ALU_RGB_OMOD_DIV_2 (4 << R500_ALU_RGB_OMOD_SHIFT) 3222bf215546Sopenharmony_ci# define R500_ALU_RGB_OMOD_DIV_4 (5 << R500_ALU_RGB_OMOD_SHIFT) 3223bf215546Sopenharmony_ci# define R500_ALU_RGB_OMOD_DIV_8 (6 << R500_ALU_RGB_OMOD_SHIFT) 3224bf215546Sopenharmony_ci# define R500_ALU_RGB_OMOD_DISABLE (7 << R500_ALU_RGB_OMOD_SHIFT) 3225bf215546Sopenharmony_ci# define R500_ALU_RGB_TARGET(x) ((x) << 29) 3226bf215546Sopenharmony_ci# define R500_ALU_RGB_WMASK (1 << 31) 3227bf215546Sopenharmony_ci#define R500_US_ALU_RGB_ADDR_0 0x9000 3228bf215546Sopenharmony_ci# define R500_RGB_ADDR0(x) ((x) << 0) 3229bf215546Sopenharmony_ci# define R500_RGB_ADDR0_CONST (1 << 8) 3230bf215546Sopenharmony_ci# define R500_RGB_ADDR0_REL (1 << 9) 3231bf215546Sopenharmony_ci# define R500_RGB_ADDR1(x) ((x) << 10) 3232bf215546Sopenharmony_ci# define R500_RGB_ADDR1_CONST (1 << 18) 3233bf215546Sopenharmony_ci# define R500_RGB_ADDR1_REL (1 << 19) 3234bf215546Sopenharmony_ci# define R500_RGB_ADDR2(x) ((x) << 20) 3235bf215546Sopenharmony_ci# define R500_RGB_ADDR2_CONST (1 << 28) 3236bf215546Sopenharmony_ci# define R500_RGB_ADDR2_REL (1 << 29) 3237bf215546Sopenharmony_ci# define R500_RGB_SRCP_OP_1_MINUS_2RGB0 (0 << 30) 3238bf215546Sopenharmony_ci# define R500_RGB_SRCP_OP_RGB1_MINUS_RGB0 (1 << 30) 3239bf215546Sopenharmony_ci# define R500_RGB_SRCP_OP_RGB1_PLUS_RGB0 (2 << 30) 3240bf215546Sopenharmony_ci# define R500_RGB_SRCP_OP_1_MINUS_RGB0 (3 << 30) 3241bf215546Sopenharmony_ci#define R500_US_CMN_INST_0 0xb800 3242bf215546Sopenharmony_ci# define R500_INST_TYPE_MASK (3 << 0) 3243bf215546Sopenharmony_ci# define R500_INST_TYPE_ALU (0 << 0) 3244bf215546Sopenharmony_ci# define R500_INST_TYPE_OUT (1 << 0) 3245bf215546Sopenharmony_ci# define R500_INST_TYPE_FC (2 << 0) 3246bf215546Sopenharmony_ci# define R500_INST_TYPE_TEX (3 << 0) 3247bf215546Sopenharmony_ci# define R500_INST_TEX_SEM_WAIT_SHIFT 2 3248bf215546Sopenharmony_ci# define R500_INST_TEX_SEM_WAIT (1 << R500_INST_TEX_SEM_WAIT_SHIFT) 3249bf215546Sopenharmony_ci# define R500_INST_RGB_PRED_SEL_NONE (0 << 3) 3250bf215546Sopenharmony_ci# define R500_INST_RGB_PRED_SEL_RGBA (1 << 3) 3251bf215546Sopenharmony_ci# define R500_INST_RGB_PRED_SEL_RRRR (2 << 3) 3252bf215546Sopenharmony_ci# define R500_INST_RGB_PRED_SEL_GGGG (3 << 3) 3253bf215546Sopenharmony_ci# define R500_INST_RGB_PRED_SEL_BBBB (4 << 3) 3254bf215546Sopenharmony_ci# define R500_INST_RGB_PRED_SEL_AAAA (5 << 3) 3255bf215546Sopenharmony_ci# define R500_INST_RGB_PRED_INV (1 << 6) 3256bf215546Sopenharmony_ci# define R500_INST_WRITE_INACTIVE (1 << 7) 3257bf215546Sopenharmony_ci# define R500_INST_LAST (1 << 8) 3258bf215546Sopenharmony_ci# define R500_INST_NOP (1 << 9) 3259bf215546Sopenharmony_ci# define R500_INST_ALU_WAIT (1 << 10) 3260bf215546Sopenharmony_ci# define R500_INST_RGB_WMASK_R (1 << 11) 3261bf215546Sopenharmony_ci# define R500_INST_RGB_WMASK_G (1 << 12) 3262bf215546Sopenharmony_ci# define R500_INST_RGB_WMASK_B (1 << 13) 3263bf215546Sopenharmony_ci# define R500_INST_RGB_WMASK_RGB (7 << 11) 3264bf215546Sopenharmony_ci# define R500_INST_ALPHA_WMASK (1 << 14) 3265bf215546Sopenharmony_ci# define R500_INST_RGB_OMASK_R (1 << 15) 3266bf215546Sopenharmony_ci# define R500_INST_RGB_OMASK_G (1 << 16) 3267bf215546Sopenharmony_ci# define R500_INST_RGB_OMASK_B (1 << 17) 3268bf215546Sopenharmony_ci# define R500_INST_RGB_OMASK_RGB (7 << 15) 3269bf215546Sopenharmony_ci# define R500_INST_ALPHA_OMASK (1 << 18) 3270bf215546Sopenharmony_ci# define R500_INST_RGB_CLAMP (1 << 19) 3271bf215546Sopenharmony_ci# define R500_INST_ALPHA_CLAMP (1 << 20) 3272bf215546Sopenharmony_ci# define R500_INST_ALU_RESULT_SEL (1 << 21) 3273bf215546Sopenharmony_ci# define R500_INST_ALU_RESULT_SEL_RED (0 << 21) 3274bf215546Sopenharmony_ci# define R500_INST_ALU_RESULT_SEL_ALPHA (1 << 21) 3275bf215546Sopenharmony_ci# define R500_INST_ALPHA_PRED_INV (1 << 22) 3276bf215546Sopenharmony_ci# define R500_INST_ALU_RESULT_OP_EQ (0 << 23) 3277bf215546Sopenharmony_ci# define R500_INST_ALU_RESULT_OP_LT (1 << 23) 3278bf215546Sopenharmony_ci# define R500_INST_ALU_RESULT_OP_GE (2 << 23) 3279bf215546Sopenharmony_ci# define R500_INST_ALU_RESULT_OP_NE (3 << 23) 3280bf215546Sopenharmony_ci# define R500_INST_ALPHA_PRED_SEL_NONE (0 << 25) 3281bf215546Sopenharmony_ci# define R500_INST_ALPHA_PRED_SEL_RGBA (1 << 25) 3282bf215546Sopenharmony_ci# define R500_INST_ALPHA_PRED_SEL_RRRR (2 << 25) 3283bf215546Sopenharmony_ci# define R500_INST_ALPHA_PRED_SEL_GGGG (3 << 25) 3284bf215546Sopenharmony_ci# define R500_INST_ALPHA_PRED_SEL_BBBB (4 << 25) 3285bf215546Sopenharmony_ci# define R500_INST_ALPHA_PRED_SEL_AAAA (5 << 25) 3286bf215546Sopenharmony_ci/* Next four are guessed, documentation doesn't mention order. */ 3287bf215546Sopenharmony_ci# define R500_INST_STAT_WE_R (1 << 28) 3288bf215546Sopenharmony_ci# define R500_INST_STAT_WE_G (1 << 29) 3289bf215546Sopenharmony_ci# define R500_INST_STAT_WE_B (1 << 30) 3290bf215546Sopenharmony_ci# define R500_INST_STAT_WE_A (1 << 31) 3291bf215546Sopenharmony_ci 3292bf215546Sopenharmony_ci/* note that these are 8 bit lengths, despite the offsets, at least for R500 */ 3293bf215546Sopenharmony_ci#define R500_US_CODE_ADDR 0x4630 3294bf215546Sopenharmony_ci# define R500_US_CODE_START_ADDR(x) ((x) << 0) 3295bf215546Sopenharmony_ci# define R500_US_CODE_END_ADDR(x) ((x) << 16) 3296bf215546Sopenharmony_ci#define R500_US_CODE_OFFSET 0x4638 3297bf215546Sopenharmony_ci# define R500_US_CODE_OFFSET_ADDR(x) ((x) << 0) 3298bf215546Sopenharmony_ci#define R500_US_CODE_RANGE 0x4634 3299bf215546Sopenharmony_ci# define R500_US_CODE_RANGE_ADDR(x) ((x) << 0) 3300bf215546Sopenharmony_ci# define R500_US_CODE_RANGE_SIZE(x) ((x) << 16) 3301bf215546Sopenharmony_ci#define R500_US_CONFIG 0x4600 3302bf215546Sopenharmony_ci# define R500_ZERO_TIMES_ANYTHING_EQUALS_ZERO (1 << 1) 3303bf215546Sopenharmony_ci#define R500_US_FC_ADDR_0 0xa000 3304bf215546Sopenharmony_ci# define R500_FC_BOOL_ADDR(x) ((x) << 0) 3305bf215546Sopenharmony_ci# define R500_FC_INT_ADDR(x) ((x) << 8) 3306bf215546Sopenharmony_ci# define R500_FC_JUMP_ADDR(x) ((x) << 16) 3307bf215546Sopenharmony_ci# define R500_FC_JUMP_GLOBAL (1 << 31) 3308bf215546Sopenharmony_ci#define R500_US_FC_BOOL_CONST 0x4620 3309bf215546Sopenharmony_ci# define R500_FC_KBOOL(x) (x) 3310bf215546Sopenharmony_ci#define R500_US_FC_CTRL 0x4624 3311bf215546Sopenharmony_ci# define R500_FC_TEST_EN (1 << 30) 3312bf215546Sopenharmony_ci# define R500_FC_FULL_FC_EN (1U << 31) 3313bf215546Sopenharmony_ci#define R500_US_FC_INST_0 0x9800 3314bf215546Sopenharmony_ci# define R500_FC_OP_JUMP (0 << 0) 3315bf215546Sopenharmony_ci# define R500_FC_OP_LOOP (1 << 0) 3316bf215546Sopenharmony_ci# define R500_FC_OP_ENDLOOP (2 << 0) 3317bf215546Sopenharmony_ci# define R500_FC_OP_REP (3 << 0) 3318bf215546Sopenharmony_ci# define R500_FC_OP_ENDREP (4 << 0) 3319bf215546Sopenharmony_ci# define R500_FC_OP_BREAKLOOP (5 << 0) 3320bf215546Sopenharmony_ci# define R500_FC_OP_BREAKREP (6 << 0) 3321bf215546Sopenharmony_ci# define R500_FC_OP_CONTINUE (7 << 0) 3322bf215546Sopenharmony_ci# define R500_FC_B_ELSE (1 << 4) 3323bf215546Sopenharmony_ci# define R500_FC_JUMP_ANY (1 << 5) 3324bf215546Sopenharmony_ci# define R500_FC_A_OP_NONE (0 << 6) 3325bf215546Sopenharmony_ci# define R500_FC_A_OP_POP (1 << 6) 3326bf215546Sopenharmony_ci# define R500_FC_A_OP_PUSH (2 << 6) 3327bf215546Sopenharmony_ci# define R500_FC_JUMP_FUNC(x) ((x) << 8) 3328bf215546Sopenharmony_ci# define R500_FC_B_POP_CNT(x) ((x) << 16) 3329bf215546Sopenharmony_ci# define R500_FC_B_OP0_NONE (0 << 24) 3330bf215546Sopenharmony_ci# define R500_FC_B_OP0_DECR (1 << 24) 3331bf215546Sopenharmony_ci# define R500_FC_B_OP0_INCR (2 << 24) 3332bf215546Sopenharmony_ci# define R500_FC_B_OP1_NONE (0 << 26) 3333bf215546Sopenharmony_ci# define R500_FC_B_OP1_DECR (1 << 26) 3334bf215546Sopenharmony_ci# define R500_FC_B_OP1_INCR (2 << 26) 3335bf215546Sopenharmony_ci# define R500_FC_IGNORE_UNCOVERED (1 << 28) 3336bf215546Sopenharmony_ci#define R500_US_FC_INT_CONST_0 0x4c00 3337bf215546Sopenharmony_ci# define R500_FC_INT_CONST_KR(x) ((x) << 0) 3338bf215546Sopenharmony_ci# define R500_FC_INT_CONST_KG(x) ((x) << 8) 3339bf215546Sopenharmony_ci# define R500_FC_INT_CONST_KB(x) ((x) << 16) 3340bf215546Sopenharmony_ci/* _0 through _15 */ 3341bf215546Sopenharmony_ci#define R500_US_FORMAT0_0 0x4640 3342bf215546Sopenharmony_ci# define R500_FORMAT_TXWIDTH(x) ((x) << 0) 3343bf215546Sopenharmony_ci# define R500_FORMAT_TXHEIGHT(x) ((x) << 11) 3344bf215546Sopenharmony_ci# define R500_FORMAT_TXDEPTH(x) ((x) << 22) 3345bf215546Sopenharmony_ci#define R500_US_PIXSIZE 0x4604 3346bf215546Sopenharmony_ci# define R500_PIX_SIZE(x) (x) 3347bf215546Sopenharmony_ci#define R500_US_TEX_ADDR_0 0x9800 3348bf215546Sopenharmony_ci# define R500_TEX_SRC_ADDR(x) ((x) << 0) 3349bf215546Sopenharmony_ci# define R500_TEX_SRC_ADDR_REL (1 << 7) 3350bf215546Sopenharmony_ci# define R500_TEX_SRC_S_SWIZ_R (0 << 8) 3351bf215546Sopenharmony_ci# define R500_TEX_SRC_S_SWIZ_G (1 << 8) 3352bf215546Sopenharmony_ci# define R500_TEX_SRC_S_SWIZ_B (2 << 8) 3353bf215546Sopenharmony_ci# define R500_TEX_SRC_S_SWIZ_A (3 << 8) 3354bf215546Sopenharmony_ci# define R500_TEX_SRC_T_SWIZ_R (0 << 10) 3355bf215546Sopenharmony_ci# define R500_TEX_SRC_T_SWIZ_G (1 << 10) 3356bf215546Sopenharmony_ci# define R500_TEX_SRC_T_SWIZ_B (2 << 10) 3357bf215546Sopenharmony_ci# define R500_TEX_SRC_T_SWIZ_A (3 << 10) 3358bf215546Sopenharmony_ci# define R500_TEX_SRC_R_SWIZ_R (0 << 12) 3359bf215546Sopenharmony_ci# define R500_TEX_SRC_R_SWIZ_G (1 << 12) 3360bf215546Sopenharmony_ci# define R500_TEX_SRC_R_SWIZ_B (2 << 12) 3361bf215546Sopenharmony_ci# define R500_TEX_SRC_R_SWIZ_A (3 << 12) 3362bf215546Sopenharmony_ci# define R500_TEX_SRC_Q_SWIZ_R (0 << 14) 3363bf215546Sopenharmony_ci# define R500_TEX_SRC_Q_SWIZ_G (1 << 14) 3364bf215546Sopenharmony_ci# define R500_TEX_SRC_Q_SWIZ_B (2 << 14) 3365bf215546Sopenharmony_ci# define R500_TEX_SRC_Q_SWIZ_A (3 << 14) 3366bf215546Sopenharmony_ci# define R500_TEX_DST_ADDR(x) ((x) << 16) 3367bf215546Sopenharmony_ci# define R500_TEX_DST_ADDR_REL (1 << 23) 3368bf215546Sopenharmony_ci# define R500_TEX_DST_R_SWIZ_R (0 << 24) 3369bf215546Sopenharmony_ci# define R500_TEX_DST_R_SWIZ_G (1 << 24) 3370bf215546Sopenharmony_ci# define R500_TEX_DST_R_SWIZ_B (2 << 24) 3371bf215546Sopenharmony_ci# define R500_TEX_DST_R_SWIZ_A (3 << 24) 3372bf215546Sopenharmony_ci# define R500_TEX_DST_G_SWIZ_R (0 << 26) 3373bf215546Sopenharmony_ci# define R500_TEX_DST_G_SWIZ_G (1 << 26) 3374bf215546Sopenharmony_ci# define R500_TEX_DST_G_SWIZ_B (2 << 26) 3375bf215546Sopenharmony_ci# define R500_TEX_DST_G_SWIZ_A (3 << 26) 3376bf215546Sopenharmony_ci# define R500_TEX_DST_B_SWIZ_R (0 << 28) 3377bf215546Sopenharmony_ci# define R500_TEX_DST_B_SWIZ_G (1 << 28) 3378bf215546Sopenharmony_ci# define R500_TEX_DST_B_SWIZ_B (2 << 28) 3379bf215546Sopenharmony_ci# define R500_TEX_DST_B_SWIZ_A (3 << 28) 3380bf215546Sopenharmony_ci# define R500_TEX_DST_A_SWIZ_R (0 << 30) 3381bf215546Sopenharmony_ci# define R500_TEX_DST_A_SWIZ_G (1 << 30) 3382bf215546Sopenharmony_ci# define R500_TEX_DST_A_SWIZ_B (2 << 30) 3383bf215546Sopenharmony_ci# define R500_TEX_DST_A_SWIZ_A (3 << 30) 3384bf215546Sopenharmony_ci#define R500_US_TEX_ADDR_DXDY_0 0xa000 3385bf215546Sopenharmony_ci# define R500_DX_ADDR(x) ((x) << 0) 3386bf215546Sopenharmony_ci# define R500_DX_ADDR_REL (1 << 7) 3387bf215546Sopenharmony_ci# define R500_DX_S_SWIZ_R (0 << 8) 3388bf215546Sopenharmony_ci# define R500_DX_S_SWIZ_G (1 << 8) 3389bf215546Sopenharmony_ci# define R500_DX_S_SWIZ_B (2 << 8) 3390bf215546Sopenharmony_ci# define R500_DX_S_SWIZ_A (3 << 8) 3391bf215546Sopenharmony_ci# define R500_DX_T_SWIZ_R (0 << 10) 3392bf215546Sopenharmony_ci# define R500_DX_T_SWIZ_G (1 << 10) 3393bf215546Sopenharmony_ci# define R500_DX_T_SWIZ_B (2 << 10) 3394bf215546Sopenharmony_ci# define R500_DX_T_SWIZ_A (3 << 10) 3395bf215546Sopenharmony_ci# define R500_DX_R_SWIZ_R (0 << 12) 3396bf215546Sopenharmony_ci# define R500_DX_R_SWIZ_G (1 << 12) 3397bf215546Sopenharmony_ci# define R500_DX_R_SWIZ_B (2 << 12) 3398bf215546Sopenharmony_ci# define R500_DX_R_SWIZ_A (3 << 12) 3399bf215546Sopenharmony_ci# define R500_DX_Q_SWIZ_R (0 << 14) 3400bf215546Sopenharmony_ci# define R500_DX_Q_SWIZ_G (1 << 14) 3401bf215546Sopenharmony_ci# define R500_DX_Q_SWIZ_B (2 << 14) 3402bf215546Sopenharmony_ci# define R500_DX_Q_SWIZ_A (3 << 14) 3403bf215546Sopenharmony_ci# define R500_DY_ADDR(x) ((x) << 16) 3404bf215546Sopenharmony_ci# define R500_DY_ADDR_REL (1 << 17) 3405bf215546Sopenharmony_ci# define R500_DY_S_SWIZ_R (0 << 24) 3406bf215546Sopenharmony_ci# define R500_DY_S_SWIZ_G (1 << 24) 3407bf215546Sopenharmony_ci# define R500_DY_S_SWIZ_B (2 << 24) 3408bf215546Sopenharmony_ci# define R500_DY_S_SWIZ_A (3 << 24) 3409bf215546Sopenharmony_ci# define R500_DY_T_SWIZ_R (0 << 26) 3410bf215546Sopenharmony_ci# define R500_DY_T_SWIZ_G (1 << 26) 3411bf215546Sopenharmony_ci# define R500_DY_T_SWIZ_B (2 << 26) 3412bf215546Sopenharmony_ci# define R500_DY_T_SWIZ_A (3 << 26) 3413bf215546Sopenharmony_ci# define R500_DY_R_SWIZ_R (0 << 28) 3414bf215546Sopenharmony_ci# define R500_DY_R_SWIZ_G (1 << 28) 3415bf215546Sopenharmony_ci# define R500_DY_R_SWIZ_B (2 << 28) 3416bf215546Sopenharmony_ci# define R500_DY_R_SWIZ_A (3 << 28) 3417bf215546Sopenharmony_ci# define R500_DY_Q_SWIZ_R (0 << 30) 3418bf215546Sopenharmony_ci# define R500_DY_Q_SWIZ_G (1 << 30) 3419bf215546Sopenharmony_ci# define R500_DY_Q_SWIZ_B (2 << 30) 3420bf215546Sopenharmony_ci# define R500_DY_Q_SWIZ_A (3 << 30) 3421bf215546Sopenharmony_ci#define R500_US_TEX_INST_0 0x9000 3422bf215546Sopenharmony_ci# define R500_TEX_ID(x) ((x) << 16) 3423bf215546Sopenharmony_ci# define R500_TEX_INST_NOP (0 << 22) 3424bf215546Sopenharmony_ci# define R500_TEX_INST_LD (1 << 22) 3425bf215546Sopenharmony_ci# define R500_TEX_INST_TEXKILL (2 << 22) 3426bf215546Sopenharmony_ci# define R500_TEX_INST_PROJ (3 << 22) 3427bf215546Sopenharmony_ci# define R500_TEX_INST_LODBIAS (4 << 22) 3428bf215546Sopenharmony_ci# define R500_TEX_INST_LOD (5 << 22) 3429bf215546Sopenharmony_ci# define R500_TEX_INST_DXDY (6 << 22) 3430bf215546Sopenharmony_ci# define R500_TEX_SEM_ACQUIRE_SHIFT 25 3431bf215546Sopenharmony_ci# define R500_TEX_SEM_ACQUIRE (1 << R500_TEX_SEM_ACQUIRE_SHIFT) 3432bf215546Sopenharmony_ci# define R500_TEX_IGNORE_UNCOVERED (1 << 26) 3433bf215546Sopenharmony_ci# define R500_TEX_UNSCALED (1 << 27) 3434bf215546Sopenharmony_ci#define R300_US_W_FMT 0x46b4 3435bf215546Sopenharmony_ci# define R300_W_FMT_W0 (0 << 0) 3436bf215546Sopenharmony_ci# define R300_W_FMT_W24 (1 << 0) 3437bf215546Sopenharmony_ci# define R300_W_FMT_W24FP (2 << 0) 3438bf215546Sopenharmony_ci# define R300_W_SRC_US (0 << 2) 3439bf215546Sopenharmony_ci# define R300_W_SRC_RAS (1 << 2) 3440bf215546Sopenharmony_ci 3441bf215546Sopenharmony_ci/* Draw a primitive from vertex data in arrays loaded via 3D_LOAD_VBPNTR. 3442bf215546Sopenharmony_ci * Two parameter dwords: 3443bf215546Sopenharmony_ci * 0. VAP_VTX_FMT: The first parameter is not written to hardware 3444bf215546Sopenharmony_ci * 1. VAP_VF_CTL: The second parameter is a standard primitive emission dword. 3445bf215546Sopenharmony_ci */ 3446bf215546Sopenharmony_ci#define R300_PACKET3_3D_DRAW_VBUF 0x00002800 3447bf215546Sopenharmony_ci 3448bf215546Sopenharmony_ci/* Draw a primitive from immediate vertices in this packet 3449bf215546Sopenharmony_ci * Up to 16382 dwords: 3450bf215546Sopenharmony_ci * 0. VAP_VTX_FMT: The first parameter is not written to hardware 3451bf215546Sopenharmony_ci * 1. VAP_VF_CTL: The second parameter is a standard primitive emission dword. 3452bf215546Sopenharmony_ci * 2 to end: Up to 16380 dwords of vertex data. 3453bf215546Sopenharmony_ci */ 3454bf215546Sopenharmony_ci#define R300_PACKET3_3D_DRAW_IMMD 0x00002900 3455bf215546Sopenharmony_ci 3456bf215546Sopenharmony_ci/* Draw a primitive from vertex data in arrays loaded via 3D_LOAD_VBPNTR and 3457bf215546Sopenharmony_ci * immediate vertices in this packet 3458bf215546Sopenharmony_ci * Up to 16382 dwords: 3459bf215546Sopenharmony_ci * 0. VAP_VTX_FMT: The first parameter is not written to hardware 3460bf215546Sopenharmony_ci * 1. VAP_VF_CTL: The second parameter is a standard primitive emission dword. 3461bf215546Sopenharmony_ci * 2 to end: Up to 16380 dwords of vertex data. 3462bf215546Sopenharmony_ci */ 3463bf215546Sopenharmony_ci#define R300_PACKET3_3D_DRAW_INDX 0x00002A00 3464bf215546Sopenharmony_ci 3465bf215546Sopenharmony_ci 3466bf215546Sopenharmony_ci/* Specify the full set of vertex arrays as (address, stride). 3467bf215546Sopenharmony_ci * The first parameter is the number of vertex arrays specified. 3468bf215546Sopenharmony_ci * The rest of the command is a variable length list of blocks, where 3469bf215546Sopenharmony_ci * each block is three dwords long and specifies two arrays. 3470bf215546Sopenharmony_ci * The first dword of a block is split into two words, the lower significant 3471bf215546Sopenharmony_ci * word refers to the first array, the more significant word to the second 3472bf215546Sopenharmony_ci * array in the block. 3473bf215546Sopenharmony_ci * The low byte of each word contains the size of an array entry in dwords, 3474bf215546Sopenharmony_ci * the high byte contains the stride of the array. 3475bf215546Sopenharmony_ci * The second dword of a block contains the pointer to the first array, 3476bf215546Sopenharmony_ci * the third dword of a block contains the pointer to the second array. 3477bf215546Sopenharmony_ci * Note that if the total number of arrays is odd, the third dword of 3478bf215546Sopenharmony_ci * the last block is omitted. 3479bf215546Sopenharmony_ci */ 3480bf215546Sopenharmony_ci#define R300_PACKET3_3D_LOAD_VBPNTR 0x00002F00 3481bf215546Sopenharmony_ci# define R300_VC_FORCE_PREFETCH (1 << 5) 3482bf215546Sopenharmony_ci# define R300_VBPNTR_SIZE0(x) ((x) >> 2) 3483bf215546Sopenharmony_ci# define R300_VBPNTR_STRIDE0(x) (((x) >> 2) << 8) 3484bf215546Sopenharmony_ci# define R300_VBPNTR_SIZE1(x) (((x) >> 2) << 16) 3485bf215546Sopenharmony_ci# define R300_VBPNTR_STRIDE1(x) (((x) >> 2) << 24) 3486bf215546Sopenharmony_ci 3487bf215546Sopenharmony_ci#define R300_PACKET3_3D_CLEAR_ZMASK 0x00003200 3488bf215546Sopenharmony_ci#define R300_PACKET3_INDX_BUFFER 0x00003300 3489bf215546Sopenharmony_ci# define R300_INDX_BUFFER_DST_SHIFT 0 3490bf215546Sopenharmony_ci# define R300_INDX_BUFFER_SKIP_SHIFT 16 3491bf215546Sopenharmony_ci# define R300_INDX_BUFFER_ONE_REG_WR (1U << 31) 3492bf215546Sopenharmony_ci 3493bf215546Sopenharmony_ci/* Same as R300_PACKET3_3D_DRAW_VBUF but without VAP_VTX_FMT */ 3494bf215546Sopenharmony_ci#define R300_PACKET3_3D_DRAW_VBUF_2 0x00003400 3495bf215546Sopenharmony_ci/* Same as R300_PACKET3_3D_DRAW_IMMD but without VAP_VTX_FMT */ 3496bf215546Sopenharmony_ci#define R300_PACKET3_3D_DRAW_IMMD_2 0x00003500 3497bf215546Sopenharmony_ci/* Same as R300_PACKET3_3D_DRAW_INDX but without VAP_VTX_FMT */ 3498bf215546Sopenharmony_ci#define R300_PACKET3_3D_DRAW_INDX_2 0x00003600 3499bf215546Sopenharmony_ci 3500bf215546Sopenharmony_ci/* Clears a portion of hierachical Z RAM 3501bf215546Sopenharmony_ci * 3 dword parameters 3502bf215546Sopenharmony_ci * 0. START 3503bf215546Sopenharmony_ci * 1. COUNT: 13:0 (max is 0x3FFF) 3504bf215546Sopenharmony_ci * 2. CLEAR_VALUE: Value to write into HIZ RAM. 3505bf215546Sopenharmony_ci */ 3506bf215546Sopenharmony_ci#define R300_PACKET3_3D_CLEAR_HIZ 0x00003700 3507bf215546Sopenharmony_ci#define R300_PACKET3_3D_CLEAR_CMASK 0x00003800 3508bf215546Sopenharmony_ci 3509bf215546Sopenharmony_ci/* Draws a set of primitives using vertex buffers pointed by the state data. 3510bf215546Sopenharmony_ci * At least 2 Parameters: 3511bf215546Sopenharmony_ci * 0. VAP_VF_CNTL: The first parameter is a standard primitive emission dword. 3512bf215546Sopenharmony_ci * 2 to end: Data or indices (see other 3D_DRAW_* packets for details) 3513bf215546Sopenharmony_ci */ 3514bf215546Sopenharmony_ci#define R300_PACKET3_3D_DRAW_128 0x00003900 3515bf215546Sopenharmony_ci 3516bf215546Sopenharmony_ci/* END: Packet 3 commands */ 3517bf215546Sopenharmony_ci 3518bf215546Sopenharmony_ci 3519bf215546Sopenharmony_ci/* Color formats for 2d packets 3520bf215546Sopenharmony_ci */ 3521bf215546Sopenharmony_ci#define R300_CP_COLOR_FORMAT_CI8 2 3522bf215546Sopenharmony_ci#define R300_CP_COLOR_FORMAT_ARGB1555 3 3523bf215546Sopenharmony_ci#define R300_CP_COLOR_FORMAT_RGB565 4 3524bf215546Sopenharmony_ci#define R300_CP_COLOR_FORMAT_ARGB8888 6 3525bf215546Sopenharmony_ci#define R300_CP_COLOR_FORMAT_RGB332 7 3526bf215546Sopenharmony_ci#define R300_CP_COLOR_FORMAT_RGB8 9 3527bf215546Sopenharmony_ci#define R300_CP_COLOR_FORMAT_ARGB4444 15 3528bf215546Sopenharmony_ci 3529bf215546Sopenharmony_ci/* 3530bf215546Sopenharmony_ci * CP type-3 packets 3531bf215546Sopenharmony_ci */ 3532bf215546Sopenharmony_ci#define RADEON_WAIT_UNTIL 0x1720 3533bf215546Sopenharmony_ci# define RADEON_WAIT_CRTC_PFLIP (1 << 0) 3534bf215546Sopenharmony_ci# define RADEON_WAIT_2D_IDLECLEAN (1 << 16) 3535bf215546Sopenharmony_ci# define RADEON_WAIT_3D_IDLECLEAN (1 << 17) 3536bf215546Sopenharmony_ci# define RADEON_WAIT_HOST_IDLECLEAN (1 << 18) 3537bf215546Sopenharmony_ci 3538bf215546Sopenharmony_ci#define RADEON_CP_PACKET0 0x00000000 3539bf215546Sopenharmony_ci#define RADEON_CP_PACKET3 0xC0000000 3540bf215546Sopenharmony_ci 3541bf215546Sopenharmony_ci#define RADEON_ONE_REG_WR (1 << 15) 3542bf215546Sopenharmony_ci 3543bf215546Sopenharmony_ci#define CP_PACKET0(register, count) \ 3544bf215546Sopenharmony_ci (RADEON_CP_PACKET0 | ((count) << 16) | ((register) >> 2)) 3545bf215546Sopenharmony_ci 3546bf215546Sopenharmony_ci#define CP_PACKET3(op, count) \ 3547bf215546Sopenharmony_ci (RADEON_CP_PACKET3 | (op) | ((count) << 16)) 3548bf215546Sopenharmony_ci 3549bf215546Sopenharmony_ci#endif /* _R300_REG_H */ 3550bf215546Sopenharmony_ci 3551bf215546Sopenharmony_ci/* *INDENT-ON* */ 3552bf215546Sopenharmony_ci 3553bf215546Sopenharmony_ci/* vim: set foldenable foldmarker=\\{,\\} foldmethod=marker : */ 3554