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