1 /*
2 * Copyright © 2020 Advanced Micro Devices, Inc.
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining
5 * a copy of this software and associated documentation files (the
6 * "Software"), to deal in the Software without restriction, including
7 * without limitation the rights to use, copy, modify, merge, publish,
8 * distribute, sub license, and/or sell copies of the Software, and to
9 * permit persons to whom the Software is furnished to do so, subject to
10 * the following conditions:
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
13 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
14 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
15 * NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS, AUTHORS
16 * AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
18 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
19 * USE OR OTHER DEALINGS IN THE SOFTWARE.
20 *
21 * The above copyright notice and this permission notice (including the
22 * next paragraph) shall be included in all copies or substantial portions
23 * of the Software.
24 */
25
26 /* These tables define the set of ranges of registers we shadow when
27 * mid command buffer preemption is enabled.
28 */
29
30 #include "ac_shadowed_regs.h"
31
32 #include "ac_debug.h"
33 #include "sid.h"
34 #include "util/macros.h"
35 #include "util/u_debug.h"
36
37 #include <stdio.h>
38
39 static const struct ac_reg_range Gfx9UserConfigShadowRange[] = {
40 {
41 R_0300FC_CP_STRMOUT_CNTL,
42 4,
43 },
44 {
45 R_0301EC_CP_COHER_START_DELAY,
46 4,
47 },
48 {
49 R_030904_VGT_GSVS_RING_SIZE,
50 R_030908_VGT_PRIMITIVE_TYPE - R_030904_VGT_GSVS_RING_SIZE + 4,
51 },
52 {
53 R_030920_VGT_MAX_VTX_INDX,
54 R_03092C_VGT_MULTI_PRIM_IB_RESET_EN - R_030920_VGT_MAX_VTX_INDX + 4,
55 },
56 {
57 R_030934_VGT_NUM_INSTANCES,
58 R_030944_VGT_TF_MEMORY_BASE_HI - R_030934_VGT_NUM_INSTANCES + 4,
59 },
60 {
61 R_030960_IA_MULTI_VGT_PARAM,
62 4,
63 },
64 {
65 R_030968_VGT_INSTANCE_BASE_ID,
66 4,
67 },
68 {
69 R_030E00_TA_CS_BC_BASE_ADDR,
70 R_030E04_TA_CS_BC_BASE_ADDR_HI - R_030E00_TA_CS_BC_BASE_ADDR + 4,
71 },
72 {
73 R_030AD4_PA_STATE_STEREO_X,
74 4,
75 },
76 };
77
78 static const struct ac_reg_range Gfx9ContextShadowRange[] = {
79 {
80 R_028000_DB_RENDER_CONTROL,
81 R_028084_TA_BC_BASE_ADDR_HI - R_028000_DB_RENDER_CONTROL + 4,
82 },
83 {
84 R_0281E8_COHER_DEST_BASE_HI_0,
85 R_02835C_PA_SC_TILE_STEERING_OVERRIDE - R_0281E8_COHER_DEST_BASE_HI_0 + 4,
86 },
87 {
88 R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX,
89 4,
90 },
91 {
92 R_028414_CB_BLEND_RED,
93 R_028618_PA_CL_UCP_5_W - R_028414_CB_BLEND_RED + 4,
94 },
95 {
96 R_028644_SPI_PS_INPUT_CNTL_0,
97 R_028714_SPI_SHADER_COL_FORMAT - R_028644_SPI_PS_INPUT_CNTL_0 + 4,
98 },
99 {
100 R_028754_SX_PS_DOWNCONVERT,
101 R_0287BC_CB_MRT7_EPITCH - R_028754_SX_PS_DOWNCONVERT + 4,
102 },
103 {
104 R_028800_DB_DEPTH_CONTROL,
105 R_028820_PA_CL_NANINF_CNTL - R_028800_DB_DEPTH_CONTROL + 4,
106 },
107 {
108 R_02882C_PA_SU_PRIM_FILTER_CNTL,
109 R_028840_PA_STEREO_CNTL - R_02882C_PA_SU_PRIM_FILTER_CNTL + 4,
110 },
111 {
112 R_028A00_PA_SU_POINT_SIZE,
113 R_028A0C_PA_SC_LINE_STIPPLE - R_028A00_PA_SU_POINT_SIZE + 4,
114 },
115 {
116 R_028A18_VGT_HOS_MAX_TESS_LEVEL,
117 R_028A1C_VGT_HOS_MIN_TESS_LEVEL - R_028A18_VGT_HOS_MAX_TESS_LEVEL + 4,
118 },
119 {
120 R_028A40_VGT_GS_MODE,
121 R_028A6C_VGT_GS_OUT_PRIM_TYPE - R_028A40_VGT_GS_MODE + 4,
122 },
123 {
124 R_028A84_VGT_PRIMITIVEID_EN,
125 4,
126 },
127 {
128 R_028A8C_VGT_PRIMITIVEID_RESET,
129 4,
130 },
131 {
132 R_028A94_VGT_GS_MAX_PRIMS_PER_SUBGROUP,
133 R_028AD4_VGT_STRMOUT_VTX_STRIDE_0 - R_028A94_VGT_GS_MAX_PRIMS_PER_SUBGROUP + 4,
134 },
135 {
136 R_028AE0_VGT_STRMOUT_BUFFER_SIZE_1,
137 R_028AE4_VGT_STRMOUT_VTX_STRIDE_1 - R_028AE0_VGT_STRMOUT_BUFFER_SIZE_1 + 4,
138 },
139 {
140 R_028AF0_VGT_STRMOUT_BUFFER_SIZE_2,
141 R_028AF4_VGT_STRMOUT_VTX_STRIDE_2 - R_028AF0_VGT_STRMOUT_BUFFER_SIZE_2 + 4,
142 },
143 {
144 R_028B00_VGT_STRMOUT_BUFFER_SIZE_3,
145 R_028B04_VGT_STRMOUT_VTX_STRIDE_3 - R_028B00_VGT_STRMOUT_BUFFER_SIZE_3 + 4,
146 },
147 {
148 R_028B28_VGT_STRMOUT_DRAW_OPAQUE_OFFSET,
149 R_028B30_VGT_STRMOUT_DRAW_OPAQUE_VERTEX_STRIDE - R_028B28_VGT_STRMOUT_DRAW_OPAQUE_OFFSET + 4,
150 },
151 {
152 R_028B38_VGT_GS_MAX_VERT_OUT,
153 R_028B98_VGT_STRMOUT_BUFFER_CONFIG - R_028B38_VGT_GS_MAX_VERT_OUT + 4,
154 },
155 {
156 R_028BD4_PA_SC_CENTROID_PRIORITY_0,
157 R_028E3C_CB_COLOR7_DCC_BASE_EXT - R_028BD4_PA_SC_CENTROID_PRIORITY_0 + 4,
158 },
159 };
160
161 static const struct ac_reg_range Gfx9ShShadowRange[] = {
162 {
163 R_00B020_SPI_SHADER_PGM_LO_PS,
164 R_00B0AC_SPI_SHADER_USER_DATA_PS_31 - R_00B020_SPI_SHADER_PGM_LO_PS + 4,
165 },
166 {
167 R_00B11C_SPI_SHADER_LATE_ALLOC_VS,
168 R_00B1AC_SPI_SHADER_USER_DATA_VS_31 - R_00B11C_SPI_SHADER_LATE_ALLOC_VS + 4,
169 },
170 {
171 R_00B204_SPI_SHADER_PGM_RSRC4_GS,
172 R_00B214_SPI_SHADER_PGM_HI_ES - R_00B204_SPI_SHADER_PGM_RSRC4_GS + 4,
173 },
174 {
175 R_00B220_SPI_SHADER_PGM_LO_GS,
176 R_00B22C_SPI_SHADER_PGM_RSRC2_GS - R_00B220_SPI_SHADER_PGM_LO_GS + 4,
177 },
178 {
179 R_00B330_SPI_SHADER_USER_DATA_ES_0,
180 R_00B3AC_SPI_SHADER_USER_DATA_ES_31 - R_00B330_SPI_SHADER_USER_DATA_ES_0 + 4,
181 },
182 {
183 R_00B404_SPI_SHADER_PGM_RSRC4_HS,
184 R_00B414_SPI_SHADER_PGM_HI_LS - R_00B404_SPI_SHADER_PGM_RSRC4_HS + 4,
185 },
186 {
187 R_00B420_SPI_SHADER_PGM_LO_HS,
188 R_00B4AC_SPI_SHADER_USER_DATA_LS_31 - R_00B420_SPI_SHADER_PGM_LO_HS + 4,
189 },
190 };
191
192 static const struct ac_reg_range Gfx9CsShShadowRange[] = {
193 {
194 R_00B810_COMPUTE_START_X,
195 R_00B824_COMPUTE_NUM_THREAD_Z - R_00B810_COMPUTE_START_X + 4,
196 },
197 {
198 R_00B82C_COMPUTE_PERFCOUNT_ENABLE,
199 R_00B834_COMPUTE_PGM_HI - R_00B82C_COMPUTE_PERFCOUNT_ENABLE + 4,
200 },
201 {
202 R_00B848_COMPUTE_PGM_RSRC1,
203 R_00B84C_COMPUTE_PGM_RSRC2 - R_00B848_COMPUTE_PGM_RSRC1 + 4,
204 },
205 {
206 R_00B854_COMPUTE_RESOURCE_LIMITS,
207 4,
208 },
209 {
210 R_00B860_COMPUTE_TMPRING_SIZE,
211 4,
212 },
213 {
214 R_00B878_COMPUTE_THREAD_TRACE_ENABLE,
215 4,
216 },
217 {
218 R_00B900_COMPUTE_USER_DATA_0,
219 R_00B93C_COMPUTE_USER_DATA_15 - R_00B900_COMPUTE_USER_DATA_0 + 4,
220 },
221 };
222
223 static const struct ac_reg_range Gfx9ShShadowRangeRaven2[] = {
224 {
225 R_00B018_SPI_SHADER_PGM_CHKSUM_PS,
226 4,
227 },
228 {
229 R_00B020_SPI_SHADER_PGM_LO_PS,
230 R_00B0AC_SPI_SHADER_USER_DATA_PS_31 - R_00B020_SPI_SHADER_PGM_LO_PS + 4,
231 },
232 {
233 R_00B114_SPI_SHADER_PGM_CHKSUM_VS,
234 4,
235 },
236 {
237 R_00B11C_SPI_SHADER_LATE_ALLOC_VS,
238 R_00B1AC_SPI_SHADER_USER_DATA_VS_31 - R_00B11C_SPI_SHADER_LATE_ALLOC_VS + 4,
239 },
240 {
241 R_00B200_SPI_SHADER_PGM_CHKSUM_GS,
242 R_00B214_SPI_SHADER_PGM_HI_ES - R_00B200_SPI_SHADER_PGM_CHKSUM_GS + 4,
243 },
244 {
245 R_00B220_SPI_SHADER_PGM_LO_GS,
246 R_00B22C_SPI_SHADER_PGM_RSRC2_GS - R_00B220_SPI_SHADER_PGM_LO_GS + 4,
247 },
248 {
249 R_00B330_SPI_SHADER_USER_DATA_ES_0,
250 R_00B3AC_SPI_SHADER_USER_DATA_ES_31 - R_00B330_SPI_SHADER_USER_DATA_ES_0 + 4,
251 },
252 {
253 R_00B400_SPI_SHADER_PGM_CHKSUM_HS,
254 R_00B414_SPI_SHADER_PGM_HI_LS - R_00B400_SPI_SHADER_PGM_CHKSUM_HS + 4,
255 },
256 {
257 R_00B420_SPI_SHADER_PGM_LO_HS,
258 R_00B4AC_SPI_SHADER_USER_DATA_LS_31 - R_00B420_SPI_SHADER_PGM_LO_HS + 4,
259 },
260 };
261
262 static const struct ac_reg_range Gfx9CsShShadowRangeRaven2[] = {
263 {
264 R_00B810_COMPUTE_START_X,
265 R_00B824_COMPUTE_NUM_THREAD_Z - R_00B810_COMPUTE_START_X + 4,
266 },
267 {
268 R_00B82C_COMPUTE_PERFCOUNT_ENABLE,
269 R_00B834_COMPUTE_PGM_HI - R_00B82C_COMPUTE_PERFCOUNT_ENABLE + 4,
270 },
271 {
272 R_00B848_COMPUTE_PGM_RSRC1,
273 R_00B84C_COMPUTE_PGM_RSRC2 - R_00B848_COMPUTE_PGM_RSRC1 + 4,
274 },
275 {
276 R_00B854_COMPUTE_RESOURCE_LIMITS,
277 4,
278 },
279 {
280 R_00B860_COMPUTE_TMPRING_SIZE,
281 4,
282 },
283 {
284 R_00B878_COMPUTE_THREAD_TRACE_ENABLE,
285 4,
286 },
287 {
288 R_00B894_COMPUTE_SHADER_CHKSUM,
289 4,
290 },
291 {
292 R_00B900_COMPUTE_USER_DATA_0,
293 R_00B93C_COMPUTE_USER_DATA_15 - R_00B900_COMPUTE_USER_DATA_0 + 4,
294 },
295 };
296
297 static const struct ac_reg_range Nv10ContextShadowRange[] = {
298 {
299 R_028000_DB_RENDER_CONTROL,
300 R_028084_TA_BC_BASE_ADDR_HI - R_028000_DB_RENDER_CONTROL + 4,
301 },
302 {
303 R_0281E8_COHER_DEST_BASE_HI_0,
304 R_02835C_PA_SC_TILE_STEERING_OVERRIDE - R_0281E8_COHER_DEST_BASE_HI_0 + 4,
305 },
306 {
307 R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX,
308 R_028618_PA_CL_UCP_5_W - R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX + 4,
309 },
310 {
311 R_028644_SPI_PS_INPUT_CNTL_0,
312 R_028714_SPI_SHADER_COL_FORMAT - R_028644_SPI_PS_INPUT_CNTL_0 + 4,
313 },
314 {
315 R_028754_SX_PS_DOWNCONVERT,
316 R_02879C_CB_BLEND7_CONTROL - R_028754_SX_PS_DOWNCONVERT + 4,
317 },
318 {
319 R_0287FC_GE_MAX_OUTPUT_PER_SUBGROUP,
320 R_028820_PA_CL_NANINF_CNTL - R_0287FC_GE_MAX_OUTPUT_PER_SUBGROUP + 4,
321 },
322 {
323 R_02882C_PA_SU_PRIM_FILTER_CNTL,
324 R_028844_PA_STATE_STEREO_X - R_02882C_PA_SU_PRIM_FILTER_CNTL + 4,
325 },
326 {
327 R_028A00_PA_SU_POINT_SIZE,
328 R_028A0C_PA_SC_LINE_STIPPLE - R_028A00_PA_SU_POINT_SIZE + 4,
329 },
330 {
331 R_028A18_VGT_HOS_MAX_TESS_LEVEL,
332 R_028A1C_VGT_HOS_MIN_TESS_LEVEL - R_028A18_VGT_HOS_MAX_TESS_LEVEL + 4,
333 },
334 {
335 R_028A40_VGT_GS_MODE,
336 R_028A6C_VGT_GS_OUT_PRIM_TYPE - R_028A40_VGT_GS_MODE + 4,
337 },
338 {
339 R_028A84_VGT_PRIMITIVEID_EN,
340 4,
341 },
342 {
343 R_028A8C_VGT_PRIMITIVEID_RESET,
344 4,
345 },
346 {
347 R_028A98_VGT_DRAW_PAYLOAD_CNTL,
348 R_028B98_VGT_STRMOUT_BUFFER_CONFIG - R_028A98_VGT_DRAW_PAYLOAD_CNTL + 4,
349 },
350 {
351 R_028BD4_PA_SC_CENTROID_PRIORITY_0,
352 R_028EFC_CB_COLOR7_ATTRIB3 - R_028BD4_PA_SC_CENTROID_PRIORITY_0 + 4,
353 },
354 };
355
356 static const struct ac_reg_range Nv10UserConfigShadowRange[] = {
357 {
358 R_0300FC_CP_STRMOUT_CNTL,
359 4,
360 },
361 {
362 R_0301EC_CP_COHER_START_DELAY,
363 4,
364 },
365 {
366 R_030904_VGT_GSVS_RING_SIZE_UMD,
367 R_030908_VGT_PRIMITIVE_TYPE - R_030904_VGT_GSVS_RING_SIZE_UMD + 4,
368 },
369 {
370 R_030964_GE_MAX_VTX_INDX,
371 4,
372 },
373 {
374 R_030924_GE_MIN_VTX_INDX,
375 R_03092C_GE_MULTI_PRIM_IB_RESET_EN - R_030924_GE_MIN_VTX_INDX + 4,
376 },
377 {
378 R_030934_VGT_NUM_INSTANCES,
379 R_030940_VGT_TF_MEMORY_BASE_UMD - R_030934_VGT_NUM_INSTANCES + 4,
380 },
381 {
382 R_03097C_GE_STEREO_CNTL,
383 R_030984_VGT_TF_MEMORY_BASE_HI_UMD - R_03097C_GE_STEREO_CNTL + 4,
384 },
385 {
386 R_03096C_GE_CNTL,
387 4,
388 },
389 {
390 R_030968_VGT_INSTANCE_BASE_ID,
391 4,
392 },
393 {
394 R_030988_GE_USER_VGPR_EN,
395 4,
396 },
397 {
398 R_030E00_TA_CS_BC_BASE_ADDR,
399 R_030E04_TA_CS_BC_BASE_ADDR_HI - R_030E00_TA_CS_BC_BASE_ADDR + 4,
400 },
401 };
402
403 static const struct ac_reg_range Gfx10ShShadowRange[] = {
404 {
405 R_00B018_SPI_SHADER_PGM_CHKSUM_PS,
406 4,
407 },
408 {
409 R_00B020_SPI_SHADER_PGM_LO_PS,
410 R_00B0AC_SPI_SHADER_USER_DATA_PS_31 - R_00B020_SPI_SHADER_PGM_LO_PS + 4,
411 },
412 {
413 R_00B0C8_SPI_SHADER_USER_ACCUM_PS_0,
414 R_00B0D4_SPI_SHADER_USER_ACCUM_PS_3 - R_00B0C8_SPI_SHADER_USER_ACCUM_PS_0 + 4,
415 },
416 {
417 R_00B114_SPI_SHADER_PGM_CHKSUM_VS,
418 4,
419 },
420 {
421 R_00B11C_SPI_SHADER_LATE_ALLOC_VS,
422 R_00B1AC_SPI_SHADER_USER_DATA_VS_31 - R_00B11C_SPI_SHADER_LATE_ALLOC_VS + 4,
423 },
424 {
425 R_00B1C8_SPI_SHADER_USER_ACCUM_VS_0,
426 R_00B1D4_SPI_SHADER_USER_ACCUM_VS_3 - R_00B1C8_SPI_SHADER_USER_ACCUM_VS_0 + 4,
427 },
428 {
429 R_00B320_SPI_SHADER_PGM_LO_ES,
430 R_00B324_SPI_SHADER_PGM_HI_ES - R_00B320_SPI_SHADER_PGM_LO_ES + 4,
431 },
432 {
433 R_00B520_SPI_SHADER_PGM_LO_LS,
434 R_00B524_SPI_SHADER_PGM_HI_LS - R_00B520_SPI_SHADER_PGM_LO_LS + 4,
435 },
436 {
437 R_00B200_SPI_SHADER_PGM_CHKSUM_GS,
438 4,
439 },
440 {
441 R_00B21C_SPI_SHADER_PGM_RSRC3_GS,
442 R_00B2AC_SPI_SHADER_USER_DATA_GS_31 - R_00B21C_SPI_SHADER_PGM_RSRC3_GS + 4,
443 },
444 {
445 R_00B208_SPI_SHADER_USER_DATA_ADDR_LO_GS,
446 R_00B20C_SPI_SHADER_USER_DATA_ADDR_HI_GS - R_00B208_SPI_SHADER_USER_DATA_ADDR_LO_GS + 4,
447 },
448 {
449 R_00B408_SPI_SHADER_USER_DATA_ADDR_LO_HS,
450 R_00B40C_SPI_SHADER_USER_DATA_ADDR_HI_HS - R_00B408_SPI_SHADER_USER_DATA_ADDR_LO_HS + 4,
451 },
452 {
453 R_00B2C8_SPI_SHADER_USER_ACCUM_ESGS_0,
454 R_00B2D4_SPI_SHADER_USER_ACCUM_ESGS_3 - R_00B2C8_SPI_SHADER_USER_ACCUM_ESGS_0 + 4,
455 },
456 {
457 R_00B400_SPI_SHADER_PGM_CHKSUM_HS,
458 4,
459 },
460 {
461 R_00B41C_SPI_SHADER_PGM_RSRC3_HS,
462 R_00B4AC_SPI_SHADER_USER_DATA_HS_31 - R_00B41C_SPI_SHADER_PGM_RSRC3_HS + 4,
463 },
464 {
465 R_00B4C8_SPI_SHADER_USER_ACCUM_LSHS_0,
466 R_00B4D4_SPI_SHADER_USER_ACCUM_LSHS_3 - R_00B4C8_SPI_SHADER_USER_ACCUM_LSHS_0 + 4,
467 },
468 {
469 R_00B0C0_SPI_SHADER_REQ_CTRL_PS,
470 4,
471 },
472 {
473 R_00B1C0_SPI_SHADER_REQ_CTRL_VS,
474 4,
475 },
476 };
477
478 static const struct ac_reg_range Gfx10CsShShadowRange[] = {
479 {
480 R_00B810_COMPUTE_START_X,
481 R_00B824_COMPUTE_NUM_THREAD_Z - R_00B810_COMPUTE_START_X + 4,
482 },
483 {
484 R_00B82C_COMPUTE_PERFCOUNT_ENABLE,
485 R_00B834_COMPUTE_PGM_HI - R_00B82C_COMPUTE_PERFCOUNT_ENABLE + 4,
486 },
487 {
488 R_00B848_COMPUTE_PGM_RSRC1,
489 R_00B84C_COMPUTE_PGM_RSRC2 - R_00B848_COMPUTE_PGM_RSRC1 + 4,
490 },
491 {
492 R_00B854_COMPUTE_RESOURCE_LIMITS,
493 4,
494 },
495 {
496 R_00B860_COMPUTE_TMPRING_SIZE,
497 4,
498 },
499 {
500 R_00B878_COMPUTE_THREAD_TRACE_ENABLE,
501 4,
502 },
503 {
504 R_00B890_COMPUTE_USER_ACCUM_0,
505 R_00B8A0_COMPUTE_PGM_RSRC3 - R_00B890_COMPUTE_USER_ACCUM_0 + 4,
506 },
507 {
508 R_00B8A8_COMPUTE_SHADER_CHKSUM,
509 4,
510 },
511 {
512 R_00B900_COMPUTE_USER_DATA_0,
513 R_00B93C_COMPUTE_USER_DATA_15 - R_00B900_COMPUTE_USER_DATA_0 + 4,
514 },
515 {
516 R_00B9F4_COMPUTE_DISPATCH_TUNNEL,
517 4,
518 },
519 };
520
521 static const struct ac_reg_range Navi10NonShadowedRanges[] = {
522 /* These are not defined in Mesa. */
523 /*{
524 VGT_DMA_PRIMITIVE_TYPE,
525 VGT_DMA_LS_HS_CONFIG - VGT_DMA_PRIMITIVE_TYPE + 4,
526 },*/
527 /* VGT_INDEX_TYPE and VGT_DMA_INDEX_TYPE are a special case and neither of these should be
528 shadowed. */
529 {
530 R_028A7C_VGT_DMA_INDEX_TYPE,
531 4,
532 },
533 {
534 R_03090C_VGT_INDEX_TYPE,
535 R_03091C_VGT_STRMOUT_BUFFER_FILLED_SIZE_3 - R_03090C_VGT_INDEX_TYPE + 4,
536 },
537 {
538 R_028A88_VGT_DMA_NUM_INSTANCES,
539 4,
540 },
541 {
542 R_00B118_SPI_SHADER_PGM_RSRC3_VS,
543 4,
544 },
545 {
546 R_00B01C_SPI_SHADER_PGM_RSRC3_PS,
547 4,
548 },
549 {
550 R_00B004_SPI_SHADER_PGM_RSRC4_PS,
551 4,
552 },
553 {
554 R_00B104_SPI_SHADER_PGM_RSRC4_VS,
555 4,
556 },
557 {
558 R_00B404_SPI_SHADER_PGM_RSRC4_HS,
559 4,
560 },
561 {
562 R_00B204_SPI_SHADER_PGM_RSRC4_GS,
563 4,
564 },
565 {
566 R_00B858_COMPUTE_DESTINATION_EN_SE0,
567 R_00B85C_COMPUTE_DESTINATION_EN_SE1 - R_00B858_COMPUTE_DESTINATION_EN_SE0 + 4,
568 },
569 {
570 R_00B864_COMPUTE_DESTINATION_EN_SE2,
571 R_00B868_COMPUTE_DESTINATION_EN_SE3 - R_00B864_COMPUTE_DESTINATION_EN_SE2 + 4,
572 },
573 {
574 R_030800_GRBM_GFX_INDEX,
575 4,
576 },
577 {
578 R_031100_SPI_CONFIG_CNTL_REMAP,
579 4,
580 },
581 /* SQ thread trace registers are always not shadowed. */
582 {
583 R_008D00_SQ_THREAD_TRACE_BUF0_BASE,
584 R_008D38_SQ_THREAD_TRACE_HP3D_MARKER_CNTR - R_008D00_SQ_THREAD_TRACE_BUF0_BASE + 4,
585 },
586 {
587 R_030D00_SQ_THREAD_TRACE_USERDATA_0,
588 R_030D1C_SQ_THREAD_TRACE_USERDATA_7 - R_030D00_SQ_THREAD_TRACE_USERDATA_0 + 4,
589 },
590 /* Perf counter registers are always not shadowed. Most of them are in the perf
591 * register space but some legacy registers are still outside of it. The SPM
592 * registers are in the perf range as well.
593 */
594 {
595 SI_UCONFIG_PERF_REG_OFFSET,
596 SI_UCONFIG_PERF_REG_SPACE_SIZE,
597 },
598 /* These are not defined in Mesa. */
599 /*{
600 ATC_PERFCOUNTER0_CFG,
601 ATC_PERFCOUNTER_HI - ATC_PERFCOUNTER0_CFG + 4,
602 },
603 {
604 RPB_PERFCOUNTER_LO,
605 RPB_PERFCOUNTER_RSLT_CNTL - RPB_PERFCOUNTER_LO + 4,
606 },
607 {
608 SDMA0_PERFCOUNTER0_SELECT,
609 SDMA0_PERFCOUNTER1_HI - SDMA0_PERFCOUNTER0_SELECT + 4,
610 },
611 {
612 SDMA1_PERFCOUNTER0_SELECT,
613 SDMA1_PERFCOUNTER1_HI - SDMA1_PERFCOUNTER0_SELECT + 4,
614 },
615 {
616 GCEA_PERFCOUNTER_LO,
617 GCEA_PERFCOUNTER_RSLT_CNTL - GCEA_PERFCOUNTER_LO + 4,
618 },
619 {
620 GUS_PERFCOUNTER_LO,
621 GUS_PERFCOUNTER_RSLT_CNTL - GUS_PERFCOUNTER_LO + 4,
622 },*/
623 };
624
625 static const struct ac_reg_range Gfx103ContextShadowRange[] = {
626 {
627 R_028000_DB_RENDER_CONTROL,
628 R_028084_TA_BC_BASE_ADDR_HI - R_028000_DB_RENDER_CONTROL + 4,
629 },
630 {
631 R_0281E8_COHER_DEST_BASE_HI_0,
632 R_02835C_PA_SC_TILE_STEERING_OVERRIDE - R_0281E8_COHER_DEST_BASE_HI_0 + 4,
633 },
634 {
635 R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX,
636 R_028618_PA_CL_UCP_5_W - R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX + 4,
637 },
638 {
639 R_028644_SPI_PS_INPUT_CNTL_0,
640 R_028714_SPI_SHADER_COL_FORMAT - R_028644_SPI_PS_INPUT_CNTL_0 + 4,
641 },
642 {
643 R_028750_SX_PS_DOWNCONVERT_CONTROL,
644 R_02879C_CB_BLEND7_CONTROL - R_028750_SX_PS_DOWNCONVERT_CONTROL + 4,
645 },
646 {
647 R_0287FC_GE_MAX_OUTPUT_PER_SUBGROUP,
648 R_028820_PA_CL_NANINF_CNTL - R_0287FC_GE_MAX_OUTPUT_PER_SUBGROUP + 4,
649 },
650 {
651 R_02882C_PA_SU_PRIM_FILTER_CNTL,
652 R_028848_PA_CL_VRS_CNTL - R_02882C_PA_SU_PRIM_FILTER_CNTL + 4,
653 },
654 {
655 R_028A00_PA_SU_POINT_SIZE,
656 R_028A0C_PA_SC_LINE_STIPPLE - R_028A00_PA_SU_POINT_SIZE + 4,
657 },
658 {
659 R_028A18_VGT_HOS_MAX_TESS_LEVEL,
660 R_028A1C_VGT_HOS_MIN_TESS_LEVEL - R_028A18_VGT_HOS_MAX_TESS_LEVEL + 4,
661 },
662 {
663 R_028A40_VGT_GS_MODE,
664 R_028A6C_VGT_GS_OUT_PRIM_TYPE - R_028A40_VGT_GS_MODE + 4,
665 },
666 {
667 R_028A84_VGT_PRIMITIVEID_EN,
668 4,
669 },
670 {
671 R_028A8C_VGT_PRIMITIVEID_RESET,
672 4,
673 },
674 {
675 R_028A98_VGT_DRAW_PAYLOAD_CNTL,
676 R_028B98_VGT_STRMOUT_BUFFER_CONFIG - R_028A98_VGT_DRAW_PAYLOAD_CNTL + 4,
677 },
678 {
679 R_028BD4_PA_SC_CENTROID_PRIORITY_0,
680 R_028EFC_CB_COLOR7_ATTRIB3 - R_028BD4_PA_SC_CENTROID_PRIORITY_0 + 4,
681 },
682 };
683
684 static const struct ac_reg_range Gfx103UserConfigShadowRange[] = {
685 {
686 R_0300FC_CP_STRMOUT_CNTL,
687 4,
688 },
689 {
690 R_0301EC_CP_COHER_START_DELAY,
691 4,
692 },
693 {
694 R_030904_VGT_GSVS_RING_SIZE_UMD,
695 R_030908_VGT_PRIMITIVE_TYPE - R_030904_VGT_GSVS_RING_SIZE_UMD + 4,
696 },
697 {
698 R_030964_GE_MAX_VTX_INDX,
699 4,
700 },
701 {
702 R_030924_GE_MIN_VTX_INDX,
703 R_03092C_GE_MULTI_PRIM_IB_RESET_EN - R_030924_GE_MIN_VTX_INDX + 4,
704 },
705 {
706 R_030934_VGT_NUM_INSTANCES,
707 R_030940_VGT_TF_MEMORY_BASE_UMD - R_030934_VGT_NUM_INSTANCES + 4,
708 },
709 {
710 R_03097C_GE_STEREO_CNTL,
711 R_030984_VGT_TF_MEMORY_BASE_HI_UMD - R_03097C_GE_STEREO_CNTL + 4,
712 },
713 {
714 R_03096C_GE_CNTL,
715 4,
716 },
717 {
718 R_030968_VGT_INSTANCE_BASE_ID,
719 4,
720 },
721 {
722 R_030E00_TA_CS_BC_BASE_ADDR,
723 R_030E04_TA_CS_BC_BASE_ADDR_HI - R_030E00_TA_CS_BC_BASE_ADDR + 4,
724 },
725 {
726 R_030988_GE_USER_VGPR_EN,
727 0x03098C - R_030988_GE_USER_VGPR_EN + 4,
728 },
729 };
730
731 static const struct ac_reg_range Gfx103NonShadowedRanges[] = {
732 /* These are not defined in Mesa. */
733 /*{
734 VGT_DMA_PRIMITIVE_TYPE,
735 VGT_DMA_LS_HS_CONFIG - VGT_DMA_PRIMITIVE_TYPE + 4,
736 },*/
737 /* VGT_INDEX_TYPE and VGT_DMA_INDEX_TYPE are a special case and neither of these should be
738 shadowed. */
739 {
740 R_028A7C_VGT_DMA_INDEX_TYPE,
741 4,
742 },
743 {
744 R_03090C_VGT_INDEX_TYPE,
745 R_03091C_VGT_STRMOUT_BUFFER_FILLED_SIZE_3 - R_03090C_VGT_INDEX_TYPE + 4,
746 },
747 {
748 R_028A88_VGT_DMA_NUM_INSTANCES,
749 4,
750 },
751 {
752 R_00B118_SPI_SHADER_PGM_RSRC3_VS,
753 4,
754 },
755 {
756 R_00B01C_SPI_SHADER_PGM_RSRC3_PS,
757 4,
758 },
759 {
760 R_00B004_SPI_SHADER_PGM_RSRC4_PS,
761 4,
762 },
763 {
764 R_00B104_SPI_SHADER_PGM_RSRC4_VS,
765 4,
766 },
767 {
768 R_00B404_SPI_SHADER_PGM_RSRC4_HS,
769 4,
770 },
771 {
772 R_00B204_SPI_SHADER_PGM_RSRC4_GS,
773 4,
774 },
775 {
776 R_00B858_COMPUTE_DESTINATION_EN_SE0,
777 R_00B85C_COMPUTE_DESTINATION_EN_SE1 - R_00B858_COMPUTE_DESTINATION_EN_SE0 + 4,
778 },
779 {
780 R_00B864_COMPUTE_DESTINATION_EN_SE2,
781 R_00B868_COMPUTE_DESTINATION_EN_SE3 - R_00B864_COMPUTE_DESTINATION_EN_SE2 + 4,
782 },
783 {
784 R_030800_GRBM_GFX_INDEX,
785 4,
786 },
787 {
788 R_031100_SPI_CONFIG_CNTL_REMAP,
789 4,
790 },
791 /* SQ thread trace registers are always not shadowed. */
792 {
793 R_008D00_SQ_THREAD_TRACE_BUF0_BASE,
794 R_008D3C_SQ_THREAD_TRACE_STATUS2 - R_008D00_SQ_THREAD_TRACE_BUF0_BASE + 4,
795 },
796 {
797 R_030D00_SQ_THREAD_TRACE_USERDATA_0,
798 R_030D1C_SQ_THREAD_TRACE_USERDATA_7 - R_030D00_SQ_THREAD_TRACE_USERDATA_0 + 4,
799 },
800 /* Perf counter registers are always not shadowed. Most of them are in the perf
801 * register space but some legacy registers are still outside of it. The SPM
802 * registers are in the perf range as well.
803 */
804 {
805 SI_UCONFIG_PERF_REG_OFFSET,
806 SI_UCONFIG_PERF_REG_SPACE_SIZE,
807 },
808 /* These are not defined in Mesa. */
809 /*{
810 mmATC_PERFCOUNTER0_CFG,
811 mmATC_PERFCOUNTER_HI - mmATC_PERFCOUNTER0_CFG + 1
812 },
813 {
814 mmRPB_PERFCOUNTER_LO,
815 mmRPB_PERFCOUNTER_RSLT_CNTL - mmRPB_PERFCOUNTER_LO + 1
816 },*/
817 };
818
ac_get_reg_ranges(enum chip_class chip_class,enum radeon_family family,enum ac_reg_range_type type,unsigned * num_ranges,const struct ac_reg_range ** ranges)819 void ac_get_reg_ranges(enum chip_class chip_class, enum radeon_family family,
820 enum ac_reg_range_type type, unsigned *num_ranges,
821 const struct ac_reg_range **ranges)
822 {
823 #define RETURN(array) \
824 do { \
825 *ranges = array; \
826 *num_ranges = ARRAY_SIZE(array); \
827 } while (0)
828
829 *num_ranges = 0;
830 *ranges = NULL;
831
832 switch (type) {
833 case SI_REG_RANGE_UCONFIG:
834 if (chip_class == GFX10_3)
835 RETURN(Gfx103UserConfigShadowRange);
836 else if (chip_class == GFX10)
837 RETURN(Nv10UserConfigShadowRange);
838 else if (chip_class == GFX9)
839 RETURN(Gfx9UserConfigShadowRange);
840 break;
841 case SI_REG_RANGE_CONTEXT:
842 if (chip_class == GFX10_3)
843 RETURN(Gfx103ContextShadowRange);
844 else if (chip_class == GFX10)
845 RETURN(Nv10ContextShadowRange);
846 else if (chip_class == GFX9)
847 RETURN(Gfx9ContextShadowRange);
848 break;
849 case SI_REG_RANGE_SH:
850 if (chip_class == GFX10_3 || chip_class == GFX10)
851 RETURN(Gfx10ShShadowRange);
852 else if (family == CHIP_RAVEN2 || family == CHIP_RENOIR)
853 RETURN(Gfx9ShShadowRangeRaven2);
854 else if (chip_class == GFX9)
855 RETURN(Gfx9ShShadowRange);
856 break;
857 case SI_REG_RANGE_CS_SH:
858 if (chip_class == GFX10_3 || chip_class == GFX10)
859 RETURN(Gfx10CsShShadowRange);
860 else if (family == CHIP_RAVEN2 || family == CHIP_RENOIR)
861 RETURN(Gfx9CsShShadowRangeRaven2);
862 else if (chip_class == GFX9)
863 RETURN(Gfx9CsShShadowRange);
864 break;
865 case SI_REG_RANGE_NON_SHADOWED:
866 if (chip_class == GFX10_3)
867 RETURN(Gfx103NonShadowedRanges);
868 else if (chip_class == GFX10)
869 RETURN(Navi10NonShadowedRanges);
870 else
871 assert(0);
872 break;
873 default:
874 break;
875 }
876 }
877
878 /**
879 * Emulate CLEAR_STATE.
880 */
gfx9_emulate_clear_state(struct radeon_cmdbuf * cs,set_context_reg_seq_array_fn set_context_reg_seq_array)881 static void gfx9_emulate_clear_state(struct radeon_cmdbuf *cs,
882 set_context_reg_seq_array_fn set_context_reg_seq_array)
883 {
884 static const uint32_t DbRenderControlGfx9[] = {
885 0x0, // DB_RENDER_CONTROL
886 0x0, // DB_COUNT_CONTROL
887 0x0, // DB_DEPTH_VIEW
888 0x0, // DB_RENDER_OVERRIDE
889 0x0, // DB_RENDER_OVERRIDE2
890 0x0, // DB_HTILE_DATA_BASE
891 0x0, // DB_HTILE_DATA_BASE_HI
892 0x0, // DB_DEPTH_SIZE
893 0x0, // DB_DEPTH_BOUNDS_MIN
894 0x0, // DB_DEPTH_BOUNDS_MAX
895 0x0, // DB_STENCIL_CLEAR
896 0x0, // DB_DEPTH_CLEAR
897 0x0, // PA_SC_SCREEN_SCISSOR_TL
898 0x40004000, // PA_SC_SCREEN_SCISSOR_BR
899 0x0, // DB_Z_INFO
900 0x0, // DB_STENCIL_INFO
901 0x0, // DB_Z_READ_BASE
902 0x0, // DB_Z_READ_BASE_HI
903 0x0, // DB_STENCIL_READ_BASE
904 0x0, // DB_STENCIL_READ_BASE_HI
905 0x0, // DB_Z_WRITE_BASE
906 0x0, // DB_Z_WRITE_BASE_HI
907 0x0, // DB_STENCIL_WRITE_BASE
908 0x0, // DB_STENCIL_WRITE_BASE_HI
909 0x0, // DB_DFSM_CONTROL
910 0x0, //
911 0x0, // DB_Z_INFO2
912 0x0, // DB_STENCIL_INFO2
913 0x0, //
914 0x0, //
915 0x0, //
916 0x0, //
917 0x0, // TA_BC_BASE_ADDR
918 0x0 // TA_BC_BASE_ADDR_HI
919 };
920 static const uint32_t CoherDestBaseHi0Gfx9[] = {
921 0x0, // COHER_DEST_BASE_HI_0
922 0x0, // COHER_DEST_BASE_HI_1
923 0x0, // COHER_DEST_BASE_HI_2
924 0x0, // COHER_DEST_BASE_HI_3
925 0x0, // COHER_DEST_BASE_2
926 0x0, // COHER_DEST_BASE_3
927 0x0, // PA_SC_WINDOW_OFFSET
928 0x80000000, // PA_SC_WINDOW_SCISSOR_TL
929 0x40004000, // PA_SC_WINDOW_SCISSOR_BR
930 0xffff, // PA_SC_CLIPRECT_RULE
931 0x0, // PA_SC_CLIPRECT_0_TL
932 0x40004000, // PA_SC_CLIPRECT_0_BR
933 0x0, // PA_SC_CLIPRECT_1_TL
934 0x40004000, // PA_SC_CLIPRECT_1_BR
935 0x0, // PA_SC_CLIPRECT_2_TL
936 0x40004000, // PA_SC_CLIPRECT_2_BR
937 0x0, // PA_SC_CLIPRECT_3_TL
938 0x40004000, // PA_SC_CLIPRECT_3_BR
939 0xaa99aaaa, // PA_SC_EDGERULE
940 0x0, // PA_SU_HARDWARE_SCREEN_OFFSET
941 0xffffffff, // CB_TARGET_MASK
942 0xffffffff, // CB_SHADER_MASK
943 0x80000000, // PA_SC_GENERIC_SCISSOR_TL
944 0x40004000, // PA_SC_GENERIC_SCISSOR_BR
945 0x0, // COHER_DEST_BASE_0
946 0x0, // COHER_DEST_BASE_1
947 0x80000000, // PA_SC_VPORT_SCISSOR_0_TL
948 0x40004000, // PA_SC_VPORT_SCISSOR_0_BR
949 0x80000000, // PA_SC_VPORT_SCISSOR_1_TL
950 0x40004000, // PA_SC_VPORT_SCISSOR_1_BR
951 0x80000000, // PA_SC_VPORT_SCISSOR_2_TL
952 0x40004000, // PA_SC_VPORT_SCISSOR_2_BR
953 0x80000000, // PA_SC_VPORT_SCISSOR_3_TL
954 0x40004000, // PA_SC_VPORT_SCISSOR_3_BR
955 0x80000000, // PA_SC_VPORT_SCISSOR_4_TL
956 0x40004000, // PA_SC_VPORT_SCISSOR_4_BR
957 0x80000000, // PA_SC_VPORT_SCISSOR_5_TL
958 0x40004000, // PA_SC_VPORT_SCISSOR_5_BR
959 0x80000000, // PA_SC_VPORT_SCISSOR_6_TL
960 0x40004000, // PA_SC_VPORT_SCISSOR_6_BR
961 0x80000000, // PA_SC_VPORT_SCISSOR_7_TL
962 0x40004000, // PA_SC_VPORT_SCISSOR_7_BR
963 0x80000000, // PA_SC_VPORT_SCISSOR_8_TL
964 0x40004000, // PA_SC_VPORT_SCISSOR_8_BR
965 0x80000000, // PA_SC_VPORT_SCISSOR_9_TL
966 0x40004000, // PA_SC_VPORT_SCISSOR_9_BR
967 0x80000000, // PA_SC_VPORT_SCISSOR_10_TL
968 0x40004000, // PA_SC_VPORT_SCISSOR_10_BR
969 0x80000000, // PA_SC_VPORT_SCISSOR_11_TL
970 0x40004000, // PA_SC_VPORT_SCISSOR_11_BR
971 0x80000000, // PA_SC_VPORT_SCISSOR_12_TL
972 0x40004000, // PA_SC_VPORT_SCISSOR_12_BR
973 0x80000000, // PA_SC_VPORT_SCISSOR_13_TL
974 0x40004000, // PA_SC_VPORT_SCISSOR_13_BR
975 0x80000000, // PA_SC_VPORT_SCISSOR_14_TL
976 0x40004000, // PA_SC_VPORT_SCISSOR_14_BR
977 0x80000000, // PA_SC_VPORT_SCISSOR_15_TL
978 0x40004000, // PA_SC_VPORT_SCISSOR_15_BR
979 0x0, // PA_SC_VPORT_ZMIN_0
980 0x3f800000, // PA_SC_VPORT_ZMAX_0
981 0x0, // PA_SC_VPORT_ZMIN_1
982 0x3f800000, // PA_SC_VPORT_ZMAX_1
983 0x0, // PA_SC_VPORT_ZMIN_2
984 0x3f800000, // PA_SC_VPORT_ZMAX_2
985 0x0, // PA_SC_VPORT_ZMIN_3
986 0x3f800000, // PA_SC_VPORT_ZMAX_3
987 0x0, // PA_SC_VPORT_ZMIN_4
988 0x3f800000, // PA_SC_VPORT_ZMAX_4
989 0x0, // PA_SC_VPORT_ZMIN_5
990 0x3f800000, // PA_SC_VPORT_ZMAX_5
991 0x0, // PA_SC_VPORT_ZMIN_6
992 0x3f800000, // PA_SC_VPORT_ZMAX_6
993 0x0, // PA_SC_VPORT_ZMIN_7
994 0x3f800000, // PA_SC_VPORT_ZMAX_7
995 0x0, // PA_SC_VPORT_ZMIN_8
996 0x3f800000, // PA_SC_VPORT_ZMAX_8
997 0x0, // PA_SC_VPORT_ZMIN_9
998 0x3f800000, // PA_SC_VPORT_ZMAX_9
999 0x0, // PA_SC_VPORT_ZMIN_10
1000 0x3f800000, // PA_SC_VPORT_ZMAX_10
1001 0x0, // PA_SC_VPORT_ZMIN_11
1002 0x3f800000, // PA_SC_VPORT_ZMAX_11
1003 0x0, // PA_SC_VPORT_ZMIN_12
1004 0x3f800000, // PA_SC_VPORT_ZMAX_12
1005 0x0, // PA_SC_VPORT_ZMIN_13
1006 0x3f800000, // PA_SC_VPORT_ZMAX_13
1007 0x0, // PA_SC_VPORT_ZMIN_14
1008 0x3f800000, // PA_SC_VPORT_ZMAX_14
1009 0x0, // PA_SC_VPORT_ZMIN_15
1010 0x3f800000, // PA_SC_VPORT_ZMAX_15
1011 0x0, // PA_SC_RASTER_CONFIG
1012 0x0, // PA_SC_RASTER_CONFIG_1
1013 0x0, //
1014 0x0 // PA_SC_TILE_STEERING_OVERRIDE
1015 };
1016 static const uint32_t VgtMultiPrimIbResetIndxGfx9[] = {
1017 0x0 // VGT_MULTI_PRIM_IB_RESET_INDX
1018 };
1019 static const uint32_t CbBlendRedGfx9[] = {
1020 0x0, // CB_BLEND_RED
1021 0x0, // CB_BLEND_GREEN
1022 0x0, // CB_BLEND_BLUE
1023 0x0, // CB_BLEND_ALPHA
1024 0x0, // CB_DCC_CONTROL
1025 0x0, //
1026 0x0, // DB_STENCIL_CONTROL
1027 0x1000000, // DB_STENCILREFMASK
1028 0x1000000, // DB_STENCILREFMASK_BF
1029 0x0, //
1030 0x0, // PA_CL_VPORT_XSCALE
1031 0x0, // PA_CL_VPORT_XOFFSET
1032 0x0, // PA_CL_VPORT_YSCALE
1033 0x0, // PA_CL_VPORT_YOFFSET
1034 0x0, // PA_CL_VPORT_ZSCALE
1035 0x0, // PA_CL_VPORT_ZOFFSET
1036 0x0, // PA_CL_VPORT_XSCALE_1
1037 0x0, // PA_CL_VPORT_XOFFSET_1
1038 0x0, // PA_CL_VPORT_YSCALE_1
1039 0x0, // PA_CL_VPORT_YOFFSET_1
1040 0x0, // PA_CL_VPORT_ZSCALE_1
1041 0x0, // PA_CL_VPORT_ZOFFSET_1
1042 0x0, // PA_CL_VPORT_XSCALE_2
1043 0x0, // PA_CL_VPORT_XOFFSET_2
1044 0x0, // PA_CL_VPORT_YSCALE_2
1045 0x0, // PA_CL_VPORT_YOFFSET_2
1046 0x0, // PA_CL_VPORT_ZSCALE_2
1047 0x0, // PA_CL_VPORT_ZOFFSET_2
1048 0x0, // PA_CL_VPORT_XSCALE_3
1049 0x0, // PA_CL_VPORT_XOFFSET_3
1050 0x0, // PA_CL_VPORT_YSCALE_3
1051 0x0, // PA_CL_VPORT_YOFFSET_3
1052 0x0, // PA_CL_VPORT_ZSCALE_3
1053 0x0, // PA_CL_VPORT_ZOFFSET_3
1054 0x0, // PA_CL_VPORT_XSCALE_4
1055 0x0, // PA_CL_VPORT_XOFFSET_4
1056 0x0, // PA_CL_VPORT_YSCALE_4
1057 0x0, // PA_CL_VPORT_YOFFSET_4
1058 0x0, // PA_CL_VPORT_ZSCALE_4
1059 0x0, // PA_CL_VPORT_ZOFFSET_4
1060 0x0, // PA_CL_VPORT_XSCALE_5
1061 0x0, // PA_CL_VPORT_XOFFSET_5
1062 0x0, // PA_CL_VPORT_YSCALE_5
1063 0x0, // PA_CL_VPORT_YOFFSET_5
1064 0x0, // PA_CL_VPORT_ZSCALE_5
1065 0x0, // PA_CL_VPORT_ZOFFSET_5
1066 0x0, // PA_CL_VPORT_XSCALE_6
1067 0x0, // PA_CL_VPORT_XOFFSET_6
1068 0x0, // PA_CL_VPORT_YSCALE_6
1069 0x0, // PA_CL_VPORT_YOFFSET_6
1070 0x0, // PA_CL_VPORT_ZSCALE_6
1071 0x0, // PA_CL_VPORT_ZOFFSET_6
1072 0x0, // PA_CL_VPORT_XSCALE_7
1073 0x0, // PA_CL_VPORT_XOFFSET_7
1074 0x0, // PA_CL_VPORT_YSCALE_7
1075 0x0, // PA_CL_VPORT_YOFFSET_7
1076 0x0, // PA_CL_VPORT_ZSCALE_7
1077 0x0, // PA_CL_VPORT_ZOFFSET_7
1078 0x0, // PA_CL_VPORT_XSCALE_8
1079 0x0, // PA_CL_VPORT_XOFFSET_8
1080 0x0, // PA_CL_VPORT_YSCALE_8
1081 0x0, // PA_CL_VPORT_YOFFSET_8
1082 0x0, // PA_CL_VPORT_ZSCALE_8
1083 0x0, // PA_CL_VPORT_ZOFFSET_8
1084 0x0, // PA_CL_VPORT_XSCALE_9
1085 0x0, // PA_CL_VPORT_XOFFSET_9
1086 0x0, // PA_CL_VPORT_YSCALE_9
1087 0x0, // PA_CL_VPORT_YOFFSET_9
1088 0x0, // PA_CL_VPORT_ZSCALE_9
1089 0x0, // PA_CL_VPORT_ZOFFSET_9
1090 0x0, // PA_CL_VPORT_XSCALE_10
1091 0x0, // PA_CL_VPORT_XOFFSET_10
1092 0x0, // PA_CL_VPORT_YSCALE_10
1093 0x0, // PA_CL_VPORT_YOFFSET_10
1094 0x0, // PA_CL_VPORT_ZSCALE_10
1095 0x0, // PA_CL_VPORT_ZOFFSET_10
1096 0x0, // PA_CL_VPORT_XSCALE_11
1097 0x0, // PA_CL_VPORT_XOFFSET_11
1098 0x0, // PA_CL_VPORT_YSCALE_11
1099 0x0, // PA_CL_VPORT_YOFFSET_11
1100 0x0, // PA_CL_VPORT_ZSCALE_11
1101 0x0, // PA_CL_VPORT_ZOFFSET_11
1102 0x0, // PA_CL_VPORT_XSCALE_12
1103 0x0, // PA_CL_VPORT_XOFFSET_12
1104 0x0, // PA_CL_VPORT_YSCALE_12
1105 0x0, // PA_CL_VPORT_YOFFSET_12
1106 0x0, // PA_CL_VPORT_ZSCALE_12
1107 0x0, // PA_CL_VPORT_ZOFFSET_12
1108 0x0, // PA_CL_VPORT_XSCALE_13
1109 0x0, // PA_CL_VPORT_XOFFSET_13
1110 0x0, // PA_CL_VPORT_YSCALE_13
1111 0x0, // PA_CL_VPORT_YOFFSET_13
1112 0x0, // PA_CL_VPORT_ZSCALE_13
1113 0x0, // PA_CL_VPORT_ZOFFSET_13
1114 0x0, // PA_CL_VPORT_XSCALE_14
1115 0x0, // PA_CL_VPORT_XOFFSET_14
1116 0x0, // PA_CL_VPORT_YSCALE_14
1117 0x0, // PA_CL_VPORT_YOFFSET_14
1118 0x0, // PA_CL_VPORT_ZSCALE_14
1119 0x0, // PA_CL_VPORT_ZOFFSET_14
1120 0x0, // PA_CL_VPORT_XSCALE_15
1121 0x0, // PA_CL_VPORT_XOFFSET_15
1122 0x0, // PA_CL_VPORT_YSCALE_15
1123 0x0, // PA_CL_VPORT_YOFFSET_15
1124 0x0, // PA_CL_VPORT_ZSCALE_15
1125 0x0, // PA_CL_VPORT_ZOFFSET_15
1126 0x0, // PA_CL_UCP_0_X
1127 0x0, // PA_CL_UCP_0_Y
1128 0x0, // PA_CL_UCP_0_Z
1129 0x0, // PA_CL_UCP_0_W
1130 0x0, // PA_CL_UCP_1_X
1131 0x0, // PA_CL_UCP_1_Y
1132 0x0, // PA_CL_UCP_1_Z
1133 0x0, // PA_CL_UCP_1_W
1134 0x0, // PA_CL_UCP_2_X
1135 0x0, // PA_CL_UCP_2_Y
1136 0x0, // PA_CL_UCP_2_Z
1137 0x0, // PA_CL_UCP_2_W
1138 0x0, // PA_CL_UCP_3_X
1139 0x0, // PA_CL_UCP_3_Y
1140 0x0, // PA_CL_UCP_3_Z
1141 0x0, // PA_CL_UCP_3_W
1142 0x0, // PA_CL_UCP_4_X
1143 0x0, // PA_CL_UCP_4_Y
1144 0x0, // PA_CL_UCP_4_Z
1145 0x0, // PA_CL_UCP_4_W
1146 0x0, // PA_CL_UCP_5_X
1147 0x0, // PA_CL_UCP_5_Y
1148 0x0, // PA_CL_UCP_5_Z
1149 0x0 // PA_CL_UCP_5_W
1150 };
1151 static const uint32_t SpiPsInputCntl0Gfx9[] = {
1152 0x0, // SPI_PS_INPUT_CNTL_0
1153 0x0, // SPI_PS_INPUT_CNTL_1
1154 0x0, // SPI_PS_INPUT_CNTL_2
1155 0x0, // SPI_PS_INPUT_CNTL_3
1156 0x0, // SPI_PS_INPUT_CNTL_4
1157 0x0, // SPI_PS_INPUT_CNTL_5
1158 0x0, // SPI_PS_INPUT_CNTL_6
1159 0x0, // SPI_PS_INPUT_CNTL_7
1160 0x0, // SPI_PS_INPUT_CNTL_8
1161 0x0, // SPI_PS_INPUT_CNTL_9
1162 0x0, // SPI_PS_INPUT_CNTL_10
1163 0x0, // SPI_PS_INPUT_CNTL_11
1164 0x0, // SPI_PS_INPUT_CNTL_12
1165 0x0, // SPI_PS_INPUT_CNTL_13
1166 0x0, // SPI_PS_INPUT_CNTL_14
1167 0x0, // SPI_PS_INPUT_CNTL_15
1168 0x0, // SPI_PS_INPUT_CNTL_16
1169 0x0, // SPI_PS_INPUT_CNTL_17
1170 0x0, // SPI_PS_INPUT_CNTL_18
1171 0x0, // SPI_PS_INPUT_CNTL_19
1172 0x0, // SPI_PS_INPUT_CNTL_20
1173 0x0, // SPI_PS_INPUT_CNTL_21
1174 0x0, // SPI_PS_INPUT_CNTL_22
1175 0x0, // SPI_PS_INPUT_CNTL_23
1176 0x0, // SPI_PS_INPUT_CNTL_24
1177 0x0, // SPI_PS_INPUT_CNTL_25
1178 0x0, // SPI_PS_INPUT_CNTL_26
1179 0x0, // SPI_PS_INPUT_CNTL_27
1180 0x0, // SPI_PS_INPUT_CNTL_28
1181 0x0, // SPI_PS_INPUT_CNTL_29
1182 0x0, // SPI_PS_INPUT_CNTL_30
1183 0x0, // SPI_PS_INPUT_CNTL_31
1184 0x0, // SPI_VS_OUT_CONFIG
1185 0x0, //
1186 0x0, // SPI_PS_INPUT_ENA
1187 0x0, // SPI_PS_INPUT_ADDR
1188 0x0, // SPI_INTERP_CONTROL_0
1189 0x2, // SPI_PS_IN_CONTROL
1190 0x0, //
1191 0x0, // SPI_BARYC_CNTL
1192 0x0, //
1193 0x0, // SPI_TMPRING_SIZE
1194 0x0, //
1195 0x0, //
1196 0x0, //
1197 0x0, //
1198 0x0, //
1199 0x0, //
1200 0x0, //
1201 0x0, //
1202 0x0, // SPI_SHADER_POS_FORMAT
1203 0x0, // SPI_SHADER_Z_FORMAT
1204 0x0 // SPI_SHADER_COL_FORMAT
1205 };
1206 static const uint32_t SxPsDownconvertGfx9[] = {
1207 0x0, // SX_PS_DOWNCONVERT
1208 0x0, // SX_BLEND_OPT_EPSILON
1209 0x0, // SX_BLEND_OPT_CONTROL
1210 0x0, // SX_MRT0_BLEND_OPT
1211 0x0, // SX_MRT1_BLEND_OPT
1212 0x0, // SX_MRT2_BLEND_OPT
1213 0x0, // SX_MRT3_BLEND_OPT
1214 0x0, // SX_MRT4_BLEND_OPT
1215 0x0, // SX_MRT5_BLEND_OPT
1216 0x0, // SX_MRT6_BLEND_OPT
1217 0x0, // SX_MRT7_BLEND_OPT
1218 0x0, // CB_BLEND0_CONTROL
1219 0x0, // CB_BLEND1_CONTROL
1220 0x0, // CB_BLEND2_CONTROL
1221 0x0, // CB_BLEND3_CONTROL
1222 0x0, // CB_BLEND4_CONTROL
1223 0x0, // CB_BLEND5_CONTROL
1224 0x0, // CB_BLEND6_CONTROL
1225 0x0, // CB_BLEND7_CONTROL
1226 0x0, // CB_MRT0_EPITCH
1227 0x0, // CB_MRT1_EPITCH
1228 0x0, // CB_MRT2_EPITCH
1229 0x0, // CB_MRT3_EPITCH
1230 0x0, // CB_MRT4_EPITCH
1231 0x0, // CB_MRT5_EPITCH
1232 0x0, // CB_MRT6_EPITCH
1233 0x0 // CB_MRT7_EPITCH
1234 };
1235 static const uint32_t DbDepthControlGfx9[] = {
1236 0x0, // DB_DEPTH_CONTROL
1237 0x0, // DB_EQAA
1238 0x0, // CB_COLOR_CONTROL
1239 0x0, // DB_SHADER_CONTROL
1240 0x90000, // PA_CL_CLIP_CNTL
1241 0x4, // PA_SU_SC_MODE_CNTL
1242 0x0, // PA_CL_VTE_CNTL
1243 0x0, // PA_CL_VS_OUT_CNTL
1244 0x0 // PA_CL_NANINF_CNTL
1245 };
1246 static const uint32_t PaSuPrimFilterCntlGfx9[] = {
1247 0x0, // PA_SU_PRIM_FILTER_CNTL
1248 0x0, // PA_SU_SMALL_PRIM_FILTER_CNTL
1249 0x0, // PA_CL_OBJPRIM_ID_CNTL
1250 0x0, // PA_CL_NGG_CNTL
1251 0x0, // PA_SU_OVER_RASTERIZATION_CNTL
1252 0x0 // PA_STEREO_CNTL
1253 };
1254 static const uint32_t PaSuPointSizeGfx9[] = {
1255 0x0, // PA_SU_POINT_SIZE
1256 0x0, // PA_SU_POINT_MINMAX
1257 0x0, // PA_SU_LINE_CNTL
1258 0x0 // PA_SC_LINE_STIPPLE
1259 };
1260 static const uint32_t VgtHosMaxTessLevelGfx9[] = {
1261 0x0, // VGT_HOS_MAX_TESS_LEVEL
1262 0x0 // VGT_HOS_MIN_TESS_LEVEL
1263 };
1264 static const uint32_t VgtGsModeGfx9[] = {
1265 0x0, // VGT_GS_MODE
1266 0x0, // VGT_GS_ONCHIP_CNTL
1267 0x0, // PA_SC_MODE_CNTL_0
1268 0x0, // PA_SC_MODE_CNTL_1
1269 0x0, // VGT_ENHANCE
1270 0x100, // VGT_GS_PER_ES
1271 0x80, // VGT_ES_PER_GS
1272 0x2, // VGT_GS_PER_VS
1273 0x0, // VGT_GSVS_RING_OFFSET_1
1274 0x0, // VGT_GSVS_RING_OFFSET_2
1275 0x0, // VGT_GSVS_RING_OFFSET_3
1276 0x0 // VGT_GS_OUT_PRIM_TYPE
1277 };
1278 static const uint32_t VgtPrimitiveidEnGfx9[] = {
1279 0x0 // VGT_PRIMITIVEID_EN
1280 };
1281 static const uint32_t VgtPrimitiveidResetGfx9[] = {
1282 0x0 // VGT_PRIMITIVEID_RESET
1283 };
1284 static const uint32_t VgtGsMaxPrimsPerSubgroupGfx9[] = {
1285 0x0, // VGT_GS_MAX_PRIMS_PER_SUBGROUP
1286 0x0, // VGT_DRAW_PAYLOAD_CNTL
1287 0x0, //
1288 0x0, // VGT_INSTANCE_STEP_RATE_0
1289 0x0, // VGT_INSTANCE_STEP_RATE_1
1290 0x0, //
1291 0x0, // VGT_ESGS_RING_ITEMSIZE
1292 0x0, // VGT_GSVS_RING_ITEMSIZE
1293 0x0, // VGT_REUSE_OFF
1294 0x0, // VGT_VTX_CNT_EN
1295 0x0, // DB_HTILE_SURFACE
1296 0x0, // DB_SRESULTS_COMPARE_STATE0
1297 0x0, // DB_SRESULTS_COMPARE_STATE1
1298 0x0, // DB_PRELOAD_CONTROL
1299 0x0, //
1300 0x0, // VGT_STRMOUT_BUFFER_SIZE_0
1301 0x0 // VGT_STRMOUT_VTX_STRIDE_0
1302 };
1303 static const uint32_t VgtStrmoutBufferSize1Gfx9[] = {
1304 0x0, // VGT_STRMOUT_BUFFER_SIZE_1
1305 0x0 // VGT_STRMOUT_VTX_STRIDE_1
1306 };
1307 static const uint32_t VgtStrmoutBufferSize2Gfx9[] = {
1308 0x0, // VGT_STRMOUT_BUFFER_SIZE_2
1309 0x0 // VGT_STRMOUT_VTX_STRIDE_2
1310 };
1311 static const uint32_t VgtStrmoutBufferSize3Gfx9[] = {
1312 0x0, // VGT_STRMOUT_BUFFER_SIZE_3
1313 0x0 // VGT_STRMOUT_VTX_STRIDE_3
1314 };
1315 static const uint32_t VgtStrmoutDrawOpaqueOffsetGfx9[] = {
1316 0x0, // VGT_STRMOUT_DRAW_OPAQUE_OFFSET
1317 0x0, // VGT_STRMOUT_DRAW_OPAQUE_BUFFER_FILLED_SIZE
1318 0x0 // VGT_STRMOUT_DRAW_OPAQUE_VERTEX_STRIDE
1319 };
1320 static const uint32_t VgtGsMaxVertOutGfx9[] = {
1321 0x0, // VGT_GS_MAX_VERT_OUT
1322 0x0, //
1323 0x0, //
1324 0x0, //
1325 0x0, //
1326 0x0, //
1327 0x0, // VGT_TESS_DISTRIBUTION
1328 0x0, // VGT_SHADER_STAGES_EN
1329 0x0, // VGT_LS_HS_CONFIG
1330 0x0, // VGT_GS_VERT_ITEMSIZE
1331 0x0, // VGT_GS_VERT_ITEMSIZE_1
1332 0x0, // VGT_GS_VERT_ITEMSIZE_2
1333 0x0, // VGT_GS_VERT_ITEMSIZE_3
1334 0x0, // VGT_TF_PARAM
1335 0x0, // DB_ALPHA_TO_MASK
1336 0x0, // VGT_DISPATCH_DRAW_INDEX
1337 0x0, // PA_SU_POLY_OFFSET_DB_FMT_CNTL
1338 0x0, // PA_SU_POLY_OFFSET_CLAMP
1339 0x0, // PA_SU_POLY_OFFSET_FRONT_SCALE
1340 0x0, // PA_SU_POLY_OFFSET_FRONT_OFFSET
1341 0x0, // PA_SU_POLY_OFFSET_BACK_SCALE
1342 0x0, // PA_SU_POLY_OFFSET_BACK_OFFSET
1343 0x0, // VGT_GS_INSTANCE_CNT
1344 0x0, // VGT_STRMOUT_CONFIG
1345 0x0 // VGT_STRMOUT_BUFFER_CONFIG
1346 };
1347 static const uint32_t PaScCentroidPriority0Gfx9[] = {
1348 0x0, // PA_SC_CENTROID_PRIORITY_0
1349 0x0, // PA_SC_CENTROID_PRIORITY_1
1350 0x1000, // PA_SC_LINE_CNTL
1351 0x0, // PA_SC_AA_CONFIG
1352 0x5, // PA_SU_VTX_CNTL
1353 0x3f800000, // PA_CL_GB_VERT_CLIP_ADJ
1354 0x3f800000, // PA_CL_GB_VERT_DISC_ADJ
1355 0x3f800000, // PA_CL_GB_HORZ_CLIP_ADJ
1356 0x3f800000, // PA_CL_GB_HORZ_DISC_ADJ
1357 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_0
1358 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_1
1359 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_2
1360 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_3
1361 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_0
1362 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_1
1363 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_2
1364 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_3
1365 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_0
1366 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_1
1367 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_2
1368 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_3
1369 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_0
1370 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_1
1371 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_2
1372 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_3
1373 0xffffffff, // PA_SC_AA_MASK_X0Y0_X1Y0
1374 0xffffffff, // PA_SC_AA_MASK_X0Y1_X1Y1
1375 0x0, // PA_SC_SHADER_CONTROL
1376 0x3, // PA_SC_BINNER_CNTL_0
1377 0x0, // PA_SC_BINNER_CNTL_1
1378 0x100000, // PA_SC_CONSERVATIVE_RASTERIZATION_CNTL
1379 0x0, // PA_SC_NGG_MODE_CNTL
1380 0x0, //
1381 0x1e, // VGT_VERTEX_REUSE_BLOCK_CNTL
1382 0x20, // VGT_OUT_DEALLOC_CNTL
1383 0x0, // CB_COLOR0_BASE
1384 0x0, // CB_COLOR0_BASE_EXT
1385 0x0, // CB_COLOR0_ATTRIB2
1386 0x0, // CB_COLOR0_VIEW
1387 0x0, // CB_COLOR0_INFO
1388 0x0, // CB_COLOR0_ATTRIB
1389 0x0, // CB_COLOR0_DCC_CONTROL
1390 0x0, // CB_COLOR0_CMASK
1391 0x0, // CB_COLOR0_CMASK_BASE_EXT
1392 0x0, // CB_COLOR0_FMASK
1393 0x0, // CB_COLOR0_FMASK_BASE_EXT
1394 0x0, // CB_COLOR0_CLEAR_WORD0
1395 0x0, // CB_COLOR0_CLEAR_WORD1
1396 0x0, // CB_COLOR0_DCC_BASE
1397 0x0, // CB_COLOR0_DCC_BASE_EXT
1398 0x0, // CB_COLOR1_BASE
1399 0x0, // CB_COLOR1_BASE_EXT
1400 0x0, // CB_COLOR1_ATTRIB2
1401 0x0, // CB_COLOR1_VIEW
1402 0x0, // CB_COLOR1_INFO
1403 0x0, // CB_COLOR1_ATTRIB
1404 0x0, // CB_COLOR1_DCC_CONTROL
1405 0x0, // CB_COLOR1_CMASK
1406 0x0, // CB_COLOR1_CMASK_BASE_EXT
1407 0x0, // CB_COLOR1_FMASK
1408 0x0, // CB_COLOR1_FMASK_BASE_EXT
1409 0x0, // CB_COLOR1_CLEAR_WORD0
1410 0x0, // CB_COLOR1_CLEAR_WORD1
1411 0x0, // CB_COLOR1_DCC_BASE
1412 0x0, // CB_COLOR1_DCC_BASE_EXT
1413 0x0, // CB_COLOR2_BASE
1414 0x0, // CB_COLOR2_BASE_EXT
1415 0x0, // CB_COLOR2_ATTRIB2
1416 0x0, // CB_COLOR2_VIEW
1417 0x0, // CB_COLOR2_INFO
1418 0x0, // CB_COLOR2_ATTRIB
1419 0x0, // CB_COLOR2_DCC_CONTROL
1420 0x0, // CB_COLOR2_CMASK
1421 0x0, // CB_COLOR2_CMASK_BASE_EXT
1422 0x0, // CB_COLOR2_FMASK
1423 0x0, // CB_COLOR2_FMASK_BASE_EXT
1424 0x0, // CB_COLOR2_CLEAR_WORD0
1425 0x0, // CB_COLOR2_CLEAR_WORD1
1426 0x0, // CB_COLOR2_DCC_BASE
1427 0x0, // CB_COLOR2_DCC_BASE_EXT
1428 0x0, // CB_COLOR3_BASE
1429 0x0, // CB_COLOR3_BASE_EXT
1430 0x0, // CB_COLOR3_ATTRIB2
1431 0x0, // CB_COLOR3_VIEW
1432 0x0, // CB_COLOR3_INFO
1433 0x0, // CB_COLOR3_ATTRIB
1434 0x0, // CB_COLOR3_DCC_CONTROL
1435 0x0, // CB_COLOR3_CMASK
1436 0x0, // CB_COLOR3_CMASK_BASE_EXT
1437 0x0, // CB_COLOR3_FMASK
1438 0x0, // CB_COLOR3_FMASK_BASE_EXT
1439 0x0, // CB_COLOR3_CLEAR_WORD0
1440 0x0, // CB_COLOR3_CLEAR_WORD1
1441 0x0, // CB_COLOR3_DCC_BASE
1442 0x0, // CB_COLOR3_DCC_BASE_EXT
1443 0x0, // CB_COLOR4_BASE
1444 0x0, // CB_COLOR4_BASE_EXT
1445 0x0, // CB_COLOR4_ATTRIB2
1446 0x0, // CB_COLOR4_VIEW
1447 0x0, // CB_COLOR4_INFO
1448 0x0, // CB_COLOR4_ATTRIB
1449 0x0, // CB_COLOR4_DCC_CONTROL
1450 0x0, // CB_COLOR4_CMASK
1451 0x0, // CB_COLOR4_CMASK_BASE_EXT
1452 0x0, // CB_COLOR4_FMASK
1453 0x0, // CB_COLOR4_FMASK_BASE_EXT
1454 0x0, // CB_COLOR4_CLEAR_WORD0
1455 0x0, // CB_COLOR4_CLEAR_WORD1
1456 0x0, // CB_COLOR4_DCC_BASE
1457 0x0, // CB_COLOR4_DCC_BASE_EXT
1458 0x0, // CB_COLOR5_BASE
1459 0x0, // CB_COLOR5_BASE_EXT
1460 0x0, // CB_COLOR5_ATTRIB2
1461 0x0, // CB_COLOR5_VIEW
1462 0x0, // CB_COLOR5_INFO
1463 0x0, // CB_COLOR5_ATTRIB
1464 0x0, // CB_COLOR5_DCC_CONTROL
1465 0x0, // CB_COLOR5_CMASK
1466 0x0, // CB_COLOR5_CMASK_BASE_EXT
1467 0x0, // CB_COLOR5_FMASK
1468 0x0, // CB_COLOR5_FMASK_BASE_EXT
1469 0x0, // CB_COLOR5_CLEAR_WORD0
1470 0x0, // CB_COLOR5_CLEAR_WORD1
1471 0x0, // CB_COLOR5_DCC_BASE
1472 0x0, // CB_COLOR5_DCC_BASE_EXT
1473 0x0, // CB_COLOR6_BASE
1474 0x0, // CB_COLOR6_BASE_EXT
1475 0x0, // CB_COLOR6_ATTRIB2
1476 0x0, // CB_COLOR6_VIEW
1477 0x0, // CB_COLOR6_INFO
1478 0x0, // CB_COLOR6_ATTRIB
1479 0x0, // CB_COLOR6_DCC_CONTROL
1480 0x0, // CB_COLOR6_CMASK
1481 0x0, // CB_COLOR6_CMASK_BASE_EXT
1482 0x0, // CB_COLOR6_FMASK
1483 0x0, // CB_COLOR6_FMASK_BASE_EXT
1484 0x0, // CB_COLOR6_CLEAR_WORD0
1485 0x0, // CB_COLOR6_CLEAR_WORD1
1486 0x0, // CB_COLOR6_DCC_BASE
1487 0x0, // CB_COLOR6_DCC_BASE_EXT
1488 0x0, // CB_COLOR7_BASE
1489 0x0, // CB_COLOR7_BASE_EXT
1490 0x0, // CB_COLOR7_ATTRIB2
1491 0x0, // CB_COLOR7_VIEW
1492 0x0, // CB_COLOR7_INFO
1493 0x0, // CB_COLOR7_ATTRIB
1494 0x0, // CB_COLOR7_DCC_CONTROL
1495 0x0, // CB_COLOR7_CMASK
1496 0x0, // CB_COLOR7_CMASK_BASE_EXT
1497 0x0, // CB_COLOR7_FMASK
1498 0x0, // CB_COLOR7_FMASK_BASE_EXT
1499 0x0, // CB_COLOR7_CLEAR_WORD0
1500 0x0, // CB_COLOR7_CLEAR_WORD1
1501 0x0, // CB_COLOR7_DCC_BASE
1502 0x0 // CB_COLOR7_DCC_BASE_EXT
1503 };
1504
1505 #define SET(array) ARRAY_SIZE(array), array
1506
1507 set_context_reg_seq_array(cs, R_028000_DB_RENDER_CONTROL, SET(DbRenderControlGfx9));
1508 set_context_reg_seq_array(cs, R_0281E8_COHER_DEST_BASE_HI_0, SET(CoherDestBaseHi0Gfx9));
1509 set_context_reg_seq_array(cs, R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX,
1510 SET(VgtMultiPrimIbResetIndxGfx9));
1511 set_context_reg_seq_array(cs, R_028414_CB_BLEND_RED, SET(CbBlendRedGfx9));
1512 set_context_reg_seq_array(cs, R_028644_SPI_PS_INPUT_CNTL_0, SET(SpiPsInputCntl0Gfx9));
1513 set_context_reg_seq_array(cs, R_028754_SX_PS_DOWNCONVERT, SET(SxPsDownconvertGfx9));
1514 set_context_reg_seq_array(cs, R_028800_DB_DEPTH_CONTROL, SET(DbDepthControlGfx9));
1515 set_context_reg_seq_array(cs, R_02882C_PA_SU_PRIM_FILTER_CNTL, SET(PaSuPrimFilterCntlGfx9));
1516 set_context_reg_seq_array(cs, R_028A00_PA_SU_POINT_SIZE, SET(PaSuPointSizeGfx9));
1517 set_context_reg_seq_array(cs, R_028A18_VGT_HOS_MAX_TESS_LEVEL, SET(VgtHosMaxTessLevelGfx9));
1518 set_context_reg_seq_array(cs, R_028A40_VGT_GS_MODE, SET(VgtGsModeGfx9));
1519 set_context_reg_seq_array(cs, R_028A84_VGT_PRIMITIVEID_EN, SET(VgtPrimitiveidEnGfx9));
1520 set_context_reg_seq_array(cs, R_028A8C_VGT_PRIMITIVEID_RESET, SET(VgtPrimitiveidResetGfx9));
1521 set_context_reg_seq_array(cs, R_028A94_VGT_GS_MAX_PRIMS_PER_SUBGROUP,
1522 SET(VgtGsMaxPrimsPerSubgroupGfx9));
1523 set_context_reg_seq_array(cs, R_028AE0_VGT_STRMOUT_BUFFER_SIZE_1,
1524 SET(VgtStrmoutBufferSize1Gfx9));
1525 set_context_reg_seq_array(cs, R_028AF0_VGT_STRMOUT_BUFFER_SIZE_2,
1526 SET(VgtStrmoutBufferSize2Gfx9));
1527 set_context_reg_seq_array(cs, R_028B00_VGT_STRMOUT_BUFFER_SIZE_3,
1528 SET(VgtStrmoutBufferSize3Gfx9));
1529 set_context_reg_seq_array(cs, R_028B28_VGT_STRMOUT_DRAW_OPAQUE_OFFSET,
1530 SET(VgtStrmoutDrawOpaqueOffsetGfx9));
1531 set_context_reg_seq_array(cs, R_028B38_VGT_GS_MAX_VERT_OUT, SET(VgtGsMaxVertOutGfx9));
1532 set_context_reg_seq_array(cs, R_028BD4_PA_SC_CENTROID_PRIORITY_0,
1533 SET(PaScCentroidPriority0Gfx9));
1534 }
1535
1536 /**
1537 * Emulate CLEAR_STATE. Additionally, initialize num_reg_pairs registers specified
1538 * via reg_offsets and reg_values.
1539 */
gfx10_emulate_clear_state(struct radeon_cmdbuf * cs,unsigned num_reg_pairs,unsigned * reg_offsets,uint32_t * reg_values,set_context_reg_seq_array_fn set_context_reg_seq_array)1540 static void gfx10_emulate_clear_state(struct radeon_cmdbuf *cs, unsigned num_reg_pairs,
1541 unsigned *reg_offsets, uint32_t *reg_values,
1542 set_context_reg_seq_array_fn set_context_reg_seq_array)
1543 {
1544 static const uint32_t DbRenderControlNv10[] = {
1545 0x0, // DB_RENDER_CONTROL
1546 0x0, // DB_COUNT_CONTROL
1547 0x0, // DB_DEPTH_VIEW
1548 0x0, // DB_RENDER_OVERRIDE
1549 0x0, // DB_RENDER_OVERRIDE2
1550 0x0, // DB_HTILE_DATA_BASE
1551 0x0, //
1552 0x0, // DB_DEPTH_SIZE_XY
1553 0x0, // DB_DEPTH_BOUNDS_MIN
1554 0x0, // DB_DEPTH_BOUNDS_MAX
1555 0x0, // DB_STENCIL_CLEAR
1556 0x0, // DB_DEPTH_CLEAR
1557 0x0, // PA_SC_SCREEN_SCISSOR_TL
1558 0x40004000, // PA_SC_SCREEN_SCISSOR_BR
1559 0x0, // DB_DFSM_CONTROL
1560 0x0, // DB_RESERVED_REG_2
1561 0x0, // DB_Z_INFO
1562 0x0, // DB_STENCIL_INFO
1563 0x0, // DB_Z_READ_BASE
1564 0x0, // DB_STENCIL_READ_BASE
1565 0x0, // DB_Z_WRITE_BASE
1566 0x0, // DB_STENCIL_WRITE_BASE
1567 0x0, //
1568 0x0, //
1569 0x0, //
1570 0x0, //
1571 0x0, // DB_Z_READ_BASE_HI
1572 0x0, // DB_STENCIL_READ_BASE_HI
1573 0x0, // DB_Z_WRITE_BASE_HI
1574 0x0, // DB_STENCIL_WRITE_BASE_HI
1575 0x0, // DB_HTILE_DATA_BASE_HI
1576 0x0, // DB_RMI_L2_CACHE_CONTROL
1577 0x0, // TA_BC_BASE_ADDR
1578 0x0 // TA_BC_BASE_ADDR_HI
1579 };
1580 static const uint32_t CoherDestBaseHi0Nv10[] = {
1581 0x0, // COHER_DEST_BASE_HI_0
1582 0x0, // COHER_DEST_BASE_HI_1
1583 0x0, // COHER_DEST_BASE_HI_2
1584 0x0, // COHER_DEST_BASE_HI_3
1585 0x0, // COHER_DEST_BASE_2
1586 0x0, // COHER_DEST_BASE_3
1587 0x0, // PA_SC_WINDOW_OFFSET
1588 0x80000000, // PA_SC_WINDOW_SCISSOR_TL
1589 0x40004000, // PA_SC_WINDOW_SCISSOR_BR
1590 0xffff, // PA_SC_CLIPRECT_RULE
1591 0x0, // PA_SC_CLIPRECT_0_TL
1592 0x40004000, // PA_SC_CLIPRECT_0_BR
1593 0x0, // PA_SC_CLIPRECT_1_TL
1594 0x40004000, // PA_SC_CLIPRECT_1_BR
1595 0x0, // PA_SC_CLIPRECT_2_TL
1596 0x40004000, // PA_SC_CLIPRECT_2_BR
1597 0x0, // PA_SC_CLIPRECT_3_TL
1598 0x40004000, // PA_SC_CLIPRECT_3_BR
1599 0xaa99aaaa, // PA_SC_EDGERULE
1600 0x0, // PA_SU_HARDWARE_SCREEN_OFFSET
1601 0xffffffff, // CB_TARGET_MASK
1602 0xffffffff, // CB_SHADER_MASK
1603 0x80000000, // PA_SC_GENERIC_SCISSOR_TL
1604 0x40004000, // PA_SC_GENERIC_SCISSOR_BR
1605 0x0, // COHER_DEST_BASE_0
1606 0x0, // COHER_DEST_BASE_1
1607 0x80000000, // PA_SC_VPORT_SCISSOR_0_TL
1608 0x40004000, // PA_SC_VPORT_SCISSOR_0_BR
1609 0x80000000, // PA_SC_VPORT_SCISSOR_1_TL
1610 0x40004000, // PA_SC_VPORT_SCISSOR_1_BR
1611 0x80000000, // PA_SC_VPORT_SCISSOR_2_TL
1612 0x40004000, // PA_SC_VPORT_SCISSOR_2_BR
1613 0x80000000, // PA_SC_VPORT_SCISSOR_3_TL
1614 0x40004000, // PA_SC_VPORT_SCISSOR_3_BR
1615 0x80000000, // PA_SC_VPORT_SCISSOR_4_TL
1616 0x40004000, // PA_SC_VPORT_SCISSOR_4_BR
1617 0x80000000, // PA_SC_VPORT_SCISSOR_5_TL
1618 0x40004000, // PA_SC_VPORT_SCISSOR_5_BR
1619 0x80000000, // PA_SC_VPORT_SCISSOR_6_TL
1620 0x40004000, // PA_SC_VPORT_SCISSOR_6_BR
1621 0x80000000, // PA_SC_VPORT_SCISSOR_7_TL
1622 0x40004000, // PA_SC_VPORT_SCISSOR_7_BR
1623 0x80000000, // PA_SC_VPORT_SCISSOR_8_TL
1624 0x40004000, // PA_SC_VPORT_SCISSOR_8_BR
1625 0x80000000, // PA_SC_VPORT_SCISSOR_9_TL
1626 0x40004000, // PA_SC_VPORT_SCISSOR_9_BR
1627 0x80000000, // PA_SC_VPORT_SCISSOR_10_TL
1628 0x40004000, // PA_SC_VPORT_SCISSOR_10_BR
1629 0x80000000, // PA_SC_VPORT_SCISSOR_11_TL
1630 0x40004000, // PA_SC_VPORT_SCISSOR_11_BR
1631 0x80000000, // PA_SC_VPORT_SCISSOR_12_TL
1632 0x40004000, // PA_SC_VPORT_SCISSOR_12_BR
1633 0x80000000, // PA_SC_VPORT_SCISSOR_13_TL
1634 0x40004000, // PA_SC_VPORT_SCISSOR_13_BR
1635 0x80000000, // PA_SC_VPORT_SCISSOR_14_TL
1636 0x40004000, // PA_SC_VPORT_SCISSOR_14_BR
1637 0x80000000, // PA_SC_VPORT_SCISSOR_15_TL
1638 0x40004000, // PA_SC_VPORT_SCISSOR_15_BR
1639 0x0, // PA_SC_VPORT_ZMIN_0
1640 0x3f800000, // PA_SC_VPORT_ZMAX_0
1641 0x0, // PA_SC_VPORT_ZMIN_1
1642 0x3f800000, // PA_SC_VPORT_ZMAX_1
1643 0x0, // PA_SC_VPORT_ZMIN_2
1644 0x3f800000, // PA_SC_VPORT_ZMAX_2
1645 0x0, // PA_SC_VPORT_ZMIN_3
1646 0x3f800000, // PA_SC_VPORT_ZMAX_3
1647 0x0, // PA_SC_VPORT_ZMIN_4
1648 0x3f800000, // PA_SC_VPORT_ZMAX_4
1649 0x0, // PA_SC_VPORT_ZMIN_5
1650 0x3f800000, // PA_SC_VPORT_ZMAX_5
1651 0x0, // PA_SC_VPORT_ZMIN_6
1652 0x3f800000, // PA_SC_VPORT_ZMAX_6
1653 0x0, // PA_SC_VPORT_ZMIN_7
1654 0x3f800000, // PA_SC_VPORT_ZMAX_7
1655 0x0, // PA_SC_VPORT_ZMIN_8
1656 0x3f800000, // PA_SC_VPORT_ZMAX_8
1657 0x0, // PA_SC_VPORT_ZMIN_9
1658 0x3f800000, // PA_SC_VPORT_ZMAX_9
1659 0x0, // PA_SC_VPORT_ZMIN_10
1660 0x3f800000, // PA_SC_VPORT_ZMAX_10
1661 0x0, // PA_SC_VPORT_ZMIN_11
1662 0x3f800000, // PA_SC_VPORT_ZMAX_11
1663 0x0, // PA_SC_VPORT_ZMIN_12
1664 0x3f800000, // PA_SC_VPORT_ZMAX_12
1665 0x0, // PA_SC_VPORT_ZMIN_13
1666 0x3f800000, // PA_SC_VPORT_ZMAX_13
1667 0x0, // PA_SC_VPORT_ZMIN_14
1668 0x3f800000, // PA_SC_VPORT_ZMAX_14
1669 0x0, // PA_SC_VPORT_ZMIN_15
1670 0x3f800000, // PA_SC_VPORT_ZMAX_15
1671 0x0, // PA_SC_RASTER_CONFIG
1672 0x0, // PA_SC_RASTER_CONFIG_1
1673 0x0, //
1674 0x0 // PA_SC_TILE_STEERING_OVERRIDE
1675 };
1676 static const uint32_t VgtMultiPrimIbResetIndxNv10[] = {
1677 0x0, // VGT_MULTI_PRIM_IB_RESET_INDX
1678 0x0, // CB_RMI_GL2_CACHE_CONTROL
1679 0x0, // CB_BLEND_RED
1680 0x0, // CB_BLEND_GREEN
1681 0x0, // CB_BLEND_BLUE
1682 0x0, // CB_BLEND_ALPHA
1683 0x0, // CB_DCC_CONTROL
1684 0x0, // CB_COVERAGE_OUT_CONTROL
1685 0x0, // DB_STENCIL_CONTROL
1686 0x1000000, // DB_STENCILREFMASK
1687 0x1000000, // DB_STENCILREFMASK_BF
1688 0x0, //
1689 0x0, // PA_CL_VPORT_XSCALE
1690 0x0, // PA_CL_VPORT_XOFFSET
1691 0x0, // PA_CL_VPORT_YSCALE
1692 0x0, // PA_CL_VPORT_YOFFSET
1693 0x0, // PA_CL_VPORT_ZSCALE
1694 0x0, // PA_CL_VPORT_ZOFFSET
1695 0x0, // PA_CL_VPORT_XSCALE_1
1696 0x0, // PA_CL_VPORT_XOFFSET_1
1697 0x0, // PA_CL_VPORT_YSCALE_1
1698 0x0, // PA_CL_VPORT_YOFFSET_1
1699 0x0, // PA_CL_VPORT_ZSCALE_1
1700 0x0, // PA_CL_VPORT_ZOFFSET_1
1701 0x0, // PA_CL_VPORT_XSCALE_2
1702 0x0, // PA_CL_VPORT_XOFFSET_2
1703 0x0, // PA_CL_VPORT_YSCALE_2
1704 0x0, // PA_CL_VPORT_YOFFSET_2
1705 0x0, // PA_CL_VPORT_ZSCALE_2
1706 0x0, // PA_CL_VPORT_ZOFFSET_2
1707 0x0, // PA_CL_VPORT_XSCALE_3
1708 0x0, // PA_CL_VPORT_XOFFSET_3
1709 0x0, // PA_CL_VPORT_YSCALE_3
1710 0x0, // PA_CL_VPORT_YOFFSET_3
1711 0x0, // PA_CL_VPORT_ZSCALE_3
1712 0x0, // PA_CL_VPORT_ZOFFSET_3
1713 0x0, // PA_CL_VPORT_XSCALE_4
1714 0x0, // PA_CL_VPORT_XOFFSET_4
1715 0x0, // PA_CL_VPORT_YSCALE_4
1716 0x0, // PA_CL_VPORT_YOFFSET_4
1717 0x0, // PA_CL_VPORT_ZSCALE_4
1718 0x0, // PA_CL_VPORT_ZOFFSET_4
1719 0x0, // PA_CL_VPORT_XSCALE_5
1720 0x0, // PA_CL_VPORT_XOFFSET_5
1721 0x0, // PA_CL_VPORT_YSCALE_5
1722 0x0, // PA_CL_VPORT_YOFFSET_5
1723 0x0, // PA_CL_VPORT_ZSCALE_5
1724 0x0, // PA_CL_VPORT_ZOFFSET_5
1725 0x0, // PA_CL_VPORT_XSCALE_6
1726 0x0, // PA_CL_VPORT_XOFFSET_6
1727 0x0, // PA_CL_VPORT_YSCALE_6
1728 0x0, // PA_CL_VPORT_YOFFSET_6
1729 0x0, // PA_CL_VPORT_ZSCALE_6
1730 0x0, // PA_CL_VPORT_ZOFFSET_6
1731 0x0, // PA_CL_VPORT_XSCALE_7
1732 0x0, // PA_CL_VPORT_XOFFSET_7
1733 0x0, // PA_CL_VPORT_YSCALE_7
1734 0x0, // PA_CL_VPORT_YOFFSET_7
1735 0x0, // PA_CL_VPORT_ZSCALE_7
1736 0x0, // PA_CL_VPORT_ZOFFSET_7
1737 0x0, // PA_CL_VPORT_XSCALE_8
1738 0x0, // PA_CL_VPORT_XOFFSET_8
1739 0x0, // PA_CL_VPORT_YSCALE_8
1740 0x0, // PA_CL_VPORT_YOFFSET_8
1741 0x0, // PA_CL_VPORT_ZSCALE_8
1742 0x0, // PA_CL_VPORT_ZOFFSET_8
1743 0x0, // PA_CL_VPORT_XSCALE_9
1744 0x0, // PA_CL_VPORT_XOFFSET_9
1745 0x0, // PA_CL_VPORT_YSCALE_9
1746 0x0, // PA_CL_VPORT_YOFFSET_9
1747 0x0, // PA_CL_VPORT_ZSCALE_9
1748 0x0, // PA_CL_VPORT_ZOFFSET_9
1749 0x0, // PA_CL_VPORT_XSCALE_10
1750 0x0, // PA_CL_VPORT_XOFFSET_10
1751 0x0, // PA_CL_VPORT_YSCALE_10
1752 0x0, // PA_CL_VPORT_YOFFSET_10
1753 0x0, // PA_CL_VPORT_ZSCALE_10
1754 0x0, // PA_CL_VPORT_ZOFFSET_10
1755 0x0, // PA_CL_VPORT_XSCALE_11
1756 0x0, // PA_CL_VPORT_XOFFSET_11
1757 0x0, // PA_CL_VPORT_YSCALE_11
1758 0x0, // PA_CL_VPORT_YOFFSET_11
1759 0x0, // PA_CL_VPORT_ZSCALE_11
1760 0x0, // PA_CL_VPORT_ZOFFSET_11
1761 0x0, // PA_CL_VPORT_XSCALE_12
1762 0x0, // PA_CL_VPORT_XOFFSET_12
1763 0x0, // PA_CL_VPORT_YSCALE_12
1764 0x0, // PA_CL_VPORT_YOFFSET_12
1765 0x0, // PA_CL_VPORT_ZSCALE_12
1766 0x0, // PA_CL_VPORT_ZOFFSET_12
1767 0x0, // PA_CL_VPORT_XSCALE_13
1768 0x0, // PA_CL_VPORT_XOFFSET_13
1769 0x0, // PA_CL_VPORT_YSCALE_13
1770 0x0, // PA_CL_VPORT_YOFFSET_13
1771 0x0, // PA_CL_VPORT_ZSCALE_13
1772 0x0, // PA_CL_VPORT_ZOFFSET_13
1773 0x0, // PA_CL_VPORT_XSCALE_14
1774 0x0, // PA_CL_VPORT_XOFFSET_14
1775 0x0, // PA_CL_VPORT_YSCALE_14
1776 0x0, // PA_CL_VPORT_YOFFSET_14
1777 0x0, // PA_CL_VPORT_ZSCALE_14
1778 0x0, // PA_CL_VPORT_ZOFFSET_14
1779 0x0, // PA_CL_VPORT_XSCALE_15
1780 0x0, // PA_CL_VPORT_XOFFSET_15
1781 0x0, // PA_CL_VPORT_YSCALE_15
1782 0x0, // PA_CL_VPORT_YOFFSET_15
1783 0x0, // PA_CL_VPORT_ZSCALE_15
1784 0x0, // PA_CL_VPORT_ZOFFSET_15
1785 0x0, // PA_CL_UCP_0_X
1786 0x0, // PA_CL_UCP_0_Y
1787 0x0, // PA_CL_UCP_0_Z
1788 0x0, // PA_CL_UCP_0_W
1789 0x0, // PA_CL_UCP_1_X
1790 0x0, // PA_CL_UCP_1_Y
1791 0x0, // PA_CL_UCP_1_Z
1792 0x0, // PA_CL_UCP_1_W
1793 0x0, // PA_CL_UCP_2_X
1794 0x0, // PA_CL_UCP_2_Y
1795 0x0, // PA_CL_UCP_2_Z
1796 0x0, // PA_CL_UCP_2_W
1797 0x0, // PA_CL_UCP_3_X
1798 0x0, // PA_CL_UCP_3_Y
1799 0x0, // PA_CL_UCP_3_Z
1800 0x0, // PA_CL_UCP_3_W
1801 0x0, // PA_CL_UCP_4_X
1802 0x0, // PA_CL_UCP_4_Y
1803 0x0, // PA_CL_UCP_4_Z
1804 0x0, // PA_CL_UCP_4_W
1805 0x0, // PA_CL_UCP_5_X
1806 0x0, // PA_CL_UCP_5_Y
1807 0x0, // PA_CL_UCP_5_Z
1808 0x0 // PA_CL_UCP_5_W
1809 };
1810 static const uint32_t SpiPsInputCntl0Nv10[] = {
1811 0x0, // SPI_PS_INPUT_CNTL_0
1812 0x0, // SPI_PS_INPUT_CNTL_1
1813 0x0, // SPI_PS_INPUT_CNTL_2
1814 0x0, // SPI_PS_INPUT_CNTL_3
1815 0x0, // SPI_PS_INPUT_CNTL_4
1816 0x0, // SPI_PS_INPUT_CNTL_5
1817 0x0, // SPI_PS_INPUT_CNTL_6
1818 0x0, // SPI_PS_INPUT_CNTL_7
1819 0x0, // SPI_PS_INPUT_CNTL_8
1820 0x0, // SPI_PS_INPUT_CNTL_9
1821 0x0, // SPI_PS_INPUT_CNTL_10
1822 0x0, // SPI_PS_INPUT_CNTL_11
1823 0x0, // SPI_PS_INPUT_CNTL_12
1824 0x0, // SPI_PS_INPUT_CNTL_13
1825 0x0, // SPI_PS_INPUT_CNTL_14
1826 0x0, // SPI_PS_INPUT_CNTL_15
1827 0x0, // SPI_PS_INPUT_CNTL_16
1828 0x0, // SPI_PS_INPUT_CNTL_17
1829 0x0, // SPI_PS_INPUT_CNTL_18
1830 0x0, // SPI_PS_INPUT_CNTL_19
1831 0x0, // SPI_PS_INPUT_CNTL_20
1832 0x0, // SPI_PS_INPUT_CNTL_21
1833 0x0, // SPI_PS_INPUT_CNTL_22
1834 0x0, // SPI_PS_INPUT_CNTL_23
1835 0x0, // SPI_PS_INPUT_CNTL_24
1836 0x0, // SPI_PS_INPUT_CNTL_25
1837 0x0, // SPI_PS_INPUT_CNTL_26
1838 0x0, // SPI_PS_INPUT_CNTL_27
1839 0x0, // SPI_PS_INPUT_CNTL_28
1840 0x0, // SPI_PS_INPUT_CNTL_29
1841 0x0, // SPI_PS_INPUT_CNTL_30
1842 0x0, // SPI_PS_INPUT_CNTL_31
1843 0x0, // SPI_VS_OUT_CONFIG
1844 0x0, //
1845 0x0, // SPI_PS_INPUT_ENA
1846 0x0, // SPI_PS_INPUT_ADDR
1847 0x0, // SPI_INTERP_CONTROL_0
1848 0x2, // SPI_PS_IN_CONTROL
1849 0x0, //
1850 0x0, // SPI_BARYC_CNTL
1851 0x0, //
1852 0x0, // SPI_TMPRING_SIZE
1853 0x0, //
1854 0x0, //
1855 0x0, //
1856 0x0, //
1857 0x0, //
1858 0x0, //
1859 0x0, //
1860 0x0, // SPI_SHADER_IDX_FORMAT
1861 0x0, // SPI_SHADER_POS_FORMAT
1862 0x0, // SPI_SHADER_Z_FORMAT
1863 0x0 // SPI_SHADER_COL_FORMAT
1864 };
1865 static const uint32_t SxPsDownconvertNv10[] = {
1866 0x0, // SX_PS_DOWNCONVERT
1867 0x0, // SX_BLEND_OPT_EPSILON
1868 0x0, // SX_BLEND_OPT_CONTROL
1869 0x0, // SX_MRT0_BLEND_OPT
1870 0x0, // SX_MRT1_BLEND_OPT
1871 0x0, // SX_MRT2_BLEND_OPT
1872 0x0, // SX_MRT3_BLEND_OPT
1873 0x0, // SX_MRT4_BLEND_OPT
1874 0x0, // SX_MRT5_BLEND_OPT
1875 0x0, // SX_MRT6_BLEND_OPT
1876 0x0, // SX_MRT7_BLEND_OPT
1877 0x0, // CB_BLEND0_CONTROL
1878 0x0, // CB_BLEND1_CONTROL
1879 0x0, // CB_BLEND2_CONTROL
1880 0x0, // CB_BLEND3_CONTROL
1881 0x0, // CB_BLEND4_CONTROL
1882 0x0, // CB_BLEND5_CONTROL
1883 0x0, // CB_BLEND6_CONTROL
1884 0x0 // CB_BLEND7_CONTROL
1885 };
1886 static const uint32_t GeMaxOutputPerSubgroupNv10[] = {
1887 0x0, // GE_MAX_OUTPUT_PER_SUBGROUP
1888 0x0, // DB_DEPTH_CONTROL
1889 0x0, // DB_EQAA
1890 0x0, // CB_COLOR_CONTROL
1891 0x0, // DB_SHADER_CONTROL
1892 0x90000, // PA_CL_CLIP_CNTL
1893 0x4, // PA_SU_SC_MODE_CNTL
1894 0x0, // PA_CL_VTE_CNTL
1895 0x0, // PA_CL_VS_OUT_CNTL
1896 0x0 // PA_CL_NANINF_CNTL
1897 };
1898 static const uint32_t PaSuPrimFilterCntlNv10[] = {
1899 0x0, // PA_SU_PRIM_FILTER_CNTL
1900 0x0, // PA_SU_SMALL_PRIM_FILTER_CNTL
1901 0x0, // PA_CL_OBJPRIM_ID_CNTL
1902 0x0, // PA_CL_NGG_CNTL
1903 0x0, // PA_SU_OVER_RASTERIZATION_CNTL
1904 0x0, // PA_STEREO_CNTL
1905 0x0 // PA_STATE_STEREO_X
1906 };
1907 static const uint32_t PaSuPointSizeNv10[] = {
1908 0x0, // PA_SU_POINT_SIZE
1909 0x0, // PA_SU_POINT_MINMAX
1910 0x0, // PA_SU_LINE_CNTL
1911 0x0 // PA_SC_LINE_STIPPLE
1912 };
1913 static const uint32_t VgtHosMaxTessLevelNv10[] = {
1914 0x0, // VGT_HOS_MAX_TESS_LEVEL
1915 0x0 // VGT_HOS_MIN_TESS_LEVEL
1916 };
1917 static const uint32_t VgtGsModeNv10[] = {
1918 0x0, // VGT_GS_MODE
1919 0x0, // VGT_GS_ONCHIP_CNTL
1920 0x0, // PA_SC_MODE_CNTL_0
1921 0x0, // PA_SC_MODE_CNTL_1
1922 0x0, // VGT_ENHANCE
1923 0x100, // VGT_GS_PER_ES
1924 0x80, // VGT_ES_PER_GS
1925 0x2, // VGT_GS_PER_VS
1926 0x0, // VGT_GSVS_RING_OFFSET_1
1927 0x0, // VGT_GSVS_RING_OFFSET_2
1928 0x0, // VGT_GSVS_RING_OFFSET_3
1929 0x0 // VGT_GS_OUT_PRIM_TYPE
1930 };
1931 static const uint32_t VgtPrimitiveidEnNv10[] = {
1932 0x0 // VGT_PRIMITIVEID_EN
1933 };
1934 static const uint32_t VgtPrimitiveidResetNv10[] = {
1935 0x0 // VGT_PRIMITIVEID_RESET
1936 };
1937 static const uint32_t VgtDrawPayloadCntlNv10[] = {
1938 0x0, // VGT_DRAW_PAYLOAD_CNTL
1939 0x0, //
1940 0x0, // VGT_INSTANCE_STEP_RATE_0
1941 0x0, // VGT_INSTANCE_STEP_RATE_1
1942 0x0, // IA_MULTI_VGT_PARAM
1943 0x0, // VGT_ESGS_RING_ITEMSIZE
1944 0x0, // VGT_GSVS_RING_ITEMSIZE
1945 0x0, // VGT_REUSE_OFF
1946 0x0, // VGT_VTX_CNT_EN
1947 0x0, // DB_HTILE_SURFACE
1948 0x0, // DB_SRESULTS_COMPARE_STATE0
1949 0x0, // DB_SRESULTS_COMPARE_STATE1
1950 0x0, // DB_PRELOAD_CONTROL
1951 0x0, //
1952 0x0, // VGT_STRMOUT_BUFFER_SIZE_0
1953 0x0, // VGT_STRMOUT_VTX_STRIDE_0
1954 0x0, //
1955 0x0, // VGT_STRMOUT_BUFFER_OFFSET_0
1956 0x0, // VGT_STRMOUT_BUFFER_SIZE_1
1957 0x0, // VGT_STRMOUT_VTX_STRIDE_1
1958 0x0, //
1959 0x0, // VGT_STRMOUT_BUFFER_OFFSET_1
1960 0x0, // VGT_STRMOUT_BUFFER_SIZE_2
1961 0x0, // VGT_STRMOUT_VTX_STRIDE_2
1962 0x0, //
1963 0x0, // VGT_STRMOUT_BUFFER_OFFSET_2
1964 0x0, // VGT_STRMOUT_BUFFER_SIZE_3
1965 0x0, // VGT_STRMOUT_VTX_STRIDE_3
1966 0x0, //
1967 0x0, // VGT_STRMOUT_BUFFER_OFFSET_3
1968 0x0, //
1969 0x0, //
1970 0x0, //
1971 0x0, //
1972 0x0, //
1973 0x0, //
1974 0x0, // VGT_STRMOUT_DRAW_OPAQUE_OFFSET
1975 0x0, // VGT_STRMOUT_DRAW_OPAQUE_BUFFER_FILLED_SIZE
1976 0x0, // VGT_STRMOUT_DRAW_OPAQUE_VERTEX_STRIDE
1977 0x0, //
1978 0x0, // VGT_GS_MAX_VERT_OUT
1979 0x0, //
1980 0x0, //
1981 0x0, //
1982 0x0, //
1983 0x0, // GE_NGG_SUBGRP_CNTL
1984 0x0, // VGT_TESS_DISTRIBUTION
1985 0x0, // VGT_SHADER_STAGES_EN
1986 0x0, // VGT_LS_HS_CONFIG
1987 0x0, // VGT_GS_VERT_ITEMSIZE
1988 0x0, // VGT_GS_VERT_ITEMSIZE_1
1989 0x0, // VGT_GS_VERT_ITEMSIZE_2
1990 0x0, // VGT_GS_VERT_ITEMSIZE_3
1991 0x0, // VGT_TF_PARAM
1992 0x0, // DB_ALPHA_TO_MASK
1993 0x0, // VGT_DISPATCH_DRAW_INDEX
1994 0x0, // PA_SU_POLY_OFFSET_DB_FMT_CNTL
1995 0x0, // PA_SU_POLY_OFFSET_CLAMP
1996 0x0, // PA_SU_POLY_OFFSET_FRONT_SCALE
1997 0x0, // PA_SU_POLY_OFFSET_FRONT_OFFSET
1998 0x0, // PA_SU_POLY_OFFSET_BACK_SCALE
1999 0x0, // PA_SU_POLY_OFFSET_BACK_OFFSET
2000 0x0, // VGT_GS_INSTANCE_CNT
2001 0x0, // VGT_STRMOUT_CONFIG
2002 0x0 // VGT_STRMOUT_BUFFER_CONFIG
2003 };
2004 static const uint32_t PaScCentroidPriority0Nv10[] = {
2005 0x0, // PA_SC_CENTROID_PRIORITY_0
2006 0x0, // PA_SC_CENTROID_PRIORITY_1
2007 0x1000, // PA_SC_LINE_CNTL
2008 0x0, // PA_SC_AA_CONFIG
2009 0x5, // PA_SU_VTX_CNTL
2010 0x3f800000, // PA_CL_GB_VERT_CLIP_ADJ
2011 0x3f800000, // PA_CL_GB_VERT_DISC_ADJ
2012 0x3f800000, // PA_CL_GB_HORZ_CLIP_ADJ
2013 0x3f800000, // PA_CL_GB_HORZ_DISC_ADJ
2014 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_0
2015 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_1
2016 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_2
2017 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_3
2018 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_0
2019 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_1
2020 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_2
2021 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_3
2022 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_0
2023 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_1
2024 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_2
2025 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_3
2026 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_0
2027 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_1
2028 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_2
2029 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_3
2030 0xffffffff, // PA_SC_AA_MASK_X0Y0_X1Y0
2031 0xffffffff, // PA_SC_AA_MASK_X0Y1_X1Y1
2032 0x0, // PA_SC_SHADER_CONTROL
2033 0x3, // PA_SC_BINNER_CNTL_0
2034 0x0, // PA_SC_BINNER_CNTL_1
2035 0x100000, // PA_SC_CONSERVATIVE_RASTERIZATION_CNTL
2036 0x0, // PA_SC_NGG_MODE_CNTL
2037 0x0, //
2038 0x1e, // VGT_VERTEX_REUSE_BLOCK_CNTL
2039 0x20, // VGT_OUT_DEALLOC_CNTL
2040 0x0, // CB_COLOR0_BASE
2041 0x0, //
2042 0x0, //
2043 0x0, // CB_COLOR0_VIEW
2044 0x0, // CB_COLOR0_INFO
2045 0x0, // CB_COLOR0_ATTRIB
2046 0x0, // CB_COLOR0_DCC_CONTROL
2047 0x0, // CB_COLOR0_CMASK
2048 0x0, //
2049 0x0, // CB_COLOR0_FMASK
2050 0x0, //
2051 0x0, // CB_COLOR0_CLEAR_WORD0
2052 0x0, // CB_COLOR0_CLEAR_WORD1
2053 0x0, // CB_COLOR0_DCC_BASE
2054 0x0, //
2055 0x0, // CB_COLOR1_BASE
2056 0x0, //
2057 0x0, //
2058 0x0, // CB_COLOR1_VIEW
2059 0x0, // CB_COLOR1_INFO
2060 0x0, // CB_COLOR1_ATTRIB
2061 0x0, // CB_COLOR1_DCC_CONTROL
2062 0x0, // CB_COLOR1_CMASK
2063 0x0, //
2064 0x0, // CB_COLOR1_FMASK
2065 0x0, //
2066 0x0, // CB_COLOR1_CLEAR_WORD0
2067 0x0, // CB_COLOR1_CLEAR_WORD1
2068 0x0, // CB_COLOR1_DCC_BASE
2069 0x0, //
2070 0x0, // CB_COLOR2_BASE
2071 0x0, //
2072 0x0, //
2073 0x0, // CB_COLOR2_VIEW
2074 0x0, // CB_COLOR2_INFO
2075 0x0, // CB_COLOR2_ATTRIB
2076 0x0, // CB_COLOR2_DCC_CONTROL
2077 0x0, // CB_COLOR2_CMASK
2078 0x0, //
2079 0x0, // CB_COLOR2_FMASK
2080 0x0, //
2081 0x0, // CB_COLOR2_CLEAR_WORD0
2082 0x0, // CB_COLOR2_CLEAR_WORD1
2083 0x0, // CB_COLOR2_DCC_BASE
2084 0x0, //
2085 0x0, // CB_COLOR3_BASE
2086 0x0, //
2087 0x0, //
2088 0x0, // CB_COLOR3_VIEW
2089 0x0, // CB_COLOR3_INFO
2090 0x0, // CB_COLOR3_ATTRIB
2091 0x0, // CB_COLOR3_DCC_CONTROL
2092 0x0, // CB_COLOR3_CMASK
2093 0x0, //
2094 0x0, // CB_COLOR3_FMASK
2095 0x0, //
2096 0x0, // CB_COLOR3_CLEAR_WORD0
2097 0x0, // CB_COLOR3_CLEAR_WORD1
2098 0x0, // CB_COLOR3_DCC_BASE
2099 0x0, //
2100 0x0, // CB_COLOR4_BASE
2101 0x0, //
2102 0x0, //
2103 0x0, // CB_COLOR4_VIEW
2104 0x0, // CB_COLOR4_INFO
2105 0x0, // CB_COLOR4_ATTRIB
2106 0x0, // CB_COLOR4_DCC_CONTROL
2107 0x0, // CB_COLOR4_CMASK
2108 0x0, //
2109 0x0, // CB_COLOR4_FMASK
2110 0x0, //
2111 0x0, // CB_COLOR4_CLEAR_WORD0
2112 0x0, // CB_COLOR4_CLEAR_WORD1
2113 0x0, // CB_COLOR4_DCC_BASE
2114 0x0, //
2115 0x0, // CB_COLOR5_BASE
2116 0x0, //
2117 0x0, //
2118 0x0, // CB_COLOR5_VIEW
2119 0x0, // CB_COLOR5_INFO
2120 0x0, // CB_COLOR5_ATTRIB
2121 0x0, // CB_COLOR5_DCC_CONTROL
2122 0x0, // CB_COLOR5_CMASK
2123 0x0, //
2124 0x0, // CB_COLOR5_FMASK
2125 0x0, //
2126 0x0, // CB_COLOR5_CLEAR_WORD0
2127 0x0, // CB_COLOR5_CLEAR_WORD1
2128 0x0, // CB_COLOR5_DCC_BASE
2129 0x0, //
2130 0x0, // CB_COLOR6_BASE
2131 0x0, //
2132 0x0, //
2133 0x0, // CB_COLOR6_VIEW
2134 0x0, // CB_COLOR6_INFO
2135 0x0, // CB_COLOR6_ATTRIB
2136 0x0, // CB_COLOR6_DCC_CONTROL
2137 0x0, // CB_COLOR6_CMASK
2138 0x0, //
2139 0x0, // CB_COLOR6_FMASK
2140 0x0, //
2141 0x0, // CB_COLOR6_CLEAR_WORD0
2142 0x0, // CB_COLOR6_CLEAR_WORD1
2143 0x0, // CB_COLOR6_DCC_BASE
2144 0x0, //
2145 0x0, // CB_COLOR7_BASE
2146 0x0, //
2147 0x0, //
2148 0x0, // CB_COLOR7_VIEW
2149 0x0, // CB_COLOR7_INFO
2150 0x0, // CB_COLOR7_ATTRIB
2151 0x0, // CB_COLOR7_DCC_CONTROL
2152 0x0, // CB_COLOR7_CMASK
2153 0x0, //
2154 0x0, // CB_COLOR7_FMASK
2155 0x0, //
2156 0x0, // CB_COLOR7_CLEAR_WORD0
2157 0x0, // CB_COLOR7_CLEAR_WORD1
2158 0x0, // CB_COLOR7_DCC_BASE
2159 0x0, //
2160 0x0, // CB_COLOR0_BASE_EXT
2161 0x0, // CB_COLOR1_BASE_EXT
2162 0x0, // CB_COLOR2_BASE_EXT
2163 0x0, // CB_COLOR3_BASE_EXT
2164 0x0, // CB_COLOR4_BASE_EXT
2165 0x0, // CB_COLOR5_BASE_EXT
2166 0x0, // CB_COLOR6_BASE_EXT
2167 0x0, // CB_COLOR7_BASE_EXT
2168 0x0, // CB_COLOR0_CMASK_BASE_EXT
2169 0x0, // CB_COLOR1_CMASK_BASE_EXT
2170 0x0, // CB_COLOR2_CMASK_BASE_EXT
2171 0x0, // CB_COLOR3_CMASK_BASE_EXT
2172 0x0, // CB_COLOR4_CMASK_BASE_EXT
2173 0x0, // CB_COLOR5_CMASK_BASE_EXT
2174 0x0, // CB_COLOR6_CMASK_BASE_EXT
2175 0x0, // CB_COLOR7_CMASK_BASE_EXT
2176 0x0, // CB_COLOR0_FMASK_BASE_EXT
2177 0x0, // CB_COLOR1_FMASK_BASE_EXT
2178 0x0, // CB_COLOR2_FMASK_BASE_EXT
2179 0x0, // CB_COLOR3_FMASK_BASE_EXT
2180 0x0, // CB_COLOR4_FMASK_BASE_EXT
2181 0x0, // CB_COLOR5_FMASK_BASE_EXT
2182 0x0, // CB_COLOR6_FMASK_BASE_EXT
2183 0x0, // CB_COLOR7_FMASK_BASE_EXT
2184 0x0, // CB_COLOR0_DCC_BASE_EXT
2185 0x0, // CB_COLOR1_DCC_BASE_EXT
2186 0x0, // CB_COLOR2_DCC_BASE_EXT
2187 0x0, // CB_COLOR3_DCC_BASE_EXT
2188 0x0, // CB_COLOR4_DCC_BASE_EXT
2189 0x0, // CB_COLOR5_DCC_BASE_EXT
2190 0x0, // CB_COLOR6_DCC_BASE_EXT
2191 0x0, // CB_COLOR7_DCC_BASE_EXT
2192 0x0, // CB_COLOR0_ATTRIB2
2193 0x0, // CB_COLOR1_ATTRIB2
2194 0x0, // CB_COLOR2_ATTRIB2
2195 0x0, // CB_COLOR3_ATTRIB2
2196 0x0, // CB_COLOR4_ATTRIB2
2197 0x0, // CB_COLOR5_ATTRIB2
2198 0x0, // CB_COLOR6_ATTRIB2
2199 0x0, // CB_COLOR7_ATTRIB2
2200 0x0, // CB_COLOR0_ATTRIB3
2201 0x0, // CB_COLOR1_ATTRIB3
2202 0x0, // CB_COLOR2_ATTRIB3
2203 0x0, // CB_COLOR3_ATTRIB3
2204 0x0, // CB_COLOR4_ATTRIB3
2205 0x0, // CB_COLOR5_ATTRIB3
2206 0x0, // CB_COLOR6_ATTRIB3
2207 0x0 // CB_COLOR7_ATTRIB3
2208 };
2209
2210 set_context_reg_seq_array(cs, R_028000_DB_RENDER_CONTROL, SET(DbRenderControlNv10));
2211 set_context_reg_seq_array(cs, R_0281E8_COHER_DEST_BASE_HI_0, SET(CoherDestBaseHi0Nv10));
2212 set_context_reg_seq_array(cs, R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX,
2213 SET(VgtMultiPrimIbResetIndxNv10));
2214 set_context_reg_seq_array(cs, R_028644_SPI_PS_INPUT_CNTL_0, SET(SpiPsInputCntl0Nv10));
2215 set_context_reg_seq_array(cs, R_028754_SX_PS_DOWNCONVERT, SET(SxPsDownconvertNv10));
2216 set_context_reg_seq_array(cs, R_0287FC_GE_MAX_OUTPUT_PER_SUBGROUP,
2217 SET(GeMaxOutputPerSubgroupNv10));
2218 set_context_reg_seq_array(cs, R_02882C_PA_SU_PRIM_FILTER_CNTL, SET(PaSuPrimFilterCntlNv10));
2219 set_context_reg_seq_array(cs, R_028A00_PA_SU_POINT_SIZE, SET(PaSuPointSizeNv10));
2220 set_context_reg_seq_array(cs, R_028A18_VGT_HOS_MAX_TESS_LEVEL, SET(VgtHosMaxTessLevelNv10));
2221 set_context_reg_seq_array(cs, R_028A40_VGT_GS_MODE, SET(VgtGsModeNv10));
2222 set_context_reg_seq_array(cs, R_028A84_VGT_PRIMITIVEID_EN, SET(VgtPrimitiveidEnNv10));
2223 set_context_reg_seq_array(cs, R_028A8C_VGT_PRIMITIVEID_RESET, SET(VgtPrimitiveidResetNv10));
2224 set_context_reg_seq_array(cs, R_028A98_VGT_DRAW_PAYLOAD_CNTL, SET(VgtDrawPayloadCntlNv10));
2225 set_context_reg_seq_array(cs, R_028BD4_PA_SC_CENTROID_PRIORITY_0,
2226 SET(PaScCentroidPriority0Nv10));
2227
2228 for (unsigned i = 0; i < num_reg_pairs; i++)
2229 set_context_reg_seq_array(cs, reg_offsets[i], 1, ®_values[i]);
2230 }
2231
2232 /**
2233 * Emulate CLEAR_STATE. Additionally, initialize num_reg_pairs registers specified
2234 * via reg_offsets and reg_values.
2235 */
gfx103_emulate_clear_state(struct radeon_cmdbuf * cs,unsigned num_reg_pairs,unsigned * reg_offsets,uint32_t * reg_values,set_context_reg_seq_array_fn set_context_reg_seq_array)2236 static void gfx103_emulate_clear_state(struct radeon_cmdbuf *cs, unsigned num_reg_pairs,
2237 unsigned *reg_offsets, uint32_t *reg_values,
2238 set_context_reg_seq_array_fn set_context_reg_seq_array)
2239 {
2240 static const uint32_t DbRenderControlGfx103[] = {
2241 0x0, // DB_RENDER_CONTROL
2242 0x0, // DB_COUNT_CONTROL
2243 0x0, // DB_DEPTH_VIEW
2244 0x0, // DB_RENDER_OVERRIDE
2245 0x0, // DB_RENDER_OVERRIDE2
2246 0x0, // DB_HTILE_DATA_BASE
2247 0x0, //
2248 0x0, // DB_DEPTH_SIZE_XY
2249 0x0, // DB_DEPTH_BOUNDS_MIN
2250 0x0, // DB_DEPTH_BOUNDS_MAX
2251 0x0, // DB_STENCIL_CLEAR
2252 0x0, // DB_DEPTH_CLEAR
2253 0x0, // PA_SC_SCREEN_SCISSOR_TL
2254 0x40004000, // PA_SC_SCREEN_SCISSOR_BR
2255 0x0, // DB_DFSM_CONTROL
2256 0x0, // DB_RESERVED_REG_2
2257 0x0, // DB_Z_INFO
2258 0x0, // DB_STENCIL_INFO
2259 0x0, // DB_Z_READ_BASE
2260 0x0, // DB_STENCIL_READ_BASE
2261 0x0, // DB_Z_WRITE_BASE
2262 0x0, // DB_STENCIL_WRITE_BASE
2263 0x0, //
2264 0x0, //
2265 0x0, //
2266 0x0, //
2267 0x0, // DB_Z_READ_BASE_HI
2268 0x0, // DB_STENCIL_READ_BASE_HI
2269 0x0, // DB_Z_WRITE_BASE_HI
2270 0x0, // DB_STENCIL_WRITE_BASE_HI
2271 0x0, // DB_HTILE_DATA_BASE_HI
2272 0x0, // DB_RMI_L2_CACHE_CONTROL
2273 0x0, // TA_BC_BASE_ADDR
2274 0x0 // TA_BC_BASE_ADDR_HI
2275 };
2276 static const uint32_t CoherDestBaseHi0Gfx103[] = {
2277 0x0, // COHER_DEST_BASE_HI_0
2278 0x0, // COHER_DEST_BASE_HI_1
2279 0x0, // COHER_DEST_BASE_HI_2
2280 0x0, // COHER_DEST_BASE_HI_3
2281 0x0, // COHER_DEST_BASE_2
2282 0x0, // COHER_DEST_BASE_3
2283 0x0, // PA_SC_WINDOW_OFFSET
2284 0x80000000, // PA_SC_WINDOW_SCISSOR_TL
2285 0x40004000, // PA_SC_WINDOW_SCISSOR_BR
2286 0xffff, // PA_SC_CLIPRECT_RULE
2287 0x0, // PA_SC_CLIPRECT_0_TL
2288 0x40004000, // PA_SC_CLIPRECT_0_BR
2289 0x0, // PA_SC_CLIPRECT_1_TL
2290 0x40004000, // PA_SC_CLIPRECT_1_BR
2291 0x0, // PA_SC_CLIPRECT_2_TL
2292 0x40004000, // PA_SC_CLIPRECT_2_BR
2293 0x0, // PA_SC_CLIPRECT_3_TL
2294 0x40004000, // PA_SC_CLIPRECT_3_BR
2295 0xaa99aaaa, // PA_SC_EDGERULE
2296 0x0, // PA_SU_HARDWARE_SCREEN_OFFSET
2297 0xffffffff, // CB_TARGET_MASK
2298 0xffffffff, // CB_SHADER_MASK
2299 0x80000000, // PA_SC_GENERIC_SCISSOR_TL
2300 0x40004000, // PA_SC_GENERIC_SCISSOR_BR
2301 0x0, // COHER_DEST_BASE_0
2302 0x0, // COHER_DEST_BASE_1
2303 0x80000000, // PA_SC_VPORT_SCISSOR_0_TL
2304 0x40004000, // PA_SC_VPORT_SCISSOR_0_BR
2305 0x80000000, // PA_SC_VPORT_SCISSOR_1_TL
2306 0x40004000, // PA_SC_VPORT_SCISSOR_1_BR
2307 0x80000000, // PA_SC_VPORT_SCISSOR_2_TL
2308 0x40004000, // PA_SC_VPORT_SCISSOR_2_BR
2309 0x80000000, // PA_SC_VPORT_SCISSOR_3_TL
2310 0x40004000, // PA_SC_VPORT_SCISSOR_3_BR
2311 0x80000000, // PA_SC_VPORT_SCISSOR_4_TL
2312 0x40004000, // PA_SC_VPORT_SCISSOR_4_BR
2313 0x80000000, // PA_SC_VPORT_SCISSOR_5_TL
2314 0x40004000, // PA_SC_VPORT_SCISSOR_5_BR
2315 0x80000000, // PA_SC_VPORT_SCISSOR_6_TL
2316 0x40004000, // PA_SC_VPORT_SCISSOR_6_BR
2317 0x80000000, // PA_SC_VPORT_SCISSOR_7_TL
2318 0x40004000, // PA_SC_VPORT_SCISSOR_7_BR
2319 0x80000000, // PA_SC_VPORT_SCISSOR_8_TL
2320 0x40004000, // PA_SC_VPORT_SCISSOR_8_BR
2321 0x80000000, // PA_SC_VPORT_SCISSOR_9_TL
2322 0x40004000, // PA_SC_VPORT_SCISSOR_9_BR
2323 0x80000000, // PA_SC_VPORT_SCISSOR_10_TL
2324 0x40004000, // PA_SC_VPORT_SCISSOR_10_BR
2325 0x80000000, // PA_SC_VPORT_SCISSOR_11_TL
2326 0x40004000, // PA_SC_VPORT_SCISSOR_11_BR
2327 0x80000000, // PA_SC_VPORT_SCISSOR_12_TL
2328 0x40004000, // PA_SC_VPORT_SCISSOR_12_BR
2329 0x80000000, // PA_SC_VPORT_SCISSOR_13_TL
2330 0x40004000, // PA_SC_VPORT_SCISSOR_13_BR
2331 0x80000000, // PA_SC_VPORT_SCISSOR_14_TL
2332 0x40004000, // PA_SC_VPORT_SCISSOR_14_BR
2333 0x80000000, // PA_SC_VPORT_SCISSOR_15_TL
2334 0x40004000, // PA_SC_VPORT_SCISSOR_15_BR
2335 0x0, // PA_SC_VPORT_ZMIN_0
2336 0x3f800000, // PA_SC_VPORT_ZMAX_0
2337 0x0, // PA_SC_VPORT_ZMIN_1
2338 0x3f800000, // PA_SC_VPORT_ZMAX_1
2339 0x0, // PA_SC_VPORT_ZMIN_2
2340 0x3f800000, // PA_SC_VPORT_ZMAX_2
2341 0x0, // PA_SC_VPORT_ZMIN_3
2342 0x3f800000, // PA_SC_VPORT_ZMAX_3
2343 0x0, // PA_SC_VPORT_ZMIN_4
2344 0x3f800000, // PA_SC_VPORT_ZMAX_4
2345 0x0, // PA_SC_VPORT_ZMIN_5
2346 0x3f800000, // PA_SC_VPORT_ZMAX_5
2347 0x0, // PA_SC_VPORT_ZMIN_6
2348 0x3f800000, // PA_SC_VPORT_ZMAX_6
2349 0x0, // PA_SC_VPORT_ZMIN_7
2350 0x3f800000, // PA_SC_VPORT_ZMAX_7
2351 0x0, // PA_SC_VPORT_ZMIN_8
2352 0x3f800000, // PA_SC_VPORT_ZMAX_8
2353 0x0, // PA_SC_VPORT_ZMIN_9
2354 0x3f800000, // PA_SC_VPORT_ZMAX_9
2355 0x0, // PA_SC_VPORT_ZMIN_10
2356 0x3f800000, // PA_SC_VPORT_ZMAX_10
2357 0x0, // PA_SC_VPORT_ZMIN_11
2358 0x3f800000, // PA_SC_VPORT_ZMAX_11
2359 0x0, // PA_SC_VPORT_ZMIN_12
2360 0x3f800000, // PA_SC_VPORT_ZMAX_12
2361 0x0, // PA_SC_VPORT_ZMIN_13
2362 0x3f800000, // PA_SC_VPORT_ZMAX_13
2363 0x0, // PA_SC_VPORT_ZMIN_14
2364 0x3f800000, // PA_SC_VPORT_ZMAX_14
2365 0x0, // PA_SC_VPORT_ZMIN_15
2366 0x3f800000, // PA_SC_VPORT_ZMAX_15
2367 0x0, // PA_SC_RASTER_CONFIG
2368 0x0, // PA_SC_RASTER_CONFIG_1
2369 0x0, //
2370 0x0 // PA_SC_TILE_STEERING_OVERRIDE
2371 };
2372 static const uint32_t VgtMultiPrimIbResetIndxGfx103[] = {
2373 0x0, // VGT_MULTI_PRIM_IB_RESET_INDX
2374 0x0, // CB_RMI_GL2_CACHE_CONTROL
2375 0x0, // CB_BLEND_RED
2376 0x0, // CB_BLEND_GREEN
2377 0x0, // CB_BLEND_BLUE
2378 0x0, // CB_BLEND_ALPHA
2379 0x0, // CB_DCC_CONTROL
2380 0x0, // CB_COVERAGE_OUT_CONTROL
2381 0x0, // DB_STENCIL_CONTROL
2382 0x1000000, // DB_STENCILREFMASK
2383 0x1000000, // DB_STENCILREFMASK_BF
2384 0x0, //
2385 0x0, // PA_CL_VPORT_XSCALE
2386 0x0, // PA_CL_VPORT_XOFFSET
2387 0x0, // PA_CL_VPORT_YSCALE
2388 0x0, // PA_CL_VPORT_YOFFSET
2389 0x0, // PA_CL_VPORT_ZSCALE
2390 0x0, // PA_CL_VPORT_ZOFFSET
2391 0x0, // PA_CL_VPORT_XSCALE_1
2392 0x0, // PA_CL_VPORT_XOFFSET_1
2393 0x0, // PA_CL_VPORT_YSCALE_1
2394 0x0, // PA_CL_VPORT_YOFFSET_1
2395 0x0, // PA_CL_VPORT_ZSCALE_1
2396 0x0, // PA_CL_VPORT_ZOFFSET_1
2397 0x0, // PA_CL_VPORT_XSCALE_2
2398 0x0, // PA_CL_VPORT_XOFFSET_2
2399 0x0, // PA_CL_VPORT_YSCALE_2
2400 0x0, // PA_CL_VPORT_YOFFSET_2
2401 0x0, // PA_CL_VPORT_ZSCALE_2
2402 0x0, // PA_CL_VPORT_ZOFFSET_2
2403 0x0, // PA_CL_VPORT_XSCALE_3
2404 0x0, // PA_CL_VPORT_XOFFSET_3
2405 0x0, // PA_CL_VPORT_YSCALE_3
2406 0x0, // PA_CL_VPORT_YOFFSET_3
2407 0x0, // PA_CL_VPORT_ZSCALE_3
2408 0x0, // PA_CL_VPORT_ZOFFSET_3
2409 0x0, // PA_CL_VPORT_XSCALE_4
2410 0x0, // PA_CL_VPORT_XOFFSET_4
2411 0x0, // PA_CL_VPORT_YSCALE_4
2412 0x0, // PA_CL_VPORT_YOFFSET_4
2413 0x0, // PA_CL_VPORT_ZSCALE_4
2414 0x0, // PA_CL_VPORT_ZOFFSET_4
2415 0x0, // PA_CL_VPORT_XSCALE_5
2416 0x0, // PA_CL_VPORT_XOFFSET_5
2417 0x0, // PA_CL_VPORT_YSCALE_5
2418 0x0, // PA_CL_VPORT_YOFFSET_5
2419 0x0, // PA_CL_VPORT_ZSCALE_5
2420 0x0, // PA_CL_VPORT_ZOFFSET_5
2421 0x0, // PA_CL_VPORT_XSCALE_6
2422 0x0, // PA_CL_VPORT_XOFFSET_6
2423 0x0, // PA_CL_VPORT_YSCALE_6
2424 0x0, // PA_CL_VPORT_YOFFSET_6
2425 0x0, // PA_CL_VPORT_ZSCALE_6
2426 0x0, // PA_CL_VPORT_ZOFFSET_6
2427 0x0, // PA_CL_VPORT_XSCALE_7
2428 0x0, // PA_CL_VPORT_XOFFSET_7
2429 0x0, // PA_CL_VPORT_YSCALE_7
2430 0x0, // PA_CL_VPORT_YOFFSET_7
2431 0x0, // PA_CL_VPORT_ZSCALE_7
2432 0x0, // PA_CL_VPORT_ZOFFSET_7
2433 0x0, // PA_CL_VPORT_XSCALE_8
2434 0x0, // PA_CL_VPORT_XOFFSET_8
2435 0x0, // PA_CL_VPORT_YSCALE_8
2436 0x0, // PA_CL_VPORT_YOFFSET_8
2437 0x0, // PA_CL_VPORT_ZSCALE_8
2438 0x0, // PA_CL_VPORT_ZOFFSET_8
2439 0x0, // PA_CL_VPORT_XSCALE_9
2440 0x0, // PA_CL_VPORT_XOFFSET_9
2441 0x0, // PA_CL_VPORT_YSCALE_9
2442 0x0, // PA_CL_VPORT_YOFFSET_9
2443 0x0, // PA_CL_VPORT_ZSCALE_9
2444 0x0, // PA_CL_VPORT_ZOFFSET_9
2445 0x0, // PA_CL_VPORT_XSCALE_10
2446 0x0, // PA_CL_VPORT_XOFFSET_10
2447 0x0, // PA_CL_VPORT_YSCALE_10
2448 0x0, // PA_CL_VPORT_YOFFSET_10
2449 0x0, // PA_CL_VPORT_ZSCALE_10
2450 0x0, // PA_CL_VPORT_ZOFFSET_10
2451 0x0, // PA_CL_VPORT_XSCALE_11
2452 0x0, // PA_CL_VPORT_XOFFSET_11
2453 0x0, // PA_CL_VPORT_YSCALE_11
2454 0x0, // PA_CL_VPORT_YOFFSET_11
2455 0x0, // PA_CL_VPORT_ZSCALE_11
2456 0x0, // PA_CL_VPORT_ZOFFSET_11
2457 0x0, // PA_CL_VPORT_XSCALE_12
2458 0x0, // PA_CL_VPORT_XOFFSET_12
2459 0x0, // PA_CL_VPORT_YSCALE_12
2460 0x0, // PA_CL_VPORT_YOFFSET_12
2461 0x0, // PA_CL_VPORT_ZSCALE_12
2462 0x0, // PA_CL_VPORT_ZOFFSET_12
2463 0x0, // PA_CL_VPORT_XSCALE_13
2464 0x0, // PA_CL_VPORT_XOFFSET_13
2465 0x0, // PA_CL_VPORT_YSCALE_13
2466 0x0, // PA_CL_VPORT_YOFFSET_13
2467 0x0, // PA_CL_VPORT_ZSCALE_13
2468 0x0, // PA_CL_VPORT_ZOFFSET_13
2469 0x0, // PA_CL_VPORT_XSCALE_14
2470 0x0, // PA_CL_VPORT_XOFFSET_14
2471 0x0, // PA_CL_VPORT_YSCALE_14
2472 0x0, // PA_CL_VPORT_YOFFSET_14
2473 0x0, // PA_CL_VPORT_ZSCALE_14
2474 0x0, // PA_CL_VPORT_ZOFFSET_14
2475 0x0, // PA_CL_VPORT_XSCALE_15
2476 0x0, // PA_CL_VPORT_XOFFSET_15
2477 0x0, // PA_CL_VPORT_YSCALE_15
2478 0x0, // PA_CL_VPORT_YOFFSET_15
2479 0x0, // PA_CL_VPORT_ZSCALE_15
2480 0x0, // PA_CL_VPORT_ZOFFSET_15
2481 0x0, // PA_CL_UCP_0_X
2482 0x0, // PA_CL_UCP_0_Y
2483 0x0, // PA_CL_UCP_0_Z
2484 0x0, // PA_CL_UCP_0_W
2485 0x0, // PA_CL_UCP_1_X
2486 0x0, // PA_CL_UCP_1_Y
2487 0x0, // PA_CL_UCP_1_Z
2488 0x0, // PA_CL_UCP_1_W
2489 0x0, // PA_CL_UCP_2_X
2490 0x0, // PA_CL_UCP_2_Y
2491 0x0, // PA_CL_UCP_2_Z
2492 0x0, // PA_CL_UCP_2_W
2493 0x0, // PA_CL_UCP_3_X
2494 0x0, // PA_CL_UCP_3_Y
2495 0x0, // PA_CL_UCP_3_Z
2496 0x0, // PA_CL_UCP_3_W
2497 0x0, // PA_CL_UCP_4_X
2498 0x0, // PA_CL_UCP_4_Y
2499 0x0, // PA_CL_UCP_4_Z
2500 0x0, // PA_CL_UCP_4_W
2501 0x0, // PA_CL_UCP_5_X
2502 0x0, // PA_CL_UCP_5_Y
2503 0x0, // PA_CL_UCP_5_Z
2504 0x0 // PA_CL_UCP_5_W
2505 };
2506 static const uint32_t SpiPsInputCntl0Gfx103[] = {
2507 0x0, // SPI_PS_INPUT_CNTL_0
2508 0x0, // SPI_PS_INPUT_CNTL_1
2509 0x0, // SPI_PS_INPUT_CNTL_2
2510 0x0, // SPI_PS_INPUT_CNTL_3
2511 0x0, // SPI_PS_INPUT_CNTL_4
2512 0x0, // SPI_PS_INPUT_CNTL_5
2513 0x0, // SPI_PS_INPUT_CNTL_6
2514 0x0, // SPI_PS_INPUT_CNTL_7
2515 0x0, // SPI_PS_INPUT_CNTL_8
2516 0x0, // SPI_PS_INPUT_CNTL_9
2517 0x0, // SPI_PS_INPUT_CNTL_10
2518 0x0, // SPI_PS_INPUT_CNTL_11
2519 0x0, // SPI_PS_INPUT_CNTL_12
2520 0x0, // SPI_PS_INPUT_CNTL_13
2521 0x0, // SPI_PS_INPUT_CNTL_14
2522 0x0, // SPI_PS_INPUT_CNTL_15
2523 0x0, // SPI_PS_INPUT_CNTL_16
2524 0x0, // SPI_PS_INPUT_CNTL_17
2525 0x0, // SPI_PS_INPUT_CNTL_18
2526 0x0, // SPI_PS_INPUT_CNTL_19
2527 0x0, // SPI_PS_INPUT_CNTL_20
2528 0x0, // SPI_PS_INPUT_CNTL_21
2529 0x0, // SPI_PS_INPUT_CNTL_22
2530 0x0, // SPI_PS_INPUT_CNTL_23
2531 0x0, // SPI_PS_INPUT_CNTL_24
2532 0x0, // SPI_PS_INPUT_CNTL_25
2533 0x0, // SPI_PS_INPUT_CNTL_26
2534 0x0, // SPI_PS_INPUT_CNTL_27
2535 0x0, // SPI_PS_INPUT_CNTL_28
2536 0x0, // SPI_PS_INPUT_CNTL_29
2537 0x0, // SPI_PS_INPUT_CNTL_30
2538 0x0, // SPI_PS_INPUT_CNTL_31
2539 0x0, // SPI_VS_OUT_CONFIG
2540 0x0, //
2541 0x0, // SPI_PS_INPUT_ENA
2542 0x0, // SPI_PS_INPUT_ADDR
2543 0x0, // SPI_INTERP_CONTROL_0
2544 0x2, // SPI_PS_IN_CONTROL
2545 0x0, //
2546 0x0, // SPI_BARYC_CNTL
2547 0x0, //
2548 0x0, // SPI_TMPRING_SIZE
2549 0x0, //
2550 0x0, //
2551 0x0, //
2552 0x0, //
2553 0x0, //
2554 0x0, //
2555 0x0, //
2556 0x0, // SPI_SHADER_IDX_FORMAT
2557 0x0, // SPI_SHADER_POS_FORMAT
2558 0x0, // SPI_SHADER_Z_FORMAT
2559 0x0 // SPI_SHADER_COL_FORMAT
2560 };
2561 static const uint32_t SxPsDownconvertControlGfx103[] = {
2562 0x0, // SX_PS_DOWNCONVERT_CONTROL
2563 0x0, // SX_PS_DOWNCONVERT
2564 0x0, // SX_BLEND_OPT_EPSILON
2565 0x0, // SX_BLEND_OPT_CONTROL
2566 0x0, // SX_MRT0_BLEND_OPT
2567 0x0, // SX_MRT1_BLEND_OPT
2568 0x0, // SX_MRT2_BLEND_OPT
2569 0x0, // SX_MRT3_BLEND_OPT
2570 0x0, // SX_MRT4_BLEND_OPT
2571 0x0, // SX_MRT5_BLEND_OPT
2572 0x0, // SX_MRT6_BLEND_OPT
2573 0x0, // SX_MRT7_BLEND_OPT
2574 0x0, // CB_BLEND0_CONTROL
2575 0x0, // CB_BLEND1_CONTROL
2576 0x0, // CB_BLEND2_CONTROL
2577 0x0, // CB_BLEND3_CONTROL
2578 0x0, // CB_BLEND4_CONTROL
2579 0x0, // CB_BLEND5_CONTROL
2580 0x0, // CB_BLEND6_CONTROL
2581 0x0 // CB_BLEND7_CONTROL
2582 };
2583 static const uint32_t GeMaxOutputPerSubgroupGfx103[] = {
2584 0x0, // GE_MAX_OUTPUT_PER_SUBGROUP
2585 0x0, // DB_DEPTH_CONTROL
2586 0x0, // DB_EQAA
2587 0x0, // CB_COLOR_CONTROL
2588 0x0, // DB_SHADER_CONTROL
2589 0x90000, // PA_CL_CLIP_CNTL
2590 0x4, // PA_SU_SC_MODE_CNTL
2591 0x0, // PA_CL_VTE_CNTL
2592 0x0, // PA_CL_VS_OUT_CNTL
2593 0x0 // PA_CL_NANINF_CNTL
2594 };
2595 static const uint32_t PaSuPrimFilterCntlGfx103[] = {
2596 0x0, // PA_SU_PRIM_FILTER_CNTL
2597 0x0, // PA_SU_SMALL_PRIM_FILTER_CNTL
2598 0x0, //
2599 0x0, // PA_CL_NGG_CNTL
2600 0x0, // PA_SU_OVER_RASTERIZATION_CNTL
2601 0x0, // PA_STEREO_CNTL
2602 0x0, // PA_STATE_STEREO_X
2603 0x0 //
2604 };
2605 static const uint32_t PaSuPointSizeGfx103[] = {
2606 0x0, // PA_SU_POINT_SIZE
2607 0x0, // PA_SU_POINT_MINMAX
2608 0x0, // PA_SU_LINE_CNTL
2609 0x0 // PA_SC_LINE_STIPPLE
2610 };
2611 static const uint32_t VgtHosMaxTessLevelGfx103[] = {
2612 0x0, // VGT_HOS_MAX_TESS_LEVEL
2613 0x0 // VGT_HOS_MIN_TESS_LEVEL
2614 };
2615 static const uint32_t VgtGsModeGfx103[] = {
2616 0x0, // VGT_GS_MODE
2617 0x0, // VGT_GS_ONCHIP_CNTL
2618 0x0, // PA_SC_MODE_CNTL_0
2619 0x0, // PA_SC_MODE_CNTL_1
2620 0x0, // VGT_ENHANCE
2621 0x100, // VGT_GS_PER_ES
2622 0x80, // VGT_ES_PER_GS
2623 0x2, // VGT_GS_PER_VS
2624 0x0, // VGT_GSVS_RING_OFFSET_1
2625 0x0, // VGT_GSVS_RING_OFFSET_2
2626 0x0, // VGT_GSVS_RING_OFFSET_3
2627 0x0 // VGT_GS_OUT_PRIM_TYPE
2628 };
2629 static const uint32_t VgtPrimitiveidEnGfx103[] = {
2630 0x0 // VGT_PRIMITIVEID_EN
2631 };
2632 static const uint32_t VgtPrimitiveidResetGfx103[] = {
2633 0x0 // VGT_PRIMITIVEID_RESET
2634 };
2635 static const uint32_t VgtDrawPayloadCntlGfx103[] = {
2636 0x0, // VGT_DRAW_PAYLOAD_CNTL
2637 0x0, //
2638 0x0, // VGT_INSTANCE_STEP_RATE_0
2639 0x0, // VGT_INSTANCE_STEP_RATE_1
2640 0x0, // IA_MULTI_VGT_PARAM
2641 0x0, // VGT_ESGS_RING_ITEMSIZE
2642 0x0, // VGT_GSVS_RING_ITEMSIZE
2643 0x0, // VGT_REUSE_OFF
2644 0x0, // VGT_VTX_CNT_EN
2645 0x0, // DB_HTILE_SURFACE
2646 0x0, // DB_SRESULTS_COMPARE_STATE0
2647 0x0, // DB_SRESULTS_COMPARE_STATE1
2648 0x0, // DB_PRELOAD_CONTROL
2649 0x0, //
2650 0x0, // VGT_STRMOUT_BUFFER_SIZE_0
2651 0x0, // VGT_STRMOUT_VTX_STRIDE_0
2652 0x0, //
2653 0x0, // VGT_STRMOUT_BUFFER_OFFSET_0
2654 0x0, // VGT_STRMOUT_BUFFER_SIZE_1
2655 0x0, // VGT_STRMOUT_VTX_STRIDE_1
2656 0x0, //
2657 0x0, // VGT_STRMOUT_BUFFER_OFFSET_1
2658 0x0, // VGT_STRMOUT_BUFFER_SIZE_2
2659 0x0, // VGT_STRMOUT_VTX_STRIDE_2
2660 0x0, //
2661 0x0, // VGT_STRMOUT_BUFFER_OFFSET_2
2662 0x0, // VGT_STRMOUT_BUFFER_SIZE_3
2663 0x0, // VGT_STRMOUT_VTX_STRIDE_3
2664 0x0, //
2665 0x0, // VGT_STRMOUT_BUFFER_OFFSET_3
2666 0x0, //
2667 0x0, //
2668 0x0, //
2669 0x0, //
2670 0x0, //
2671 0x0, //
2672 0x0, // VGT_STRMOUT_DRAW_OPAQUE_OFFSET
2673 0x0, // VGT_STRMOUT_DRAW_OPAQUE_BUFFER_FILLED_SIZE
2674 0x0, // VGT_STRMOUT_DRAW_OPAQUE_VERTEX_STRIDE
2675 0x0, //
2676 0x0, // VGT_GS_MAX_VERT_OUT
2677 0x0, //
2678 0x0, //
2679 0x0, //
2680 0x0, //
2681 0x0, // GE_NGG_SUBGRP_CNTL
2682 0x0, // VGT_TESS_DISTRIBUTION
2683 0x0, // VGT_SHADER_STAGES_EN
2684 0x0, // VGT_LS_HS_CONFIG
2685 0x0, // VGT_GS_VERT_ITEMSIZE
2686 0x0, // VGT_GS_VERT_ITEMSIZE_1
2687 0x0, // VGT_GS_VERT_ITEMSIZE_2
2688 0x0, // VGT_GS_VERT_ITEMSIZE_3
2689 0x0, // VGT_TF_PARAM
2690 0x0, // DB_ALPHA_TO_MASK
2691 0x0, //
2692 0x0, // PA_SU_POLY_OFFSET_DB_FMT_CNTL
2693 0x0, // PA_SU_POLY_OFFSET_CLAMP
2694 0x0, // PA_SU_POLY_OFFSET_FRONT_SCALE
2695 0x0, // PA_SU_POLY_OFFSET_FRONT_OFFSET
2696 0x0, // PA_SU_POLY_OFFSET_BACK_SCALE
2697 0x0, // PA_SU_POLY_OFFSET_BACK_OFFSET
2698 0x0, // VGT_GS_INSTANCE_CNT
2699 0x0, // VGT_STRMOUT_CONFIG
2700 0x0 // VGT_STRMOUT_BUFFER_CONFIG
2701 };
2702 static const uint32_t PaScCentroidPriority0Gfx103[] = {
2703 0x0, // PA_SC_CENTROID_PRIORITY_0
2704 0x0, // PA_SC_CENTROID_PRIORITY_1
2705 0x1000, // PA_SC_LINE_CNTL
2706 0x0, // PA_SC_AA_CONFIG
2707 0x5, // PA_SU_VTX_CNTL
2708 0x3f800000, // PA_CL_GB_VERT_CLIP_ADJ
2709 0x3f800000, // PA_CL_GB_VERT_DISC_ADJ
2710 0x3f800000, // PA_CL_GB_HORZ_CLIP_ADJ
2711 0x3f800000, // PA_CL_GB_HORZ_DISC_ADJ
2712 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_0
2713 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_1
2714 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_2
2715 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_3
2716 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_0
2717 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_1
2718 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_2
2719 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_3
2720 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_0
2721 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_1
2722 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_2
2723 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_3
2724 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_0
2725 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_1
2726 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_2
2727 0x0, // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_3
2728 0xffffffff, // PA_SC_AA_MASK_X0Y0_X1Y0
2729 0xffffffff, // PA_SC_AA_MASK_X0Y1_X1Y1
2730 0x0, // PA_SC_SHADER_CONTROL
2731 0x3, // PA_SC_BINNER_CNTL_0
2732 0x0, // PA_SC_BINNER_CNTL_1
2733 0x100000, // PA_SC_CONSERVATIVE_RASTERIZATION_CNTL
2734 0x0, // PA_SC_NGG_MODE_CNTL
2735 0x0, //
2736 0x1e, // VGT_VERTEX_REUSE_BLOCK_CNTL
2737 0x20, // VGT_OUT_DEALLOC_CNTL
2738 0x0, // CB_COLOR0_BASE
2739 0x0, //
2740 0x0, //
2741 0x0, // CB_COLOR0_VIEW
2742 0x0, // CB_COLOR0_INFO
2743 0x0, // CB_COLOR0_ATTRIB
2744 0x0, // CB_COLOR0_DCC_CONTROL
2745 0x0, // CB_COLOR0_CMASK
2746 0x0, //
2747 0x0, // CB_COLOR0_FMASK
2748 0x0, //
2749 0x0, // CB_COLOR0_CLEAR_WORD0
2750 0x0, // CB_COLOR0_CLEAR_WORD1
2751 0x0, // CB_COLOR0_DCC_BASE
2752 0x0, //
2753 0x0, // CB_COLOR1_BASE
2754 0x0, //
2755 0x0, //
2756 0x0, // CB_COLOR1_VIEW
2757 0x0, // CB_COLOR1_INFO
2758 0x0, // CB_COLOR1_ATTRIB
2759 0x0, // CB_COLOR1_DCC_CONTROL
2760 0x0, // CB_COLOR1_CMASK
2761 0x0, //
2762 0x0, // CB_COLOR1_FMASK
2763 0x0, //
2764 0x0, // CB_COLOR1_CLEAR_WORD0
2765 0x0, // CB_COLOR1_CLEAR_WORD1
2766 0x0, // CB_COLOR1_DCC_BASE
2767 0x0, //
2768 0x0, // CB_COLOR2_BASE
2769 0x0, //
2770 0x0, //
2771 0x0, // CB_COLOR2_VIEW
2772 0x0, // CB_COLOR2_INFO
2773 0x0, // CB_COLOR2_ATTRIB
2774 0x0, // CB_COLOR2_DCC_CONTROL
2775 0x0, // CB_COLOR2_CMASK
2776 0x0, //
2777 0x0, // CB_COLOR2_FMASK
2778 0x0, //
2779 0x0, // CB_COLOR2_CLEAR_WORD0
2780 0x0, // CB_COLOR2_CLEAR_WORD1
2781 0x0, // CB_COLOR2_DCC_BASE
2782 0x0, //
2783 0x0, // CB_COLOR3_BASE
2784 0x0, //
2785 0x0, //
2786 0x0, // CB_COLOR3_VIEW
2787 0x0, // CB_COLOR3_INFO
2788 0x0, // CB_COLOR3_ATTRIB
2789 0x0, // CB_COLOR3_DCC_CONTROL
2790 0x0, // CB_COLOR3_CMASK
2791 0x0, //
2792 0x0, // CB_COLOR3_FMASK
2793 0x0, //
2794 0x0, // CB_COLOR3_CLEAR_WORD0
2795 0x0, // CB_COLOR3_CLEAR_WORD1
2796 0x0, // CB_COLOR3_DCC_BASE
2797 0x0, //
2798 0x0, // CB_COLOR4_BASE
2799 0x0, //
2800 0x0, //
2801 0x0, // CB_COLOR4_VIEW
2802 0x0, // CB_COLOR4_INFO
2803 0x0, // CB_COLOR4_ATTRIB
2804 0x0, // CB_COLOR4_DCC_CONTROL
2805 0x0, // CB_COLOR4_CMASK
2806 0x0, //
2807 0x0, // CB_COLOR4_FMASK
2808 0x0, //
2809 0x0, // CB_COLOR4_CLEAR_WORD0
2810 0x0, // CB_COLOR4_CLEAR_WORD1
2811 0x0, // CB_COLOR4_DCC_BASE
2812 0x0, //
2813 0x0, // CB_COLOR5_BASE
2814 0x0, //
2815 0x0, //
2816 0x0, // CB_COLOR5_VIEW
2817 0x0, // CB_COLOR5_INFO
2818 0x0, // CB_COLOR5_ATTRIB
2819 0x0, // CB_COLOR5_DCC_CONTROL
2820 0x0, // CB_COLOR5_CMASK
2821 0x0, //
2822 0x0, // CB_COLOR5_FMASK
2823 0x0, //
2824 0x0, // CB_COLOR5_CLEAR_WORD0
2825 0x0, // CB_COLOR5_CLEAR_WORD1
2826 0x0, // CB_COLOR5_DCC_BASE
2827 0x0, //
2828 0x0, // CB_COLOR6_BASE
2829 0x0, //
2830 0x0, //
2831 0x0, // CB_COLOR6_VIEW
2832 0x0, // CB_COLOR6_INFO
2833 0x0, // CB_COLOR6_ATTRIB
2834 0x0, // CB_COLOR6_DCC_CONTROL
2835 0x0, // CB_COLOR6_CMASK
2836 0x0, //
2837 0x0, // CB_COLOR6_FMASK
2838 0x0, //
2839 0x0, // CB_COLOR6_CLEAR_WORD0
2840 0x0, // CB_COLOR6_CLEAR_WORD1
2841 0x0, // CB_COLOR6_DCC_BASE
2842 0x0, //
2843 0x0, // CB_COLOR7_BASE
2844 0x0, //
2845 0x0, //
2846 0x0, // CB_COLOR7_VIEW
2847 0x0, // CB_COLOR7_INFO
2848 0x0, // CB_COLOR7_ATTRIB
2849 0x0, // CB_COLOR7_DCC_CONTROL
2850 0x0, // CB_COLOR7_CMASK
2851 0x0, //
2852 0x0, // CB_COLOR7_FMASK
2853 0x0, //
2854 0x0, // CB_COLOR7_CLEAR_WORD0
2855 0x0, // CB_COLOR7_CLEAR_WORD1
2856 0x0, // CB_COLOR7_DCC_BASE
2857 0x0, //
2858 0x0, // CB_COLOR0_BASE_EXT
2859 0x0, // CB_COLOR1_BASE_EXT
2860 0x0, // CB_COLOR2_BASE_EXT
2861 0x0, // CB_COLOR3_BASE_EXT
2862 0x0, // CB_COLOR4_BASE_EXT
2863 0x0, // CB_COLOR5_BASE_EXT
2864 0x0, // CB_COLOR6_BASE_EXT
2865 0x0, // CB_COLOR7_BASE_EXT
2866 0x0, // CB_COLOR0_CMASK_BASE_EXT
2867 0x0, // CB_COLOR1_CMASK_BASE_EXT
2868 0x0, // CB_COLOR2_CMASK_BASE_EXT
2869 0x0, // CB_COLOR3_CMASK_BASE_EXT
2870 0x0, // CB_COLOR4_CMASK_BASE_EXT
2871 0x0, // CB_COLOR5_CMASK_BASE_EXT
2872 0x0, // CB_COLOR6_CMASK_BASE_EXT
2873 0x0, // CB_COLOR7_CMASK_BASE_EXT
2874 0x0, // CB_COLOR0_FMASK_BASE_EXT
2875 0x0, // CB_COLOR1_FMASK_BASE_EXT
2876 0x0, // CB_COLOR2_FMASK_BASE_EXT
2877 0x0, // CB_COLOR3_FMASK_BASE_EXT
2878 0x0, // CB_COLOR4_FMASK_BASE_EXT
2879 0x0, // CB_COLOR5_FMASK_BASE_EXT
2880 0x0, // CB_COLOR6_FMASK_BASE_EXT
2881 0x0, // CB_COLOR7_FMASK_BASE_EXT
2882 0x0, // CB_COLOR0_DCC_BASE_EXT
2883 0x0, // CB_COLOR1_DCC_BASE_EXT
2884 0x0, // CB_COLOR2_DCC_BASE_EXT
2885 0x0, // CB_COLOR3_DCC_BASE_EXT
2886 0x0, // CB_COLOR4_DCC_BASE_EXT
2887 0x0, // CB_COLOR5_DCC_BASE_EXT
2888 0x0, // CB_COLOR6_DCC_BASE_EXT
2889 0x0, // CB_COLOR7_DCC_BASE_EXT
2890 0x0, // CB_COLOR0_ATTRIB2
2891 0x0, // CB_COLOR1_ATTRIB2
2892 0x0, // CB_COLOR2_ATTRIB2
2893 0x0, // CB_COLOR3_ATTRIB2
2894 0x0, // CB_COLOR4_ATTRIB2
2895 0x0, // CB_COLOR5_ATTRIB2
2896 0x0, // CB_COLOR6_ATTRIB2
2897 0x0, // CB_COLOR7_ATTRIB2
2898 0x0, // CB_COLOR0_ATTRIB3
2899 0x0, // CB_COLOR1_ATTRIB3
2900 0x0, // CB_COLOR2_ATTRIB3
2901 0x0, // CB_COLOR3_ATTRIB3
2902 0x0, // CB_COLOR4_ATTRIB3
2903 0x0, // CB_COLOR5_ATTRIB3
2904 0x0, // CB_COLOR6_ATTRIB3
2905 0x0 // CB_COLOR7_ATTRIB3
2906 };
2907
2908 set_context_reg_seq_array(cs, R_028000_DB_RENDER_CONTROL, SET(DbRenderControlGfx103));
2909 set_context_reg_seq_array(cs, R_0281E8_COHER_DEST_BASE_HI_0, SET(CoherDestBaseHi0Gfx103));
2910 set_context_reg_seq_array(cs, R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX,
2911 SET(VgtMultiPrimIbResetIndxGfx103));
2912 set_context_reg_seq_array(cs, R_028644_SPI_PS_INPUT_CNTL_0, SET(SpiPsInputCntl0Gfx103));
2913 set_context_reg_seq_array(cs, R_028750_SX_PS_DOWNCONVERT_CONTROL,
2914 SET(SxPsDownconvertControlGfx103));
2915 set_context_reg_seq_array(cs, R_0287FC_GE_MAX_OUTPUT_PER_SUBGROUP,
2916 SET(GeMaxOutputPerSubgroupGfx103));
2917 set_context_reg_seq_array(cs, R_02882C_PA_SU_PRIM_FILTER_CNTL, SET(PaSuPrimFilterCntlGfx103));
2918 set_context_reg_seq_array(cs, R_028A00_PA_SU_POINT_SIZE, SET(PaSuPointSizeGfx103));
2919 set_context_reg_seq_array(cs, R_028A18_VGT_HOS_MAX_TESS_LEVEL, SET(VgtHosMaxTessLevelGfx103));
2920 set_context_reg_seq_array(cs, R_028A40_VGT_GS_MODE, SET(VgtGsModeGfx103));
2921 set_context_reg_seq_array(cs, R_028A84_VGT_PRIMITIVEID_EN, SET(VgtPrimitiveidEnGfx103));
2922 set_context_reg_seq_array(cs, R_028A8C_VGT_PRIMITIVEID_RESET, SET(VgtPrimitiveidResetGfx103));
2923 set_context_reg_seq_array(cs, R_028A98_VGT_DRAW_PAYLOAD_CNTL, SET(VgtDrawPayloadCntlGfx103));
2924 set_context_reg_seq_array(cs, R_028BD4_PA_SC_CENTROID_PRIORITY_0,
2925 SET(PaScCentroidPriority0Gfx103));
2926
2927 for (unsigned i = 0; i < num_reg_pairs; i++)
2928 set_context_reg_seq_array(cs, reg_offsets[i], 1, ®_values[i]);
2929 }
2930
ac_emulate_clear_state(const struct radeon_info * info,struct radeon_cmdbuf * cs,set_context_reg_seq_array_fn set_context_reg_seq_array)2931 void ac_emulate_clear_state(const struct radeon_info *info, struct radeon_cmdbuf *cs,
2932 set_context_reg_seq_array_fn set_context_reg_seq_array)
2933 {
2934 /* Set context registers same as CLEAR_STATE to initialize shadow memory. */
2935 unsigned reg_offset = R_02835C_PA_SC_TILE_STEERING_OVERRIDE;
2936 uint32_t reg_value = info->pa_sc_tile_steering_override;
2937
2938 if (info->chip_class == GFX10_3) {
2939 gfx103_emulate_clear_state(cs, 1, ®_offset, ®_value, set_context_reg_seq_array);
2940 } else if (info->chip_class == GFX10) {
2941 gfx10_emulate_clear_state(cs, 1, ®_offset, ®_value, set_context_reg_seq_array);
2942 } else if (info->chip_class == GFX9) {
2943 gfx9_emulate_clear_state(cs, set_context_reg_seq_array);
2944 } else {
2945 unreachable("unimplemented");
2946 }
2947 }
2948
2949 /* Debug helper to find if any registers are missing in the tables above.
2950 * Call this in the driver whenever you set a register.
2951 */
ac_check_shadowed_regs(enum chip_class chip_class,enum radeon_family family,unsigned reg_offset,unsigned count)2952 void ac_check_shadowed_regs(enum chip_class chip_class, enum radeon_family family,
2953 unsigned reg_offset, unsigned count)
2954 {
2955 bool found = false;
2956 bool shadowed = false;
2957
2958 for (unsigned type = 0; type < SI_NUM_ALL_REG_RANGES && !found; type++) {
2959 const struct ac_reg_range *ranges;
2960 unsigned num_ranges;
2961
2962 ac_get_reg_ranges(chip_class, family, type, &num_ranges, &ranges);
2963
2964 for (unsigned i = 0; i < num_ranges; i++) {
2965 unsigned end_reg_offset = reg_offset + count * 4;
2966 unsigned end_range_offset = ranges[i].offset + ranges[i].size;
2967
2968 /* Test if the ranges interect. */
2969 if (MAX2(ranges[i].offset, reg_offset) < MIN2(end_range_offset, end_reg_offset)) {
2970 /* Assertion: A register can be listed only once. */
2971 assert(!found);
2972 found = true;
2973 shadowed = type != SI_REG_RANGE_NON_SHADOWED;
2974 }
2975 }
2976 }
2977
2978 if (reg_offset == R_00B858_COMPUTE_DESTINATION_EN_SE0 ||
2979 reg_offset == R_00B864_COMPUTE_DESTINATION_EN_SE2)
2980 return;
2981
2982 if (!found || !shadowed) {
2983 printf("register %s: ", !found ? "not found" : "not shadowed");
2984 if (count > 1) {
2985 printf("%s .. %s\n", ac_get_register_name(chip_class, reg_offset),
2986 ac_get_register_name(chip_class, reg_offset + (count - 1) * 4));
2987 } else {
2988 printf("%s\n", ac_get_register_name(chip_class, reg_offset));
2989 }
2990 }
2991 }
2992
2993 /* Debug helper to print all shadowed registers and their current values read
2994 * by umr. This can be used to verify whether register shadowing doesn't affect
2995 * apps that don't enable it, because the shadowed register tables might contain
2996 * registers that the driver doesn't set.
2997 */
ac_print_shadowed_regs(const struct radeon_info * info)2998 void ac_print_shadowed_regs(const struct radeon_info *info)
2999 {
3000 if (!debug_get_bool_option("AMD_PRINT_SHADOW_REGS", false))
3001 return;
3002
3003 for (unsigned type = 0; type < SI_NUM_SHADOWED_REG_RANGES; type++) {
3004 const struct ac_reg_range *ranges;
3005 unsigned num_ranges;
3006
3007 ac_get_reg_ranges(info->chip_class, info->family, type, &num_ranges, &ranges);
3008
3009 for (unsigned i = 0; i < num_ranges; i++) {
3010 for (unsigned j = 0; j < ranges[i].size / 4; j++) {
3011 unsigned offset = ranges[i].offset + j * 4;
3012
3013 const char *name = ac_get_register_name(info->chip_class, offset);
3014 unsigned value = -1;
3015 char cmd[1024];
3016
3017 snprintf(cmd, sizeof(cmd), "umr -r 0x%x", offset);
3018 FILE *p = popen(cmd, "r");
3019 if (p) {
3020 ASSERTED int r = fscanf(p, "%x", &value);
3021 assert(r == 1);
3022 pclose(p);
3023 }
3024
3025 printf("0x%X %s = 0x%X\n", offset, name, value);
3026 }
3027 printf("--------------------------------------------\n");
3028 }
3029 }
3030 }
3031