Subversion Repositories Kolibri OS

Rev

Rev 1430 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1430 Rev 1963
1
/*
1
/*
2
 * Copyright 2005 Nicolai Haehnle et al.
2
 * Copyright 2005 Nicolai Haehnle et al.
3
 * Copyright 2008 Advanced Micro Devices, Inc.
3
 * Copyright 2008 Advanced Micro Devices, Inc.
4
 * Copyright 2009 Jerome Glisse.
4
 * Copyright 2009 Jerome Glisse.
5
 *
5
 *
6
 * Permission is hereby granted, free of charge, to any person obtaining a
6
 * Permission is hereby granted, free of charge, to any person obtaining a
7
 * copy of this software and associated documentation files (the "Software"),
7
 * copy of this software and associated documentation files (the "Software"),
8
 * to deal in the Software without restriction, including without limitation
8
 * to deal in the Software without restriction, including without limitation
9
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10
 * and/or sell copies of the Software, and to permit persons to whom the
10
 * and/or sell copies of the Software, and to permit persons to whom the
11
 * Software is furnished to do so, subject to the following conditions:
11
 * Software is furnished to do so, subject to the following conditions:
12
 *
12
 *
13
 * The above copyright notice and this permission notice shall be included in
13
 * The above copyright notice and this permission notice shall be included in
14
 * all copies or substantial portions of the Software.
14
 * all copies or substantial portions of the Software.
15
 *
15
 *
16
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
19
 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
19
 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
20
 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
20
 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
21
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
 * OTHER DEALINGS IN THE SOFTWARE.
22
 * OTHER DEALINGS IN THE SOFTWARE.
23
 *
23
 *
24
 * Authors: Nicolai Haehnle
24
 * Authors: Nicolai Haehnle
25
 *          Jerome Glisse
25
 *          Jerome Glisse
26
 */
26
 */
27
#ifndef _R300_REG_H_
27
#ifndef _R300_REG_H_
28
#define _R300_REG_H_
28
#define _R300_REG_H_
29
 
29
 
30
#define R300_SURF_TILE_MACRO (1<<16)
30
#define R300_SURF_TILE_MACRO (1<<16)
31
#define R300_SURF_TILE_MICRO (2<<16)
31
#define R300_SURF_TILE_MICRO (2<<16)
32
#define R300_SURF_TILE_BOTH (3<<16)
32
#define R300_SURF_TILE_BOTH (3<<16)
33
 
33
 
34
 
34
 
35
#define R300_MC_INIT_MISC_LAT_TIMER	0x180
35
#define R300_MC_INIT_MISC_LAT_TIMER	0x180
36
#	define R300_MC_MISC__MC_CPR_INIT_LAT_SHIFT	0
36
#	define R300_MC_MISC__MC_CPR_INIT_LAT_SHIFT	0
37
#	define R300_MC_MISC__MC_VF_INIT_LAT_SHIFT	4
37
#	define R300_MC_MISC__MC_VF_INIT_LAT_SHIFT	4
38
#	define R300_MC_MISC__MC_DISP0R_INIT_LAT_SHIFT	8
38
#	define R300_MC_MISC__MC_DISP0R_INIT_LAT_SHIFT	8
39
#	define R300_MC_MISC__MC_DISP1R_INIT_LAT_SHIFT	12
39
#	define R300_MC_MISC__MC_DISP1R_INIT_LAT_SHIFT	12
40
#	define R300_MC_MISC__MC_FIXED_INIT_LAT_SHIFT	16
40
#	define R300_MC_MISC__MC_FIXED_INIT_LAT_SHIFT	16
41
#	define R300_MC_MISC__MC_E2R_INIT_LAT_SHIFT	20
41
#	define R300_MC_MISC__MC_E2R_INIT_LAT_SHIFT	20
42
#	define R300_MC_MISC__MC_SAME_PAGE_PRIO_SHIFT	24
42
#	define R300_MC_MISC__MC_SAME_PAGE_PRIO_SHIFT	24
43
#	define R300_MC_MISC__MC_GLOBW_INIT_LAT_SHIFT	28
43
#	define R300_MC_MISC__MC_GLOBW_INIT_LAT_SHIFT	28
44
 
44
 
45
#define R300_MC_INIT_GFX_LAT_TIMER	0x154
45
#define R300_MC_INIT_GFX_LAT_TIMER	0x154
46
#	define R300_MC_MISC__MC_G3D0R_INIT_LAT_SHIFT	0
46
#	define R300_MC_MISC__MC_G3D0R_INIT_LAT_SHIFT	0
47
#	define R300_MC_MISC__MC_G3D1R_INIT_LAT_SHIFT	4
47
#	define R300_MC_MISC__MC_G3D1R_INIT_LAT_SHIFT	4
48
#	define R300_MC_MISC__MC_G3D2R_INIT_LAT_SHIFT	8
48
#	define R300_MC_MISC__MC_G3D2R_INIT_LAT_SHIFT	8
49
#	define R300_MC_MISC__MC_G3D3R_INIT_LAT_SHIFT	12
49
#	define R300_MC_MISC__MC_G3D3R_INIT_LAT_SHIFT	12
50
#	define R300_MC_MISC__MC_TX0R_INIT_LAT_SHIFT	16
50
#	define R300_MC_MISC__MC_TX0R_INIT_LAT_SHIFT	16
51
#	define R300_MC_MISC__MC_TX1R_INIT_LAT_SHIFT	20
51
#	define R300_MC_MISC__MC_TX1R_INIT_LAT_SHIFT	20
52
#	define R300_MC_MISC__MC_GLOBR_INIT_LAT_SHIFT	24
52
#	define R300_MC_MISC__MC_GLOBR_INIT_LAT_SHIFT	24
53
#	define R300_MC_MISC__MC_GLOBW_FULL_LAT_SHIFT	28
53
#	define R300_MC_MISC__MC_GLOBW_FULL_LAT_SHIFT	28
54
 
54
 
55
/*
55
/*
56
 * This file contains registers and constants for the R300. They have been
56
 * This file contains registers and constants for the R300. They have been
57
 * found mostly by examining command buffers captured using glxtest, as well
57
 * found mostly by examining command buffers captured using glxtest, as well
58
 * as by extrapolating some known registers and constants from the R200.
58
 * as by extrapolating some known registers and constants from the R200.
59
 * I am fairly certain that they are correct unless stated otherwise
59
 * I am fairly certain that they are correct unless stated otherwise
60
 * in comments.
60
 * in comments.
61
 */
61
 */
62
 
62
 
63
#define R300_SE_VPORT_XSCALE                0x1D98
63
#define R300_SE_VPORT_XSCALE                0x1D98
64
#define R300_SE_VPORT_XOFFSET               0x1D9C
64
#define R300_SE_VPORT_XOFFSET               0x1D9C
65
#define R300_SE_VPORT_YSCALE                0x1DA0
65
#define R300_SE_VPORT_YSCALE                0x1DA0
66
#define R300_SE_VPORT_YOFFSET               0x1DA4
66
#define R300_SE_VPORT_YOFFSET               0x1DA4
67
#define R300_SE_VPORT_ZSCALE                0x1DA8
67
#define R300_SE_VPORT_ZSCALE                0x1DA8
68
#define R300_SE_VPORT_ZOFFSET               0x1DAC
68
#define R300_SE_VPORT_ZOFFSET               0x1DAC
69
 
69
 
70
 
70
 
71
/*
71
/*
72
 * Vertex Array Processing (VAP) Control
72
 * Vertex Array Processing (VAP) Control
73
 * Stolen from r200 code from Christoph Brill (It's a guess!)
73
 * Stolen from r200 code from Christoph Brill (It's a guess!)
74
 */
74
 */
75
#define R300_VAP_CNTL	0x2080
75
#define R300_VAP_CNTL	0x2080
76
 
76
 
77
/* This register is written directly and also starts data section
77
/* This register is written directly and also starts data section
78
 * in many 3d CP_PACKET3's
78
 * in many 3d CP_PACKET3's
79
 */
79
 */
80
#define R300_VAP_VF_CNTL	0x2084
80
#define R300_VAP_VF_CNTL	0x2084
81
#	define	R300_VAP_VF_CNTL__PRIM_TYPE__SHIFT              0
81
#	define	R300_VAP_VF_CNTL__PRIM_TYPE__SHIFT              0
82
#	define  R300_VAP_VF_CNTL__PRIM_NONE                     (0<<0)
82
#	define  R300_VAP_VF_CNTL__PRIM_NONE                     (0<<0)
83
#	define  R300_VAP_VF_CNTL__PRIM_POINTS                   (1<<0)
83
#	define  R300_VAP_VF_CNTL__PRIM_POINTS                   (1<<0)
84
#	define  R300_VAP_VF_CNTL__PRIM_LINES                    (2<<0)
84
#	define  R300_VAP_VF_CNTL__PRIM_LINES                    (2<<0)
85
#	define  R300_VAP_VF_CNTL__PRIM_LINE_STRIP               (3<<0)
85
#	define  R300_VAP_VF_CNTL__PRIM_LINE_STRIP               (3<<0)
86
#	define  R300_VAP_VF_CNTL__PRIM_TRIANGLES                (4<<0)
86
#	define  R300_VAP_VF_CNTL__PRIM_TRIANGLES                (4<<0)
87
#	define  R300_VAP_VF_CNTL__PRIM_TRIANGLE_FAN             (5<<0)
87
#	define  R300_VAP_VF_CNTL__PRIM_TRIANGLE_FAN             (5<<0)
88
#	define  R300_VAP_VF_CNTL__PRIM_TRIANGLE_STRIP           (6<<0)
88
#	define  R300_VAP_VF_CNTL__PRIM_TRIANGLE_STRIP           (6<<0)
89
#	define  R300_VAP_VF_CNTL__PRIM_LINE_LOOP                (12<<0)
89
#	define  R300_VAP_VF_CNTL__PRIM_LINE_LOOP                (12<<0)
90
#	define  R300_VAP_VF_CNTL__PRIM_QUADS                    (13<<0)
90
#	define  R300_VAP_VF_CNTL__PRIM_QUADS                    (13<<0)
91
#	define  R300_VAP_VF_CNTL__PRIM_QUAD_STRIP               (14<<0)
91
#	define  R300_VAP_VF_CNTL__PRIM_QUAD_STRIP               (14<<0)
92
#	define  R300_VAP_VF_CNTL__PRIM_POLYGON                  (15<<0)
92
#	define  R300_VAP_VF_CNTL__PRIM_POLYGON                  (15<<0)
93
 
93
 
94
#	define	R300_VAP_VF_CNTL__PRIM_WALK__SHIFT              4
94
#	define	R300_VAP_VF_CNTL__PRIM_WALK__SHIFT              4
95
	/* State based - direct writes to registers trigger vertex
95
	/* State based - direct writes to registers trigger vertex
96
           generation */
96
           generation */
97
#	define	R300_VAP_VF_CNTL__PRIM_WALK_STATE_BASED         (0<<4)
97
#	define	R300_VAP_VF_CNTL__PRIM_WALK_STATE_BASED         (0<<4)
98
#	define	R300_VAP_VF_CNTL__PRIM_WALK_INDICES             (1<<4)
98
#	define	R300_VAP_VF_CNTL__PRIM_WALK_INDICES             (1<<4)
99
#	define	R300_VAP_VF_CNTL__PRIM_WALK_VERTEX_LIST         (2<<4)
99
#	define	R300_VAP_VF_CNTL__PRIM_WALK_VERTEX_LIST         (2<<4)
100
#	define	R300_VAP_VF_CNTL__PRIM_WALK_VERTEX_EMBEDDED     (3<<4)
100
#	define	R300_VAP_VF_CNTL__PRIM_WALK_VERTEX_EMBEDDED     (3<<4)
101
 
101
 
102
	/* I don't think I saw these three used.. */
102
	/* I don't think I saw these three used.. */
103
#	define	R300_VAP_VF_CNTL__COLOR_ORDER__SHIFT            6
103
#	define	R300_VAP_VF_CNTL__COLOR_ORDER__SHIFT            6
104
#	define	R300_VAP_VF_CNTL__TCL_OUTPUT_CTL_ENA__SHIFT     9
104
#	define	R300_VAP_VF_CNTL__TCL_OUTPUT_CTL_ENA__SHIFT     9
105
#	define	R300_VAP_VF_CNTL__PROG_STREAM_ENA__SHIFT        10
105
#	define	R300_VAP_VF_CNTL__PROG_STREAM_ENA__SHIFT        10
106
 
106
 
107
	/* index size - when not set the indices are assumed to be 16 bit */
107
	/* index size - when not set the indices are assumed to be 16 bit */
108
#	define	R300_VAP_VF_CNTL__INDEX_SIZE_32bit              (1<<11)
108
#	define	R300_VAP_VF_CNTL__INDEX_SIZE_32bit              (1<<11)
109
	/* number of vertices */
109
	/* number of vertices */
110
#	define	R300_VAP_VF_CNTL__NUM_VERTICES__SHIFT           16
110
#	define	R300_VAP_VF_CNTL__NUM_VERTICES__SHIFT           16
111
 
111
 
112
/* BEGIN: Wild guesses */
112
/* BEGIN: Wild guesses */
113
#define R300_VAP_OUTPUT_VTX_FMT_0           0x2090
113
#define R300_VAP_OUTPUT_VTX_FMT_0           0x2090
114
#       define R300_VAP_OUTPUT_VTX_FMT_0__POS_PRESENT     (1<<0)
114
#       define R300_VAP_OUTPUT_VTX_FMT_0__POS_PRESENT     (1<<0)
115
#       define R300_VAP_OUTPUT_VTX_FMT_0__COLOR_PRESENT   (1<<1)
115
#       define R300_VAP_OUTPUT_VTX_FMT_0__COLOR_PRESENT   (1<<1)
116
#       define R300_VAP_OUTPUT_VTX_FMT_0__COLOR_1_PRESENT (1<<2)  /* GUESS */
116
#       define R300_VAP_OUTPUT_VTX_FMT_0__COLOR_1_PRESENT (1<<2)  /* GUESS */
117
#       define R300_VAP_OUTPUT_VTX_FMT_0__COLOR_2_PRESENT (1<<3)  /* GUESS */
117
#       define R300_VAP_OUTPUT_VTX_FMT_0__COLOR_2_PRESENT (1<<3)  /* GUESS */
118
#       define R300_VAP_OUTPUT_VTX_FMT_0__COLOR_3_PRESENT (1<<4)  /* GUESS */
118
#       define R300_VAP_OUTPUT_VTX_FMT_0__COLOR_3_PRESENT (1<<4)  /* GUESS */
119
#       define R300_VAP_OUTPUT_VTX_FMT_0__PT_SIZE_PRESENT (1<<16) /* GUESS */
119
#       define R300_VAP_OUTPUT_VTX_FMT_0__PT_SIZE_PRESENT (1<<16) /* GUESS */
120
 
120
 
121
#define R300_VAP_OUTPUT_VTX_FMT_1           0x2094
121
#define R300_VAP_OUTPUT_VTX_FMT_1           0x2094
122
	/* each of the following is 3 bits wide, specifies number
122
	/* each of the following is 3 bits wide, specifies number
123
	   of components */
123
	   of components */
124
#       define R300_VAP_OUTPUT_VTX_FMT_1__TEX_0_COMP_CNT_SHIFT 0
124
#       define R300_VAP_OUTPUT_VTX_FMT_1__TEX_0_COMP_CNT_SHIFT 0
125
#       define R300_VAP_OUTPUT_VTX_FMT_1__TEX_1_COMP_CNT_SHIFT 3
125
#       define R300_VAP_OUTPUT_VTX_FMT_1__TEX_1_COMP_CNT_SHIFT 3
126
#       define R300_VAP_OUTPUT_VTX_FMT_1__TEX_2_COMP_CNT_SHIFT 6
126
#       define R300_VAP_OUTPUT_VTX_FMT_1__TEX_2_COMP_CNT_SHIFT 6
127
#       define R300_VAP_OUTPUT_VTX_FMT_1__TEX_3_COMP_CNT_SHIFT 9
127
#       define R300_VAP_OUTPUT_VTX_FMT_1__TEX_3_COMP_CNT_SHIFT 9
128
#       define R300_VAP_OUTPUT_VTX_FMT_1__TEX_4_COMP_CNT_SHIFT 12
128
#       define R300_VAP_OUTPUT_VTX_FMT_1__TEX_4_COMP_CNT_SHIFT 12
129
#       define R300_VAP_OUTPUT_VTX_FMT_1__TEX_5_COMP_CNT_SHIFT 15
129
#       define R300_VAP_OUTPUT_VTX_FMT_1__TEX_5_COMP_CNT_SHIFT 15
130
#       define R300_VAP_OUTPUT_VTX_FMT_1__TEX_6_COMP_CNT_SHIFT 18
130
#       define R300_VAP_OUTPUT_VTX_FMT_1__TEX_6_COMP_CNT_SHIFT 18
131
#       define R300_VAP_OUTPUT_VTX_FMT_1__TEX_7_COMP_CNT_SHIFT 21
131
#       define R300_VAP_OUTPUT_VTX_FMT_1__TEX_7_COMP_CNT_SHIFT 21
132
/* END: Wild guesses */
132
/* END: Wild guesses */
133
 
133
 
134
#define R300_SE_VTE_CNTL                  0x20b0
134
#define R300_SE_VTE_CNTL                  0x20b0
135
#	define     R300_VPORT_X_SCALE_ENA                0x00000001
135
#	define     R300_VPORT_X_SCALE_ENA                0x00000001
136
#	define     R300_VPORT_X_OFFSET_ENA               0x00000002
136
#	define     R300_VPORT_X_OFFSET_ENA               0x00000002
137
#	define     R300_VPORT_Y_SCALE_ENA                0x00000004
137
#	define     R300_VPORT_Y_SCALE_ENA                0x00000004
138
#	define     R300_VPORT_Y_OFFSET_ENA               0x00000008
138
#	define     R300_VPORT_Y_OFFSET_ENA               0x00000008
139
#	define     R300_VPORT_Z_SCALE_ENA                0x00000010
139
#	define     R300_VPORT_Z_SCALE_ENA                0x00000010
140
#	define     R300_VPORT_Z_OFFSET_ENA               0x00000020
140
#	define     R300_VPORT_Z_OFFSET_ENA               0x00000020
141
#	define     R300_VTX_XY_FMT                       0x00000100
141
#	define     R300_VTX_XY_FMT                       0x00000100
142
#	define     R300_VTX_Z_FMT                        0x00000200
142
#	define     R300_VTX_Z_FMT                        0x00000200
143
#	define     R300_VTX_W0_FMT                       0x00000400
143
#	define     R300_VTX_W0_FMT                       0x00000400
144
#	define     R300_VTX_W0_NORMALIZE                 0x00000800
144
#	define     R300_VTX_W0_NORMALIZE                 0x00000800
145
#	define     R300_VTX_ST_DENORMALIZED              0x00001000
145
#	define     R300_VTX_ST_DENORMALIZED              0x00001000
146
 
146
 
147
/* BEGIN: Vertex data assembly - lots of uncertainties */
147
/* BEGIN: Vertex data assembly - lots of uncertainties */
148
 
148
 
149
/* gap */
149
/* gap */
150
 
150
 
151
#define R300_VAP_CNTL_STATUS              0x2140
151
#define R300_VAP_CNTL_STATUS              0x2140
152
#	define R300_VC_NO_SWAP                  (0 << 0)
152
#	define R300_VC_NO_SWAP                  (0 << 0)
153
#	define R300_VC_16BIT_SWAP               (1 << 0)
153
#	define R300_VC_16BIT_SWAP               (1 << 0)
154
#	define R300_VC_32BIT_SWAP               (2 << 0)
154
#	define R300_VC_32BIT_SWAP               (2 << 0)
155
#	define R300_VAP_TCL_BYPASS		(1 << 8)
155
#	define R300_VAP_TCL_BYPASS		(1 << 8)
156
 
156
 
157
/* gap */
157
/* gap */
158
 
158
 
159
/* Where do we get our vertex data?
159
/* Where do we get our vertex data?
160
 *
160
 *
161
 * Vertex data either comes either from immediate mode registers or from
161
 * Vertex data either comes either from immediate mode registers or from
162
 * vertex arrays.
162
 * vertex arrays.
163
 * There appears to be no mixed mode (though we can force the pitch of
163
 * There appears to be no mixed mode (though we can force the pitch of
164
 * vertex arrays to 0, effectively reusing the same element over and over
164
 * vertex arrays to 0, effectively reusing the same element over and over
165
 * again).
165
 * again).
166
 *
166
 *
167
 * Immediate mode is controlled by the INPUT_CNTL registers. I am not sure
167
 * Immediate mode is controlled by the INPUT_CNTL registers. I am not sure
168
 * if these registers influence vertex array processing.
168
 * if these registers influence vertex array processing.
169
 *
169
 *
170
 * Vertex arrays are controlled via the 3D_LOAD_VBPNTR packet3.
170
 * Vertex arrays are controlled via the 3D_LOAD_VBPNTR packet3.
171
 *
171
 *
172
 * In both cases, vertex attributes are then passed through INPUT_ROUTE.
172
 * In both cases, vertex attributes are then passed through INPUT_ROUTE.
173
 *
173
 *
174
 * Beginning with INPUT_ROUTE_0_0 is a list of WORDs that route vertex data
174
 * Beginning with INPUT_ROUTE_0_0 is a list of WORDs that route vertex data
175
 * into the vertex processor's input registers.
175
 * into the vertex processor's input registers.
176
 * The first word routes the first input, the second word the second, etc.
176
 * The first word routes the first input, the second word the second, etc.
177
 * The corresponding input is routed into the register with the given index.
177
 * The corresponding input is routed into the register with the given index.
178
 * The list is ended by a word with INPUT_ROUTE_END set.
178
 * The list is ended by a word with INPUT_ROUTE_END set.
179
 *
179
 *
180
 * Always set COMPONENTS_4 in immediate mode.
180
 * Always set COMPONENTS_4 in immediate mode.
181
 */
181
 */
182
 
182
 
183
#define R300_VAP_INPUT_ROUTE_0_0            0x2150
183
#define R300_VAP_INPUT_ROUTE_0_0            0x2150
184
#       define R300_INPUT_ROUTE_COMPONENTS_1     (0 << 0)
184
#       define R300_INPUT_ROUTE_COMPONENTS_1     (0 << 0)
185
#       define R300_INPUT_ROUTE_COMPONENTS_2     (1 << 0)
185
#       define R300_INPUT_ROUTE_COMPONENTS_2     (1 << 0)
186
#       define R300_INPUT_ROUTE_COMPONENTS_3     (2 << 0)
186
#       define R300_INPUT_ROUTE_COMPONENTS_3     (2 << 0)
187
#       define R300_INPUT_ROUTE_COMPONENTS_4     (3 << 0)
187
#       define R300