Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
5563 | serge | 1 | |
2 | #define __NVC0_PGRAPH_MACROS_H__ |
||
3 | |||
4 | |||
5 | * with bits [src:src+size) in r2 |
||
6 | * |
||
7 | * bra(n)z annul: no delay slot |
||
8 | */ |
||
9 | |||
10 | |||
11 | * Args: size, bitfield |
||
12 | */ |
||
13 | static const uint32_t nvc0_9097_per_instance_bf[] = |
||
14 | { |
||
15 | 0x00000301, /* parm $r3 (the bitfield) */ |
||
16 | 0x00000211, /* mov $r2 0 */ |
||
17 | 0x05880021, /* maddr [NVC0_3D_VERTEX_ARRAY_PER_INSTANCE(0), increment = 4] */ |
||
18 | 0xffffc911, /* mov $r1 (add $r1 -0x1) */ |
||
19 | 0x0040d043, /* send (extrshl $r3 $r2 0x1 0) */ |
||
20 | 0xffff8897, /* exit branz $r1 0x3 */ |
||
21 | 0x00005211 /* mov $r2 (add $r2 0x1) */ |
||
22 | }; |
||
23 | |||
24 | |||
25 | * but we use less functionality for now. |
||
26 | */ |
||
27 | |||
28 | |||
29 | * for (i = 0; i < 8; ++i) |
||
30 | * [NVC0_3D_BLEND_ENABLE(i)] = BIT(i of arg); |
||
31 | * |
||
32 | * [3428] = arg; |
||
33 | * |
||
34 | * if (arg == 0 || [NVC0_3D_MULTISAMPLE_ENABLE] == 0) |
||
35 | * [0d9c] = 0; |
||
36 | * else |
||
37 | * [0d9c] = [342c]; |
||
38 | */ |
||
39 | static const uint32_t nvc0_9097_blend_enables[] = |
||
40 | { |
||
41 | 0x05360021, /* 0x00: maddr [NVC0_3D_BLEND_ENABLE(0), increment = 4] */ |
||
42 | 0x00404042, /* 0x01: send extrinsrt 0 $r1 0 0x1 0 */ |
||
43 | 0x00424042, /* 0x02: send extrinsrt 0 $r1 0x1 0x1 0 */ |
||
44 | 0x00444042, /* 0x03: send extrinsrt 0 $r1 0x2 0x1 0 */ |
||
45 | 0x00464042, /* 0x04: send extrinsrt 0 $r1 0x3 0x1 0 */ |
||
46 | 0x00484042, /* 0x05: send extrinsrt 0 $r1 0x4 0x1 0 */ |
||
47 | 0x004a4042, /* 0x06: send extrinsrt 0 $r1 0x5 0x1 0 */ |
||
48 | 0x004c40c2, /* 0x07: exit send extrinsrt 0 $r1 0x6 0x1 0 */ |
||
49 | 0x004e4042, /* 0x08: send extrinsrt 0 $r1 0x7 0x1 0 */ |
||
50 | }; |
||
51 | |||
52 | |||
53 | * uint64 limit = (parm(0) << 32) | parm(1); |
||
54 | * uint64 start = (parm(2) << 32); |
||
55 | * |
||
56 | * if (limit) { |
||
57 | * start |= parm(3); |
||
58 | * --limit; |
||
59 | * } else { |
||
60 | * start |= 1; |
||
61 | * } |
||
62 | * |
||
63 | * [0x1c04 + (arg & 0xf) * 16 + 0] = (start >> 32) & 0xff; |
||
64 | * [0x1c04 + (arg & 0xf) * 16 + 4] = start & 0xffffffff; |
||
65 | * [0x1f00 + (arg & 0xf) * 8 + 0] = (limit >> 32) & 0xff; |
||
66 | * [0x1f00 + (arg & 0xf) * 8 + 4] = limit & 0xffffffff; |
||
67 | */ |
||
68 | static const uint32_t nvc0_9097_vertex_array_select[] = |
||
69 | { |
||
70 | 0x00000201, /* 0x00: parm $r2 */ |
||
71 | 0x00000301, /* 0x01: parm $r3 */ |
||
72 | 0x00000401, /* 0x02: parm $r4 */ |
||
73 | 0x00000501, /* 0x03: parm $r5 */ |
||
74 | 0x11004612, /* 0x04: mov $r6 extrinsrt 0 $r1 0 4 2 */ |
||
75 | 0x09004712, /* 0x05: mov $r7 extrinsrt 0 $r1 0 4 1 */ |
||
76 | 0x05c07621, /* 0x06: maddr $r6 add $6 0x1701 */ |
||
77 | 0x00002041, /* 0x07: send $r4 */ |
||
78 | 0x00002841, /* 0x08: send $r5 */ |
||
79 | 0x05f03f21, /* 0x09: maddr $r7 add $7 0x17c0 */ |
||
80 | 0x000010c1, /* 0x0a: exit send $r2 */ |
||
81 | 0x00001841, /* 0x0b: send $r3 */ |
||
82 | }; |
||
83 | |||
84 | |||
85 | * [GL_POLYGON_MODE_FRONT] = arg; |
||
86 | * |
||
87 | * if (BIT(31 of [0x3410])) |
||
88 | * [1a24] = 0x7353; |
||
89 | * |
||
90 | * if ([NVC0_3D_SP_SELECT(3)] == 0x31 || [NVC0_3D_SP_SELECT(4)] == 0x41) |
||
91 | * [02ec] = 0; |
||
92 | * else |
||
93 | * if ([GL_POLYGON_MODE_BACK] == GL_LINE || arg == GL_LINE) |
||
94 | * [02ec] = BYTE(1 of [0x3410]) << 4; |
||
95 | * else |
||
96 | * [02ec] = BYTE(0 of [0x3410]) << 4; |
||
97 | */ |
||
98 | static const uint32_t nvc0_9097_poly_mode_front[] = |
||
99 | { |
||
100 | 0x00db0215, /* 0x00: read $r2 [NVC0_3D_POLYGON_MODE_BACK] */ |
||
101 | 0x020c0315, /* 0x01: read $r3 [NVC0_3D_SP_SELECT(3)] */ |
||
102 | 0x00128f10, /* 0x02: mov $r7 or $r1 $r2 */ |
||
103 | 0x02100415, /* 0x03: read $r4 [NVC0_3D_SP_SELECT(4)] */ |
||
104 | 0x00004211, /* 0x04: mov $r2 0x1 */ |
||
105 | 0x00180611, /* 0x05: mov $r6 0x60 */ |
||
106 | 0x0014bf10, /* 0x06: mov $r7 and $r7 $r2 */ |
||
107 | 0x0000f807, /* 0x07: braz $r7 0xa */ |
||
108 | 0x00dac021, /* 0x08: maddr 0x36b */ |
||
109 | 0x00800611, /* 0x09: mov $r6 0x200 */ |
||
110 | 0x00131f10, /* 0x0a: mov $r7 or $r3 $r4 */ |
||
111 | 0x0014bf10, /* 0x0b: mov $r7 and $r7 $r2 */ |
||
112 | 0x0000f807, /* 0x0c: braz $r7 0xf */ |
||
113 | 0x00000841, /* 0x0d: send $r1 */ |
||
114 | 0x00000611, /* 0x0e: mov $r6 0 */ |
||
115 | 0x002ec0a1, /* 0x0f: exit maddr [02ec] */ |
||
116 | 0x00003041 /* 0x10: send $r6 */ |
||
117 | }; |
||
118 | |||
119 | |||
120 | * [GL_POLYGON_MODE_BACK] = arg; |
||
121 | * |
||
122 | * if (BIT(31 of [0x3410])) |
||
123 | * [1a24] = 0x7353; |
||
124 | * |
||
125 | * if ([NVC0_3D_SP_SELECT(3)] == 0x31 || [NVC0_3D_SP_SELECT(4)] == 0x41) |
||
126 | * [02ec] = 0; |
||
127 | * else |
||
128 | * if ([GL_POLYGON_MODE_FRONT] == GL_LINE || arg == GL_LINE) |
||
129 | * [02ec] = BYTE(1 of [0x3410]) << 4; |
||
130 | * else |
||
131 | * [02ec] = BYTE(0 of [0x3410]) << 4; |
||
132 | */ |
||
133 | /* NOTE: 0x3410 = 0x80002006 by default, |
||
134 | * POLYGON_MODE == GL_LINE check replaced by (MODE & 1) |
||
135 | * SP_SELECT(i) == (i << 4) | 1 check replaced by SP_SELECT(i) & 1 |
||
136 | */ |
||
137 | static const uint32_t nvc0_9097_poly_mode_back[] = |
||
138 | { |
||
139 | 0x00dac215, /* 0x00: read $r2 [NVC0_3D_POLYGON_MODE_FRONT] */ |
||
140 | 0x020c0315, /* 0x01: read $r3 [NVC0_3D_SP_SELECT(3)] */ |
||
141 | 0x00128f10, /* 0x02: mov $r7 or $r1 $r2 */ |
||
142 | 0x02100415, /* 0x03: read $r4 [NVC0_3D_SP_SELECT(4)] */ |
||
143 | 0x00004211, /* 0x04: mov $r2 0x1 */ |
||
144 | 0x00180611, /* 0x05: mov $r6 0x60 */ |
||
145 | 0x0014bf10, /* 0x06: mov $r7 and $r7 $r2 */ |
||
146 | 0x0000f807, /* 0x07: braz $r7 0xa */ |
||
147 | 0x00db0021, /* 0x08: maddr 0x36c */ |
||
148 | 0x00800611, /* 0x09: mov $r6 0x200 */ |
||
149 | 0x00131f10, /* 0x0a: mov $r7 or $r3 $r4 */ |
||
150 | 0x0014bf10, /* 0x0b: mov $r7 and $r7 $r2 */ |
||
151 | 0x0000f807, /* 0x0c: braz $r7 0xf */ |
||
152 | 0x00000841, /* 0x0d: send $r1 */ |
||
153 | 0x00000611, /* 0x0e: mov $r6 0 */ |
||
154 | 0x002ec0a1, /* 0x0f: exit maddr [02ec] */ |
||
155 | 0x00003041 /* 0x10: send $r6 */ |
||
156 | }; |
||
157 | |||
158 | |||
159 | * [NVC0_3D_SP_SELECT(4)] = arg |
||
160 | * |
||
161 | * if BIT(31 of [0x3410]) == 0 |
||
162 | * [1a24] = 0x7353; |
||
163 | * |
||
164 | * if ([NVC0_3D_SP_SELECT(3)] == 0x31 || arg == 0x41) |
||
165 | * [02ec] = 0 |
||
166 | * else |
||
167 | * if (any POLYGON MODE == LINE) |
||
168 | * [02ec] = BYTE(1 of [3410]) << 4; |
||
169 | * else |
||
170 | * [02ec] = BYTE(0 of [3410]) << 4; // 02ec valid bits are 0xff1 |
||
171 | */ |
||
172 | static const uint32_t nvc0_9097_gp_select[] = /* 0x0f */ |
||
173 | { |
||
174 | 0x00dac215, /* 0x00: read $r2 0x36b */ |
||
175 | 0x00db0315, /* 0x01: read $r3 0x36c */ |
||
176 | 0x0012d710, /* 0x02: mov $r7 or $r2 $r3 */ |
||
177 | 0x020c0415, /* 0x03: read $r4 0x830 */ |
||
178 | 0x00004211, /* 0x04: mov $r2 0x1 */ |
||
179 | 0x00180611, /* 0x05: mov $r6 0x60 */ |
||
180 | 0x0014bf10, /* 0x06: mov $r7 and $r7 $r2 */ |
||
181 | 0x0000f807, /* 0x07: braz $r7 0xa */ |
||
182 | 0x02100021, /* 0x08: maddr 0x840 */ |
||
183 | 0x00800611, /* 0x09: mov $r6 0x200 */ |
||
184 | 0x00130f10, /* 0x0a: mov $r7 or $r1 $r4 */ |
||
185 | 0x0014bf10, /* 0x0b: mov $r7 and $r7 $r2 */ |
||
186 | 0x0000f807, /* 0x0c: braz $r7 0xf */ |
||
187 | 0x00000841, /* 0x0d: send $r1 */ |
||
188 | 0x00000611, /* 0x0e: mov $r6 0 */ |
||
189 | 0x002ec0a1, /* 0x0f: exit maddr 0xbb */ |
||
190 | 0x00003041, /* 0x10: send $r6 */ |
||
191 | }; |
||
192 | |||
193 | |||
194 | * [NVC0_3D_SP_SELECT(3)] = arg |
||
195 | * |
||
196 | * if BIT(31 of [0x3410]) == 0 |
||
197 | * [1a24] = 0x7353; |
||
198 | * |
||
199 | * if (arg == 0x31) { |
||
200 | * if (BIT(2 of [0x3430])) { |
||
201 | * int i = 15; do { --i; } while(i); |
||
202 | * [0x1a2c] = 0; |
||
203 | * } |
||
204 | * } |
||
205 | * |
||
206 | * if ([NVC0_3D_SP_SELECT(4)] == 0x41 || arg == 0x31) |
||
207 | * [02ec] = 0 |
||
208 | * else |
||
209 | * if ([any POLYGON_MODE] == GL_LINE) |
||
210 | * [02ec] = BYTE(1 of [3410]) << 4; |
||
211 | * else |
||
212 | * [02ec] = BYTE(0 of [3410]) << 4; |
||
213 | */ |
||
214 | static const uint32_t nvc0_9097_tep_select[] = /* 0x10 */ |
||
215 | { |
||
216 | 0x00dac215, /* 0x00: read $r2 0x36b */ |
||
217 | 0x00db0315, /* 0x01: read $r3 0x36c */ |
||
218 | 0x0012d710, /* 0x02: mov $r7 or $r2 $r3 */ |
||
219 | 0x02100415, /* 0x03: read $r4 0x840 */ |
||
220 | 0x00004211, /* 0x04: mov $r2 0x1 */ |
||
221 | 0x00180611, /* 0x05: mov $r6 0x60 */ |
||
222 | 0x0014bf10, /* 0x06: mov $r7 and $r7 $r2 */ |
||
223 | 0x0000f807, /* 0x07: braz $r7 0xa */ |
||
224 | 0x020c0021, /* 0x08: maddr 0x830 */ |
||
225 | 0x00800611, /* 0x09: mov $r6 0x200 */ |
||
226 | 0x00130f10, /* 0x0a: mov $r7 or $r1 $r4 */ |
||
227 | 0x0014bf10, /* 0x0b: mov $r7 and $r7 $r2 */ |
||
228 | 0x0000f807, /* 0x0c: braz $r7 0xf */ |
||
229 | 0x00000841, /* 0x0d: send $r1 */ |
||
230 | 0x00000611, /* 0x0e: mov $r6 0 */ |
||
231 | 0x002ec0a1, /* 0x0f: exit maddr 0xbb */ |
||
232 | 0x00003041, /* 0x10: send $r6 */ |
||
233 | }; |
||
234 | |||
235 | |||
236 |