xref: /aosp_15_r20/external/mesa3d/src/amd/common/ac_shadowed_regs.c (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1 /*
2  * Copyright © 2020 Advanced Micro Devices, Inc.
3  *
4  * SPDX-License-Identifier: MIT
5  */
6 
7 /* These tables define the set of ranges of registers we shadow when
8  * mid command buffer preemption is enabled.
9  */
10 
11 #include "ac_shadowed_regs.h"
12 
13 #include "ac_debug.h"
14 #include "sid.h"
15 #include "util/macros.h"
16 #include "util/u_debug.h"
17 
18 #include <stdio.h>
19 
20 static const struct ac_reg_range Gfx9UserConfigShadowRange[] = {
21    {
22       R_0300FC_CP_STRMOUT_CNTL,
23       4,
24    },
25    {
26       R_0301EC_CP_COHER_START_DELAY,
27       4,
28    },
29    {
30       R_030904_VGT_GSVS_RING_SIZE,
31       R_030908_VGT_PRIMITIVE_TYPE - R_030904_VGT_GSVS_RING_SIZE + 4,
32    },
33    {
34       R_030920_VGT_MAX_VTX_INDX,
35       R_03092C_VGT_MULTI_PRIM_IB_RESET_EN - R_030920_VGT_MAX_VTX_INDX + 4,
36    },
37    {
38       R_030934_VGT_NUM_INSTANCES,
39       R_030944_VGT_TF_MEMORY_BASE_HI - R_030934_VGT_NUM_INSTANCES + 4,
40    },
41    {
42       R_030960_IA_MULTI_VGT_PARAM,
43       4,
44    },
45    {
46       R_030968_VGT_INSTANCE_BASE_ID,
47       4,
48    },
49    {
50       R_030E00_TA_CS_BC_BASE_ADDR,
51       R_030E04_TA_CS_BC_BASE_ADDR_HI - R_030E00_TA_CS_BC_BASE_ADDR + 4,
52    },
53    {
54       R_030AD4_PA_STATE_STEREO_X,
55       4,
56    },
57 };
58 
59 static const struct ac_reg_range Gfx9ContextShadowRange[] = {
60    {
61       R_028000_DB_RENDER_CONTROL,
62       R_028084_TA_BC_BASE_ADDR_HI - R_028000_DB_RENDER_CONTROL + 4,
63    },
64    {
65       R_0281E8_COHER_DEST_BASE_HI_0,
66       R_02835C_PA_SC_TILE_STEERING_OVERRIDE - R_0281E8_COHER_DEST_BASE_HI_0 + 4,
67    },
68    {
69       R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX,
70       4,
71    },
72    {
73       R_028414_CB_BLEND_RED,
74       R_028618_PA_CL_UCP_5_W - R_028414_CB_BLEND_RED + 4,
75    },
76    {
77       R_028644_SPI_PS_INPUT_CNTL_0,
78       R_028714_SPI_SHADER_COL_FORMAT - R_028644_SPI_PS_INPUT_CNTL_0 + 4,
79    },
80    {
81       R_028754_SX_PS_DOWNCONVERT,
82       R_0287BC_CB_MRT7_EPITCH - R_028754_SX_PS_DOWNCONVERT + 4,
83    },
84    {
85       R_028800_DB_DEPTH_CONTROL,
86       R_028840_PA_STEREO_CNTL - R_028800_DB_DEPTH_CONTROL + 4,
87    },
88    {
89       R_028A00_PA_SU_POINT_SIZE,
90       R_028A0C_PA_SC_LINE_STIPPLE - R_028A00_PA_SU_POINT_SIZE + 4,
91    },
92    {
93       R_028A18_VGT_HOS_MAX_TESS_LEVEL,
94       R_028A1C_VGT_HOS_MIN_TESS_LEVEL - R_028A18_VGT_HOS_MAX_TESS_LEVEL + 4,
95    },
96    {
97       R_028A40_VGT_GS_MODE,
98       R_028A6C_VGT_GS_OUT_PRIM_TYPE - R_028A40_VGT_GS_MODE + 4,
99    },
100    {
101       R_028A84_VGT_PRIMITIVEID_EN,
102       4,
103    },
104    {
105       R_028A8C_VGT_PRIMITIVEID_RESET,
106       4,
107    },
108    {
109       R_028A94_VGT_GS_MAX_PRIMS_PER_SUBGROUP,
110       R_028AD4_VGT_STRMOUT_VTX_STRIDE_0 - R_028A94_VGT_GS_MAX_PRIMS_PER_SUBGROUP + 4,
111    },
112    {
113       R_028AE0_VGT_STRMOUT_BUFFER_SIZE_1,
114       R_028AE4_VGT_STRMOUT_VTX_STRIDE_1 - R_028AE0_VGT_STRMOUT_BUFFER_SIZE_1 + 4,
115    },
116    {
117       R_028AF0_VGT_STRMOUT_BUFFER_SIZE_2,
118       R_028AF4_VGT_STRMOUT_VTX_STRIDE_2 - R_028AF0_VGT_STRMOUT_BUFFER_SIZE_2 + 4,
119    },
120    {
121       R_028B00_VGT_STRMOUT_BUFFER_SIZE_3,
122       R_028B04_VGT_STRMOUT_VTX_STRIDE_3 - R_028B00_VGT_STRMOUT_BUFFER_SIZE_3 + 4,
123    },
124    {
125       R_028B28_VGT_STRMOUT_DRAW_OPAQUE_OFFSET,
126       R_028B30_VGT_STRMOUT_DRAW_OPAQUE_VERTEX_STRIDE - R_028B28_VGT_STRMOUT_DRAW_OPAQUE_OFFSET + 4,
127    },
128    {
129       R_028B38_VGT_GS_MAX_VERT_OUT,
130       R_028B98_VGT_STRMOUT_BUFFER_CONFIG - R_028B38_VGT_GS_MAX_VERT_OUT + 4,
131    },
132    {
133       R_028BD4_PA_SC_CENTROID_PRIORITY_0,
134       R_028E3C_CB_COLOR7_DCC_BASE_EXT - R_028BD4_PA_SC_CENTROID_PRIORITY_0 + 4,
135    },
136 };
137 
138 static const struct ac_reg_range Gfx9ShShadowRange[] = {
139    {
140       R_00B020_SPI_SHADER_PGM_LO_PS,
141       R_00B0AC_SPI_SHADER_USER_DATA_PS_31 - R_00B020_SPI_SHADER_PGM_LO_PS + 4,
142    },
143    {
144       R_00B11C_SPI_SHADER_LATE_ALLOC_VS,
145       R_00B1AC_SPI_SHADER_USER_DATA_VS_31 - R_00B11C_SPI_SHADER_LATE_ALLOC_VS + 4,
146    },
147    {
148       R_00B204_SPI_SHADER_PGM_RSRC4_GS,
149       R_00B214_SPI_SHADER_PGM_HI_ES - R_00B204_SPI_SHADER_PGM_RSRC4_GS + 4,
150    },
151    {
152       R_00B220_SPI_SHADER_PGM_LO_GS,
153       R_00B22C_SPI_SHADER_PGM_RSRC2_GS - R_00B220_SPI_SHADER_PGM_LO_GS + 4,
154    },
155    {
156       R_00B330_SPI_SHADER_USER_DATA_ES_0,
157       R_00B3AC_SPI_SHADER_USER_DATA_ES_31 - R_00B330_SPI_SHADER_USER_DATA_ES_0 + 4,
158    },
159    {
160       R_00B404_SPI_SHADER_PGM_RSRC4_HS,
161       R_00B414_SPI_SHADER_PGM_HI_LS - R_00B404_SPI_SHADER_PGM_RSRC4_HS + 4,
162    },
163    {
164       R_00B420_SPI_SHADER_PGM_LO_HS,
165       R_00B4AC_SPI_SHADER_USER_DATA_LS_31 - R_00B420_SPI_SHADER_PGM_LO_HS + 4,
166    },
167 };
168 
169 static const struct ac_reg_range Gfx9CsShShadowRange[] = {
170    {
171       R_00B810_COMPUTE_START_X,
172       R_00B824_COMPUTE_NUM_THREAD_Z - R_00B810_COMPUTE_START_X + 4,
173    },
174    {
175       R_00B82C_COMPUTE_PERFCOUNT_ENABLE,
176       R_00B834_COMPUTE_PGM_HI - R_00B82C_COMPUTE_PERFCOUNT_ENABLE + 4,
177    },
178    {
179       R_00B848_COMPUTE_PGM_RSRC1,
180       R_00B84C_COMPUTE_PGM_RSRC2 - R_00B848_COMPUTE_PGM_RSRC1 + 4,
181    },
182    {
183       R_00B854_COMPUTE_RESOURCE_LIMITS,
184       4,
185    },
186    {
187       R_00B860_COMPUTE_TMPRING_SIZE,
188       4,
189    },
190    {
191       R_00B878_COMPUTE_THREAD_TRACE_ENABLE,
192       4,
193    },
194    {
195       R_00B900_COMPUTE_USER_DATA_0,
196       R_00B93C_COMPUTE_USER_DATA_15 - R_00B900_COMPUTE_USER_DATA_0 + 4,
197    },
198 };
199 
200 static const struct ac_reg_range Gfx9ShShadowRangeRaven2[] = {
201    {
202       R_00B018_SPI_SHADER_PGM_CHKSUM_PS,
203       4,
204    },
205    {
206       R_00B020_SPI_SHADER_PGM_LO_PS,
207       R_00B0AC_SPI_SHADER_USER_DATA_PS_31 - R_00B020_SPI_SHADER_PGM_LO_PS + 4,
208    },
209    {
210       R_00B114_SPI_SHADER_PGM_CHKSUM_VS,
211       4,
212    },
213    {
214       R_00B11C_SPI_SHADER_LATE_ALLOC_VS,
215       R_00B1AC_SPI_SHADER_USER_DATA_VS_31 - R_00B11C_SPI_SHADER_LATE_ALLOC_VS + 4,
216    },
217    {
218       R_00B200_SPI_SHADER_PGM_CHKSUM_GS,
219       R_00B214_SPI_SHADER_PGM_HI_ES - R_00B200_SPI_SHADER_PGM_CHKSUM_GS + 4,
220    },
221    {
222       R_00B220_SPI_SHADER_PGM_LO_GS,
223       R_00B22C_SPI_SHADER_PGM_RSRC2_GS - R_00B220_SPI_SHADER_PGM_LO_GS + 4,
224    },
225    {
226       R_00B330_SPI_SHADER_USER_DATA_ES_0,
227       R_00B3AC_SPI_SHADER_USER_DATA_ES_31 - R_00B330_SPI_SHADER_USER_DATA_ES_0 + 4,
228    },
229    {
230       R_00B400_SPI_SHADER_PGM_CHKSUM_HS,
231       R_00B414_SPI_SHADER_PGM_HI_LS - R_00B400_SPI_SHADER_PGM_CHKSUM_HS + 4,
232    },
233    {
234       R_00B420_SPI_SHADER_PGM_LO_HS,
235       R_00B4AC_SPI_SHADER_USER_DATA_LS_31 - R_00B420_SPI_SHADER_PGM_LO_HS + 4,
236    },
237 };
238 
239 static const struct ac_reg_range Gfx9CsShShadowRangeRaven2[] = {
240    {
241       R_00B810_COMPUTE_START_X,
242       R_00B824_COMPUTE_NUM_THREAD_Z - R_00B810_COMPUTE_START_X + 4,
243    },
244    {
245       R_00B82C_COMPUTE_PERFCOUNT_ENABLE,
246       R_00B834_COMPUTE_PGM_HI - R_00B82C_COMPUTE_PERFCOUNT_ENABLE + 4,
247    },
248    {
249       R_00B848_COMPUTE_PGM_RSRC1,
250       R_00B84C_COMPUTE_PGM_RSRC2 - R_00B848_COMPUTE_PGM_RSRC1 + 4,
251    },
252    {
253       R_00B854_COMPUTE_RESOURCE_LIMITS,
254       4,
255    },
256    {
257       R_00B860_COMPUTE_TMPRING_SIZE,
258       4,
259    },
260    {
261       R_00B878_COMPUTE_THREAD_TRACE_ENABLE,
262       4,
263    },
264    {
265       R_00B894_COMPUTE_SHADER_CHKSUM,
266       4,
267    },
268    {
269       R_00B900_COMPUTE_USER_DATA_0,
270       R_00B93C_COMPUTE_USER_DATA_15 - R_00B900_COMPUTE_USER_DATA_0 + 4,
271    },
272 };
273 
274 static const struct ac_reg_range Nv10ContextShadowRange[] = {
275    {
276       R_028000_DB_RENDER_CONTROL,
277       R_028084_TA_BC_BASE_ADDR_HI - R_028000_DB_RENDER_CONTROL + 4,
278    },
279    {
280       R_0281E8_COHER_DEST_BASE_HI_0,
281       R_02835C_PA_SC_TILE_STEERING_OVERRIDE - R_0281E8_COHER_DEST_BASE_HI_0 + 4,
282    },
283    {
284       R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX,
285       R_028618_PA_CL_UCP_5_W - R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX + 4,
286    },
287    {
288       R_028644_SPI_PS_INPUT_CNTL_0,
289       R_028714_SPI_SHADER_COL_FORMAT - R_028644_SPI_PS_INPUT_CNTL_0 + 4,
290    },
291    {
292       R_028754_SX_PS_DOWNCONVERT,
293       R_02879C_CB_BLEND7_CONTROL - R_028754_SX_PS_DOWNCONVERT + 4,
294    },
295    {
296       R_0287D4_PA_CL_POINT_X_RAD,
297       R_0287E0_PA_CL_POINT_CULL_RAD - R_0287D4_PA_CL_POINT_X_RAD + 4,
298    },
299    {
300       R_0287FC_GE_MAX_OUTPUT_PER_SUBGROUP,
301       R_028844_PA_STATE_STEREO_X - R_0287FC_GE_MAX_OUTPUT_PER_SUBGROUP + 4,
302    },
303    {
304       R_028A00_PA_SU_POINT_SIZE,
305       R_028A0C_PA_SC_LINE_STIPPLE - R_028A00_PA_SU_POINT_SIZE + 4,
306    },
307    {
308       R_028A18_VGT_HOS_MAX_TESS_LEVEL,
309       R_028A1C_VGT_HOS_MIN_TESS_LEVEL - R_028A18_VGT_HOS_MAX_TESS_LEVEL + 4,
310    },
311    {
312       R_028A40_VGT_GS_MODE,
313       R_028A6C_VGT_GS_OUT_PRIM_TYPE - R_028A40_VGT_GS_MODE + 4,
314    },
315    {
316       R_028A84_VGT_PRIMITIVEID_EN,
317       4,
318    },
319    {
320       R_028A8C_VGT_PRIMITIVEID_RESET,
321       4,
322    },
323    {
324       R_028A98_VGT_DRAW_PAYLOAD_CNTL,
325       R_028B98_VGT_STRMOUT_BUFFER_CONFIG - R_028A98_VGT_DRAW_PAYLOAD_CNTL + 4,
326    },
327    {
328       R_028BD4_PA_SC_CENTROID_PRIORITY_0,
329       R_028EFC_CB_COLOR7_ATTRIB3 - R_028BD4_PA_SC_CENTROID_PRIORITY_0 + 4,
330    },
331 };
332 
333 static const struct ac_reg_range Nv10UserConfigShadowRange[] = {
334    {
335       R_0300FC_CP_STRMOUT_CNTL,
336       4,
337    },
338    {
339       R_0301EC_CP_COHER_START_DELAY,
340       4,
341    },
342    {
343       R_030904_VGT_GSVS_RING_SIZE,
344       R_030908_VGT_PRIMITIVE_TYPE - R_030904_VGT_GSVS_RING_SIZE + 4,
345    },
346    {
347       R_030964_GE_MAX_VTX_INDX,
348       4,
349    },
350    {
351       R_030924_GE_MIN_VTX_INDX,
352       R_03092C_GE_MULTI_PRIM_IB_RESET_EN - R_030924_GE_MIN_VTX_INDX + 4,
353    },
354    {
355       R_030934_VGT_NUM_INSTANCES,
356       R_030940_VGT_TF_MEMORY_BASE - R_030934_VGT_NUM_INSTANCES + 4,
357    },
358    {
359       R_03097C_GE_STEREO_CNTL,
360       R_030984_VGT_TF_MEMORY_BASE_HI - R_03097C_GE_STEREO_CNTL + 4,
361    },
362    {
363       R_03096C_GE_CNTL,
364       4,
365    },
366    {
367       R_030968_VGT_INSTANCE_BASE_ID,
368       4,
369    },
370    {
371       R_030988_GE_USER_VGPR_EN,
372       4,
373    },
374    {
375       R_030E00_TA_CS_BC_BASE_ADDR,
376       R_030E04_TA_CS_BC_BASE_ADDR_HI - R_030E00_TA_CS_BC_BASE_ADDR + 4,
377    },
378 };
379 
380 static const struct ac_reg_range Gfx10ShShadowRange[] = {
381    {
382       R_00B018_SPI_SHADER_PGM_CHKSUM_PS,
383       4,
384    },
385    {
386       R_00B020_SPI_SHADER_PGM_LO_PS,
387       R_00B0AC_SPI_SHADER_USER_DATA_PS_31 - R_00B020_SPI_SHADER_PGM_LO_PS + 4,
388    },
389    {
390       R_00B0C8_SPI_SHADER_USER_ACCUM_PS_0,
391       R_00B0D4_SPI_SHADER_USER_ACCUM_PS_3 - R_00B0C8_SPI_SHADER_USER_ACCUM_PS_0 + 4,
392    },
393    {
394       R_00B114_SPI_SHADER_PGM_CHKSUM_VS,
395       4,
396    },
397    {
398       R_00B11C_SPI_SHADER_LATE_ALLOC_VS,
399       R_00B1AC_SPI_SHADER_USER_DATA_VS_31 - R_00B11C_SPI_SHADER_LATE_ALLOC_VS + 4,
400    },
401    {
402       R_00B1C8_SPI_SHADER_USER_ACCUM_VS_0,
403       R_00B1D4_SPI_SHADER_USER_ACCUM_VS_3 - R_00B1C8_SPI_SHADER_USER_ACCUM_VS_0 + 4,
404    },
405    {
406       R_00B320_SPI_SHADER_PGM_LO_ES,
407       R_00B324_SPI_SHADER_PGM_HI_ES - R_00B320_SPI_SHADER_PGM_LO_ES + 4,
408    },
409    {
410       R_00B520_SPI_SHADER_PGM_LO_LS,
411       R_00B524_SPI_SHADER_PGM_HI_LS - R_00B520_SPI_SHADER_PGM_LO_LS + 4,
412    },
413    {
414       R_00B200_SPI_SHADER_PGM_CHKSUM_GS,
415       4,
416    },
417    {
418       R_00B220_SPI_SHADER_PGM_LO_GS,
419       R_00B2AC_SPI_SHADER_USER_DATA_GS_31 - R_00B220_SPI_SHADER_PGM_LO_GS + 4,
420    },
421    {
422       R_00B208_SPI_SHADER_USER_DATA_ADDR_LO_GS,
423       R_00B20C_SPI_SHADER_USER_DATA_ADDR_HI_GS - R_00B208_SPI_SHADER_USER_DATA_ADDR_LO_GS + 4,
424    },
425    {
426       R_00B408_SPI_SHADER_USER_DATA_ADDR_LO_HS,
427       R_00B40C_SPI_SHADER_USER_DATA_ADDR_HI_HS - R_00B408_SPI_SHADER_USER_DATA_ADDR_LO_HS + 4,
428    },
429    {
430       R_00B2C8_SPI_SHADER_USER_ACCUM_ESGS_0,
431       R_00B2D4_SPI_SHADER_USER_ACCUM_ESGS_3 - R_00B2C8_SPI_SHADER_USER_ACCUM_ESGS_0 + 4,
432    },
433    {
434       R_00B400_SPI_SHADER_PGM_CHKSUM_HS,
435       4,
436    },
437    {
438       R_00B420_SPI_SHADER_PGM_LO_HS,
439       R_00B4AC_SPI_SHADER_USER_DATA_HS_31 - R_00B420_SPI_SHADER_PGM_LO_HS + 4,
440    },
441    {
442       R_00B4C8_SPI_SHADER_USER_ACCUM_LSHS_0,
443       R_00B4D4_SPI_SHADER_USER_ACCUM_LSHS_3 - R_00B4C8_SPI_SHADER_USER_ACCUM_LSHS_0 + 4,
444    },
445    {
446       R_00B0C0_SPI_SHADER_REQ_CTRL_PS,
447       4,
448    },
449    {
450       R_00B1C0_SPI_SHADER_REQ_CTRL_VS,
451       4,
452    },
453 };
454 
455 static const struct ac_reg_range Gfx10CsShShadowRange[] = {
456    {
457       R_00B810_COMPUTE_START_X,
458       R_00B824_COMPUTE_NUM_THREAD_Z - R_00B810_COMPUTE_START_X + 4,
459    },
460    {
461       R_00B82C_COMPUTE_PERFCOUNT_ENABLE,
462       R_00B834_COMPUTE_PGM_HI - R_00B82C_COMPUTE_PERFCOUNT_ENABLE + 4,
463    },
464    {
465       R_00B848_COMPUTE_PGM_RSRC1,
466       R_00B84C_COMPUTE_PGM_RSRC2 - R_00B848_COMPUTE_PGM_RSRC1 + 4,
467    },
468    {
469       R_00B854_COMPUTE_RESOURCE_LIMITS,
470       4,
471    },
472    {
473       R_00B860_COMPUTE_TMPRING_SIZE,
474       4,
475    },
476    {
477       R_00B878_COMPUTE_THREAD_TRACE_ENABLE,
478       4,
479    },
480    {
481       R_00B890_COMPUTE_USER_ACCUM_0,
482       R_00B8A0_COMPUTE_PGM_RSRC3 - R_00B890_COMPUTE_USER_ACCUM_0 + 4,
483    },
484    {
485       R_00B8A8_COMPUTE_SHADER_CHKSUM,
486       4,
487    },
488    {
489       R_00B900_COMPUTE_USER_DATA_0,
490       R_00B93C_COMPUTE_USER_DATA_15 - R_00B900_COMPUTE_USER_DATA_0 + 4,
491    },
492    {
493       R_00B9F4_COMPUTE_DISPATCH_TUNNEL,
494       4,
495    },
496 };
497 
498 static const struct ac_reg_range Gfx103ContextShadowRange[] = {
499    {
500       R_028000_DB_RENDER_CONTROL,
501       R_028084_TA_BC_BASE_ADDR_HI - R_028000_DB_RENDER_CONTROL + 4,
502    },
503    {
504       R_0281E8_COHER_DEST_BASE_HI_0,
505       R_02835C_PA_SC_TILE_STEERING_OVERRIDE - R_0281E8_COHER_DEST_BASE_HI_0 + 4,
506    },
507    {
508       R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX,
509       R_028618_PA_CL_UCP_5_W - R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX + 4,
510    },
511    {
512       R_028644_SPI_PS_INPUT_CNTL_0,
513       R_028714_SPI_SHADER_COL_FORMAT - R_028644_SPI_PS_INPUT_CNTL_0 + 4,
514    },
515    {
516       R_028750_SX_PS_DOWNCONVERT_CONTROL,
517       R_02879C_CB_BLEND7_CONTROL - R_028750_SX_PS_DOWNCONVERT_CONTROL + 4,
518    },
519    {
520       R_0287D4_PA_CL_POINT_X_RAD,
521       R_0287E0_PA_CL_POINT_CULL_RAD - R_0287D4_PA_CL_POINT_X_RAD + 4,
522    },
523    {
524       R_0287FC_GE_MAX_OUTPUT_PER_SUBGROUP,
525       R_028848_PA_CL_VRS_CNTL - R_0287FC_GE_MAX_OUTPUT_PER_SUBGROUP + 4,
526    },
527    {
528       R_028A00_PA_SU_POINT_SIZE,
529       R_028A0C_PA_SC_LINE_STIPPLE - R_028A00_PA_SU_POINT_SIZE + 4,
530    },
531    {
532       R_028A18_VGT_HOS_MAX_TESS_LEVEL,
533       R_028A1C_VGT_HOS_MIN_TESS_LEVEL - R_028A18_VGT_HOS_MAX_TESS_LEVEL + 4,
534    },
535    {
536       R_028A40_VGT_GS_MODE,
537       R_028A6C_VGT_GS_OUT_PRIM_TYPE - R_028A40_VGT_GS_MODE + 4,
538    },
539    {
540       R_028A84_VGT_PRIMITIVEID_EN,
541       4,
542    },
543    {
544       R_028A8C_VGT_PRIMITIVEID_RESET,
545       4,
546    },
547    {
548       R_028A98_VGT_DRAW_PAYLOAD_CNTL,
549       R_028B98_VGT_STRMOUT_BUFFER_CONFIG - R_028A98_VGT_DRAW_PAYLOAD_CNTL + 4,
550    },
551    {
552       R_028BD4_PA_SC_CENTROID_PRIORITY_0,
553       R_028EFC_CB_COLOR7_ATTRIB3 - R_028BD4_PA_SC_CENTROID_PRIORITY_0 + 4,
554    },
555 };
556 
557 static const struct ac_reg_range Gfx103UserConfigShadowRange[] = {
558    {
559       R_0300FC_CP_STRMOUT_CNTL,
560       4,
561    },
562    {
563       R_0301EC_CP_COHER_START_DELAY,
564       4,
565    },
566    {
567       R_030904_VGT_GSVS_RING_SIZE,
568       R_030908_VGT_PRIMITIVE_TYPE - R_030904_VGT_GSVS_RING_SIZE + 4,
569    },
570    {
571       R_030964_GE_MAX_VTX_INDX,
572       4,
573    },
574    {
575       R_030924_GE_MIN_VTX_INDX,
576       R_03092C_GE_MULTI_PRIM_IB_RESET_EN - R_030924_GE_MIN_VTX_INDX + 4,
577    },
578    {
579       R_030934_VGT_NUM_INSTANCES,
580       R_030940_VGT_TF_MEMORY_BASE - R_030934_VGT_NUM_INSTANCES + 4,
581    },
582    {
583       R_03097C_GE_STEREO_CNTL,
584       R_030984_VGT_TF_MEMORY_BASE_HI - R_03097C_GE_STEREO_CNTL + 4,
585    },
586    {
587       R_03096C_GE_CNTL,
588       4,
589    },
590    {
591       R_030968_VGT_INSTANCE_BASE_ID,
592       4,
593    },
594    {
595       R_030E00_TA_CS_BC_BASE_ADDR,
596       R_030E04_TA_CS_BC_BASE_ADDR_HI - R_030E00_TA_CS_BC_BASE_ADDR + 4,
597    },
598    {
599       R_030988_GE_USER_VGPR_EN,
600       0x03098C - R_030988_GE_USER_VGPR_EN + 4,
601    },
602 };
603 
604 static const struct ac_reg_range Gfx11ShShadowRange[] =
605 {
606    /* First register                            Count * 4      Last register */
607    { R_00B004_SPI_SHADER_PGM_RSRC4_PS,             1  * 4}, // SPI_SHADER_PGM_RSRC4_PS
608    { R_00B018_SPI_SHADER_PGM_CHKSUM_PS,            38 * 4}, // SPI_SHADER_USER_DATA_PS_31
609    { R_00B0C0_SPI_SHADER_REQ_CTRL_PS,              1  * 4}, // SPI_SHADER_REQ_CTRL_PS
610    { R_00B0C8_SPI_SHADER_USER_ACCUM_PS_0,          4  * 4}, // SPI_SHADER_USER_ACCUM_PS_3
611    { R_00B200_SPI_SHADER_PGM_CHKSUM_GS,            2  * 4}, // SPI_SHADER_PGM_RSRC4_GS
612    { R_00B21C_SPI_SHADER_PGM_RSRC3_GS,             39 * 4}, // SPI_SHADER_GS_MESHLET_EXP_ALLOC
613    { R_00B2C8_SPI_SHADER_USER_ACCUM_ESGS_0,        4  * 4}, // SPI_SHADER_USER_ACCUM_ESGS_3
614    { R_00B320_SPI_SHADER_PGM_LO_ES,                2  * 4}, // SPI_SHADER_PGM_HI_ES
615    { R_00B400_SPI_SHADER_PGM_CHKSUM_HS,            2  * 4}, // SPI_SHADER_PGM_RSRC4_HS
616    { R_00B41C_SPI_SHADER_PGM_RSRC3_HS,             37 * 4}, // SPI_SHADER_USER_DATA_HS_31
617    { R_00B4C8_SPI_SHADER_USER_ACCUM_LSHS_0,        4  * 4}, // SPI_SHADER_USER_ACCUM_LSHS_3
618    { R_00B520_SPI_SHADER_PGM_LO_LS,                2  * 4}  // SPI_SHADER_PGM_HI_LS
619 };
620 
621 static const struct ac_reg_range Gfx11CsShShadowRange[] =
622 {
623    /* First register                            Count * 4      Last register */
624    { R_00B810_COMPUTE_START_X,                     6  * 4}, // COMPUTE_NUM_THREAD_Z
625    { R_00B82C_COMPUTE_PERFCOUNT_ENABLE,            5  * 4}, // COMPUTE_DISPATCH_PKT_ADDR_HI
626    { R_00B840_COMPUTE_DISPATCH_SCRATCH_BASE_LO,    4  * 4}, // COMPUTE_PGM_RSRC2
627    { R_00B854_COMPUTE_RESOURCE_LIMITS,             6  * 4}, // COMPUTE_STATIC_THREAD_MGMT_SE3
628    { R_00B878_COMPUTE_THREAD_TRACE_ENABLE,         1  * 4}, // COMPUTE_THREAD_TRACE_ENABLE
629    { R_00B890_COMPUTE_USER_ACCUM_0,                5  * 4}, // COMPUTE_PGM_RSRC3
630    { R_00B8A8_COMPUTE_SHADER_CHKSUM,               6  * 4}, // COMPUTE_DISPATCH_INTERLEAVE
631    { R_00B900_COMPUTE_USER_DATA_0,                 16 * 4}, // COMPUTE_USER_DATA_15
632    { R_00B9F4_COMPUTE_DISPATCH_TUNNEL,             1  * 4}  // COMPUTE_DISPATCH_TUNNEL
633 };
634 
635 /* Defines the set of ranges of context registers we shadow when mid command buffer preemption
636  * is enabled.
637  */
638 static const struct ac_reg_range Gfx11ContextShadowRange[] =
639 {
640    /* First register                            Count * 4      Last register */
641    { R_028000_DB_RENDER_CONTROL,                  6   * 4}, // DB_HTILE_DATA_BASE
642    { R_02801C_DB_DEPTH_SIZE_XY,                   7   * 4}, // PA_SC_SCREEN_SCISSOR_BR
643    { R_02803C_DB_RESERVED_REG_2,                  10  * 4}, // DB_SPI_VRS_CENTER_LOCATION
644    { R_028068_DB_Z_READ_BASE_HI,                  8   * 4}, // TA_BC_BASE_ADDR_HI
645    { R_0281E8_COHER_DEST_BASE_HI_0,               94  * 4}, // PA_SC_TILE_STEERING_OVERRIDE
646    { R_0283D0_PA_SC_VRS_OVERRIDE_CNTL,            4   * 4}, // PA_SC_VRS_RATE_FEEDBACK_SIZE_XY
647    { R_0283E4_PA_SC_VRS_RATE_CACHE_CNTL,          1   * 4}, // PA_SC_VRS_RATE_CACHE_CNTL
648    { R_0283F0_PA_SC_VRS_RATE_BASE,                3   * 4}, // PA_SC_VRS_RATE_SIZE_XY
649    { R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX,       11  * 4}, // DB_STENCILREFMASK_BF
650    { R_02843C_PA_CL_VPORT_XSCALE,                 120 * 4}, // PA_CL_UCP_5_W
651    { R_02861C_PA_CL_PROG_NEAR_CLIP_Z,             2   * 4}, // PA_RATE_CNTL - not shadowed by RS64 !!!
652    { R_028644_SPI_PS_INPUT_CNTL_0,                33  * 4}, // SPI_VS_OUT_CONFIG
653    { R_0286CC_SPI_PS_INPUT_ENA,                   6   * 4}, // SPI_BARYC_CNTL
654    { R_0286E8_SPI_TMPRING_SIZE,                   3   * 4}, // SPI_GFX_SCRATCH_BASE_HI
655    { R_028708_SPI_SHADER_IDX_FORMAT,              4   * 4}, // SPI_SHADER_COL_FORMAT
656    { R_028750_SX_PS_DOWNCONVERT_CONTROL,          20  * 4}, // CB_BLEND7_CONTROL
657    { R_0287D4_PA_CL_POINT_X_RAD,                  4   * 4}, // PA_CL_POINT_CULL_RAD
658    { R_0287FC_GE_MAX_OUTPUT_PER_SUBGROUP,         14  * 4}, // PA_SU_SMALL_PRIM_FILTER_CNTL
659    { R_028838_PA_CL_NGG_CNTL,                     5   * 4}, // PA_CL_VRS_CNTL
660    { R_028A00_PA_SU_POINT_SIZE,                   4   * 4}, // PA_SC_LINE_STIPPLE
661    { R_028A18_VGT_HOS_MAX_TESS_LEVEL,             2   * 4}, // VGT_HOS_MIN_TESS_LEVEL
662    { R_028A48_PA_SC_MODE_CNTL_0,                  3   * 4}, // VGT_ENHANCE
663    { R_028A84_VGT_PRIMITIVEID_EN,                 1   * 4}, // VGT_PRIMITIVEID_EN
664    { R_028A8C_VGT_PRIMITIVEID_RESET,              1   * 4}, // VGT_PRIMITIVEID_RESET
665    { R_028A98_VGT_DRAW_PAYLOAD_CNTL,              1   * 4}, // VGT_DRAW_PAYLOAD_CNTL
666    { R_028AAC_VGT_ESGS_RING_ITEMSIZE,             1   * 4}, // VGT_ESGS_RING_ITEMSIZE
667    { R_028AB4_VGT_REUSE_OFF,                      1   * 4}, // VGT_REUSE_OFF
668    { R_028ABC_DB_HTILE_SURFACE,                   4   * 4}, // DB_PRELOAD_CONTROL
669    { R_028B28_VGT_STRMOUT_DRAW_OPAQUE_OFFSET,     3   * 4}, // VGT_STRMOUT_DRAW_OPAQUE_VERTEX_STRIDE
670    { R_028B38_VGT_GS_MAX_VERT_OUT,                1   * 4}, // VGT_GS_MAX_VERT_OUT
671    { R_028B4C_GE_NGG_SUBGRP_CNTL,                 4   * 4}, // VGT_LS_HS_CONFIG
672    { R_028B6C_VGT_TF_PARAM,                       2   * 4}, // DB_ALPHA_TO_MASK
673    { R_028B78_PA_SU_POLY_OFFSET_DB_FMT_CNTL,      7   * 4}, // VGT_GS_INSTANCE_CNT
674    { R_028BD4_PA_SC_CENTROID_PRIORITY_0,          33  * 4}, // PA_SC_BINNER_CNTL_2
675    { R_028C60_CB_COLOR0_BASE,                     1   * 4}, // CB_COLOR0_BASE
676    { R_028C6C_CB_COLOR0_VIEW,                     4   * 4}, // CB_COLOR0_FDCC_CONTROL
677    { R_028C94_CB_COLOR0_DCC_BASE,                 1   * 4}, // CB_COLOR0_DCC_BASE
678    { R_028C9C_CB_COLOR1_BASE,                     1   * 4}, // CB_COLOR1_BASE
679    { R_028CA8_CB_COLOR1_VIEW,                     4   * 4}, // CB_COLOR1_FDCC_CONTROL
680    { R_028CD0_CB_COLOR1_DCC_BASE,                 1   * 4}, // CB_COLOR1_DCC_BASE
681    { R_028CD8_CB_COLOR2_BASE,                     1   * 4}, // CB_COLOR2_BASE
682    { R_028CE4_CB_COLOR2_VIEW,                     4   * 4}, // CB_COLOR2_FDCC_CONTROL
683    { R_028D0C_CB_COLOR2_DCC_BASE,                 1   * 4}, // CB_COLOR2_DCC_BASE
684    { R_028D14_CB_COLOR3_BASE,                     1   * 4}, // CB_COLOR3_BASE
685    { R_028D20_CB_COLOR3_VIEW,                     4   * 4}, // CB_COLOR3_FDCC_CONTROL
686    { R_028D48_CB_COLOR3_DCC_BASE,                 1   * 4}, // CB_COLOR3_DCC_BASE
687    { R_028D50_CB_COLOR4_BASE,                     1   * 4}, // CB_COLOR4_BASE
688    { R_028D5C_CB_COLOR4_VIEW,                     4   * 4}, // CB_COLOR4_FDCC_CONTROL
689    { R_028D84_CB_COLOR4_DCC_BASE,                 1   * 4}, // CB_COLOR4_DCC_BASE
690    { R_028D8C_CB_COLOR5_BASE,                     1   * 4}, // CB_COLOR5_BASE
691    { R_028D98_CB_COLOR5_VIEW,                     4   * 4}, // CB_COLOR5_FDCC_CONTROL
692    { R_028DC0_CB_COLOR5_DCC_BASE,                 1   * 4}, // CB_COLOR5_DCC_BASE
693    { R_028DC8_CB_COLOR6_BASE,                     1   * 4}, // CB_COLOR6_BASE
694    { R_028DD4_CB_COLOR6_VIEW,                     4   * 4}, // CB_COLOR6_FDCC_CONTROL
695    { R_028DFC_CB_COLOR6_DCC_BASE,                 1   * 4}, // CB_COLOR6_DCC_BASE
696    { R_028E04_CB_COLOR7_BASE,                     1   * 4}, // CB_COLOR7_BASE
697    { R_028E10_CB_COLOR7_VIEW,                     4   * 4}, // CB_COLOR7_FDCC_CONTROL
698    { R_028E38_CB_COLOR7_DCC_BASE,                 1   * 4}, // CB_COLOR7_DCC_BASE
699    { R_028E40_CB_COLOR0_BASE_EXT,                 8   * 4}, // CB_COLOR7_BASE_EXT
700    { R_028EA0_CB_COLOR0_DCC_BASE_EXT,             24  * 4}  // CB_COLOR7_ATTRIB3
701 };
702 
703 static const struct ac_reg_range Gfx11UserConfigShadowRange[] =
704 {
705    /* First register                            Count * 4      Last register */
706    { R_030908_VGT_PRIMITIVE_TYPE,                   1 * 4}, // VGT_PRIMITIVE_TYPE
707    { R_030924_GE_MIN_VTX_INDX,                      3 * 4}, // GE_MULTI_PRIM_IB_RESET_EN
708    { R_030934_VGT_NUM_INSTANCES,                    4 * 4}, // VGT_TF_MEMORY_BASE
709    { R_030964_GE_MAX_VTX_INDX,                      3 * 4}, // GE_CNTL
710    { R_03097C_GE_STEREO_CNTL,                       5 * 4}, // GE_VRS_RATE
711    { R_030998_VGT_GS_OUT_PRIM_TYPE,                 1 * 4}, // VGT_GS_OUT_PRIM_TYPE
712    { R_030A00_PA_SU_LINE_STIPPLE_VALUE,             2 * 4}, // PA_SC_LINE_STIPPLE_STATE - not shadowed by RS64
713    { R_030E00_TA_CS_BC_BASE_ADDR,                   2 * 4}, // TA_CS_BC_BASE_ADDR_HI
714    { R_031110_SPI_GS_THROTTLE_CNTL1,                4 * 4}, // SPI_ATTRIBUTE_RING_SIZE
715    /* GDS_STRMOUT_* registers are not listed because they are modified outside of the command buffer,
716     * so they have to be shadowed differently by firmware.
717   . */
718 };
719 
ac_get_reg_ranges(enum amd_gfx_level gfx_level,enum radeon_family family,enum ac_reg_range_type type,unsigned * num_ranges,const struct ac_reg_range ** ranges)720 void ac_get_reg_ranges(enum amd_gfx_level gfx_level, enum radeon_family family,
721                        enum ac_reg_range_type type, unsigned *num_ranges,
722                        const struct ac_reg_range **ranges)
723 {
724    assert(gfx_level < GFX12);
725 
726 #define RETURN(array)                                                                              \
727    do {                                                                                            \
728       *ranges = array;                                                                             \
729       *num_ranges = ARRAY_SIZE(array);                                                             \
730    } while (0)
731 
732    *num_ranges = 0;
733    *ranges = NULL;
734 
735    switch (type) {
736    case SI_REG_RANGE_UCONFIG:
737       if (gfx_level == GFX11 || gfx_level == GFX11_5)
738          RETURN(Gfx11UserConfigShadowRange);
739       else if (gfx_level == GFX10_3)
740          RETURN(Gfx103UserConfigShadowRange);
741       else if (gfx_level == GFX10)
742          RETURN(Nv10UserConfigShadowRange);
743       else if (gfx_level == GFX9)
744          RETURN(Gfx9UserConfigShadowRange);
745       break;
746    case SI_REG_RANGE_CONTEXT:
747       if (gfx_level == GFX11 || gfx_level == GFX11_5)
748          RETURN(Gfx11ContextShadowRange);
749       else if (gfx_level == GFX10_3)
750          RETURN(Gfx103ContextShadowRange);
751       else if (gfx_level == GFX10)
752          RETURN(Nv10ContextShadowRange);
753       else if (gfx_level == GFX9)
754          RETURN(Gfx9ContextShadowRange);
755       break;
756    case SI_REG_RANGE_SH:
757       if (gfx_level == GFX11 || gfx_level == GFX11_5)
758          RETURN(Gfx11ShShadowRange);
759       else if (gfx_level == GFX10_3 || gfx_level == GFX10)
760          RETURN(Gfx10ShShadowRange);
761       else if (family == CHIP_RAVEN2 || family == CHIP_RENOIR)
762          RETURN(Gfx9ShShadowRangeRaven2);
763       else if (gfx_level == GFX9)
764          RETURN(Gfx9ShShadowRange);
765       break;
766    case SI_REG_RANGE_CS_SH:
767       if (gfx_level == GFX11 || gfx_level == GFX11_5)
768          RETURN(Gfx11CsShShadowRange);
769       else if (gfx_level == GFX10_3 || gfx_level == GFX10)
770          RETURN(Gfx10CsShShadowRange);
771       else if (family == CHIP_RAVEN2 || family == CHIP_RENOIR)
772          RETURN(Gfx9CsShShadowRangeRaven2);
773       else if (gfx_level == GFX9)
774          RETURN(Gfx9CsShShadowRange);
775       break;
776    default:
777       break;
778    }
779 }
780 
781 /**
782  * Emulate CLEAR_STATE.
783  */
gfx9_emulate_clear_state(struct radeon_cmdbuf * cs,set_context_reg_seq_array_fn set_context_reg_seq_array)784 static void gfx9_emulate_clear_state(struct radeon_cmdbuf *cs,
785                                      set_context_reg_seq_array_fn set_context_reg_seq_array)
786 {
787    static const uint32_t DbRenderControlGfx9[] = {
788       0x0,        // DB_RENDER_CONTROL
789       0x0,        // DB_COUNT_CONTROL
790       0x0,        // DB_DEPTH_VIEW
791       0x0,        // DB_RENDER_OVERRIDE
792       0x0,        // DB_RENDER_OVERRIDE2
793       0x0,        // DB_HTILE_DATA_BASE
794       0x0,        // DB_HTILE_DATA_BASE_HI
795       0x0,        // DB_DEPTH_SIZE
796       0x0,        // DB_DEPTH_BOUNDS_MIN
797       0x0,        // DB_DEPTH_BOUNDS_MAX
798       0x0,        // DB_STENCIL_CLEAR
799       0x0,        // DB_DEPTH_CLEAR
800       0x0,        // PA_SC_SCREEN_SCISSOR_TL
801       0x40004000, // PA_SC_SCREEN_SCISSOR_BR
802       0x0,        // DB_Z_INFO
803       0x0,        // DB_STENCIL_INFO
804       0x0,        // DB_Z_READ_BASE
805       0x0,        // DB_Z_READ_BASE_HI
806       0x0,        // DB_STENCIL_READ_BASE
807       0x0,        // DB_STENCIL_READ_BASE_HI
808       0x0,        // DB_Z_WRITE_BASE
809       0x0,        // DB_Z_WRITE_BASE_HI
810       0x0,        // DB_STENCIL_WRITE_BASE
811       0x0,        // DB_STENCIL_WRITE_BASE_HI
812       0x0,        // DB_DFSM_CONTROL
813       0x0,        //
814       0x0,        // DB_Z_INFO2
815       0x0,        // DB_STENCIL_INFO2
816       0x0,        //
817       0x0,        //
818       0x0,        //
819       0x0,        //
820       0x0,        // TA_BC_BASE_ADDR
821       0x0         // TA_BC_BASE_ADDR_HI
822    };
823    static const uint32_t CoherDestBaseHi0Gfx9[] = {
824       0x0,        // COHER_DEST_BASE_HI_0
825       0x0,        // COHER_DEST_BASE_HI_1
826       0x0,        // COHER_DEST_BASE_HI_2
827       0x0,        // COHER_DEST_BASE_HI_3
828       0x0,        // COHER_DEST_BASE_2
829       0x0,        // COHER_DEST_BASE_3
830       0x0,        // PA_SC_WINDOW_OFFSET
831       0x80000000, // PA_SC_WINDOW_SCISSOR_TL
832       0x40004000, // PA_SC_WINDOW_SCISSOR_BR
833       0xffff,     // PA_SC_CLIPRECT_RULE
834       0x0,        // PA_SC_CLIPRECT_0_TL
835       0x40004000, // PA_SC_CLIPRECT_0_BR
836       0x0,        // PA_SC_CLIPRECT_1_TL
837       0x40004000, // PA_SC_CLIPRECT_1_BR
838       0x0,        // PA_SC_CLIPRECT_2_TL
839       0x40004000, // PA_SC_CLIPRECT_2_BR
840       0x0,        // PA_SC_CLIPRECT_3_TL
841       0x40004000, // PA_SC_CLIPRECT_3_BR
842       0xaa99aaaa, // PA_SC_EDGERULE
843       0x0,        // PA_SU_HARDWARE_SCREEN_OFFSET
844       0xffffffff, // CB_TARGET_MASK
845       0xffffffff, // CB_SHADER_MASK
846       0x80000000, // PA_SC_GENERIC_SCISSOR_TL
847       0x40004000, // PA_SC_GENERIC_SCISSOR_BR
848       0x0,        // COHER_DEST_BASE_0
849       0x0,        // COHER_DEST_BASE_1
850       0x80000000, // PA_SC_VPORT_SCISSOR_0_TL
851       0x40004000, // PA_SC_VPORT_SCISSOR_0_BR
852       0x80000000, // PA_SC_VPORT_SCISSOR_1_TL
853       0x40004000, // PA_SC_VPORT_SCISSOR_1_BR
854       0x80000000, // PA_SC_VPORT_SCISSOR_2_TL
855       0x40004000, // PA_SC_VPORT_SCISSOR_2_BR
856       0x80000000, // PA_SC_VPORT_SCISSOR_3_TL
857       0x40004000, // PA_SC_VPORT_SCISSOR_3_BR
858       0x80000000, // PA_SC_VPORT_SCISSOR_4_TL
859       0x40004000, // PA_SC_VPORT_SCISSOR_4_BR
860       0x80000000, // PA_SC_VPORT_SCISSOR_5_TL
861       0x40004000, // PA_SC_VPORT_SCISSOR_5_BR
862       0x80000000, // PA_SC_VPORT_SCISSOR_6_TL
863       0x40004000, // PA_SC_VPORT_SCISSOR_6_BR
864       0x80000000, // PA_SC_VPORT_SCISSOR_7_TL
865       0x40004000, // PA_SC_VPORT_SCISSOR_7_BR
866       0x80000000, // PA_SC_VPORT_SCISSOR_8_TL
867       0x40004000, // PA_SC_VPORT_SCISSOR_8_BR
868       0x80000000, // PA_SC_VPORT_SCISSOR_9_TL
869       0x40004000, // PA_SC_VPORT_SCISSOR_9_BR
870       0x80000000, // PA_SC_VPORT_SCISSOR_10_TL
871       0x40004000, // PA_SC_VPORT_SCISSOR_10_BR
872       0x80000000, // PA_SC_VPORT_SCISSOR_11_TL
873       0x40004000, // PA_SC_VPORT_SCISSOR_11_BR
874       0x80000000, // PA_SC_VPORT_SCISSOR_12_TL
875       0x40004000, // PA_SC_VPORT_SCISSOR_12_BR
876       0x80000000, // PA_SC_VPORT_SCISSOR_13_TL
877       0x40004000, // PA_SC_VPORT_SCISSOR_13_BR
878       0x80000000, // PA_SC_VPORT_SCISSOR_14_TL
879       0x40004000, // PA_SC_VPORT_SCISSOR_14_BR
880       0x80000000, // PA_SC_VPORT_SCISSOR_15_TL
881       0x40004000, // PA_SC_VPORT_SCISSOR_15_BR
882       0x0,        // PA_SC_VPORT_ZMIN_0
883       0x3f800000, // PA_SC_VPORT_ZMAX_0
884       0x0,        // PA_SC_VPORT_ZMIN_1
885       0x3f800000, // PA_SC_VPORT_ZMAX_1
886       0x0,        // PA_SC_VPORT_ZMIN_2
887       0x3f800000, // PA_SC_VPORT_ZMAX_2
888       0x0,        // PA_SC_VPORT_ZMIN_3
889       0x3f800000, // PA_SC_VPORT_ZMAX_3
890       0x0,        // PA_SC_VPORT_ZMIN_4
891       0x3f800000, // PA_SC_VPORT_ZMAX_4
892       0x0,        // PA_SC_VPORT_ZMIN_5
893       0x3f800000, // PA_SC_VPORT_ZMAX_5
894       0x0,        // PA_SC_VPORT_ZMIN_6
895       0x3f800000, // PA_SC_VPORT_ZMAX_6
896       0x0,        // PA_SC_VPORT_ZMIN_7
897       0x3f800000, // PA_SC_VPORT_ZMAX_7
898       0x0,        // PA_SC_VPORT_ZMIN_8
899       0x3f800000, // PA_SC_VPORT_ZMAX_8
900       0x0,        // PA_SC_VPORT_ZMIN_9
901       0x3f800000, // PA_SC_VPORT_ZMAX_9
902       0x0,        // PA_SC_VPORT_ZMIN_10
903       0x3f800000, // PA_SC_VPORT_ZMAX_10
904       0x0,        // PA_SC_VPORT_ZMIN_11
905       0x3f800000, // PA_SC_VPORT_ZMAX_11
906       0x0,        // PA_SC_VPORT_ZMIN_12
907       0x3f800000, // PA_SC_VPORT_ZMAX_12
908       0x0,        // PA_SC_VPORT_ZMIN_13
909       0x3f800000, // PA_SC_VPORT_ZMAX_13
910       0x0,        // PA_SC_VPORT_ZMIN_14
911       0x3f800000, // PA_SC_VPORT_ZMAX_14
912       0x0,        // PA_SC_VPORT_ZMIN_15
913       0x3f800000, // PA_SC_VPORT_ZMAX_15
914       0x0,        // PA_SC_RASTER_CONFIG
915       0x0,        // PA_SC_RASTER_CONFIG_1
916       0x0,        //
917       0x0         // PA_SC_TILE_STEERING_OVERRIDE
918    };
919    static const uint32_t VgtMultiPrimIbResetIndxGfx9[] = {
920       0x0 // VGT_MULTI_PRIM_IB_RESET_INDX
921    };
922    static const uint32_t CbBlendRedGfx9[] = {
923       0x0,       // CB_BLEND_RED
924       0x0,       // CB_BLEND_GREEN
925       0x0,       // CB_BLEND_BLUE
926       0x0,       // CB_BLEND_ALPHA
927       0x0,       // CB_DCC_CONTROL
928       0x0,       //
929       0x0,       // DB_STENCIL_CONTROL
930       0x1000000, // DB_STENCILREFMASK
931       0x1000000, // DB_STENCILREFMASK_BF
932       0x0,       //
933       0x0,       // PA_CL_VPORT_XSCALE
934       0x0,       // PA_CL_VPORT_XOFFSET
935       0x0,       // PA_CL_VPORT_YSCALE
936       0x0,       // PA_CL_VPORT_YOFFSET
937       0x0,       // PA_CL_VPORT_ZSCALE
938       0x0,       // PA_CL_VPORT_ZOFFSET
939       0x0,       // PA_CL_VPORT_XSCALE_1
940       0x0,       // PA_CL_VPORT_XOFFSET_1
941       0x0,       // PA_CL_VPORT_YSCALE_1
942       0x0,       // PA_CL_VPORT_YOFFSET_1
943       0x0,       // PA_CL_VPORT_ZSCALE_1
944       0x0,       // PA_CL_VPORT_ZOFFSET_1
945       0x0,       // PA_CL_VPORT_XSCALE_2
946       0x0,       // PA_CL_VPORT_XOFFSET_2
947       0x0,       // PA_CL_VPORT_YSCALE_2
948       0x0,       // PA_CL_VPORT_YOFFSET_2
949       0x0,       // PA_CL_VPORT_ZSCALE_2
950       0x0,       // PA_CL_VPORT_ZOFFSET_2
951       0x0,       // PA_CL_VPORT_XSCALE_3
952       0x0,       // PA_CL_VPORT_XOFFSET_3
953       0x0,       // PA_CL_VPORT_YSCALE_3
954       0x0,       // PA_CL_VPORT_YOFFSET_3
955       0x0,       // PA_CL_VPORT_ZSCALE_3
956       0x0,       // PA_CL_VPORT_ZOFFSET_3
957       0x0,       // PA_CL_VPORT_XSCALE_4
958       0x0,       // PA_CL_VPORT_XOFFSET_4
959       0x0,       // PA_CL_VPORT_YSCALE_4
960       0x0,       // PA_CL_VPORT_YOFFSET_4
961       0x0,       // PA_CL_VPORT_ZSCALE_4
962       0x0,       // PA_CL_VPORT_ZOFFSET_4
963       0x0,       // PA_CL_VPORT_XSCALE_5
964       0x0,       // PA_CL_VPORT_XOFFSET_5
965       0x0,       // PA_CL_VPORT_YSCALE_5
966       0x0,       // PA_CL_VPORT_YOFFSET_5
967       0x0,       // PA_CL_VPORT_ZSCALE_5
968       0x0,       // PA_CL_VPORT_ZOFFSET_5
969       0x0,       // PA_CL_VPORT_XSCALE_6
970       0x0,       // PA_CL_VPORT_XOFFSET_6
971       0x0,       // PA_CL_VPORT_YSCALE_6
972       0x0,       // PA_CL_VPORT_YOFFSET_6
973       0x0,       // PA_CL_VPORT_ZSCALE_6
974       0x0,       // PA_CL_VPORT_ZOFFSET_6
975       0x0,       // PA_CL_VPORT_XSCALE_7
976       0x0,       // PA_CL_VPORT_XOFFSET_7
977       0x0,       // PA_CL_VPORT_YSCALE_7
978       0x0,       // PA_CL_VPORT_YOFFSET_7
979       0x0,       // PA_CL_VPORT_ZSCALE_7
980       0x0,       // PA_CL_VPORT_ZOFFSET_7
981       0x0,       // PA_CL_VPORT_XSCALE_8
982       0x0,       // PA_CL_VPORT_XOFFSET_8
983       0x0,       // PA_CL_VPORT_YSCALE_8
984       0x0,       // PA_CL_VPORT_YOFFSET_8
985       0x0,       // PA_CL_VPORT_ZSCALE_8
986       0x0,       // PA_CL_VPORT_ZOFFSET_8
987       0x0,       // PA_CL_VPORT_XSCALE_9
988       0x0,       // PA_CL_VPORT_XOFFSET_9
989       0x0,       // PA_CL_VPORT_YSCALE_9
990       0x0,       // PA_CL_VPORT_YOFFSET_9
991       0x0,       // PA_CL_VPORT_ZSCALE_9
992       0x0,       // PA_CL_VPORT_ZOFFSET_9
993       0x0,       // PA_CL_VPORT_XSCALE_10
994       0x0,       // PA_CL_VPORT_XOFFSET_10
995       0x0,       // PA_CL_VPORT_YSCALE_10
996       0x0,       // PA_CL_VPORT_YOFFSET_10
997       0x0,       // PA_CL_VPORT_ZSCALE_10
998       0x0,       // PA_CL_VPORT_ZOFFSET_10
999       0x0,       // PA_CL_VPORT_XSCALE_11
1000       0x0,       // PA_CL_VPORT_XOFFSET_11
1001       0x0,       // PA_CL_VPORT_YSCALE_11
1002       0x0,       // PA_CL_VPORT_YOFFSET_11
1003       0x0,       // PA_CL_VPORT_ZSCALE_11
1004       0x0,       // PA_CL_VPORT_ZOFFSET_11
1005       0x0,       // PA_CL_VPORT_XSCALE_12
1006       0x0,       // PA_CL_VPORT_XOFFSET_12
1007       0x0,       // PA_CL_VPORT_YSCALE_12
1008       0x0,       // PA_CL_VPORT_YOFFSET_12
1009       0x0,       // PA_CL_VPORT_ZSCALE_12
1010       0x0,       // PA_CL_VPORT_ZOFFSET_12
1011       0x0,       // PA_CL_VPORT_XSCALE_13
1012       0x0,       // PA_CL_VPORT_XOFFSET_13
1013       0x0,       // PA_CL_VPORT_YSCALE_13
1014       0x0,       // PA_CL_VPORT_YOFFSET_13
1015       0x0,       // PA_CL_VPORT_ZSCALE_13
1016       0x0,       // PA_CL_VPORT_ZOFFSET_13
1017       0x0,       // PA_CL_VPORT_XSCALE_14
1018       0x0,       // PA_CL_VPORT_XOFFSET_14
1019       0x0,       // PA_CL_VPORT_YSCALE_14
1020       0x0,       // PA_CL_VPORT_YOFFSET_14
1021       0x0,       // PA_CL_VPORT_ZSCALE_14
1022       0x0,       // PA_CL_VPORT_ZOFFSET_14
1023       0x0,       // PA_CL_VPORT_XSCALE_15
1024       0x0,       // PA_CL_VPORT_XOFFSET_15
1025       0x0,       // PA_CL_VPORT_YSCALE_15
1026       0x0,       // PA_CL_VPORT_YOFFSET_15
1027       0x0,       // PA_CL_VPORT_ZSCALE_15
1028       0x0,       // PA_CL_VPORT_ZOFFSET_15
1029       0x0,       // PA_CL_UCP_0_X
1030       0x0,       // PA_CL_UCP_0_Y
1031       0x0,       // PA_CL_UCP_0_Z
1032       0x0,       // PA_CL_UCP_0_W
1033       0x0,       // PA_CL_UCP_1_X
1034       0x0,       // PA_CL_UCP_1_Y
1035       0x0,       // PA_CL_UCP_1_Z
1036       0x0,       // PA_CL_UCP_1_W
1037       0x0,       // PA_CL_UCP_2_X
1038       0x0,       // PA_CL_UCP_2_Y
1039       0x0,       // PA_CL_UCP_2_Z
1040       0x0,       // PA_CL_UCP_2_W
1041       0x0,       // PA_CL_UCP_3_X
1042       0x0,       // PA_CL_UCP_3_Y
1043       0x0,       // PA_CL_UCP_3_Z
1044       0x0,       // PA_CL_UCP_3_W
1045       0x0,       // PA_CL_UCP_4_X
1046       0x0,       // PA_CL_UCP_4_Y
1047       0x0,       // PA_CL_UCP_4_Z
1048       0x0,       // PA_CL_UCP_4_W
1049       0x0,       // PA_CL_UCP_5_X
1050       0x0,       // PA_CL_UCP_5_Y
1051       0x0,       // PA_CL_UCP_5_Z
1052       0x0        // PA_CL_UCP_5_W
1053    };
1054    static const uint32_t SpiPsInputCntl0Gfx9[] = {
1055       0x0, // SPI_PS_INPUT_CNTL_0
1056       0x0, // SPI_PS_INPUT_CNTL_1
1057       0x0, // SPI_PS_INPUT_CNTL_2
1058       0x0, // SPI_PS_INPUT_CNTL_3
1059       0x0, // SPI_PS_INPUT_CNTL_4
1060       0x0, // SPI_PS_INPUT_CNTL_5
1061       0x0, // SPI_PS_INPUT_CNTL_6
1062       0x0, // SPI_PS_INPUT_CNTL_7
1063       0x0, // SPI_PS_INPUT_CNTL_8
1064       0x0, // SPI_PS_INPUT_CNTL_9
1065       0x0, // SPI_PS_INPUT_CNTL_10
1066       0x0, // SPI_PS_INPUT_CNTL_11
1067       0x0, // SPI_PS_INPUT_CNTL_12
1068       0x0, // SPI_PS_INPUT_CNTL_13
1069       0x0, // SPI_PS_INPUT_CNTL_14
1070       0x0, // SPI_PS_INPUT_CNTL_15
1071       0x0, // SPI_PS_INPUT_CNTL_16
1072       0x0, // SPI_PS_INPUT_CNTL_17
1073       0x0, // SPI_PS_INPUT_CNTL_18
1074       0x0, // SPI_PS_INPUT_CNTL_19
1075       0x0, // SPI_PS_INPUT_CNTL_20
1076       0x0, // SPI_PS_INPUT_CNTL_21
1077       0x0, // SPI_PS_INPUT_CNTL_22
1078       0x0, // SPI_PS_INPUT_CNTL_23
1079       0x0, // SPI_PS_INPUT_CNTL_24
1080       0x0, // SPI_PS_INPUT_CNTL_25
1081       0x0, // SPI_PS_INPUT_CNTL_26
1082       0x0, // SPI_PS_INPUT_CNTL_27
1083       0x0, // SPI_PS_INPUT_CNTL_28
1084       0x0, // SPI_PS_INPUT_CNTL_29
1085       0x0, // SPI_PS_INPUT_CNTL_30
1086       0x0, // SPI_PS_INPUT_CNTL_31
1087       0x0, // SPI_VS_OUT_CONFIG
1088       0x0, //
1089       0x0, // SPI_PS_INPUT_ENA
1090       0x0, // SPI_PS_INPUT_ADDR
1091       0x0, // SPI_INTERP_CONTROL_0
1092       0x2, // SPI_PS_IN_CONTROL
1093       0x0, //
1094       0x0, // SPI_BARYC_CNTL
1095       0x0, //
1096       0x0, // SPI_TMPRING_SIZE
1097       0x0, //
1098       0x0, //
1099       0x0, //
1100       0x0, //
1101       0x0, //
1102       0x0, //
1103       0x0, //
1104       0x0, //
1105       0x0, // SPI_SHADER_POS_FORMAT
1106       0x0, // SPI_SHADER_Z_FORMAT
1107       0x0  // SPI_SHADER_COL_FORMAT
1108    };
1109    static const uint32_t SxPsDownconvertGfx9[] = {
1110       0x0, // SX_PS_DOWNCONVERT
1111       0x0, // SX_BLEND_OPT_EPSILON
1112       0x0, // SX_BLEND_OPT_CONTROL
1113       0x0, // SX_MRT0_BLEND_OPT
1114       0x0, // SX_MRT1_BLEND_OPT
1115       0x0, // SX_MRT2_BLEND_OPT
1116       0x0, // SX_MRT3_BLEND_OPT
1117       0x0, // SX_MRT4_BLEND_OPT
1118       0x0, // SX_MRT5_BLEND_OPT
1119       0x0, // SX_MRT6_BLEND_OPT
1120       0x0, // SX_MRT7_BLEND_OPT
1121       0x0, // CB_BLEND0_CONTROL
1122       0x0, // CB_BLEND1_CONTROL
1123       0x0, // CB_BLEND2_CONTROL
1124       0x0, // CB_BLEND3_CONTROL
1125       0x0, // CB_BLEND4_CONTROL
1126       0x0, // CB_BLEND5_CONTROL
1127       0x0, // CB_BLEND6_CONTROL
1128       0x0, // CB_BLEND7_CONTROL
1129       0x0, // CB_MRT0_EPITCH
1130       0x0, // CB_MRT1_EPITCH
1131       0x0, // CB_MRT2_EPITCH
1132       0x0, // CB_MRT3_EPITCH
1133       0x0, // CB_MRT4_EPITCH
1134       0x0, // CB_MRT5_EPITCH
1135       0x0, // CB_MRT6_EPITCH
1136       0x0  // CB_MRT7_EPITCH
1137    };
1138    static const uint32_t DbDepthControlGfx9[] = {
1139       0x0,     // DB_DEPTH_CONTROL
1140       0x0,     // DB_EQAA
1141       0x0,     // CB_COLOR_CONTROL
1142       0x0,     // DB_SHADER_CONTROL
1143       0x90000, // PA_CL_CLIP_CNTL
1144       0x4,     // PA_SU_SC_MODE_CNTL
1145       0x0,     // PA_CL_VTE_CNTL
1146       0x0,     // PA_CL_VS_OUT_CNTL
1147       0x0,     // PA_CL_NANINF_CNTL
1148       0x0,     // PA_SU_LINE_STIPPLE_CNTL
1149       0x0,     // PA_SU_LINE_STIPPLE_SCALE
1150       0x0,     // PA_SU_PRIM_FILTER_CNTL
1151       0x0,     // PA_SU_SMALL_PRIM_FILTER_CNTL
1152       0x0,     // PA_CL_OBJPRIM_ID_CNTL
1153       0x0,     // PA_CL_NGG_CNTL
1154       0x0,     // PA_SU_OVER_RASTERIZATION_CNTL
1155       0x0      // PA_STEREO_CNTL
1156    };
1157    static const uint32_t PaSuPointSizeGfx9[] = {
1158       0x0, // PA_SU_POINT_SIZE
1159       0x0, // PA_SU_POINT_MINMAX
1160       0x0, // PA_SU_LINE_CNTL
1161       0x0  // PA_SC_LINE_STIPPLE
1162    };
1163    static const uint32_t VgtHosMaxTessLevelGfx9[] = {
1164       0x0, // VGT_HOS_MAX_TESS_LEVEL
1165       0x0  // VGT_HOS_MIN_TESS_LEVEL
1166    };
1167    static const uint32_t VgtGsModeGfx9[] = {
1168       0x0,   // VGT_GS_MODE
1169       0x0,   // VGT_GS_ONCHIP_CNTL
1170       0x0,   // PA_SC_MODE_CNTL_0
1171       0x0,   // PA_SC_MODE_CNTL_1
1172       0x0,   // VGT_ENHANCE
1173       0x100, // VGT_GS_PER_ES
1174       0x80,  // VGT_ES_PER_GS
1175       0x2,   // VGT_GS_PER_VS
1176       0x0,   // VGT_GSVS_RING_OFFSET_1
1177       0x0,   // VGT_GSVS_RING_OFFSET_2
1178       0x0,   // VGT_GSVS_RING_OFFSET_3
1179       0x0    // VGT_GS_OUT_PRIM_TYPE
1180    };
1181    static const uint32_t VgtPrimitiveidEnGfx9[] = {
1182       0x0 // VGT_PRIMITIVEID_EN
1183    };
1184    static const uint32_t VgtPrimitiveidResetGfx9[] = {
1185       0x0 // VGT_PRIMITIVEID_RESET
1186    };
1187    static const uint32_t VgtGsMaxPrimsPerSubgroupGfx9[] = {
1188       0x0, // VGT_GS_MAX_PRIMS_PER_SUBGROUP
1189       0x0, // VGT_DRAW_PAYLOAD_CNTL
1190       0x0, //
1191       0x0, // VGT_INSTANCE_STEP_RATE_0
1192       0x0, // VGT_INSTANCE_STEP_RATE_1
1193       0x0, //
1194       0x0, // VGT_ESGS_RING_ITEMSIZE
1195       0x0, // VGT_GSVS_RING_ITEMSIZE
1196       0x0, // VGT_REUSE_OFF
1197       0x0, // VGT_VTX_CNT_EN
1198       0x0, // DB_HTILE_SURFACE
1199       0x0, // DB_SRESULTS_COMPARE_STATE0
1200       0x0, // DB_SRESULTS_COMPARE_STATE1
1201       0x0, // DB_PRELOAD_CONTROL
1202       0x0, //
1203       0x0, // VGT_STRMOUT_BUFFER_SIZE_0
1204       0x0  // VGT_STRMOUT_VTX_STRIDE_0
1205    };
1206    static const uint32_t VgtStrmoutBufferSize1Gfx9[] = {
1207       0x0, // VGT_STRMOUT_BUFFER_SIZE_1
1208       0x0  // VGT_STRMOUT_VTX_STRIDE_1
1209    };
1210    static const uint32_t VgtStrmoutBufferSize2Gfx9[] = {
1211       0x0, // VGT_STRMOUT_BUFFER_SIZE_2
1212       0x0  // VGT_STRMOUT_VTX_STRIDE_2
1213    };
1214    static const uint32_t VgtStrmoutBufferSize3Gfx9[] = {
1215       0x0, // VGT_STRMOUT_BUFFER_SIZE_3
1216       0x0  // VGT_STRMOUT_VTX_STRIDE_3
1217    };
1218    static const uint32_t VgtStrmoutDrawOpaqueOffsetGfx9[] = {
1219       0x0, // VGT_STRMOUT_DRAW_OPAQUE_OFFSET
1220       0x0, // VGT_STRMOUT_DRAW_OPAQUE_BUFFER_FILLED_SIZE
1221       0x0  // VGT_STRMOUT_DRAW_OPAQUE_VERTEX_STRIDE
1222    };
1223    static const uint32_t VgtGsMaxVertOutGfx9[] = {
1224       0x0, // VGT_GS_MAX_VERT_OUT
1225       0x0, //
1226       0x0, //
1227       0x0, //
1228       0x0, //
1229       0x0, //
1230       0x0, // VGT_TESS_DISTRIBUTION
1231       0x0, // VGT_SHADER_STAGES_EN
1232       0x0, // VGT_LS_HS_CONFIG
1233       0x0, // VGT_GS_VERT_ITEMSIZE
1234       0x0, // VGT_GS_VERT_ITEMSIZE_1
1235       0x0, // VGT_GS_VERT_ITEMSIZE_2
1236       0x0, // VGT_GS_VERT_ITEMSIZE_3
1237       0x0, // VGT_TF_PARAM
1238       0x0, // DB_ALPHA_TO_MASK
1239       0x0, // VGT_DISPATCH_DRAW_INDEX
1240       0x0, // PA_SU_POLY_OFFSET_DB_FMT_CNTL
1241       0x0, // PA_SU_POLY_OFFSET_CLAMP
1242       0x0, // PA_SU_POLY_OFFSET_FRONT_SCALE
1243       0x0, // PA_SU_POLY_OFFSET_FRONT_OFFSET
1244       0x0, // PA_SU_POLY_OFFSET_BACK_SCALE
1245       0x0, // PA_SU_POLY_OFFSET_BACK_OFFSET
1246       0x0, // VGT_GS_INSTANCE_CNT
1247       0x0, // VGT_STRMOUT_CONFIG
1248       0x0  // VGT_STRMOUT_BUFFER_CONFIG
1249    };
1250    static const uint32_t PaScCentroidPriority0Gfx9[] = {
1251       0x0,        // PA_SC_CENTROID_PRIORITY_0
1252       0x0,        // PA_SC_CENTROID_PRIORITY_1
1253       0x1000,     // PA_SC_LINE_CNTL
1254       0x0,        // PA_SC_AA_CONFIG
1255       0x5,        // PA_SU_VTX_CNTL
1256       0x3f800000, // PA_CL_GB_VERT_CLIP_ADJ
1257       0x3f800000, // PA_CL_GB_VERT_DISC_ADJ
1258       0x3f800000, // PA_CL_GB_HORZ_CLIP_ADJ
1259       0x3f800000, // PA_CL_GB_HORZ_DISC_ADJ
1260       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_0
1261       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_1
1262       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_2
1263       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_3
1264       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_0
1265       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_1
1266       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_2
1267       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_3
1268       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_0
1269       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_1
1270       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_2
1271       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_3
1272       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_0
1273       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_1
1274       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_2
1275       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_3
1276       0xffffffff, // PA_SC_AA_MASK_X0Y0_X1Y0
1277       0xffffffff, // PA_SC_AA_MASK_X0Y1_X1Y1
1278       0x0,        // PA_SC_SHADER_CONTROL
1279       0x3,        // PA_SC_BINNER_CNTL_0
1280       0x0,        // PA_SC_BINNER_CNTL_1
1281       0x100000,   // PA_SC_CONSERVATIVE_RASTERIZATION_CNTL
1282       0x0,        // PA_SC_NGG_MODE_CNTL
1283       0x0,        //
1284       0x1e,       // VGT_VERTEX_REUSE_BLOCK_CNTL
1285       0x20,       // VGT_OUT_DEALLOC_CNTL
1286       0x0,        // CB_COLOR0_BASE
1287       0x0,        // CB_COLOR0_BASE_EXT
1288       0x0,        // CB_COLOR0_ATTRIB2
1289       0x0,        // CB_COLOR0_VIEW
1290       0x0,        // CB_COLOR0_INFO
1291       0x0,        // CB_COLOR0_ATTRIB
1292       0x0,        // CB_COLOR0_DCC_CONTROL
1293       0x0,        // CB_COLOR0_CMASK
1294       0x0,        // CB_COLOR0_CMASK_BASE_EXT
1295       0x0,        // CB_COLOR0_FMASK
1296       0x0,        // CB_COLOR0_FMASK_BASE_EXT
1297       0x0,        // CB_COLOR0_CLEAR_WORD0
1298       0x0,        // CB_COLOR0_CLEAR_WORD1
1299       0x0,        // CB_COLOR0_DCC_BASE
1300       0x0,        // CB_COLOR0_DCC_BASE_EXT
1301       0x0,        // CB_COLOR1_BASE
1302       0x0,        // CB_COLOR1_BASE_EXT
1303       0x0,        // CB_COLOR1_ATTRIB2
1304       0x0,        // CB_COLOR1_VIEW
1305       0x0,        // CB_COLOR1_INFO
1306       0x0,        // CB_COLOR1_ATTRIB
1307       0x0,        // CB_COLOR1_DCC_CONTROL
1308       0x0,        // CB_COLOR1_CMASK
1309       0x0,        // CB_COLOR1_CMASK_BASE_EXT
1310       0x0,        // CB_COLOR1_FMASK
1311       0x0,        // CB_COLOR1_FMASK_BASE_EXT
1312       0x0,        // CB_COLOR1_CLEAR_WORD0
1313       0x0,        // CB_COLOR1_CLEAR_WORD1
1314       0x0,        // CB_COLOR1_DCC_BASE
1315       0x0,        // CB_COLOR1_DCC_BASE_EXT
1316       0x0,        // CB_COLOR2_BASE
1317       0x0,        // CB_COLOR2_BASE_EXT
1318       0x0,        // CB_COLOR2_ATTRIB2
1319       0x0,        // CB_COLOR2_VIEW
1320       0x0,        // CB_COLOR2_INFO
1321       0x0,        // CB_COLOR2_ATTRIB
1322       0x0,        // CB_COLOR2_DCC_CONTROL
1323       0x0,        // CB_COLOR2_CMASK
1324       0x0,        // CB_COLOR2_CMASK_BASE_EXT
1325       0x0,        // CB_COLOR2_FMASK
1326       0x0,        // CB_COLOR2_FMASK_BASE_EXT
1327       0x0,        // CB_COLOR2_CLEAR_WORD0
1328       0x0,        // CB_COLOR2_CLEAR_WORD1
1329       0x0,        // CB_COLOR2_DCC_BASE
1330       0x0,        // CB_COLOR2_DCC_BASE_EXT
1331       0x0,        // CB_COLOR3_BASE
1332       0x0,        // CB_COLOR3_BASE_EXT
1333       0x0,        // CB_COLOR3_ATTRIB2
1334       0x0,        // CB_COLOR3_VIEW
1335       0x0,        // CB_COLOR3_INFO
1336       0x0,        // CB_COLOR3_ATTRIB
1337       0x0,        // CB_COLOR3_DCC_CONTROL
1338       0x0,        // CB_COLOR3_CMASK
1339       0x0,        // CB_COLOR3_CMASK_BASE_EXT
1340       0x0,        // CB_COLOR3_FMASK
1341       0x0,        // CB_COLOR3_FMASK_BASE_EXT
1342       0x0,        // CB_COLOR3_CLEAR_WORD0
1343       0x0,        // CB_COLOR3_CLEAR_WORD1
1344       0x0,        // CB_COLOR3_DCC_BASE
1345       0x0,        // CB_COLOR3_DCC_BASE_EXT
1346       0x0,        // CB_COLOR4_BASE
1347       0x0,        // CB_COLOR4_BASE_EXT
1348       0x0,        // CB_COLOR4_ATTRIB2
1349       0x0,        // CB_COLOR4_VIEW
1350       0x0,        // CB_COLOR4_INFO
1351       0x0,        // CB_COLOR4_ATTRIB
1352       0x0,        // CB_COLOR4_DCC_CONTROL
1353       0x0,        // CB_COLOR4_CMASK
1354       0x0,        // CB_COLOR4_CMASK_BASE_EXT
1355       0x0,        // CB_COLOR4_FMASK
1356       0x0,        // CB_COLOR4_FMASK_BASE_EXT
1357       0x0,        // CB_COLOR4_CLEAR_WORD0
1358       0x0,        // CB_COLOR4_CLEAR_WORD1
1359       0x0,        // CB_COLOR4_DCC_BASE
1360       0x0,        // CB_COLOR4_DCC_BASE_EXT
1361       0x0,        // CB_COLOR5_BASE
1362       0x0,        // CB_COLOR5_BASE_EXT
1363       0x0,        // CB_COLOR5_ATTRIB2
1364       0x0,        // CB_COLOR5_VIEW
1365       0x0,        // CB_COLOR5_INFO
1366       0x0,        // CB_COLOR5_ATTRIB
1367       0x0,        // CB_COLOR5_DCC_CONTROL
1368       0x0,        // CB_COLOR5_CMASK
1369       0x0,        // CB_COLOR5_CMASK_BASE_EXT
1370       0x0,        // CB_COLOR5_FMASK
1371       0x0,        // CB_COLOR5_FMASK_BASE_EXT
1372       0x0,        // CB_COLOR5_CLEAR_WORD0
1373       0x0,        // CB_COLOR5_CLEAR_WORD1
1374       0x0,        // CB_COLOR5_DCC_BASE
1375       0x0,        // CB_COLOR5_DCC_BASE_EXT
1376       0x0,        // CB_COLOR6_BASE
1377       0x0,        // CB_COLOR6_BASE_EXT
1378       0x0,        // CB_COLOR6_ATTRIB2
1379       0x0,        // CB_COLOR6_VIEW
1380       0x0,        // CB_COLOR6_INFO
1381       0x0,        // CB_COLOR6_ATTRIB
1382       0x0,        // CB_COLOR6_DCC_CONTROL
1383       0x0,        // CB_COLOR6_CMASK
1384       0x0,        // CB_COLOR6_CMASK_BASE_EXT
1385       0x0,        // CB_COLOR6_FMASK
1386       0x0,        // CB_COLOR6_FMASK_BASE_EXT
1387       0x0,        // CB_COLOR6_CLEAR_WORD0
1388       0x0,        // CB_COLOR6_CLEAR_WORD1
1389       0x0,        // CB_COLOR6_DCC_BASE
1390       0x0,        // CB_COLOR6_DCC_BASE_EXT
1391       0x0,        // CB_COLOR7_BASE
1392       0x0,        // CB_COLOR7_BASE_EXT
1393       0x0,        // CB_COLOR7_ATTRIB2
1394       0x0,        // CB_COLOR7_VIEW
1395       0x0,        // CB_COLOR7_INFO
1396       0x0,        // CB_COLOR7_ATTRIB
1397       0x0,        // CB_COLOR7_DCC_CONTROL
1398       0x0,        // CB_COLOR7_CMASK
1399       0x0,        // CB_COLOR7_CMASK_BASE_EXT
1400       0x0,        // CB_COLOR7_FMASK
1401       0x0,        // CB_COLOR7_FMASK_BASE_EXT
1402       0x0,        // CB_COLOR7_CLEAR_WORD0
1403       0x0,        // CB_COLOR7_CLEAR_WORD1
1404       0x0,        // CB_COLOR7_DCC_BASE
1405       0x0         // CB_COLOR7_DCC_BASE_EXT
1406    };
1407 
1408 #define SET(array) ARRAY_SIZE(array), array
1409 
1410    set_context_reg_seq_array(cs, R_028000_DB_RENDER_CONTROL, SET(DbRenderControlGfx9));
1411    set_context_reg_seq_array(cs, R_0281E8_COHER_DEST_BASE_HI_0, SET(CoherDestBaseHi0Gfx9));
1412    set_context_reg_seq_array(cs, R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX,
1413                              SET(VgtMultiPrimIbResetIndxGfx9));
1414    set_context_reg_seq_array(cs, R_028414_CB_BLEND_RED, SET(CbBlendRedGfx9));
1415    set_context_reg_seq_array(cs, R_028644_SPI_PS_INPUT_CNTL_0, SET(SpiPsInputCntl0Gfx9));
1416    set_context_reg_seq_array(cs, R_028754_SX_PS_DOWNCONVERT, SET(SxPsDownconvertGfx9));
1417    set_context_reg_seq_array(cs, R_028800_DB_DEPTH_CONTROL, SET(DbDepthControlGfx9));
1418    set_context_reg_seq_array(cs, R_028A00_PA_SU_POINT_SIZE, SET(PaSuPointSizeGfx9));
1419    set_context_reg_seq_array(cs, R_028A18_VGT_HOS_MAX_TESS_LEVEL, SET(VgtHosMaxTessLevelGfx9));
1420    set_context_reg_seq_array(cs, R_028A40_VGT_GS_MODE, SET(VgtGsModeGfx9));
1421    set_context_reg_seq_array(cs, R_028A84_VGT_PRIMITIVEID_EN, SET(VgtPrimitiveidEnGfx9));
1422    set_context_reg_seq_array(cs, R_028A8C_VGT_PRIMITIVEID_RESET, SET(VgtPrimitiveidResetGfx9));
1423    set_context_reg_seq_array(cs, R_028A94_VGT_GS_MAX_PRIMS_PER_SUBGROUP,
1424                              SET(VgtGsMaxPrimsPerSubgroupGfx9));
1425    set_context_reg_seq_array(cs, R_028AE0_VGT_STRMOUT_BUFFER_SIZE_1,
1426                              SET(VgtStrmoutBufferSize1Gfx9));
1427    set_context_reg_seq_array(cs, R_028AF0_VGT_STRMOUT_BUFFER_SIZE_2,
1428                              SET(VgtStrmoutBufferSize2Gfx9));
1429    set_context_reg_seq_array(cs, R_028B00_VGT_STRMOUT_BUFFER_SIZE_3,
1430                              SET(VgtStrmoutBufferSize3Gfx9));
1431    set_context_reg_seq_array(cs, R_028B28_VGT_STRMOUT_DRAW_OPAQUE_OFFSET,
1432                              SET(VgtStrmoutDrawOpaqueOffsetGfx9));
1433    set_context_reg_seq_array(cs, R_028B38_VGT_GS_MAX_VERT_OUT, SET(VgtGsMaxVertOutGfx9));
1434    set_context_reg_seq_array(cs, R_028BD4_PA_SC_CENTROID_PRIORITY_0,
1435                              SET(PaScCentroidPriority0Gfx9));
1436 }
1437 
1438 /**
1439  * Emulate CLEAR_STATE. Additionally, initialize num_reg_pairs registers specified
1440  * via reg_offsets and reg_values.
1441  */
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)1442 static void gfx10_emulate_clear_state(struct radeon_cmdbuf *cs, unsigned num_reg_pairs,
1443                                       unsigned *reg_offsets, uint32_t *reg_values,
1444                                       set_context_reg_seq_array_fn set_context_reg_seq_array)
1445 {
1446    static const uint32_t DbRenderControlNv10[] = {
1447       0x0,        // DB_RENDER_CONTROL
1448       0x0,        // DB_COUNT_CONTROL
1449       0x0,        // DB_DEPTH_VIEW
1450       0x0,        // DB_RENDER_OVERRIDE
1451       0x0,        // DB_RENDER_OVERRIDE2
1452       0x0,        // DB_HTILE_DATA_BASE
1453       0x0,        //
1454       0x0,        // DB_DEPTH_SIZE_XY
1455       0x0,        // DB_DEPTH_BOUNDS_MIN
1456       0x0,        // DB_DEPTH_BOUNDS_MAX
1457       0x0,        // DB_STENCIL_CLEAR
1458       0x0,        // DB_DEPTH_CLEAR
1459       0x0,        // PA_SC_SCREEN_SCISSOR_TL
1460       0x40004000, // PA_SC_SCREEN_SCISSOR_BR
1461       0x0,        // DB_DFSM_CONTROL
1462       0x0,        // DB_RESERVED_REG_2
1463       0x0,        // DB_Z_INFO
1464       0x0,        // DB_STENCIL_INFO
1465       0x0,        // DB_Z_READ_BASE
1466       0x0,        // DB_STENCIL_READ_BASE
1467       0x0,        // DB_Z_WRITE_BASE
1468       0x0,        // DB_STENCIL_WRITE_BASE
1469       0x0,        //
1470       0x0,        //
1471       0x0,        //
1472       0x0,        //
1473       0x0,        // DB_Z_READ_BASE_HI
1474       0x0,        // DB_STENCIL_READ_BASE_HI
1475       0x0,        // DB_Z_WRITE_BASE_HI
1476       0x0,        // DB_STENCIL_WRITE_BASE_HI
1477       0x0,        // DB_HTILE_DATA_BASE_HI
1478       0x0,        // DB_RMI_L2_CACHE_CONTROL
1479       0x0,        // TA_BC_BASE_ADDR
1480       0x0         // TA_BC_BASE_ADDR_HI
1481    };
1482    static const uint32_t CoherDestBaseHi0Nv10[] = {
1483       0x0,        // COHER_DEST_BASE_HI_0
1484       0x0,        // COHER_DEST_BASE_HI_1
1485       0x0,        // COHER_DEST_BASE_HI_2
1486       0x0,        // COHER_DEST_BASE_HI_3
1487       0x0,        // COHER_DEST_BASE_2
1488       0x0,        // COHER_DEST_BASE_3
1489       0x0,        // PA_SC_WINDOW_OFFSET
1490       0x80000000, // PA_SC_WINDOW_SCISSOR_TL
1491       0x40004000, // PA_SC_WINDOW_SCISSOR_BR
1492       0xffff,     // PA_SC_CLIPRECT_RULE
1493       0x0,        // PA_SC_CLIPRECT_0_TL
1494       0x40004000, // PA_SC_CLIPRECT_0_BR
1495       0x0,        // PA_SC_CLIPRECT_1_TL
1496       0x40004000, // PA_SC_CLIPRECT_1_BR
1497       0x0,        // PA_SC_CLIPRECT_2_TL
1498       0x40004000, // PA_SC_CLIPRECT_2_BR
1499       0x0,        // PA_SC_CLIPRECT_3_TL
1500       0x40004000, // PA_SC_CLIPRECT_3_BR
1501       0xaa99aaaa, // PA_SC_EDGERULE
1502       0x0,        // PA_SU_HARDWARE_SCREEN_OFFSET
1503       0xffffffff, // CB_TARGET_MASK
1504       0xffffffff, // CB_SHADER_MASK
1505       0x80000000, // PA_SC_GENERIC_SCISSOR_TL
1506       0x40004000, // PA_SC_GENERIC_SCISSOR_BR
1507       0x0,        // COHER_DEST_BASE_0
1508       0x0,        // COHER_DEST_BASE_1
1509       0x80000000, // PA_SC_VPORT_SCISSOR_0_TL
1510       0x40004000, // PA_SC_VPORT_SCISSOR_0_BR
1511       0x80000000, // PA_SC_VPORT_SCISSOR_1_TL
1512       0x40004000, // PA_SC_VPORT_SCISSOR_1_BR
1513       0x80000000, // PA_SC_VPORT_SCISSOR_2_TL
1514       0x40004000, // PA_SC_VPORT_SCISSOR_2_BR
1515       0x80000000, // PA_SC_VPORT_SCISSOR_3_TL
1516       0x40004000, // PA_SC_VPORT_SCISSOR_3_BR
1517       0x80000000, // PA_SC_VPORT_SCISSOR_4_TL
1518       0x40004000, // PA_SC_VPORT_SCISSOR_4_BR
1519       0x80000000, // PA_SC_VPORT_SCISSOR_5_TL
1520       0x40004000, // PA_SC_VPORT_SCISSOR_5_BR
1521       0x80000000, // PA_SC_VPORT_SCISSOR_6_TL
1522       0x40004000, // PA_SC_VPORT_SCISSOR_6_BR
1523       0x80000000, // PA_SC_VPORT_SCISSOR_7_TL
1524       0x40004000, // PA_SC_VPORT_SCISSOR_7_BR
1525       0x80000000, // PA_SC_VPORT_SCISSOR_8_TL
1526       0x40004000, // PA_SC_VPORT_SCISSOR_8_BR
1527       0x80000000, // PA_SC_VPORT_SCISSOR_9_TL
1528       0x40004000, // PA_SC_VPORT_SCISSOR_9_BR
1529       0x80000000, // PA_SC_VPORT_SCISSOR_10_TL
1530       0x40004000, // PA_SC_VPORT_SCISSOR_10_BR
1531       0x80000000, // PA_SC_VPORT_SCISSOR_11_TL
1532       0x40004000, // PA_SC_VPORT_SCISSOR_11_BR
1533       0x80000000, // PA_SC_VPORT_SCISSOR_12_TL
1534       0x40004000, // PA_SC_VPORT_SCISSOR_12_BR
1535       0x80000000, // PA_SC_VPORT_SCISSOR_13_TL
1536       0x40004000, // PA_SC_VPORT_SCISSOR_13_BR
1537       0x80000000, // PA_SC_VPORT_SCISSOR_14_TL
1538       0x40004000, // PA_SC_VPORT_SCISSOR_14_BR
1539       0x80000000, // PA_SC_VPORT_SCISSOR_15_TL
1540       0x40004000, // PA_SC_VPORT_SCISSOR_15_BR
1541       0x0,        // PA_SC_VPORT_ZMIN_0
1542       0x3f800000, // PA_SC_VPORT_ZMAX_0
1543       0x0,        // PA_SC_VPORT_ZMIN_1
1544       0x3f800000, // PA_SC_VPORT_ZMAX_1
1545       0x0,        // PA_SC_VPORT_ZMIN_2
1546       0x3f800000, // PA_SC_VPORT_ZMAX_2
1547       0x0,        // PA_SC_VPORT_ZMIN_3
1548       0x3f800000, // PA_SC_VPORT_ZMAX_3
1549       0x0,        // PA_SC_VPORT_ZMIN_4
1550       0x3f800000, // PA_SC_VPORT_ZMAX_4
1551       0x0,        // PA_SC_VPORT_ZMIN_5
1552       0x3f800000, // PA_SC_VPORT_ZMAX_5
1553       0x0,        // PA_SC_VPORT_ZMIN_6
1554       0x3f800000, // PA_SC_VPORT_ZMAX_6
1555       0x0,        // PA_SC_VPORT_ZMIN_7
1556       0x3f800000, // PA_SC_VPORT_ZMAX_7
1557       0x0,        // PA_SC_VPORT_ZMIN_8
1558       0x3f800000, // PA_SC_VPORT_ZMAX_8
1559       0x0,        // PA_SC_VPORT_ZMIN_9
1560       0x3f800000, // PA_SC_VPORT_ZMAX_9
1561       0x0,        // PA_SC_VPORT_ZMIN_10
1562       0x3f800000, // PA_SC_VPORT_ZMAX_10
1563       0x0,        // PA_SC_VPORT_ZMIN_11
1564       0x3f800000, // PA_SC_VPORT_ZMAX_11
1565       0x0,        // PA_SC_VPORT_ZMIN_12
1566       0x3f800000, // PA_SC_VPORT_ZMAX_12
1567       0x0,        // PA_SC_VPORT_ZMIN_13
1568       0x3f800000, // PA_SC_VPORT_ZMAX_13
1569       0x0,        // PA_SC_VPORT_ZMIN_14
1570       0x3f800000, // PA_SC_VPORT_ZMAX_14
1571       0x0,        // PA_SC_VPORT_ZMIN_15
1572       0x3f800000, // PA_SC_VPORT_ZMAX_15
1573       0x0,        // PA_SC_RASTER_CONFIG
1574       0x0,        // PA_SC_RASTER_CONFIG_1
1575       0x0,        //
1576       0x0         // PA_SC_TILE_STEERING_OVERRIDE
1577    };
1578    static const uint32_t VgtMultiPrimIbResetIndxNv10[] = {
1579       0x0,       // VGT_MULTI_PRIM_IB_RESET_INDX
1580       0x0,       // CB_RMI_GL2_CACHE_CONTROL
1581       0x0,       // CB_BLEND_RED
1582       0x0,       // CB_BLEND_GREEN
1583       0x0,       // CB_BLEND_BLUE
1584       0x0,       // CB_BLEND_ALPHA
1585       0x0,       // CB_DCC_CONTROL
1586       0x0,       // CB_COVERAGE_OUT_CONTROL
1587       0x0,       // DB_STENCIL_CONTROL
1588       0x1000000, // DB_STENCILREFMASK
1589       0x1000000, // DB_STENCILREFMASK_BF
1590       0x0,       //
1591       0x0,       // PA_CL_VPORT_XSCALE
1592       0x0,       // PA_CL_VPORT_XOFFSET
1593       0x0,       // PA_CL_VPORT_YSCALE
1594       0x0,       // PA_CL_VPORT_YOFFSET
1595       0x0,       // PA_CL_VPORT_ZSCALE
1596       0x0,       // PA_CL_VPORT_ZOFFSET
1597       0x0,       // PA_CL_VPORT_XSCALE_1
1598       0x0,       // PA_CL_VPORT_XOFFSET_1
1599       0x0,       // PA_CL_VPORT_YSCALE_1
1600       0x0,       // PA_CL_VPORT_YOFFSET_1
1601       0x0,       // PA_CL_VPORT_ZSCALE_1
1602       0x0,       // PA_CL_VPORT_ZOFFSET_1
1603       0x0,       // PA_CL_VPORT_XSCALE_2
1604       0x0,       // PA_CL_VPORT_XOFFSET_2
1605       0x0,       // PA_CL_VPORT_YSCALE_2
1606       0x0,       // PA_CL_VPORT_YOFFSET_2
1607       0x0,       // PA_CL_VPORT_ZSCALE_2
1608       0x0,       // PA_CL_VPORT_ZOFFSET_2
1609       0x0,       // PA_CL_VPORT_XSCALE_3
1610       0x0,       // PA_CL_VPORT_XOFFSET_3
1611       0x0,       // PA_CL_VPORT_YSCALE_3
1612       0x0,       // PA_CL_VPORT_YOFFSET_3
1613       0x0,       // PA_CL_VPORT_ZSCALE_3
1614       0x0,       // PA_CL_VPORT_ZOFFSET_3
1615       0x0,       // PA_CL_VPORT_XSCALE_4
1616       0x0,       // PA_CL_VPORT_XOFFSET_4
1617       0x0,       // PA_CL_VPORT_YSCALE_4
1618       0x0,       // PA_CL_VPORT_YOFFSET_4
1619       0x0,       // PA_CL_VPORT_ZSCALE_4
1620       0x0,       // PA_CL_VPORT_ZOFFSET_4
1621       0x0,       // PA_CL_VPORT_XSCALE_5
1622       0x0,       // PA_CL_VPORT_XOFFSET_5
1623       0x0,       // PA_CL_VPORT_YSCALE_5
1624       0x0,       // PA_CL_VPORT_YOFFSET_5
1625       0x0,       // PA_CL_VPORT_ZSCALE_5
1626       0x0,       // PA_CL_VPORT_ZOFFSET_5
1627       0x0,       // PA_CL_VPORT_XSCALE_6
1628       0x0,       // PA_CL_VPORT_XOFFSET_6
1629       0x0,       // PA_CL_VPORT_YSCALE_6
1630       0x0,       // PA_CL_VPORT_YOFFSET_6
1631       0x0,       // PA_CL_VPORT_ZSCALE_6
1632       0x0,       // PA_CL_VPORT_ZOFFSET_6
1633       0x0,       // PA_CL_VPORT_XSCALE_7
1634       0x0,       // PA_CL_VPORT_XOFFSET_7
1635       0x0,       // PA_CL_VPORT_YSCALE_7
1636       0x0,       // PA_CL_VPORT_YOFFSET_7
1637       0x0,       // PA_CL_VPORT_ZSCALE_7
1638       0x0,       // PA_CL_VPORT_ZOFFSET_7
1639       0x0,       // PA_CL_VPORT_XSCALE_8
1640       0x0,       // PA_CL_VPORT_XOFFSET_8
1641       0x0,       // PA_CL_VPORT_YSCALE_8
1642       0x0,       // PA_CL_VPORT_YOFFSET_8
1643       0x0,       // PA_CL_VPORT_ZSCALE_8
1644       0x0,       // PA_CL_VPORT_ZOFFSET_8
1645       0x0,       // PA_CL_VPORT_XSCALE_9
1646       0x0,       // PA_CL_VPORT_XOFFSET_9
1647       0x0,       // PA_CL_VPORT_YSCALE_9
1648       0x0,       // PA_CL_VPORT_YOFFSET_9
1649       0x0,       // PA_CL_VPORT_ZSCALE_9
1650       0x0,       // PA_CL_VPORT_ZOFFSET_9
1651       0x0,       // PA_CL_VPORT_XSCALE_10
1652       0x0,       // PA_CL_VPORT_XOFFSET_10
1653       0x0,       // PA_CL_VPORT_YSCALE_10
1654       0x0,       // PA_CL_VPORT_YOFFSET_10
1655       0x0,       // PA_CL_VPORT_ZSCALE_10
1656       0x0,       // PA_CL_VPORT_ZOFFSET_10
1657       0x0,       // PA_CL_VPORT_XSCALE_11
1658       0x0,       // PA_CL_VPORT_XOFFSET_11
1659       0x0,       // PA_CL_VPORT_YSCALE_11
1660       0x0,       // PA_CL_VPORT_YOFFSET_11
1661       0x0,       // PA_CL_VPORT_ZSCALE_11
1662       0x0,       // PA_CL_VPORT_ZOFFSET_11
1663       0x0,       // PA_CL_VPORT_XSCALE_12
1664       0x0,       // PA_CL_VPORT_XOFFSET_12
1665       0x0,       // PA_CL_VPORT_YSCALE_12
1666       0x0,       // PA_CL_VPORT_YOFFSET_12
1667       0x0,       // PA_CL_VPORT_ZSCALE_12
1668       0x0,       // PA_CL_VPORT_ZOFFSET_12
1669       0x0,       // PA_CL_VPORT_XSCALE_13
1670       0x0,       // PA_CL_VPORT_XOFFSET_13
1671       0x0,       // PA_CL_VPORT_YSCALE_13
1672       0x0,       // PA_CL_VPORT_YOFFSET_13
1673       0x0,       // PA_CL_VPORT_ZSCALE_13
1674       0x0,       // PA_CL_VPORT_ZOFFSET_13
1675       0x0,       // PA_CL_VPORT_XSCALE_14
1676       0x0,       // PA_CL_VPORT_XOFFSET_14
1677       0x0,       // PA_CL_VPORT_YSCALE_14
1678       0x0,       // PA_CL_VPORT_YOFFSET_14
1679       0x0,       // PA_CL_VPORT_ZSCALE_14
1680       0x0,       // PA_CL_VPORT_ZOFFSET_14
1681       0x0,       // PA_CL_VPORT_XSCALE_15
1682       0x0,       // PA_CL_VPORT_XOFFSET_15
1683       0x0,       // PA_CL_VPORT_YSCALE_15
1684       0x0,       // PA_CL_VPORT_YOFFSET_15
1685       0x0,       // PA_CL_VPORT_ZSCALE_15
1686       0x0,       // PA_CL_VPORT_ZOFFSET_15
1687       0x0,       // PA_CL_UCP_0_X
1688       0x0,       // PA_CL_UCP_0_Y
1689       0x0,       // PA_CL_UCP_0_Z
1690       0x0,       // PA_CL_UCP_0_W
1691       0x0,       // PA_CL_UCP_1_X
1692       0x0,       // PA_CL_UCP_1_Y
1693       0x0,       // PA_CL_UCP_1_Z
1694       0x0,       // PA_CL_UCP_1_W
1695       0x0,       // PA_CL_UCP_2_X
1696       0x0,       // PA_CL_UCP_2_Y
1697       0x0,       // PA_CL_UCP_2_Z
1698       0x0,       // PA_CL_UCP_2_W
1699       0x0,       // PA_CL_UCP_3_X
1700       0x0,       // PA_CL_UCP_3_Y
1701       0x0,       // PA_CL_UCP_3_Z
1702       0x0,       // PA_CL_UCP_3_W
1703       0x0,       // PA_CL_UCP_4_X
1704       0x0,       // PA_CL_UCP_4_Y
1705       0x0,       // PA_CL_UCP_4_Z
1706       0x0,       // PA_CL_UCP_4_W
1707       0x0,       // PA_CL_UCP_5_X
1708       0x0,       // PA_CL_UCP_5_Y
1709       0x0,       // PA_CL_UCP_5_Z
1710       0x0        // PA_CL_UCP_5_W
1711    };
1712    static const uint32_t SpiPsInputCntl0Nv10[] = {
1713       0x0, // SPI_PS_INPUT_CNTL_0
1714       0x0, // SPI_PS_INPUT_CNTL_1
1715       0x0, // SPI_PS_INPUT_CNTL_2
1716       0x0, // SPI_PS_INPUT_CNTL_3
1717       0x0, // SPI_PS_INPUT_CNTL_4
1718       0x0, // SPI_PS_INPUT_CNTL_5
1719       0x0, // SPI_PS_INPUT_CNTL_6
1720       0x0, // SPI_PS_INPUT_CNTL_7
1721       0x0, // SPI_PS_INPUT_CNTL_8
1722       0x0, // SPI_PS_INPUT_CNTL_9
1723       0x0, // SPI_PS_INPUT_CNTL_10
1724       0x0, // SPI_PS_INPUT_CNTL_11
1725       0x0, // SPI_PS_INPUT_CNTL_12
1726       0x0, // SPI_PS_INPUT_CNTL_13
1727       0x0, // SPI_PS_INPUT_CNTL_14
1728       0x0, // SPI_PS_INPUT_CNTL_15
1729       0x0, // SPI_PS_INPUT_CNTL_16
1730       0x0, // SPI_PS_INPUT_CNTL_17
1731       0x0, // SPI_PS_INPUT_CNTL_18
1732       0x0, // SPI_PS_INPUT_CNTL_19
1733       0x0, // SPI_PS_INPUT_CNTL_20
1734       0x0, // SPI_PS_INPUT_CNTL_21
1735       0x0, // SPI_PS_INPUT_CNTL_22
1736       0x0, // SPI_PS_INPUT_CNTL_23
1737       0x0, // SPI_PS_INPUT_CNTL_24
1738       0x0, // SPI_PS_INPUT_CNTL_25
1739       0x0, // SPI_PS_INPUT_CNTL_26
1740       0x0, // SPI_PS_INPUT_CNTL_27
1741       0x0, // SPI_PS_INPUT_CNTL_28
1742       0x0, // SPI_PS_INPUT_CNTL_29
1743       0x0, // SPI_PS_INPUT_CNTL_30
1744       0x0, // SPI_PS_INPUT_CNTL_31
1745       0x0, // SPI_VS_OUT_CONFIG
1746       0x0, //
1747       0x0, // SPI_PS_INPUT_ENA
1748       0x0, // SPI_PS_INPUT_ADDR
1749       0x0, // SPI_INTERP_CONTROL_0
1750       0x2, // SPI_PS_IN_CONTROL
1751       0x0, //
1752       0x0, // SPI_BARYC_CNTL
1753       0x0, //
1754       0x0, // SPI_TMPRING_SIZE
1755       0x0, //
1756       0x0, //
1757       0x0, //
1758       0x0, //
1759       0x0, //
1760       0x0, //
1761       0x0, //
1762       0x0, // SPI_SHADER_IDX_FORMAT
1763       0x0, // SPI_SHADER_POS_FORMAT
1764       0x0, // SPI_SHADER_Z_FORMAT
1765       0x0  // SPI_SHADER_COL_FORMAT
1766    };
1767    static const uint32_t SxPsDownconvertNv10[] = {
1768       0x0, // SX_PS_DOWNCONVERT
1769       0x0, // SX_BLEND_OPT_EPSILON
1770       0x0, // SX_BLEND_OPT_CONTROL
1771       0x0, // SX_MRT0_BLEND_OPT
1772       0x0, // SX_MRT1_BLEND_OPT
1773       0x0, // SX_MRT2_BLEND_OPT
1774       0x0, // SX_MRT3_BLEND_OPT
1775       0x0, // SX_MRT4_BLEND_OPT
1776       0x0, // SX_MRT5_BLEND_OPT
1777       0x0, // SX_MRT6_BLEND_OPT
1778       0x0, // SX_MRT7_BLEND_OPT
1779       0x0, // CB_BLEND0_CONTROL
1780       0x0, // CB_BLEND1_CONTROL
1781       0x0, // CB_BLEND2_CONTROL
1782       0x0, // CB_BLEND3_CONTROL
1783       0x0, // CB_BLEND4_CONTROL
1784       0x0, // CB_BLEND5_CONTROL
1785       0x0, // CB_BLEND6_CONTROL
1786       0x0  // CB_BLEND7_CONTROL
1787    };
1788    static const uint32_t PaClPointXRadNv10[] = {
1789       0x0, // PA_CL_POINT_X_RAD
1790       0x0, // PA_CL_POINT_Y_RAD
1791       0x0, // PA_CL_POINT_SIZE
1792       0x0  // PA_CL_POINT_CULL_RAD
1793    };
1794    static const uint32_t GeMaxOutputPerSubgroupNv10[] = {
1795       0x0,     // GE_MAX_OUTPUT_PER_SUBGROUP
1796       0x0,     // DB_DEPTH_CONTROL
1797       0x0,     // DB_EQAA
1798       0x0,     // CB_COLOR_CONTROL
1799       0x0,     // DB_SHADER_CONTROL
1800       0x90000, // PA_CL_CLIP_CNTL
1801       0x4,     // PA_SU_SC_MODE_CNTL
1802       0x0,     // PA_CL_VTE_CNTL
1803       0x0,     // PA_CL_VS_OUT_CNTL
1804       0x0,     // PA_CL_NANINF_CNTL
1805       0x0,     // PA_SU_LINE_STIPPLE_CNTL
1806       0x0,     // PA_SU_LINE_STIPPLE_SCALE
1807       0x0,     // PA_SU_PRIM_FILTER_CNTL
1808       0x0,     // PA_SU_SMALL_PRIM_FILTER_CNTL
1809       0x0,     // PA_CL_OBJPRIM_ID_CNTL
1810       0x0,     // PA_CL_NGG_CNTL
1811       0x0,     // PA_SU_OVER_RASTERIZATION_CNTL
1812       0x0,     // PA_STEREO_CNTL
1813       0x0      // PA_STATE_STEREO_X
1814    };
1815    static const uint32_t PaSuPointSizeNv10[] = {
1816       0x0, // PA_SU_POINT_SIZE
1817       0x0, // PA_SU_POINT_MINMAX
1818       0x0, // PA_SU_LINE_CNTL
1819       0x0  // PA_SC_LINE_STIPPLE
1820    };
1821    static const uint32_t VgtHosMaxTessLevelNv10[] = {
1822       0x0, // VGT_HOS_MAX_TESS_LEVEL
1823       0x0  // VGT_HOS_MIN_TESS_LEVEL
1824    };
1825    static const uint32_t VgtGsModeNv10[] = {
1826       0x0,   // VGT_GS_MODE
1827       0x0,   // VGT_GS_ONCHIP_CNTL
1828       0x0,   // PA_SC_MODE_CNTL_0
1829       0x0,   // PA_SC_MODE_CNTL_1
1830       0x0,   // VGT_ENHANCE
1831       0x100, // VGT_GS_PER_ES
1832       0x80,  // VGT_ES_PER_GS
1833       0x2,   // VGT_GS_PER_VS
1834       0x0,   // VGT_GSVS_RING_OFFSET_1
1835       0x0,   // VGT_GSVS_RING_OFFSET_2
1836       0x0,   // VGT_GSVS_RING_OFFSET_3
1837       0x0    // VGT_GS_OUT_PRIM_TYPE
1838    };
1839    static const uint32_t VgtPrimitiveidEnNv10[] = {
1840       0x0 // VGT_PRIMITIVEID_EN
1841    };
1842    static const uint32_t VgtPrimitiveidResetNv10[] = {
1843       0x0 // VGT_PRIMITIVEID_RESET
1844    };
1845    static const uint32_t VgtDrawPayloadCntlNv10[] = {
1846       0x0, // VGT_DRAW_PAYLOAD_CNTL
1847       0x0, //
1848       0x0, // VGT_INSTANCE_STEP_RATE_0
1849       0x0, // VGT_INSTANCE_STEP_RATE_1
1850       0x0, // IA_MULTI_VGT_PARAM
1851       0x0, // VGT_ESGS_RING_ITEMSIZE
1852       0x0, // VGT_GSVS_RING_ITEMSIZE
1853       0x0, // VGT_REUSE_OFF
1854       0x0, // VGT_VTX_CNT_EN
1855       0x0, // DB_HTILE_SURFACE
1856       0x0, // DB_SRESULTS_COMPARE_STATE0
1857       0x0, // DB_SRESULTS_COMPARE_STATE1
1858       0x0, // DB_PRELOAD_CONTROL
1859       0x0, //
1860       0x0, // VGT_STRMOUT_BUFFER_SIZE_0
1861       0x0, // VGT_STRMOUT_VTX_STRIDE_0
1862       0x0, //
1863       0x0, // VGT_STRMOUT_BUFFER_OFFSET_0
1864       0x0, // VGT_STRMOUT_BUFFER_SIZE_1
1865       0x0, // VGT_STRMOUT_VTX_STRIDE_1
1866       0x0, //
1867       0x0, // VGT_STRMOUT_BUFFER_OFFSET_1
1868       0x0, // VGT_STRMOUT_BUFFER_SIZE_2
1869       0x0, // VGT_STRMOUT_VTX_STRIDE_2
1870       0x0, //
1871       0x0, // VGT_STRMOUT_BUFFER_OFFSET_2
1872       0x0, // VGT_STRMOUT_BUFFER_SIZE_3
1873       0x0, // VGT_STRMOUT_VTX_STRIDE_3
1874       0x0, //
1875       0x0, // VGT_STRMOUT_BUFFER_OFFSET_3
1876       0x0, //
1877       0x0, //
1878       0x0, //
1879       0x0, //
1880       0x0, //
1881       0x0, //
1882       0x0, // VGT_STRMOUT_DRAW_OPAQUE_OFFSET
1883       0x0, // VGT_STRMOUT_DRAW_OPAQUE_BUFFER_FILLED_SIZE
1884       0x0, // VGT_STRMOUT_DRAW_OPAQUE_VERTEX_STRIDE
1885       0x0, //
1886       0x0, // VGT_GS_MAX_VERT_OUT
1887       0x0, //
1888       0x0, //
1889       0x0, //
1890       0x0, //
1891       0x0, // GE_NGG_SUBGRP_CNTL
1892       0x0, // VGT_TESS_DISTRIBUTION
1893       0x0, // VGT_SHADER_STAGES_EN
1894       0x0, // VGT_LS_HS_CONFIG
1895       0x0, // VGT_GS_VERT_ITEMSIZE
1896       0x0, // VGT_GS_VERT_ITEMSIZE_1
1897       0x0, // VGT_GS_VERT_ITEMSIZE_2
1898       0x0, // VGT_GS_VERT_ITEMSIZE_3
1899       0x0, // VGT_TF_PARAM
1900       0x0, // DB_ALPHA_TO_MASK
1901       0x0, // VGT_DISPATCH_DRAW_INDEX
1902       0x0, // PA_SU_POLY_OFFSET_DB_FMT_CNTL
1903       0x0, // PA_SU_POLY_OFFSET_CLAMP
1904       0x0, // PA_SU_POLY_OFFSET_FRONT_SCALE
1905       0x0, // PA_SU_POLY_OFFSET_FRONT_OFFSET
1906       0x0, // PA_SU_POLY_OFFSET_BACK_SCALE
1907       0x0, // PA_SU_POLY_OFFSET_BACK_OFFSET
1908       0x0, // VGT_GS_INSTANCE_CNT
1909       0x0, // VGT_STRMOUT_CONFIG
1910       0x0  // VGT_STRMOUT_BUFFER_CONFIG
1911    };
1912    static const uint32_t PaScCentroidPriority0Nv10[] = {
1913       0x0,        // PA_SC_CENTROID_PRIORITY_0
1914       0x0,        // PA_SC_CENTROID_PRIORITY_1
1915       0x1000,     // PA_SC_LINE_CNTL
1916       0x0,        // PA_SC_AA_CONFIG
1917       0x5,        // PA_SU_VTX_CNTL
1918       0x3f800000, // PA_CL_GB_VERT_CLIP_ADJ
1919       0x3f800000, // PA_CL_GB_VERT_DISC_ADJ
1920       0x3f800000, // PA_CL_GB_HORZ_CLIP_ADJ
1921       0x3f800000, // PA_CL_GB_HORZ_DISC_ADJ
1922       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_0
1923       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_1
1924       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_2
1925       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_3
1926       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_0
1927       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_1
1928       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_2
1929       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_3
1930       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_0
1931       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_1
1932       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_2
1933       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_3
1934       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_0
1935       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_1
1936       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_2
1937       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_3
1938       0xffffffff, // PA_SC_AA_MASK_X0Y0_X1Y0
1939       0xffffffff, // PA_SC_AA_MASK_X0Y1_X1Y1
1940       0x0,        // PA_SC_SHADER_CONTROL
1941       0x3,        // PA_SC_BINNER_CNTL_0
1942       0x0,        // PA_SC_BINNER_CNTL_1
1943       0x100000,   // PA_SC_CONSERVATIVE_RASTERIZATION_CNTL
1944       0x0,        // PA_SC_NGG_MODE_CNTL
1945       0x0,        //
1946       0x1e,       // VGT_VERTEX_REUSE_BLOCK_CNTL
1947       0x20,       // VGT_OUT_DEALLOC_CNTL
1948       0x0,        // CB_COLOR0_BASE
1949       0x0,        //
1950       0x0,        //
1951       0x0,        // CB_COLOR0_VIEW
1952       0x0,        // CB_COLOR0_INFO
1953       0x0,        // CB_COLOR0_ATTRIB
1954       0x0,        // CB_COLOR0_DCC_CONTROL
1955       0x0,        // CB_COLOR0_CMASK
1956       0x0,        //
1957       0x0,        // CB_COLOR0_FMASK
1958       0x0,        //
1959       0x0,        // CB_COLOR0_CLEAR_WORD0
1960       0x0,        // CB_COLOR0_CLEAR_WORD1
1961       0x0,        // CB_COLOR0_DCC_BASE
1962       0x0,        //
1963       0x0,        // CB_COLOR1_BASE
1964       0x0,        //
1965       0x0,        //
1966       0x0,        // CB_COLOR1_VIEW
1967       0x0,        // CB_COLOR1_INFO
1968       0x0,        // CB_COLOR1_ATTRIB
1969       0x0,        // CB_COLOR1_DCC_CONTROL
1970       0x0,        // CB_COLOR1_CMASK
1971       0x0,        //
1972       0x0,        // CB_COLOR1_FMASK
1973       0x0,        //
1974       0x0,        // CB_COLOR1_CLEAR_WORD0
1975       0x0,        // CB_COLOR1_CLEAR_WORD1
1976       0x0,        // CB_COLOR1_DCC_BASE
1977       0x0,        //
1978       0x0,        // CB_COLOR2_BASE
1979       0x0,        //
1980       0x0,        //
1981       0x0,        // CB_COLOR2_VIEW
1982       0x0,        // CB_COLOR2_INFO
1983       0x0,        // CB_COLOR2_ATTRIB
1984       0x0,        // CB_COLOR2_DCC_CONTROL
1985       0x0,        // CB_COLOR2_CMASK
1986       0x0,        //
1987       0x0,        // CB_COLOR2_FMASK
1988       0x0,        //
1989       0x0,        // CB_COLOR2_CLEAR_WORD0
1990       0x0,        // CB_COLOR2_CLEAR_WORD1
1991       0x0,        // CB_COLOR2_DCC_BASE
1992       0x0,        //
1993       0x0,        // CB_COLOR3_BASE
1994       0x0,        //
1995       0x0,        //
1996       0x0,        // CB_COLOR3_VIEW
1997       0x0,        // CB_COLOR3_INFO
1998       0x0,        // CB_COLOR3_ATTRIB
1999       0x0,        // CB_COLOR3_DCC_CONTROL
2000       0x0,        // CB_COLOR3_CMASK
2001       0x0,        //
2002       0x0,        // CB_COLOR3_FMASK
2003       0x0,        //
2004       0x0,        // CB_COLOR3_CLEAR_WORD0
2005       0x0,        // CB_COLOR3_CLEAR_WORD1
2006       0x0,        // CB_COLOR3_DCC_BASE
2007       0x0,        //
2008       0x0,        // CB_COLOR4_BASE
2009       0x0,        //
2010       0x0,        //
2011       0x0,        // CB_COLOR4_VIEW
2012       0x0,        // CB_COLOR4_INFO
2013       0x0,        // CB_COLOR4_ATTRIB
2014       0x0,        // CB_COLOR4_DCC_CONTROL
2015       0x0,        // CB_COLOR4_CMASK
2016       0x0,        //
2017       0x0,        // CB_COLOR4_FMASK
2018       0x0,        //
2019       0x0,        // CB_COLOR4_CLEAR_WORD0
2020       0x0,        // CB_COLOR4_CLEAR_WORD1
2021       0x0,        // CB_COLOR4_DCC_BASE
2022       0x0,        //
2023       0x0,        // CB_COLOR5_BASE
2024       0x0,        //
2025       0x0,        //
2026       0x0,        // CB_COLOR5_VIEW
2027       0x0,        // CB_COLOR5_INFO
2028       0x0,        // CB_COLOR5_ATTRIB
2029       0x0,        // CB_COLOR5_DCC_CONTROL
2030       0x0,        // CB_COLOR5_CMASK
2031       0x0,        //
2032       0x0,        // CB_COLOR5_FMASK
2033       0x0,        //
2034       0x0,        // CB_COLOR5_CLEAR_WORD0
2035       0x0,        // CB_COLOR5_CLEAR_WORD1
2036       0x0,        // CB_COLOR5_DCC_BASE
2037       0x0,        //
2038       0x0,        // CB_COLOR6_BASE
2039       0x0,        //
2040       0x0,        //
2041       0x0,        // CB_COLOR6_VIEW
2042       0x0,        // CB_COLOR6_INFO
2043       0x0,        // CB_COLOR6_ATTRIB
2044       0x0,        // CB_COLOR6_DCC_CONTROL
2045       0x0,        // CB_COLOR6_CMASK
2046       0x0,        //
2047       0x0,        // CB_COLOR6_FMASK
2048       0x0,        //
2049       0x0,        // CB_COLOR6_CLEAR_WORD0
2050       0x0,        // CB_COLOR6_CLEAR_WORD1
2051       0x0,        // CB_COLOR6_DCC_BASE
2052       0x0,        //
2053       0x0,        // CB_COLOR7_BASE
2054       0x0,        //
2055       0x0,        //
2056       0x0,        // CB_COLOR7_VIEW
2057       0x0,        // CB_COLOR7_INFO
2058       0x0,        // CB_COLOR7_ATTRIB
2059       0x0,        // CB_COLOR7_DCC_CONTROL
2060       0x0,        // CB_COLOR7_CMASK
2061       0x0,        //
2062       0x0,        // CB_COLOR7_FMASK
2063       0x0,        //
2064       0x0,        // CB_COLOR7_CLEAR_WORD0
2065       0x0,        // CB_COLOR7_CLEAR_WORD1
2066       0x0,        // CB_COLOR7_DCC_BASE
2067       0x0,        //
2068       0x0,        // CB_COLOR0_BASE_EXT
2069       0x0,        // CB_COLOR1_BASE_EXT
2070       0x0,        // CB_COLOR2_BASE_EXT
2071       0x0,        // CB_COLOR3_BASE_EXT
2072       0x0,        // CB_COLOR4_BASE_EXT
2073       0x0,        // CB_COLOR5_BASE_EXT
2074       0x0,        // CB_COLOR6_BASE_EXT
2075       0x0,        // CB_COLOR7_BASE_EXT
2076       0x0,        // CB_COLOR0_CMASK_BASE_EXT
2077       0x0,        // CB_COLOR1_CMASK_BASE_EXT
2078       0x0,        // CB_COLOR2_CMASK_BASE_EXT
2079       0x0,        // CB_COLOR3_CMASK_BASE_EXT
2080       0x0,        // CB_COLOR4_CMASK_BASE_EXT
2081       0x0,        // CB_COLOR5_CMASK_BASE_EXT
2082       0x0,        // CB_COLOR6_CMASK_BASE_EXT
2083       0x0,        // CB_COLOR7_CMASK_BASE_EXT
2084       0x0,        // CB_COLOR0_FMASK_BASE_EXT
2085       0x0,        // CB_COLOR1_FMASK_BASE_EXT
2086       0x0,        // CB_COLOR2_FMASK_BASE_EXT
2087       0x0,        // CB_COLOR3_FMASK_BASE_EXT
2088       0x0,        // CB_COLOR4_FMASK_BASE_EXT
2089       0x0,        // CB_COLOR5_FMASK_BASE_EXT
2090       0x0,        // CB_COLOR6_FMASK_BASE_EXT
2091       0x0,        // CB_COLOR7_FMASK_BASE_EXT
2092       0x0,        // CB_COLOR0_DCC_BASE_EXT
2093       0x0,        // CB_COLOR1_DCC_BASE_EXT
2094       0x0,        // CB_COLOR2_DCC_BASE_EXT
2095       0x0,        // CB_COLOR3_DCC_BASE_EXT
2096       0x0,        // CB_COLOR4_DCC_BASE_EXT
2097       0x0,        // CB_COLOR5_DCC_BASE_EXT
2098       0x0,        // CB_COLOR6_DCC_BASE_EXT
2099       0x0,        // CB_COLOR7_DCC_BASE_EXT
2100       0x0,        // CB_COLOR0_ATTRIB2
2101       0x0,        // CB_COLOR1_ATTRIB2
2102       0x0,        // CB_COLOR2_ATTRIB2
2103       0x0,        // CB_COLOR3_ATTRIB2
2104       0x0,        // CB_COLOR4_ATTRIB2
2105       0x0,        // CB_COLOR5_ATTRIB2
2106       0x0,        // CB_COLOR6_ATTRIB2
2107       0x0,        // CB_COLOR7_ATTRIB2
2108       0x0,        // CB_COLOR0_ATTRIB3
2109       0x0,        // CB_COLOR1_ATTRIB3
2110       0x0,        // CB_COLOR2_ATTRIB3
2111       0x0,        // CB_COLOR3_ATTRIB3
2112       0x0,        // CB_COLOR4_ATTRIB3
2113       0x0,        // CB_COLOR5_ATTRIB3
2114       0x0,        // CB_COLOR6_ATTRIB3
2115       0x0         // CB_COLOR7_ATTRIB3
2116    };
2117 
2118    set_context_reg_seq_array(cs, R_028000_DB_RENDER_CONTROL, SET(DbRenderControlNv10));
2119    set_context_reg_seq_array(cs, R_0281E8_COHER_DEST_BASE_HI_0, SET(CoherDestBaseHi0Nv10));
2120    set_context_reg_seq_array(cs, R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX,
2121                              SET(VgtMultiPrimIbResetIndxNv10));
2122    set_context_reg_seq_array(cs, R_028644_SPI_PS_INPUT_CNTL_0, SET(SpiPsInputCntl0Nv10));
2123    set_context_reg_seq_array(cs, R_028754_SX_PS_DOWNCONVERT, SET(SxPsDownconvertNv10));
2124    set_context_reg_seq_array(cs, R_0287D4_PA_CL_POINT_X_RAD, SET(PaClPointXRadNv10));
2125    set_context_reg_seq_array(cs, R_0287FC_GE_MAX_OUTPUT_PER_SUBGROUP,
2126                              SET(GeMaxOutputPerSubgroupNv10));
2127    set_context_reg_seq_array(cs, R_028A00_PA_SU_POINT_SIZE, SET(PaSuPointSizeNv10));
2128    set_context_reg_seq_array(cs, R_028A18_VGT_HOS_MAX_TESS_LEVEL, SET(VgtHosMaxTessLevelNv10));
2129    set_context_reg_seq_array(cs, R_028A40_VGT_GS_MODE, SET(VgtGsModeNv10));
2130    set_context_reg_seq_array(cs, R_028A84_VGT_PRIMITIVEID_EN, SET(VgtPrimitiveidEnNv10));
2131    set_context_reg_seq_array(cs, R_028A8C_VGT_PRIMITIVEID_RESET, SET(VgtPrimitiveidResetNv10));
2132    set_context_reg_seq_array(cs, R_028A98_VGT_DRAW_PAYLOAD_CNTL, SET(VgtDrawPayloadCntlNv10));
2133    set_context_reg_seq_array(cs, R_028BD4_PA_SC_CENTROID_PRIORITY_0,
2134                              SET(PaScCentroidPriority0Nv10));
2135 
2136    for (unsigned i = 0; i < num_reg_pairs; i++)
2137       set_context_reg_seq_array(cs, reg_offsets[i], 1, &reg_values[i]);
2138 }
2139 
2140 /**
2141  * Emulate CLEAR_STATE. Additionally, initialize num_reg_pairs registers specified
2142  * via reg_offsets and reg_values.
2143  */
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)2144 static void gfx103_emulate_clear_state(struct radeon_cmdbuf *cs, unsigned num_reg_pairs,
2145                                        unsigned *reg_offsets, uint32_t *reg_values,
2146                                        set_context_reg_seq_array_fn set_context_reg_seq_array)
2147 {
2148    static const uint32_t DbRenderControlGfx103[] = {
2149       0x0,        // DB_RENDER_CONTROL
2150       0x0,        // DB_COUNT_CONTROL
2151       0x0,        // DB_DEPTH_VIEW
2152       0x0,        // DB_RENDER_OVERRIDE
2153       0x0,        // DB_RENDER_OVERRIDE2
2154       0x0,        // DB_HTILE_DATA_BASE
2155       0x0,        //
2156       0x0,        // DB_DEPTH_SIZE_XY
2157       0x0,        // DB_DEPTH_BOUNDS_MIN
2158       0x0,        // DB_DEPTH_BOUNDS_MAX
2159       0x0,        // DB_STENCIL_CLEAR
2160       0x0,        // DB_DEPTH_CLEAR
2161       0x0,        // PA_SC_SCREEN_SCISSOR_TL
2162       0x40004000, // PA_SC_SCREEN_SCISSOR_BR
2163       0x0,        // DB_DFSM_CONTROL
2164       0x0,        // DB_RESERVED_REG_2
2165       0x0,        // DB_Z_INFO
2166       0x0,        // DB_STENCIL_INFO
2167       0x0,        // DB_Z_READ_BASE
2168       0x0,        // DB_STENCIL_READ_BASE
2169       0x0,        // DB_Z_WRITE_BASE
2170       0x0,        // DB_STENCIL_WRITE_BASE
2171       0x0,        //
2172       0x0,        //
2173       0x0,        //
2174       0x0,        //
2175       0x0,        // DB_Z_READ_BASE_HI
2176       0x0,        // DB_STENCIL_READ_BASE_HI
2177       0x0,        // DB_Z_WRITE_BASE_HI
2178       0x0,        // DB_STENCIL_WRITE_BASE_HI
2179       0x0,        // DB_HTILE_DATA_BASE_HI
2180       0x0,        // DB_RMI_L2_CACHE_CONTROL
2181       0x0,        // TA_BC_BASE_ADDR
2182       0x0         // TA_BC_BASE_ADDR_HI
2183    };
2184    static const uint32_t CoherDestBaseHi0Gfx103[] = {
2185       0x0,        // COHER_DEST_BASE_HI_0
2186       0x0,        // COHER_DEST_BASE_HI_1
2187       0x0,        // COHER_DEST_BASE_HI_2
2188       0x0,        // COHER_DEST_BASE_HI_3
2189       0x0,        // COHER_DEST_BASE_2
2190       0x0,        // COHER_DEST_BASE_3
2191       0x0,        // PA_SC_WINDOW_OFFSET
2192       0x80000000, // PA_SC_WINDOW_SCISSOR_TL
2193       0x40004000, // PA_SC_WINDOW_SCISSOR_BR
2194       0xffff,     // PA_SC_CLIPRECT_RULE
2195       0x0,        // PA_SC_CLIPRECT_0_TL
2196       0x40004000, // PA_SC_CLIPRECT_0_BR
2197       0x0,        // PA_SC_CLIPRECT_1_TL
2198       0x40004000, // PA_SC_CLIPRECT_1_BR
2199       0x0,        // PA_SC_CLIPRECT_2_TL
2200       0x40004000, // PA_SC_CLIPRECT_2_BR
2201       0x0,        // PA_SC_CLIPRECT_3_TL
2202       0x40004000, // PA_SC_CLIPRECT_3_BR
2203       0xaa99aaaa, // PA_SC_EDGERULE
2204       0x0,        // PA_SU_HARDWARE_SCREEN_OFFSET
2205       0xffffffff, // CB_TARGET_MASK
2206       0xffffffff, // CB_SHADER_MASK
2207       0x80000000, // PA_SC_GENERIC_SCISSOR_TL
2208       0x40004000, // PA_SC_GENERIC_SCISSOR_BR
2209       0x0,        // COHER_DEST_BASE_0
2210       0x0,        // COHER_DEST_BASE_1
2211       0x80000000, // PA_SC_VPORT_SCISSOR_0_TL
2212       0x40004000, // PA_SC_VPORT_SCISSOR_0_BR
2213       0x80000000, // PA_SC_VPORT_SCISSOR_1_TL
2214       0x40004000, // PA_SC_VPORT_SCISSOR_1_BR
2215       0x80000000, // PA_SC_VPORT_SCISSOR_2_TL
2216       0x40004000, // PA_SC_VPORT_SCISSOR_2_BR
2217       0x80000000, // PA_SC_VPORT_SCISSOR_3_TL
2218       0x40004000, // PA_SC_VPORT_SCISSOR_3_BR
2219       0x80000000, // PA_SC_VPORT_SCISSOR_4_TL
2220       0x40004000, // PA_SC_VPORT_SCISSOR_4_BR
2221       0x80000000, // PA_SC_VPORT_SCISSOR_5_TL
2222       0x40004000, // PA_SC_VPORT_SCISSOR_5_BR
2223       0x80000000, // PA_SC_VPORT_SCISSOR_6_TL
2224       0x40004000, // PA_SC_VPORT_SCISSOR_6_BR
2225       0x80000000, // PA_SC_VPORT_SCISSOR_7_TL
2226       0x40004000, // PA_SC_VPORT_SCISSOR_7_BR
2227       0x80000000, // PA_SC_VPORT_SCISSOR_8_TL
2228       0x40004000, // PA_SC_VPORT_SCISSOR_8_BR
2229       0x80000000, // PA_SC_VPORT_SCISSOR_9_TL
2230       0x40004000, // PA_SC_VPORT_SCISSOR_9_BR
2231       0x80000000, // PA_SC_VPORT_SCISSOR_10_TL
2232       0x40004000, // PA_SC_VPORT_SCISSOR_10_BR
2233       0x80000000, // PA_SC_VPORT_SCISSOR_11_TL
2234       0x40004000, // PA_SC_VPORT_SCISSOR_11_BR
2235       0x80000000, // PA_SC_VPORT_SCISSOR_12_TL
2236       0x40004000, // PA_SC_VPORT_SCISSOR_12_BR
2237       0x80000000, // PA_SC_VPORT_SCISSOR_13_TL
2238       0x40004000, // PA_SC_VPORT_SCISSOR_13_BR
2239       0x80000000, // PA_SC_VPORT_SCISSOR_14_TL
2240       0x40004000, // PA_SC_VPORT_SCISSOR_14_BR
2241       0x80000000, // PA_SC_VPORT_SCISSOR_15_TL
2242       0x40004000, // PA_SC_VPORT_SCISSOR_15_BR
2243       0x0,        // PA_SC_VPORT_ZMIN_0
2244       0x3f800000, // PA_SC_VPORT_ZMAX_0
2245       0x0,        // PA_SC_VPORT_ZMIN_1
2246       0x3f800000, // PA_SC_VPORT_ZMAX_1
2247       0x0,        // PA_SC_VPORT_ZMIN_2
2248       0x3f800000, // PA_SC_VPORT_ZMAX_2
2249       0x0,        // PA_SC_VPORT_ZMIN_3
2250       0x3f800000, // PA_SC_VPORT_ZMAX_3
2251       0x0,        // PA_SC_VPORT_ZMIN_4
2252       0x3f800000, // PA_SC_VPORT_ZMAX_4
2253       0x0,        // PA_SC_VPORT_ZMIN_5
2254       0x3f800000, // PA_SC_VPORT_ZMAX_5
2255       0x0,        // PA_SC_VPORT_ZMIN_6
2256       0x3f800000, // PA_SC_VPORT_ZMAX_6
2257       0x0,        // PA_SC_VPORT_ZMIN_7
2258       0x3f800000, // PA_SC_VPORT_ZMAX_7
2259       0x0,        // PA_SC_VPORT_ZMIN_8
2260       0x3f800000, // PA_SC_VPORT_ZMAX_8
2261       0x0,        // PA_SC_VPORT_ZMIN_9
2262       0x3f800000, // PA_SC_VPORT_ZMAX_9
2263       0x0,        // PA_SC_VPORT_ZMIN_10
2264       0x3f800000, // PA_SC_VPORT_ZMAX_10
2265       0x0,        // PA_SC_VPORT_ZMIN_11
2266       0x3f800000, // PA_SC_VPORT_ZMAX_11
2267       0x0,        // PA_SC_VPORT_ZMIN_12
2268       0x3f800000, // PA_SC_VPORT_ZMAX_12
2269       0x0,        // PA_SC_VPORT_ZMIN_13
2270       0x3f800000, // PA_SC_VPORT_ZMAX_13
2271       0x0,        // PA_SC_VPORT_ZMIN_14
2272       0x3f800000, // PA_SC_VPORT_ZMAX_14
2273       0x0,        // PA_SC_VPORT_ZMIN_15
2274       0x3f800000, // PA_SC_VPORT_ZMAX_15
2275       0x0,        // PA_SC_RASTER_CONFIG
2276       0x0,        // PA_SC_RASTER_CONFIG_1
2277       0x0,        //
2278       0x0         // PA_SC_TILE_STEERING_OVERRIDE
2279    };
2280    static const uint32_t VgtMultiPrimIbResetIndxGfx103[] = {
2281       0x0,       // VGT_MULTI_PRIM_IB_RESET_INDX
2282       0x0,       // CB_RMI_GL2_CACHE_CONTROL
2283       0x0,       // CB_BLEND_RED
2284       0x0,       // CB_BLEND_GREEN
2285       0x0,       // CB_BLEND_BLUE
2286       0x0,       // CB_BLEND_ALPHA
2287       0x0,       // CB_DCC_CONTROL
2288       0x0,       // CB_COVERAGE_OUT_CONTROL
2289       0x0,       // DB_STENCIL_CONTROL
2290       0x1000000, // DB_STENCILREFMASK
2291       0x1000000, // DB_STENCILREFMASK_BF
2292       0x0,       //
2293       0x0,       // PA_CL_VPORT_XSCALE
2294       0x0,       // PA_CL_VPORT_XOFFSET
2295       0x0,       // PA_CL_VPORT_YSCALE
2296       0x0,       // PA_CL_VPORT_YOFFSET
2297       0x0,       // PA_CL_VPORT_ZSCALE
2298       0x0,       // PA_CL_VPORT_ZOFFSET
2299       0x0,       // PA_CL_VPORT_XSCALE_1
2300       0x0,       // PA_CL_VPORT_XOFFSET_1
2301       0x0,       // PA_CL_VPORT_YSCALE_1
2302       0x0,       // PA_CL_VPORT_YOFFSET_1
2303       0x0,       // PA_CL_VPORT_ZSCALE_1
2304       0x0,       // PA_CL_VPORT_ZOFFSET_1
2305       0x0,       // PA_CL_VPORT_XSCALE_2
2306       0x0,       // PA_CL_VPORT_XOFFSET_2
2307       0x0,       // PA_CL_VPORT_YSCALE_2
2308       0x0,       // PA_CL_VPORT_YOFFSET_2
2309       0x0,       // PA_CL_VPORT_ZSCALE_2
2310       0x0,       // PA_CL_VPORT_ZOFFSET_2
2311       0x0,       // PA_CL_VPORT_XSCALE_3
2312       0x0,       // PA_CL_VPORT_XOFFSET_3
2313       0x0,       // PA_CL_VPORT_YSCALE_3
2314       0x0,       // PA_CL_VPORT_YOFFSET_3
2315       0x0,       // PA_CL_VPORT_ZSCALE_3
2316       0x0,       // PA_CL_VPORT_ZOFFSET_3
2317       0x0,       // PA_CL_VPORT_XSCALE_4
2318       0x0,       // PA_CL_VPORT_XOFFSET_4
2319       0x0,       // PA_CL_VPORT_YSCALE_4
2320       0x0,       // PA_CL_VPORT_YOFFSET_4
2321       0x0,       // PA_CL_VPORT_ZSCALE_4
2322       0x0,       // PA_CL_VPORT_ZOFFSET_4
2323       0x0,       // PA_CL_VPORT_XSCALE_5
2324       0x0,       // PA_CL_VPORT_XOFFSET_5
2325       0x0,       // PA_CL_VPORT_YSCALE_5
2326       0x0,       // PA_CL_VPORT_YOFFSET_5
2327       0x0,       // PA_CL_VPORT_ZSCALE_5
2328       0x0,       // PA_CL_VPORT_ZOFFSET_5
2329       0x0,       // PA_CL_VPORT_XSCALE_6
2330       0x0,       // PA_CL_VPORT_XOFFSET_6
2331       0x0,       // PA_CL_VPORT_YSCALE_6
2332       0x0,       // PA_CL_VPORT_YOFFSET_6
2333       0x0,       // PA_CL_VPORT_ZSCALE_6
2334       0x0,       // PA_CL_VPORT_ZOFFSET_6
2335       0x0,       // PA_CL_VPORT_XSCALE_7
2336       0x0,       // PA_CL_VPORT_XOFFSET_7
2337       0x0,       // PA_CL_VPORT_YSCALE_7
2338       0x0,       // PA_CL_VPORT_YOFFSET_7
2339       0x0,       // PA_CL_VPORT_ZSCALE_7
2340       0x0,       // PA_CL_VPORT_ZOFFSET_7
2341       0x0,       // PA_CL_VPORT_XSCALE_8
2342       0x0,       // PA_CL_VPORT_XOFFSET_8
2343       0x0,       // PA_CL_VPORT_YSCALE_8
2344       0x0,       // PA_CL_VPORT_YOFFSET_8
2345       0x0,       // PA_CL_VPORT_ZSCALE_8
2346       0x0,       // PA_CL_VPORT_ZOFFSET_8
2347       0x0,       // PA_CL_VPORT_XSCALE_9
2348       0x0,       // PA_CL_VPORT_XOFFSET_9
2349       0x0,       // PA_CL_VPORT_YSCALE_9
2350       0x0,       // PA_CL_VPORT_YOFFSET_9
2351       0x0,       // PA_CL_VPORT_ZSCALE_9
2352       0x0,       // PA_CL_VPORT_ZOFFSET_9
2353       0x0,       // PA_CL_VPORT_XSCALE_10
2354       0x0,       // PA_CL_VPORT_XOFFSET_10
2355       0x0,       // PA_CL_VPORT_YSCALE_10
2356       0x0,       // PA_CL_VPORT_YOFFSET_10
2357       0x0,       // PA_CL_VPORT_ZSCALE_10
2358       0x0,       // PA_CL_VPORT_ZOFFSET_10
2359       0x0,       // PA_CL_VPORT_XSCALE_11
2360       0x0,       // PA_CL_VPORT_XOFFSET_11
2361       0x0,       // PA_CL_VPORT_YSCALE_11
2362       0x0,       // PA_CL_VPORT_YOFFSET_11
2363       0x0,       // PA_CL_VPORT_ZSCALE_11
2364       0x0,       // PA_CL_VPORT_ZOFFSET_11
2365       0x0,       // PA_CL_VPORT_XSCALE_12
2366       0x0,       // PA_CL_VPORT_XOFFSET_12
2367       0x0,       // PA_CL_VPORT_YSCALE_12
2368       0x0,       // PA_CL_VPORT_YOFFSET_12
2369       0x0,       // PA_CL_VPORT_ZSCALE_12
2370       0x0,       // PA_CL_VPORT_ZOFFSET_12
2371       0x0,       // PA_CL_VPORT_XSCALE_13
2372       0x0,       // PA_CL_VPORT_XOFFSET_13
2373       0x0,       // PA_CL_VPORT_YSCALE_13
2374       0x0,       // PA_CL_VPORT_YOFFSET_13
2375       0x0,       // PA_CL_VPORT_ZSCALE_13
2376       0x0,       // PA_CL_VPORT_ZOFFSET_13
2377       0x0,       // PA_CL_VPORT_XSCALE_14
2378       0x0,       // PA_CL_VPORT_XOFFSET_14
2379       0x0,       // PA_CL_VPORT_YSCALE_14
2380       0x0,       // PA_CL_VPORT_YOFFSET_14
2381       0x0,       // PA_CL_VPORT_ZSCALE_14
2382       0x0,       // PA_CL_VPORT_ZOFFSET_14
2383       0x0,       // PA_CL_VPORT_XSCALE_15
2384       0x0,       // PA_CL_VPORT_XOFFSET_15
2385       0x0,       // PA_CL_VPORT_YSCALE_15
2386       0x0,       // PA_CL_VPORT_YOFFSET_15
2387       0x0,       // PA_CL_VPORT_ZSCALE_15
2388       0x0,       // PA_CL_VPORT_ZOFFSET_15
2389       0x0,       // PA_CL_UCP_0_X
2390       0x0,       // PA_CL_UCP_0_Y
2391       0x0,       // PA_CL_UCP_0_Z
2392       0x0,       // PA_CL_UCP_0_W
2393       0x0,       // PA_CL_UCP_1_X
2394       0x0,       // PA_CL_UCP_1_Y
2395       0x0,       // PA_CL_UCP_1_Z
2396       0x0,       // PA_CL_UCP_1_W
2397       0x0,       // PA_CL_UCP_2_X
2398       0x0,       // PA_CL_UCP_2_Y
2399       0x0,       // PA_CL_UCP_2_Z
2400       0x0,       // PA_CL_UCP_2_W
2401       0x0,       // PA_CL_UCP_3_X
2402       0x0,       // PA_CL_UCP_3_Y
2403       0x0,       // PA_CL_UCP_3_Z
2404       0x0,       // PA_CL_UCP_3_W
2405       0x0,       // PA_CL_UCP_4_X
2406       0x0,       // PA_CL_UCP_4_Y
2407       0x0,       // PA_CL_UCP_4_Z
2408       0x0,       // PA_CL_UCP_4_W
2409       0x0,       // PA_CL_UCP_5_X
2410       0x0,       // PA_CL_UCP_5_Y
2411       0x0,       // PA_CL_UCP_5_Z
2412       0x0        // PA_CL_UCP_5_W
2413    };
2414    static const uint32_t SpiPsInputCntl0Gfx103[] = {
2415       0x0, // SPI_PS_INPUT_CNTL_0
2416       0x0, // SPI_PS_INPUT_CNTL_1
2417       0x0, // SPI_PS_INPUT_CNTL_2
2418       0x0, // SPI_PS_INPUT_CNTL_3
2419       0x0, // SPI_PS_INPUT_CNTL_4
2420       0x0, // SPI_PS_INPUT_CNTL_5
2421       0x0, // SPI_PS_INPUT_CNTL_6
2422       0x0, // SPI_PS_INPUT_CNTL_7
2423       0x0, // SPI_PS_INPUT_CNTL_8
2424       0x0, // SPI_PS_INPUT_CNTL_9
2425       0x0, // SPI_PS_INPUT_CNTL_10
2426       0x0, // SPI_PS_INPUT_CNTL_11
2427       0x0, // SPI_PS_INPUT_CNTL_12
2428       0x0, // SPI_PS_INPUT_CNTL_13
2429       0x0, // SPI_PS_INPUT_CNTL_14
2430       0x0, // SPI_PS_INPUT_CNTL_15
2431       0x0, // SPI_PS_INPUT_CNTL_16
2432       0x0, // SPI_PS_INPUT_CNTL_17
2433       0x0, // SPI_PS_INPUT_CNTL_18
2434       0x0, // SPI_PS_INPUT_CNTL_19
2435       0x0, // SPI_PS_INPUT_CNTL_20
2436       0x0, // SPI_PS_INPUT_CNTL_21
2437       0x0, // SPI_PS_INPUT_CNTL_22
2438       0x0, // SPI_PS_INPUT_CNTL_23
2439       0x0, // SPI_PS_INPUT_CNTL_24
2440       0x0, // SPI_PS_INPUT_CNTL_25
2441       0x0, // SPI_PS_INPUT_CNTL_26
2442       0x0, // SPI_PS_INPUT_CNTL_27
2443       0x0, // SPI_PS_INPUT_CNTL_28
2444       0x0, // SPI_PS_INPUT_CNTL_29
2445       0x0, // SPI_PS_INPUT_CNTL_30
2446       0x0, // SPI_PS_INPUT_CNTL_31
2447       0x0, // SPI_VS_OUT_CONFIG
2448       0x0, //
2449       0x0, // SPI_PS_INPUT_ENA
2450       0x0, // SPI_PS_INPUT_ADDR
2451       0x0, // SPI_INTERP_CONTROL_0
2452       0x2, // SPI_PS_IN_CONTROL
2453       0x0, //
2454       0x0, // SPI_BARYC_CNTL
2455       0x0, //
2456       0x0, // SPI_TMPRING_SIZE
2457       0x0, //
2458       0x0, //
2459       0x0, //
2460       0x0, //
2461       0x0, //
2462       0x0, //
2463       0x0, //
2464       0x0, // SPI_SHADER_IDX_FORMAT
2465       0x0, // SPI_SHADER_POS_FORMAT
2466       0x0, // SPI_SHADER_Z_FORMAT
2467       0x0  // SPI_SHADER_COL_FORMAT
2468    };
2469    static const uint32_t SxPsDownconvertControlGfx103[] = {
2470       0x0, // SX_PS_DOWNCONVERT_CONTROL
2471       0x0, // SX_PS_DOWNCONVERT
2472       0x0, // SX_BLEND_OPT_EPSILON
2473       0x0, // SX_BLEND_OPT_CONTROL
2474       0x0, // SX_MRT0_BLEND_OPT
2475       0x0, // SX_MRT1_BLEND_OPT
2476       0x0, // SX_MRT2_BLEND_OPT
2477       0x0, // SX_MRT3_BLEND_OPT
2478       0x0, // SX_MRT4_BLEND_OPT
2479       0x0, // SX_MRT5_BLEND_OPT
2480       0x0, // SX_MRT6_BLEND_OPT
2481       0x0, // SX_MRT7_BLEND_OPT
2482       0x0, // CB_BLEND0_CONTROL
2483       0x0, // CB_BLEND1_CONTROL
2484       0x0, // CB_BLEND2_CONTROL
2485       0x0, // CB_BLEND3_CONTROL
2486       0x0, // CB_BLEND4_CONTROL
2487       0x0, // CB_BLEND5_CONTROL
2488       0x0, // CB_BLEND6_CONTROL
2489       0x0  // CB_BLEND7_CONTROL
2490    };
2491    static const uint32_t PaClPointXRadGfx103[] = {
2492       0x0, // PA_CL_POINT_X_RAD
2493       0x0, // PA_CL_POINT_Y_RAD
2494       0x0, // PA_CL_POINT_SIZE
2495       0x0  // PA_CL_POINT_CULL_RAD
2496    };
2497    static const uint32_t GeMaxOutputPerSubgroupGfx103[] = {
2498       0x0,     // GE_MAX_OUTPUT_PER_SUBGROUP
2499       0x0,     // DB_DEPTH_CONTROL
2500       0x0,     // DB_EQAA
2501       0x0,     // CB_COLOR_CONTROL
2502       0x0,     // DB_SHADER_CONTROL
2503       0x90000, // PA_CL_CLIP_CNTL
2504       0x4,     // PA_SU_SC_MODE_CNTL
2505       0x0,     // PA_CL_VTE_CNTL
2506       0x0,     // PA_CL_VS_OUT_CNTL
2507       0x0,     // PA_CL_NANINF_CNTL
2508       0x0,     // PA_SU_LINE_STIPPLE_CNTL
2509       0x0,     // PA_SU_LINE_STIPPLE_SCALE
2510       0x0,     // PA_SU_PRIM_FILTER_CNTL
2511       0x0,     // PA_SU_SMALL_PRIM_FILTER_CNTL
2512       0x0,     // PA_CL_OBJPRIM_ID_CNTL
2513       0x0,     // PA_CL_NGG_CNTL
2514       0x0,     // PA_SU_OVER_RASTERIZATION_CNTL
2515       0x0,     // PA_STEREO_CNTL
2516       0x0,     // PA_STATE_STEREO_X
2517       0x0      // PA_CL_VRS_CNTL
2518    };
2519    static const uint32_t PaSuPointSizeGfx103[] = {
2520       0x0, // PA_SU_POINT_SIZE
2521       0x0, // PA_SU_POINT_MINMAX
2522       0x0, // PA_SU_LINE_CNTL
2523       0x0  // PA_SC_LINE_STIPPLE
2524    };
2525    static const uint32_t VgtHosMaxTessLevelGfx103[] = {
2526       0x0, // VGT_HOS_MAX_TESS_LEVEL
2527       0x0  // VGT_HOS_MIN_TESS_LEVEL
2528    };
2529    static const uint32_t VgtGsModeGfx103[] = {
2530       0x0,   // VGT_GS_MODE
2531       0x0,   // VGT_GS_ONCHIP_CNTL
2532       0x0,   // PA_SC_MODE_CNTL_0
2533       0x0,   // PA_SC_MODE_CNTL_1
2534       0x0,   // VGT_ENHANCE
2535       0x100, // VGT_GS_PER_ES
2536       0x80,  // VGT_ES_PER_GS
2537       0x2,   // VGT_GS_PER_VS
2538       0x0,   // VGT_GSVS_RING_OFFSET_1
2539       0x0,   // VGT_GSVS_RING_OFFSET_2
2540       0x0,   // VGT_GSVS_RING_OFFSET_3
2541       0x0    // VGT_GS_OUT_PRIM_TYPE
2542    };
2543    static const uint32_t VgtPrimitiveidEnGfx103[] = {
2544       0x0 // VGT_PRIMITIVEID_EN
2545    };
2546    static const uint32_t VgtPrimitiveidResetGfx103[] = {
2547       0x0 // VGT_PRIMITIVEID_RESET
2548    };
2549    static const uint32_t VgtDrawPayloadCntlGfx103[] = {
2550       0x0, // VGT_DRAW_PAYLOAD_CNTL
2551       0x0, //
2552       0x0, // VGT_INSTANCE_STEP_RATE_0
2553       0x0, // VGT_INSTANCE_STEP_RATE_1
2554       0x0, // IA_MULTI_VGT_PARAM
2555       0x0, // VGT_ESGS_RING_ITEMSIZE
2556       0x0, // VGT_GSVS_RING_ITEMSIZE
2557       0x0, // VGT_REUSE_OFF
2558       0x0, // VGT_VTX_CNT_EN
2559       0x0, // DB_HTILE_SURFACE
2560       0x0, // DB_SRESULTS_COMPARE_STATE0
2561       0x0, // DB_SRESULTS_COMPARE_STATE1
2562       0x0, // DB_PRELOAD_CONTROL
2563       0x0, //
2564       0x0, // VGT_STRMOUT_BUFFER_SIZE_0
2565       0x0, // VGT_STRMOUT_VTX_STRIDE_0
2566       0x0, //
2567       0x0, // VGT_STRMOUT_BUFFER_OFFSET_0
2568       0x0, // VGT_STRMOUT_BUFFER_SIZE_1
2569       0x0, // VGT_STRMOUT_VTX_STRIDE_1
2570       0x0, //
2571       0x0, // VGT_STRMOUT_BUFFER_OFFSET_1
2572       0x0, // VGT_STRMOUT_BUFFER_SIZE_2
2573       0x0, // VGT_STRMOUT_VTX_STRIDE_2
2574       0x0, //
2575       0x0, // VGT_STRMOUT_BUFFER_OFFSET_2
2576       0x0, // VGT_STRMOUT_BUFFER_SIZE_3
2577       0x0, // VGT_STRMOUT_VTX_STRIDE_3
2578       0x0, //
2579       0x0, // VGT_STRMOUT_BUFFER_OFFSET_3
2580       0x0, //
2581       0x0, //
2582       0x0, //
2583       0x0, //
2584       0x0, //
2585       0x0, //
2586       0x0, // VGT_STRMOUT_DRAW_OPAQUE_OFFSET
2587       0x0, // VGT_STRMOUT_DRAW_OPAQUE_BUFFER_FILLED_SIZE
2588       0x0, // VGT_STRMOUT_DRAW_OPAQUE_VERTEX_STRIDE
2589       0x0, //
2590       0x0, // VGT_GS_MAX_VERT_OUT
2591       0x0, //
2592       0x0, //
2593       0x0, //
2594       0x0, //
2595       0x0, // GE_NGG_SUBGRP_CNTL
2596       0x0, // VGT_TESS_DISTRIBUTION
2597       0x0, // VGT_SHADER_STAGES_EN
2598       0x0, // VGT_LS_HS_CONFIG
2599       0x0, // VGT_GS_VERT_ITEMSIZE
2600       0x0, // VGT_GS_VERT_ITEMSIZE_1
2601       0x0, // VGT_GS_VERT_ITEMSIZE_2
2602       0x0, // VGT_GS_VERT_ITEMSIZE_3
2603       0x0, // VGT_TF_PARAM
2604       0x0, // DB_ALPHA_TO_MASK
2605       0x0, //
2606       0x0, // PA_SU_POLY_OFFSET_DB_FMT_CNTL
2607       0x0, // PA_SU_POLY_OFFSET_CLAMP
2608       0x0, // PA_SU_POLY_OFFSET_FRONT_SCALE
2609       0x0, // PA_SU_POLY_OFFSET_FRONT_OFFSET
2610       0x0, // PA_SU_POLY_OFFSET_BACK_SCALE
2611       0x0, // PA_SU_POLY_OFFSET_BACK_OFFSET
2612       0x0, // VGT_GS_INSTANCE_CNT
2613       0x0, // VGT_STRMOUT_CONFIG
2614       0x0  // VGT_STRMOUT_BUFFER_CONFIG
2615    };
2616    static const uint32_t PaScCentroidPriority0Gfx103[] = {
2617       0x0,        // PA_SC_CENTROID_PRIORITY_0
2618       0x0,        // PA_SC_CENTROID_PRIORITY_1
2619       0x1000,     // PA_SC_LINE_CNTL
2620       0x0,        // PA_SC_AA_CONFIG
2621       0x5,        // PA_SU_VTX_CNTL
2622       0x3f800000, // PA_CL_GB_VERT_CLIP_ADJ
2623       0x3f800000, // PA_CL_GB_VERT_DISC_ADJ
2624       0x3f800000, // PA_CL_GB_HORZ_CLIP_ADJ
2625       0x3f800000, // PA_CL_GB_HORZ_DISC_ADJ
2626       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_0
2627       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_1
2628       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_2
2629       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_3
2630       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_0
2631       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_1
2632       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_2
2633       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_3
2634       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_0
2635       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_1
2636       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_2
2637       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_3
2638       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_0
2639       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_1
2640       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_2
2641       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_3
2642       0xffffffff, // PA_SC_AA_MASK_X0Y0_X1Y0
2643       0xffffffff, // PA_SC_AA_MASK_X0Y1_X1Y1
2644       0x0,        // PA_SC_SHADER_CONTROL
2645       0x3,        // PA_SC_BINNER_CNTL_0
2646       0x0,        // PA_SC_BINNER_CNTL_1
2647       0x100000,   // PA_SC_CONSERVATIVE_RASTERIZATION_CNTL
2648       0x0,        // PA_SC_NGG_MODE_CNTL
2649       0x0,        //
2650       0x1e,       // VGT_VERTEX_REUSE_BLOCK_CNTL
2651       0x20,       // VGT_OUT_DEALLOC_CNTL
2652       0x0,        // CB_COLOR0_BASE
2653       0x0,        //
2654       0x0,        //
2655       0x0,        // CB_COLOR0_VIEW
2656       0x0,        // CB_COLOR0_INFO
2657       0x0,        // CB_COLOR0_ATTRIB
2658       0x0,        // CB_COLOR0_DCC_CONTROL
2659       0x0,        // CB_COLOR0_CMASK
2660       0x0,        //
2661       0x0,        // CB_COLOR0_FMASK
2662       0x0,        //
2663       0x0,        // CB_COLOR0_CLEAR_WORD0
2664       0x0,        // CB_COLOR0_CLEAR_WORD1
2665       0x0,        // CB_COLOR0_DCC_BASE
2666       0x0,        //
2667       0x0,        // CB_COLOR1_BASE
2668       0x0,        //
2669       0x0,        //
2670       0x0,        // CB_COLOR1_VIEW
2671       0x0,        // CB_COLOR1_INFO
2672       0x0,        // CB_COLOR1_ATTRIB
2673       0x0,        // CB_COLOR1_DCC_CONTROL
2674       0x0,        // CB_COLOR1_CMASK
2675       0x0,        //
2676       0x0,        // CB_COLOR1_FMASK
2677       0x0,        //
2678       0x0,        // CB_COLOR1_CLEAR_WORD0
2679       0x0,        // CB_COLOR1_CLEAR_WORD1
2680       0x0,        // CB_COLOR1_DCC_BASE
2681       0x0,        //
2682       0x0,        // CB_COLOR2_BASE
2683       0x0,        //
2684       0x0,        //
2685       0x0,        // CB_COLOR2_VIEW
2686       0x0,        // CB_COLOR2_INFO
2687       0x0,        // CB_COLOR2_ATTRIB
2688       0x0,        // CB_COLOR2_DCC_CONTROL
2689       0x0,        // CB_COLOR2_CMASK
2690       0x0,        //
2691       0x0,        // CB_COLOR2_FMASK
2692       0x0,        //
2693       0x0,        // CB_COLOR2_CLEAR_WORD0
2694       0x0,        // CB_COLOR2_CLEAR_WORD1
2695       0x0,        // CB_COLOR2_DCC_BASE
2696       0x0,        //
2697       0x0,        // CB_COLOR3_BASE
2698       0x0,        //
2699       0x0,        //
2700       0x0,        // CB_COLOR3_VIEW
2701       0x0,        // CB_COLOR3_INFO
2702       0x0,        // CB_COLOR3_ATTRIB
2703       0x0,        // CB_COLOR3_DCC_CONTROL
2704       0x0,        // CB_COLOR3_CMASK
2705       0x0,        //
2706       0x0,        // CB_COLOR3_FMASK
2707       0x0,        //
2708       0x0,        // CB_COLOR3_CLEAR_WORD0
2709       0x0,        // CB_COLOR3_CLEAR_WORD1
2710       0x0,        // CB_COLOR3_DCC_BASE
2711       0x0,        //
2712       0x0,        // CB_COLOR4_BASE
2713       0x0,        //
2714       0x0,        //
2715       0x0,        // CB_COLOR4_VIEW
2716       0x0,        // CB_COLOR4_INFO
2717       0x0,        // CB_COLOR4_ATTRIB
2718       0x0,        // CB_COLOR4_DCC_CONTROL
2719       0x0,        // CB_COLOR4_CMASK
2720       0x0,        //
2721       0x0,        // CB_COLOR4_FMASK
2722       0x0,        //
2723       0x0,        // CB_COLOR4_CLEAR_WORD0
2724       0x0,        // CB_COLOR4_CLEAR_WORD1
2725       0x0,        // CB_COLOR4_DCC_BASE
2726       0x0,        //
2727       0x0,        // CB_COLOR5_BASE
2728       0x0,        //
2729       0x0,        //
2730       0x0,        // CB_COLOR5_VIEW
2731       0x0,        // CB_COLOR5_INFO
2732       0x0,        // CB_COLOR5_ATTRIB
2733       0x0,        // CB_COLOR5_DCC_CONTROL
2734       0x0,        // CB_COLOR5_CMASK
2735       0x0,        //
2736       0x0,        // CB_COLOR5_FMASK
2737       0x0,        //
2738       0x0,        // CB_COLOR5_CLEAR_WORD0
2739       0x0,        // CB_COLOR5_CLEAR_WORD1
2740       0x0,        // CB_COLOR5_DCC_BASE
2741       0x0,        //
2742       0x0,        // CB_COLOR6_BASE
2743       0x0,        //
2744       0x0,        //
2745       0x0,        // CB_COLOR6_VIEW
2746       0x0,        // CB_COLOR6_INFO
2747       0x0,        // CB_COLOR6_ATTRIB
2748       0x0,        // CB_COLOR6_DCC_CONTROL
2749       0x0,        // CB_COLOR6_CMASK
2750       0x0,        //
2751       0x0,        // CB_COLOR6_FMASK
2752       0x0,        //
2753       0x0,        // CB_COLOR6_CLEAR_WORD0
2754       0x0,        // CB_COLOR6_CLEAR_WORD1
2755       0x0,        // CB_COLOR6_DCC_BASE
2756       0x0,        //
2757       0x0,        // CB_COLOR7_BASE
2758       0x0,        //
2759       0x0,        //
2760       0x0,        // CB_COLOR7_VIEW
2761       0x0,        // CB_COLOR7_INFO
2762       0x0,        // CB_COLOR7_ATTRIB
2763       0x0,        // CB_COLOR7_DCC_CONTROL
2764       0x0,        // CB_COLOR7_CMASK
2765       0x0,        //
2766       0x0,        // CB_COLOR7_FMASK
2767       0x0,        //
2768       0x0,        // CB_COLOR7_CLEAR_WORD0
2769       0x0,        // CB_COLOR7_CLEAR_WORD1
2770       0x0,        // CB_COLOR7_DCC_BASE
2771       0x0,        //
2772       0x0,        // CB_COLOR0_BASE_EXT
2773       0x0,        // CB_COLOR1_BASE_EXT
2774       0x0,        // CB_COLOR2_BASE_EXT
2775       0x0,        // CB_COLOR3_BASE_EXT
2776       0x0,        // CB_COLOR4_BASE_EXT
2777       0x0,        // CB_COLOR5_BASE_EXT
2778       0x0,        // CB_COLOR6_BASE_EXT
2779       0x0,        // CB_COLOR7_BASE_EXT
2780       0x0,        // CB_COLOR0_CMASK_BASE_EXT
2781       0x0,        // CB_COLOR1_CMASK_BASE_EXT
2782       0x0,        // CB_COLOR2_CMASK_BASE_EXT
2783       0x0,        // CB_COLOR3_CMASK_BASE_EXT
2784       0x0,        // CB_COLOR4_CMASK_BASE_EXT
2785       0x0,        // CB_COLOR5_CMASK_BASE_EXT
2786       0x0,        // CB_COLOR6_CMASK_BASE_EXT
2787       0x0,        // CB_COLOR7_CMASK_BASE_EXT
2788       0x0,        // CB_COLOR0_FMASK_BASE_EXT
2789       0x0,        // CB_COLOR1_FMASK_BASE_EXT
2790       0x0,        // CB_COLOR2_FMASK_BASE_EXT
2791       0x0,        // CB_COLOR3_FMASK_BASE_EXT
2792       0x0,        // CB_COLOR4_FMASK_BASE_EXT
2793       0x0,        // CB_COLOR5_FMASK_BASE_EXT
2794       0x0,        // CB_COLOR6_FMASK_BASE_EXT
2795       0x0,        // CB_COLOR7_FMASK_BASE_EXT
2796       0x0,        // CB_COLOR0_DCC_BASE_EXT
2797       0x0,        // CB_COLOR1_DCC_BASE_EXT
2798       0x0,        // CB_COLOR2_DCC_BASE_EXT
2799       0x0,        // CB_COLOR3_DCC_BASE_EXT
2800       0x0,        // CB_COLOR4_DCC_BASE_EXT
2801       0x0,        // CB_COLOR5_DCC_BASE_EXT
2802       0x0,        // CB_COLOR6_DCC_BASE_EXT
2803       0x0,        // CB_COLOR7_DCC_BASE_EXT
2804       0x0,        // CB_COLOR0_ATTRIB2
2805       0x0,        // CB_COLOR1_ATTRIB2
2806       0x0,        // CB_COLOR2_ATTRIB2
2807       0x0,        // CB_COLOR3_ATTRIB2
2808       0x0,        // CB_COLOR4_ATTRIB2
2809       0x0,        // CB_COLOR5_ATTRIB2
2810       0x0,        // CB_COLOR6_ATTRIB2
2811       0x0,        // CB_COLOR7_ATTRIB2
2812       0x0,        // CB_COLOR0_ATTRIB3
2813       0x0,        // CB_COLOR1_ATTRIB3
2814       0x0,        // CB_COLOR2_ATTRIB3
2815       0x0,        // CB_COLOR3_ATTRIB3
2816       0x0,        // CB_COLOR4_ATTRIB3
2817       0x0,        // CB_COLOR5_ATTRIB3
2818       0x0,        // CB_COLOR6_ATTRIB3
2819       0x0         // CB_COLOR7_ATTRIB3
2820    };
2821 
2822    set_context_reg_seq_array(cs, R_028000_DB_RENDER_CONTROL, SET(DbRenderControlGfx103));
2823    set_context_reg_seq_array(cs, R_0281E8_COHER_DEST_BASE_HI_0, SET(CoherDestBaseHi0Gfx103));
2824    set_context_reg_seq_array(cs, R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX,
2825                              SET(VgtMultiPrimIbResetIndxGfx103));
2826    set_context_reg_seq_array(cs, R_028644_SPI_PS_INPUT_CNTL_0, SET(SpiPsInputCntl0Gfx103));
2827    set_context_reg_seq_array(cs, R_028750_SX_PS_DOWNCONVERT_CONTROL,
2828                              SET(SxPsDownconvertControlGfx103));
2829    set_context_reg_seq_array(cs, R_0287D4_PA_CL_POINT_X_RAD, SET(PaClPointXRadGfx103));
2830    set_context_reg_seq_array(cs, R_0287FC_GE_MAX_OUTPUT_PER_SUBGROUP,
2831                              SET(GeMaxOutputPerSubgroupGfx103));
2832    set_context_reg_seq_array(cs, R_028A00_PA_SU_POINT_SIZE, SET(PaSuPointSizeGfx103));
2833    set_context_reg_seq_array(cs, R_028A18_VGT_HOS_MAX_TESS_LEVEL, SET(VgtHosMaxTessLevelGfx103));
2834    set_context_reg_seq_array(cs, R_028A40_VGT_GS_MODE, SET(VgtGsModeGfx103));
2835    set_context_reg_seq_array(cs, R_028A84_VGT_PRIMITIVEID_EN, SET(VgtPrimitiveidEnGfx103));
2836    set_context_reg_seq_array(cs, R_028A8C_VGT_PRIMITIVEID_RESET, SET(VgtPrimitiveidResetGfx103));
2837    set_context_reg_seq_array(cs, R_028A98_VGT_DRAW_PAYLOAD_CNTL, SET(VgtDrawPayloadCntlGfx103));
2838    set_context_reg_seq_array(cs, R_028BD4_PA_SC_CENTROID_PRIORITY_0,
2839                              SET(PaScCentroidPriority0Gfx103));
2840 
2841    for (unsigned i = 0; i < num_reg_pairs; i++)
2842       set_context_reg_seq_array(cs, reg_offsets[i], 1, &reg_values[i]);
2843 }
2844 
2845 /**
2846  * Emulate CLEAR_STATE. Additionally, initialize num_reg_pairs registers specified
2847  * via reg_offsets and reg_values.
2848  */
gfx11_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)2849 static void gfx11_emulate_clear_state(struct radeon_cmdbuf *cs, unsigned num_reg_pairs,
2850                                       unsigned *reg_offsets, uint32_t *reg_values,
2851                                       set_context_reg_seq_array_fn set_context_reg_seq_array)
2852 {
2853    static const uint32_t DbRenderControlGfx11[] = {
2854       0x0,        // DB_RENDER_CONTROL
2855       0x0,        // DB_COUNT_CONTROL
2856       0x0,        // DB_DEPTH_VIEW
2857       0x0,        // DB_RENDER_OVERRIDE
2858       0x0,        // DB_RENDER_OVERRIDE2
2859       0x0,        // DB_HTILE_DATA_BASE
2860       0x0,        //
2861       0x0,        // DB_DEPTH_SIZE_XY
2862       0x0,        // DB_DEPTH_BOUNDS_MIN
2863       0x0,        // DB_DEPTH_BOUNDS_MAX
2864       0x0,        // DB_STENCIL_CLEAR
2865       0x0,        // DB_DEPTH_CLEAR
2866       0x0,        // PA_SC_SCREEN_SCISSOR_TL
2867       0x40004000, // PA_SC_SCREEN_SCISSOR_BR
2868       0x0,        //
2869       0x0,        // DB_RESERVED_REG_2
2870       0x0,        // DB_Z_INFO
2871       0x0,        // DB_STENCIL_INFO
2872       0x0,        // DB_Z_READ_BASE
2873       0x0,        // DB_STENCIL_READ_BASE
2874       0x0,        // DB_Z_WRITE_BASE
2875       0x0,        // DB_STENCIL_WRITE_BASE
2876       0x0,        // DB_RESERVED_REG_1
2877       0x0,        // DB_RESERVED_REG_3
2878       0x0,        // DB_SPI_VRS_CENTER_LOCATION
2879       0x0,        //
2880       0x0,        // DB_Z_READ_BASE_HI
2881       0x0,        // DB_STENCIL_READ_BASE_HI
2882       0x0,        // DB_Z_WRITE_BASE_HI
2883       0x0,        // DB_STENCIL_WRITE_BASE_HI
2884       0x0,        // DB_HTILE_DATA_BASE_HI
2885       0x0,        // DB_RMI_L2_CACHE_CONTROL
2886       0x0,        // TA_BC_BASE_ADDR
2887       0x0,        // TA_BC_BASE_ADDR_HI
2888    };
2889    static const uint32_t CoherDestBaseHi0Gfx11[] = {
2890       0x0,        // COHER_DEST_BASE_HI_0
2891       0x0,        // COHER_DEST_BASE_HI_1
2892       0x0,        // COHER_DEST_BASE_HI_2
2893       0x0,        // COHER_DEST_BASE_HI_3
2894       0x0,        // COHER_DEST_BASE_2
2895       0x0,        // COHER_DEST_BASE_3
2896       0x0,        // PA_SC_WINDOW_OFFSET
2897       0x80000000, // PA_SC_WINDOW_SCISSOR_TL
2898       0x40004000, // PA_SC_WINDOW_SCISSOR_BR
2899       0xffff,     // PA_SC_CLIPRECT_RULE
2900       0x0,        // PA_SC_CLIPRECT_0_TL
2901       0x40004000, // PA_SC_CLIPRECT_0_BR
2902       0x0,        // PA_SC_CLIPRECT_1_TL
2903       0x40004000, // PA_SC_CLIPRECT_1_BR
2904       0x0,        // PA_SC_CLIPRECT_2_TL
2905       0x40004000, // PA_SC_CLIPRECT_2_BR
2906       0x0,        // PA_SC_CLIPRECT_3_TL
2907       0x40004000, // PA_SC_CLIPRECT_3_BR
2908       0xaa99aaaa, // PA_SC_EDGERULE
2909       0x0,        // PA_SU_HARDWARE_SCREEN_OFFSET
2910       0xffffffff, // CB_TARGET_MASK
2911       0xffffffff, // CB_SHADER_MASK
2912       0x80000000, // PA_SC_GENERIC_SCISSOR_TL
2913       0x40004000, // PA_SC_GENERIC_SCISSOR_BR
2914       0x0,        // COHER_DEST_BASE_0
2915       0x0,        // COHER_DEST_BASE_1
2916       0x80000000, // PA_SC_VPORT_SCISSOR_0_TL
2917       0x40004000, // PA_SC_VPORT_SCISSOR_0_BR
2918       0x80000000, // PA_SC_VPORT_SCISSOR_1_TL
2919       0x40004000, // PA_SC_VPORT_SCISSOR_1_BR
2920       0x80000000, // PA_SC_VPORT_SCISSOR_2_TL
2921       0x40004000, // PA_SC_VPORT_SCISSOR_2_BR
2922       0x80000000, // PA_SC_VPORT_SCISSOR_3_TL
2923       0x40004000, // PA_SC_VPORT_SCISSOR_3_BR
2924       0x80000000, // PA_SC_VPORT_SCISSOR_4_TL
2925       0x40004000, // PA_SC_VPORT_SCISSOR_4_BR
2926       0x80000000, // PA_SC_VPORT_SCISSOR_5_TL
2927       0x40004000, // PA_SC_VPORT_SCISSOR_5_BR
2928       0x80000000, // PA_SC_VPORT_SCISSOR_6_TL
2929       0x40004000, // PA_SC_VPORT_SCISSOR_6_BR
2930       0x80000000, // PA_SC_VPORT_SCISSOR_7_TL
2931       0x40004000, // PA_SC_VPORT_SCISSOR_7_BR
2932       0x80000000, // PA_SC_VPORT_SCISSOR_8_TL
2933       0x40004000, // PA_SC_VPORT_SCISSOR_8_BR
2934       0x80000000, // PA_SC_VPORT_SCISSOR_9_TL
2935       0x40004000, // PA_SC_VPORT_SCISSOR_9_BR
2936       0x80000000, // PA_SC_VPORT_SCISSOR_10_TL
2937       0x40004000, // PA_SC_VPORT_SCISSOR_10_BR
2938       0x80000000, // PA_SC_VPORT_SCISSOR_11_TL
2939       0x40004000, // PA_SC_VPORT_SCISSOR_11_BR
2940       0x80000000, // PA_SC_VPORT_SCISSOR_12_TL
2941       0x40004000, // PA_SC_VPORT_SCISSOR_12_BR
2942       0x80000000, // PA_SC_VPORT_SCISSOR_13_TL
2943       0x40004000, // PA_SC_VPORT_SCISSOR_13_BR
2944       0x80000000, // PA_SC_VPORT_SCISSOR_14_TL
2945       0x40004000, // PA_SC_VPORT_SCISSOR_14_BR
2946       0x80000000, // PA_SC_VPORT_SCISSOR_15_TL
2947       0x40004000, // PA_SC_VPORT_SCISSOR_15_BR
2948       0x0,        // PA_SC_VPORT_ZMIN_0
2949       0x3f800000, // PA_SC_VPORT_ZMAX_0
2950       0x0,        // PA_SC_VPORT_ZMIN_1
2951       0x3f800000, // PA_SC_VPORT_ZMAX_1
2952       0x0,        // PA_SC_VPORT_ZMIN_2
2953       0x3f800000, // PA_SC_VPORT_ZMAX_2
2954       0x0,        // PA_SC_VPORT_ZMIN_3
2955       0x3f800000, // PA_SC_VPORT_ZMAX_3
2956       0x0,        // PA_SC_VPORT_ZMIN_4
2957       0x3f800000, // PA_SC_VPORT_ZMAX_4
2958       0x0,        // PA_SC_VPORT_ZMIN_5
2959       0x3f800000, // PA_SC_VPORT_ZMAX_5
2960       0x0,        // PA_SC_VPORT_ZMIN_6
2961       0x3f800000, // PA_SC_VPORT_ZMAX_6
2962       0x0,        // PA_SC_VPORT_ZMIN_7
2963       0x3f800000, // PA_SC_VPORT_ZMAX_7
2964       0x0,        // PA_SC_VPORT_ZMIN_8
2965       0x3f800000, // PA_SC_VPORT_ZMAX_8
2966       0x0,        // PA_SC_VPORT_ZMIN_9
2967       0x3f800000, // PA_SC_VPORT_ZMAX_9
2968       0x0,        // PA_SC_VPORT_ZMIN_10
2969       0x3f800000, // PA_SC_VPORT_ZMAX_10
2970       0x0,        // PA_SC_VPORT_ZMIN_11
2971       0x3f800000, // PA_SC_VPORT_ZMAX_11
2972       0x0,        // PA_SC_VPORT_ZMIN_12
2973       0x3f800000, // PA_SC_VPORT_ZMAX_12
2974       0x0,        // PA_SC_VPORT_ZMIN_13
2975       0x3f800000, // PA_SC_VPORT_ZMAX_13
2976       0x0,        // PA_SC_VPORT_ZMIN_14
2977       0x3f800000, // PA_SC_VPORT_ZMAX_14
2978       0x0,        // PA_SC_VPORT_ZMIN_15
2979       0x3f800000, // PA_SC_VPORT_ZMAX_15
2980       0x0,        // PA_SC_RASTER_CONFIG
2981       0x0,        // PA_SC_RASTER_CONFIG_1
2982       0x0,        //
2983       0x0,        // PA_SC_TILE_STEERING_OVERRIDE
2984    };
2985    static const uint32_t PaScVrsOverrideCntlGfx11[] = {
2986       0x0,        // PA_SC_VRS_OVERRIDE_CNTL
2987       0x0,        // PA_SC_VRS_RATE_FEEDBACK_BASE
2988       0x0,        // PA_SC_VRS_RATE_FEEDBACK_BASE_EXT
2989       0x0,        // PA_SC_VRS_RATE_FEEDBACK_SIZE_XY
2990       0x0,        //
2991       0x0,        // PA_SC_VRS_RATE_CACHE_CNTL
2992    };
2993    static const uint32_t PaScVrsRateBaseGfx11[] = {
2994       0x0,        // PA_SC_VRS_RATE_BASE
2995       0x0,        // PA_SC_VRS_RATE_BASE_EXT
2996       0x0,        // PA_SC_VRS_RATE_SIZE_XY
2997    };
2998    static const uint32_t VgtMultiPrimIbResetIndxGfx11[] = {
2999       0x0,        // VGT_MULTI_PRIM_IB_RESET_INDX
3000       0x0,        // CB_RMI_GL2_CACHE_CONTROL
3001       0x0,        // CB_BLEND_RED
3002       0x0,        // CB_BLEND_GREEN
3003       0x0,        // CB_BLEND_BLUE
3004       0x0,        // CB_BLEND_ALPHA
3005       0x0,        // CB_FDCC_CONTROL
3006       0x0,        // CB_COVERAGE_OUT_CONTROL
3007       0x0,        // DB_STENCIL_CONTROL
3008       0x1000000,  // DB_STENCILREFMASK
3009       0x1000000,  // DB_STENCILREFMASK_BF
3010       0x0,        //
3011       0x0,        // PA_CL_VPORT_XSCALE
3012       0x0,        // PA_CL_VPORT_XOFFSET
3013       0x0,        // PA_CL_VPORT_YSCALE
3014       0x0,        // PA_CL_VPORT_YOFFSET
3015       0x0,        // PA_CL_VPORT_ZSCALE
3016       0x0,        // PA_CL_VPORT_ZOFFSET
3017       0x0,        // PA_CL_VPORT_XSCALE_1
3018       0x0,        // PA_CL_VPORT_XOFFSET_1
3019       0x0,        // PA_CL_VPORT_YSCALE_1
3020       0x0,        // PA_CL_VPORT_YOFFSET_1
3021       0x0,        // PA_CL_VPORT_ZSCALE_1
3022       0x0,        // PA_CL_VPORT_ZOFFSET_1
3023       0x0,        // PA_CL_VPORT_XSCALE_2
3024       0x0,        // PA_CL_VPORT_XOFFSET_2
3025       0x0,        // PA_CL_VPORT_YSCALE_2
3026       0x0,        // PA_CL_VPORT_YOFFSET_2
3027       0x0,        // PA_CL_VPORT_ZSCALE_2
3028       0x0,        // PA_CL_VPORT_ZOFFSET_2
3029       0x0,        // PA_CL_VPORT_XSCALE_3
3030       0x0,        // PA_CL_VPORT_XOFFSET_3
3031       0x0,        // PA_CL_VPORT_YSCALE_3
3032       0x0,        // PA_CL_VPORT_YOFFSET_3
3033       0x0,        // PA_CL_VPORT_ZSCALE_3
3034       0x0,        // PA_CL_VPORT_ZOFFSET_3
3035       0x0,        // PA_CL_VPORT_XSCALE_4
3036       0x0,        // PA_CL_VPORT_XOFFSET_4
3037       0x0,        // PA_CL_VPORT_YSCALE_4
3038       0x0,        // PA_CL_VPORT_YOFFSET_4
3039       0x0,        // PA_CL_VPORT_ZSCALE_4
3040       0x0,        // PA_CL_VPORT_ZOFFSET_4
3041       0x0,        // PA_CL_VPORT_XSCALE_5
3042       0x0,        // PA_CL_VPORT_XOFFSET_5
3043       0x0,        // PA_CL_VPORT_YSCALE_5
3044       0x0,        // PA_CL_VPORT_YOFFSET_5
3045       0x0,        // PA_CL_VPORT_ZSCALE_5
3046       0x0,        // PA_CL_VPORT_ZOFFSET_5
3047       0x0,        // PA_CL_VPORT_XSCALE_6
3048       0x0,        // PA_CL_VPORT_XOFFSET_6
3049       0x0,        // PA_CL_VPORT_YSCALE_6
3050       0x0,        // PA_CL_VPORT_YOFFSET_6
3051       0x0,        // PA_CL_VPORT_ZSCALE_6
3052       0x0,        // PA_CL_VPORT_ZOFFSET_6
3053       0x0,        // PA_CL_VPORT_XSCALE_7
3054       0x0,        // PA_CL_VPORT_XOFFSET_7
3055       0x0,        // PA_CL_VPORT_YSCALE_7
3056       0x0,        // PA_CL_VPORT_YOFFSET_7
3057       0x0,        // PA_CL_VPORT_ZSCALE_7
3058       0x0,        // PA_CL_VPORT_ZOFFSET_7
3059       0x0,        // PA_CL_VPORT_XSCALE_8
3060       0x0,        // PA_CL_VPORT_XOFFSET_8
3061       0x0,        // PA_CL_VPORT_YSCALE_8
3062       0x0,        // PA_CL_VPORT_YOFFSET_8
3063       0x0,        // PA_CL_VPORT_ZSCALE_8
3064       0x0,        // PA_CL_VPORT_ZOFFSET_8
3065       0x0,        // PA_CL_VPORT_XSCALE_9
3066       0x0,        // PA_CL_VPORT_XOFFSET_9
3067       0x0,        // PA_CL_VPORT_YSCALE_9
3068       0x0,        // PA_CL_VPORT_YOFFSET_9
3069       0x0,        // PA_CL_VPORT_ZSCALE_9
3070       0x0,        // PA_CL_VPORT_ZOFFSET_9
3071       0x0,        // PA_CL_VPORT_XSCALE_10
3072       0x0,        // PA_CL_VPORT_XOFFSET_10
3073       0x0,        // PA_CL_VPORT_YSCALE_10
3074       0x0,        // PA_CL_VPORT_YOFFSET_10
3075       0x0,        // PA_CL_VPORT_ZSCALE_10
3076       0x0,        // PA_CL_VPORT_ZOFFSET_10
3077       0x0,        // PA_CL_VPORT_XSCALE_11
3078       0x0,        // PA_CL_VPORT_XOFFSET_11
3079       0x0,        // PA_CL_VPORT_YSCALE_11
3080       0x0,        // PA_CL_VPORT_YOFFSET_11
3081       0x0,        // PA_CL_VPORT_ZSCALE_11
3082       0x0,        // PA_CL_VPORT_ZOFFSET_11
3083       0x0,        // PA_CL_VPORT_XSCALE_12
3084       0x0,        // PA_CL_VPORT_XOFFSET_12
3085       0x0,        // PA_CL_VPORT_YSCALE_12
3086       0x0,        // PA_CL_VPORT_YOFFSET_12
3087       0x0,        // PA_CL_VPORT_ZSCALE_12
3088       0x0,        // PA_CL_VPORT_ZOFFSET_12
3089       0x0,        // PA_CL_VPORT_XSCALE_13
3090       0x0,        // PA_CL_VPORT_XOFFSET_13
3091       0x0,        // PA_CL_VPORT_YSCALE_13
3092       0x0,        // PA_CL_VPORT_YOFFSET_13
3093       0x0,        // PA_CL_VPORT_ZSCALE_13
3094       0x0,        // PA_CL_VPORT_ZOFFSET_13
3095       0x0,        // PA_CL_VPORT_XSCALE_14
3096       0x0,        // PA_CL_VPORT_XOFFSET_14
3097       0x0,        // PA_CL_VPORT_YSCALE_14
3098       0x0,        // PA_CL_VPORT_YOFFSET_14
3099       0x0,        // PA_CL_VPORT_ZSCALE_14
3100       0x0,        // PA_CL_VPORT_ZOFFSET_14
3101       0x0,        // PA_CL_VPORT_XSCALE_15
3102       0x0,        // PA_CL_VPORT_XOFFSET_15
3103       0x0,        // PA_CL_VPORT_YSCALE_15
3104       0x0,        // PA_CL_VPORT_YOFFSET_15
3105       0x0,        // PA_CL_VPORT_ZSCALE_15
3106       0x0,        // PA_CL_VPORT_ZOFFSET_15
3107       0x0,        // PA_CL_UCP_0_X
3108       0x0,        // PA_CL_UCP_0_Y
3109       0x0,        // PA_CL_UCP_0_Z
3110       0x0,        // PA_CL_UCP_0_W
3111       0x0,        // PA_CL_UCP_1_X
3112       0x0,        // PA_CL_UCP_1_Y
3113       0x0,        // PA_CL_UCP_1_Z
3114       0x0,        // PA_CL_UCP_1_W
3115       0x0,        // PA_CL_UCP_2_X
3116       0x0,        // PA_CL_UCP_2_Y
3117       0x0,        // PA_CL_UCP_2_Z
3118       0x0,        // PA_CL_UCP_2_W
3119       0x0,        // PA_CL_UCP_3_X
3120       0x0,        // PA_CL_UCP_3_Y
3121       0x0,        // PA_CL_UCP_3_Z
3122       0x0,        // PA_CL_UCP_3_W
3123       0x0,        // PA_CL_UCP_4_X
3124       0x0,        // PA_CL_UCP_4_Y
3125       0x0,        // PA_CL_UCP_4_Z
3126       0x0,        // PA_CL_UCP_4_W
3127       0x0,        // PA_CL_UCP_5_X
3128       0x0,        // PA_CL_UCP_5_Y
3129       0x0,        // PA_CL_UCP_5_Z
3130       0x0,        // PA_CL_UCP_5_W
3131    };
3132    static const uint32_t SpiPsInputCntl0Gfx11[] = {
3133       0x0,        // SPI_PS_INPUT_CNTL_0
3134       0x0,        // SPI_PS_INPUT_CNTL_1
3135       0x0,        // SPI_PS_INPUT_CNTL_2
3136       0x0,        // SPI_PS_INPUT_CNTL_3
3137       0x0,        // SPI_PS_INPUT_CNTL_4
3138       0x0,        // SPI_PS_INPUT_CNTL_5
3139       0x0,        // SPI_PS_INPUT_CNTL_6
3140       0x0,        // SPI_PS_INPUT_CNTL_7
3141       0x0,        // SPI_PS_INPUT_CNTL_8
3142       0x0,        // SPI_PS_INPUT_CNTL_9
3143       0x0,        // SPI_PS_INPUT_CNTL_10
3144       0x0,        // SPI_PS_INPUT_CNTL_11
3145       0x0,        // SPI_PS_INPUT_CNTL_12
3146       0x0,        // SPI_PS_INPUT_CNTL_13
3147       0x0,        // SPI_PS_INPUT_CNTL_14
3148       0x0,        // SPI_PS_INPUT_CNTL_15
3149       0x0,        // SPI_PS_INPUT_CNTL_16
3150       0x0,        // SPI_PS_INPUT_CNTL_17
3151       0x0,        // SPI_PS_INPUT_CNTL_18
3152       0x0,        // SPI_PS_INPUT_CNTL_19
3153       0x0,        // SPI_PS_INPUT_CNTL_20
3154       0x0,        // SPI_PS_INPUT_CNTL_21
3155       0x0,        // SPI_PS_INPUT_CNTL_22
3156       0x0,        // SPI_PS_INPUT_CNTL_23
3157       0x0,        // SPI_PS_INPUT_CNTL_24
3158       0x0,        // SPI_PS_INPUT_CNTL_25
3159       0x0,        // SPI_PS_INPUT_CNTL_26
3160       0x0,        // SPI_PS_INPUT_CNTL_27
3161       0x0,        // SPI_PS_INPUT_CNTL_28
3162       0x0,        // SPI_PS_INPUT_CNTL_29
3163       0x0,        // SPI_PS_INPUT_CNTL_30
3164       0x0,        // SPI_PS_INPUT_CNTL_31
3165       0x0,        // SPI_VS_OUT_CONFIG
3166       0x0,        //
3167       0x0,        // SPI_PS_INPUT_ENA
3168       0x0,        // SPI_PS_INPUT_ADDR
3169       0x0,        // SPI_INTERP_CONTROL_0
3170       0x2,        // SPI_PS_IN_CONTROL
3171       0x0,        // SPI_BARYC_SSAA_CNTL
3172       0x0,        // SPI_BARYC_CNTL
3173       0x0,        //
3174       0x0,        // SPI_TMPRING_SIZE
3175       0x0,        // SPI_GFX_SCRATCH_BASE_LO
3176       0x0,        // SPI_GFX_SCRATCH_BASE_HI
3177    };
3178    static const uint32_t SpiShaderIdxFormatGfx11[] = {
3179       0x0,        // SPI_SHADER_IDX_FORMAT
3180       0x0,        // SPI_SHADER_POS_FORMAT
3181       0x0,        // SPI_SHADER_Z_FORMAT
3182       0x0,        // SPI_SHADER_COL_FORMAT
3183    };
3184    static const uint32_t SxPsDownconvertControlGfx11[] = {
3185       0x0,        // SX_PS_DOWNCONVERT_CONTROL
3186       0x0,        // SX_PS_DOWNCONVERT
3187       0x0,        // SX_BLEND_OPT_EPSILON
3188       0x0,        // SX_BLEND_OPT_CONTROL
3189       0x0,        // SX_MRT0_BLEND_OPT
3190       0x0,        // SX_MRT1_BLEND_OPT
3191       0x0,        // SX_MRT2_BLEND_OPT
3192       0x0,        // SX_MRT3_BLEND_OPT
3193       0x0,        // SX_MRT4_BLEND_OPT
3194       0x0,        // SX_MRT5_BLEND_OPT
3195       0x0,        // SX_MRT6_BLEND_OPT
3196       0x0,        // SX_MRT7_BLEND_OPT
3197       0x0,        // CB_BLEND0_CONTROL
3198       0x0,        // CB_BLEND1_CONTROL
3199       0x0,        // CB_BLEND2_CONTROL
3200       0x0,        // CB_BLEND3_CONTROL
3201       0x0,        // CB_BLEND4_CONTROL
3202       0x0,        // CB_BLEND5_CONTROL
3203       0x0,        // CB_BLEND6_CONTROL
3204       0x0,        // CB_BLEND7_CONTROL
3205    };
3206    static const uint32_t PaClPointXRadGfx11[] = {
3207       0x0,        // PA_CL_POINT_X_RAD
3208       0x0,        // PA_CL_POINT_Y_RAD
3209       0x0,        // PA_CL_POINT_SIZE
3210       0x0,        // PA_CL_POINT_CULL_RAD
3211    };
3212    static const uint32_t GeMaxOutputPerSubgroupGfx11[] = {
3213       0x0,        // GE_MAX_OUTPUT_PER_SUBGROUP
3214       0x0,        // DB_DEPTH_CONTROL
3215       0x0,        // DB_EQAA
3216       0x0,        // CB_COLOR_CONTROL
3217       0x0,        // DB_SHADER_CONTROL
3218       0x90000,    // PA_CL_CLIP_CNTL
3219       0x4,        // PA_SU_SC_MODE_CNTL
3220       0x0,        // PA_CL_VTE_CNTL
3221       0x0,        // PA_CL_VS_OUT_CNTL
3222       0x0,        // PA_CL_NANINF_CNTL
3223       0x0,        // PA_SU_LINE_STIPPLE_CNTL
3224       0x0,        // PA_SU_LINE_STIPPLE_SCALE
3225       0x0,        // PA_SU_PRIM_FILTER_CNTL
3226       0x0,        // PA_SU_SMALL_PRIM_FILTER_CNTL
3227       0x0,        //
3228       0x0,        // PA_CL_NGG_CNTL
3229       0x0,        // PA_SU_OVER_RASTERIZATION_CNTL
3230       0x0,        // PA_STEREO_CNTL
3231       0x0,        // PA_STATE_STEREO_X
3232       0x0,        // PA_CL_VRS_CNTL
3233    };
3234    static const uint32_t PaSuPointSizeGfx11[] = {
3235       0x0,        // PA_SU_POINT_SIZE
3236       0x0,        // PA_SU_POINT_MINMAX
3237       0x0,        // PA_SU_LINE_CNTL
3238       0x0,        // PA_SC_LINE_STIPPLE
3239    };
3240    static const uint32_t VgtHosMaxTessLevelGfx11[] = {
3241       0x0,        // VGT_HOS_MAX_TESS_LEVEL
3242       0x0,        // VGT_HOS_MIN_TESS_LEVEL
3243    };
3244    static const uint32_t PaScModeCntl0Gfx11[] = {
3245       0x0,        // PA_SC_MODE_CNTL_0
3246       0x0,        // PA_SC_MODE_CNTL_1
3247       0x0,        // VGT_ENHANCE
3248    };
3249    static const uint32_t VgtPrimitiveidEnGfx11[] = {
3250       0x0,        // VGT_PRIMITIVEID_EN
3251    };
3252    static const uint32_t VgtPrimitiveidResetGfx11[] = {
3253       0x0,        // VGT_PRIMITIVEID_RESET
3254    };
3255    static const uint32_t VgtDrawPayloadCntlGfx11[] = {
3256       0x0,        // VGT_DRAW_PAYLOAD_CNTL
3257    };
3258    static const uint32_t VgtEsgsRingItemsizeGfx11[] = {
3259       0x0,        // VGT_ESGS_RING_ITEMSIZE
3260       0x0,        //
3261       0x0,        // VGT_REUSE_OFF
3262       0x0,        //
3263       0x0,        // DB_HTILE_SURFACE
3264       0x0,        // DB_SRESULTS_COMPARE_STATE0
3265       0x0,        // DB_SRESULTS_COMPARE_STATE1
3266    };
3267    static const uint32_t VgtStrmoutDrawOpaqueOffsetGfx11[] = {
3268       0x0,        // VGT_STRMOUT_DRAW_OPAQUE_OFFSET
3269       0x0,        // VGT_STRMOUT_DRAW_OPAQUE_BUFFER_FILLED_SIZE
3270       0x0,        // VGT_STRMOUT_DRAW_OPAQUE_VERTEX_STRIDE
3271       0x0,        //
3272       0x0,        // VGT_GS_MAX_VERT_OUT
3273    };
3274    static const uint32_t GeNggSubgrpCntlGfx11[] = {
3275       0x0,        // GE_NGG_SUBGRP_CNTL
3276       0x0,        // VGT_TESS_DISTRIBUTION
3277       0x0,        // VGT_SHADER_STAGES_EN
3278       0x0,        // VGT_LS_HS_CONFIG
3279    };
3280    static const uint32_t VgtTfParamGfx11[] = {
3281       0x0,        // VGT_TF_PARAM
3282       0x0,        // DB_ALPHA_TO_MASK
3283       0x0,        //
3284       0x0,        // PA_SU_POLY_OFFSET_DB_FMT_CNTL
3285       0x0,        // PA_SU_POLY_OFFSET_CLAMP
3286       0x0,        // PA_SU_POLY_OFFSET_FRONT_SCALE
3287       0x0,        // PA_SU_POLY_OFFSET_FRONT_OFFSET
3288       0x0,        // PA_SU_POLY_OFFSET_BACK_SCALE
3289       0x0,        // PA_SU_POLY_OFFSET_BACK_OFFSET
3290       0x0,        // VGT_GS_INSTANCE_CNT
3291    };
3292    static const uint32_t PaScCentroidPriority0Gfx11[] = {
3293       0x0,        // PA_SC_CENTROID_PRIORITY_0
3294       0x0,        // PA_SC_CENTROID_PRIORITY_1
3295       0x1000,     // PA_SC_LINE_CNTL
3296       0x0,        // PA_SC_AA_CONFIG
3297       0x5,        // PA_SU_VTX_CNTL
3298       0x3f800000, // PA_CL_GB_VERT_CLIP_ADJ
3299       0x3f800000, // PA_CL_GB_VERT_DISC_ADJ
3300       0x3f800000, // PA_CL_GB_HORZ_CLIP_ADJ
3301       0x3f800000, // PA_CL_GB_HORZ_DISC_ADJ
3302       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_0
3303       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_1
3304       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_2
3305       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_3
3306       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_0
3307       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_1
3308       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_2
3309       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_3
3310       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_0
3311       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_1
3312       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_2
3313       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_3
3314       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_0
3315       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_1
3316       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_2
3317       0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_3
3318       0xffffffff, // PA_SC_AA_MASK_X0Y0_X1Y0
3319       0xffffffff, // PA_SC_AA_MASK_X0Y1_X1Y1
3320       0x0,        // PA_SC_SHADER_CONTROL
3321       0x3,        // PA_SC_BINNER_CNTL_0
3322       0x0,        // PA_SC_BINNER_CNTL_1
3323       0x100000,   // PA_SC_CONSERVATIVE_RASTERIZATION_CNTL
3324       0x0,        // PA_SC_NGG_MODE_CNTL
3325       0x0,        // PA_SC_BINNER_CNTL_2
3326    };
3327    static const uint32_t CbColor0BaseGfx11[] = {
3328       0x0,        // CB_COLOR0_BASE
3329    };
3330    static const uint32_t CbColor0ViewGfx11[] = {
3331       0x0,        // CB_COLOR0_VIEW
3332       0x0,        // CB_COLOR0_INFO
3333       0x0,        // CB_COLOR0_ATTRIB
3334       0x0,        // CB_COLOR0_DCC_CONTROL
3335    };
3336    static const uint32_t CbColor0DccBaseGfx11[] = {
3337       0x0,        // CB_COLOR0_DCC_BASE
3338       0x0,        //
3339       0x0,        // CB_COLOR1_BASE
3340    };
3341    static const uint32_t CbColor1ViewGfx11[] = {
3342       0x0,        // CB_COLOR1_VIEW
3343       0x0,        // CB_COLOR1_INFO
3344       0x0,        // CB_COLOR1_ATTRIB
3345       0x0,        // CB_COLOR1_DCC_CONTROL
3346    };
3347    static const uint32_t CbColor1DccBaseGfx11[] = {
3348       0x0,        // CB_COLOR1_DCC_BASE
3349       0x0,        //
3350       0x0,        // CB_COLOR2_BASE
3351    };
3352    static const uint32_t CbColor2ViewGfx11[] = {
3353       0x0,        // CB_COLOR2_VIEW
3354       0x0,        // CB_COLOR2_INFO
3355       0x0,        // CB_COLOR2_ATTRIB
3356       0x0,        // CB_COLOR2_DCC_CONTROL
3357    };
3358    static const uint32_t CbColor2DccBaseGfx11[] = {
3359       0x0,        // CB_COLOR2_DCC_BASE
3360       0x0,        //
3361       0x0,        // CB_COLOR3_BASE
3362    };
3363    static const uint32_t CbColor3ViewGfx11[] = {
3364       0x0,        // CB_COLOR3_VIEW
3365       0x0,        // CB_COLOR3_INFO
3366       0x0,        // CB_COLOR3_ATTRIB
3367       0x0,        // CB_COLOR3_DCC_CONTROL
3368    };
3369    static const uint32_t CbColor3DccBaseGfx11[] = {
3370       0x0,        // CB_COLOR3_DCC_BASE
3371       0x0,        //
3372       0x0,        // CB_COLOR4_BASE
3373    };
3374    static const uint32_t CbColor4ViewGfx11[] = {
3375       0x0,        // CB_COLOR4_VIEW
3376       0x0,        // CB_COLOR4_INFO
3377       0x0,        // CB_COLOR4_ATTRIB
3378       0x0,        // CB_COLOR4_DCC_CONTROL
3379    };
3380    static const uint32_t CbColor4DccBaseGfx11[] = {
3381       0x0,        // CB_COLOR4_DCC_BASE
3382       0x0,        //
3383       0x0,        // CB_COLOR5_BASE
3384    };
3385    static const uint32_t CbColor5ViewGfx11[] = {
3386       0x0,        // CB_COLOR5_VIEW
3387       0x0,        // CB_COLOR5_INFO
3388       0x0,        // CB_COLOR5_ATTRIB
3389       0x0,        // CB_COLOR5_DCC_CONTROL
3390    };
3391    static const uint32_t CbColor5DccBaseGfx11[] = {
3392       0x0,        // CB_COLOR5_DCC_BASE
3393       0x0,        //
3394       0x0,        // CB_COLOR6_BASE
3395    };
3396    static const uint32_t CbColor6ViewGfx11[] = {
3397       0x0,        // CB_COLOR6_VIEW
3398       0x0,        // CB_COLOR6_INFO
3399       0x0,        // CB_COLOR6_ATTRIB
3400       0x0,        // CB_COLOR6_DCC_CONTROL
3401    };
3402    static const uint32_t CbColor6DccBaseGfx11[] = {
3403       0x0,        // CB_COLOR6_DCC_BASE
3404       0x0,        //
3405       0x0,        // CB_COLOR7_BASE
3406    };
3407    static const uint32_t CbColor7ViewGfx11[] = {
3408       0x0,        // CB_COLOR7_VIEW
3409       0x0,        // CB_COLOR7_INFO
3410       0x0,        // CB_COLOR7_ATTRIB
3411       0x0,        // CB_COLOR7_DCC_CONTROL
3412    };
3413    static const uint32_t CbColor7DccBaseGfx11[] = {
3414       0x0,        // CB_COLOR7_DCC_BASE
3415       0x0,        //
3416       0x0,        // CB_COLOR0_BASE_EXT
3417       0x0,        // CB_COLOR1_BASE_EXT
3418       0x0,        // CB_COLOR2_BASE_EXT
3419       0x0,        // CB_COLOR3_BASE_EXT
3420       0x0,        // CB_COLOR4_BASE_EXT
3421       0x0,        // CB_COLOR5_BASE_EXT
3422       0x0,        // CB_COLOR6_BASE_EXT
3423       0x0,        // CB_COLOR7_BASE_EXT
3424    };
3425    static const uint32_t CbColor0DccBaseExtGfx11[] = {
3426       0x0,        // CB_COLOR0_DCC_BASE_EXT
3427       0x0,        // CB_COLOR1_DCC_BASE_EXT
3428       0x0,        // CB_COLOR2_DCC_BASE_EXT
3429       0x0,        // CB_COLOR3_DCC_BASE_EXT
3430       0x0,        // CB_COLOR4_DCC_BASE_EXT
3431       0x0,        // CB_COLOR5_DCC_BASE_EXT
3432       0x0,        // CB_COLOR6_DCC_BASE_EXT
3433       0x0,        // CB_COLOR7_DCC_BASE_EXT
3434       0x0,        // CB_COLOR0_ATTRIB2
3435       0x0,        // CB_COLOR1_ATTRIB2
3436       0x0,        // CB_COLOR2_ATTRIB2
3437       0x0,        // CB_COLOR3_ATTRIB2
3438       0x0,        // CB_COLOR4_ATTRIB2
3439       0x0,        // CB_COLOR5_ATTRIB2
3440       0x0,        // CB_COLOR6_ATTRIB2
3441       0x0,        // CB_COLOR7_ATTRIB2
3442       0x0,        // CB_COLOR0_ATTRIB3
3443       0x0,        // CB_COLOR1_ATTRIB3
3444       0x0,        // CB_COLOR2_ATTRIB3
3445       0x0,        // CB_COLOR3_ATTRIB3
3446       0x0,        // CB_COLOR4_ATTRIB3
3447       0x0,        // CB_COLOR5_ATTRIB3
3448       0x0,        // CB_COLOR6_ATTRIB3
3449       0x0,        // CB_COLOR7_ATTRIB3
3450    };
3451 
3452    set_context_reg_seq_array(cs, R_028000_DB_RENDER_CONTROL, SET(DbRenderControlGfx11));
3453    set_context_reg_seq_array(cs, R_0281E8_COHER_DEST_BASE_HI_0, SET(CoherDestBaseHi0Gfx11));
3454    set_context_reg_seq_array(cs, R_0283D0_PA_SC_VRS_OVERRIDE_CNTL, SET(PaScVrsOverrideCntlGfx11));
3455    set_context_reg_seq_array(cs, R_0283F0_PA_SC_VRS_RATE_BASE, SET(PaScVrsRateBaseGfx11));
3456    set_context_reg_seq_array(cs, R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX, SET(VgtMultiPrimIbResetIndxGfx11));
3457    set_context_reg_seq_array(cs, R_028644_SPI_PS_INPUT_CNTL_0, SET(SpiPsInputCntl0Gfx11));
3458    set_context_reg_seq_array(cs, R_028708_SPI_SHADER_IDX_FORMAT, SET(SpiShaderIdxFormatGfx11));
3459    set_context_reg_seq_array(cs, R_028750_SX_PS_DOWNCONVERT_CONTROL, SET(SxPsDownconvertControlGfx11));
3460    set_context_reg_seq_array(cs, R_0287D4_PA_CL_POINT_X_RAD, SET(PaClPointXRadGfx11));
3461    set_context_reg_seq_array(cs, R_0287FC_GE_MAX_OUTPUT_PER_SUBGROUP, SET(GeMaxOutputPerSubgroupGfx11));
3462    set_context_reg_seq_array(cs, R_028A00_PA_SU_POINT_SIZE, SET(PaSuPointSizeGfx11));
3463    set_context_reg_seq_array(cs, R_028A18_VGT_HOS_MAX_TESS_LEVEL, SET(VgtHosMaxTessLevelGfx11));
3464    set_context_reg_seq_array(cs, R_028A48_PA_SC_MODE_CNTL_0, SET(PaScModeCntl0Gfx11));
3465    set_context_reg_seq_array(cs, R_028A84_VGT_PRIMITIVEID_EN, SET(VgtPrimitiveidEnGfx11));
3466    set_context_reg_seq_array(cs, R_028A8C_VGT_PRIMITIVEID_RESET, SET(VgtPrimitiveidResetGfx11));
3467    set_context_reg_seq_array(cs, R_028A98_VGT_DRAW_PAYLOAD_CNTL, SET(VgtDrawPayloadCntlGfx11));
3468    set_context_reg_seq_array(cs, R_028AAC_VGT_ESGS_RING_ITEMSIZE, SET(VgtEsgsRingItemsizeGfx11));
3469    set_context_reg_seq_array(cs, R_028B28_VGT_STRMOUT_DRAW_OPAQUE_OFFSET, SET(VgtStrmoutDrawOpaqueOffsetGfx11));
3470    set_context_reg_seq_array(cs, R_028B4C_GE_NGG_SUBGRP_CNTL, SET(GeNggSubgrpCntlGfx11));
3471    set_context_reg_seq_array(cs, R_028B6C_VGT_TF_PARAM, SET(VgtTfParamGfx11));
3472    set_context_reg_seq_array(cs, R_028BD4_PA_SC_CENTROID_PRIORITY_0, SET(PaScCentroidPriority0Gfx11));
3473    set_context_reg_seq_array(cs, R_028C60_CB_COLOR0_BASE, SET(CbColor0BaseGfx11));
3474    set_context_reg_seq_array(cs, R_028C6C_CB_COLOR0_VIEW, SET(CbColor0ViewGfx11));
3475    set_context_reg_seq_array(cs, R_028C94_CB_COLOR0_DCC_BASE, SET(CbColor0DccBaseGfx11));
3476    set_context_reg_seq_array(cs, R_028CA8_CB_COLOR1_VIEW, SET(CbColor1ViewGfx11));
3477    set_context_reg_seq_array(cs, R_028CD0_CB_COLOR1_DCC_BASE, SET(CbColor1DccBaseGfx11));
3478    set_context_reg_seq_array(cs, R_028CE4_CB_COLOR2_VIEW, SET(CbColor2ViewGfx11));
3479    set_context_reg_seq_array(cs, R_028D0C_CB_COLOR2_DCC_BASE, SET(CbColor2DccBaseGfx11));
3480    set_context_reg_seq_array(cs, R_028D20_CB_COLOR3_VIEW, SET(CbColor3ViewGfx11));
3481    set_context_reg_seq_array(cs, R_028D48_CB_COLOR3_DCC_BASE, SET(CbColor3DccBaseGfx11));
3482    set_context_reg_seq_array(cs, R_028D5C_CB_COLOR4_VIEW, SET(CbColor4ViewGfx11));
3483    set_context_reg_seq_array(cs, R_028D84_CB_COLOR4_DCC_BASE, SET(CbColor4DccBaseGfx11));
3484    set_context_reg_seq_array(cs, R_028D98_CB_COLOR5_VIEW, SET(CbColor5ViewGfx11));
3485    set_context_reg_seq_array(cs, R_028DC0_CB_COLOR5_DCC_BASE, SET(CbColor5DccBaseGfx11));
3486    set_context_reg_seq_array(cs, R_028DD4_CB_COLOR6_VIEW, SET(CbColor6ViewGfx11));
3487    set_context_reg_seq_array(cs, R_028DFC_CB_COLOR6_DCC_BASE, SET(CbColor6DccBaseGfx11));
3488    set_context_reg_seq_array(cs, R_028E10_CB_COLOR7_VIEW, SET(CbColor7ViewGfx11));
3489    set_context_reg_seq_array(cs, R_028E38_CB_COLOR7_DCC_BASE, SET(CbColor7DccBaseGfx11));
3490    set_context_reg_seq_array(cs, R_028C98_CB_COLOR0_DCC_BASE_EXT, SET(CbColor0DccBaseExtGfx11));
3491 
3492    for (unsigned i = 0; i < num_reg_pairs; i++)
3493       set_context_reg_seq_array(cs, reg_offsets[i], 1, &reg_values[i]);
3494 }
3495 
ac_emulate_clear_state(const struct radeon_info * info,struct radeon_cmdbuf * cs,set_context_reg_seq_array_fn set_context_reg_seq_array)3496 void ac_emulate_clear_state(const struct radeon_info *info, struct radeon_cmdbuf *cs,
3497                             set_context_reg_seq_array_fn set_context_reg_seq_array)
3498 {
3499    assert(info->gfx_level < GFX12);
3500 
3501    /* Set context registers same as CLEAR_STATE to initialize shadow memory. */
3502    unsigned reg_offset = R_02835C_PA_SC_TILE_STEERING_OVERRIDE;
3503    uint32_t reg_value = info->pa_sc_tile_steering_override;
3504 
3505    if (info->gfx_level == GFX11 || info->gfx_level == GFX11_5) {
3506       gfx11_emulate_clear_state(cs, 1, &reg_offset, &reg_value, set_context_reg_seq_array);
3507    } else if (info->gfx_level == GFX10_3) {
3508       gfx103_emulate_clear_state(cs, 1, &reg_offset, &reg_value, set_context_reg_seq_array);
3509    } else if (info->gfx_level == GFX10) {
3510       gfx10_emulate_clear_state(cs, 1, &reg_offset, &reg_value, set_context_reg_seq_array);
3511    } else if (info->gfx_level == GFX9) {
3512       gfx9_emulate_clear_state(cs, set_context_reg_seq_array);
3513    } else {
3514       unreachable("unimplemented");
3515    }
3516 }
3517 
ac_print_nonshadowed_reg(enum amd_gfx_level gfx_level,enum radeon_family family,unsigned reg_offset)3518 static void ac_print_nonshadowed_reg(enum amd_gfx_level gfx_level, enum radeon_family family,
3519                                      unsigned reg_offset)
3520 {
3521    bool found = false;
3522 
3523    for (unsigned type = 0; type < SI_NUM_REG_RANGES && !found; type++) {
3524       const struct ac_reg_range *ranges;
3525       unsigned num_ranges;
3526 
3527       ac_get_reg_ranges(gfx_level, family, type, &num_ranges, &ranges);
3528 
3529       for (unsigned i = 0; i < num_ranges; i++) {
3530          if (reg_offset >= ranges[i].offset && reg_offset < ranges[i].offset + ranges[i].size) {
3531             /* Assertion: A register can be listed only once in the shadowed tables. */
3532             if (found) {
3533                printf("warning: register R_%06X_%s found multiple times in tables\n",
3534                       reg_offset, ac_get_register_name(gfx_level, family, reg_offset));
3535             }
3536             found = true;
3537          }
3538       }
3539    }
3540 
3541    if (!found) {
3542       printf("register R_%06X_%s not found in any tables\n", reg_offset,
3543              ac_get_register_name(gfx_level, family, reg_offset));
3544    }
3545 }
3546 
ac_print_nonshadowed_regs(enum amd_gfx_level gfx_level,enum radeon_family family)3547 void ac_print_nonshadowed_regs(enum amd_gfx_level gfx_level, enum radeon_family family)
3548 {
3549    if (!debug_get_bool_option("AMD_PRINT_SHADOW_REGS", false))
3550       return;
3551 
3552    for (unsigned i = 0xB000; i < 0xBFFF; i += 4) {
3553       if (ac_register_exists(gfx_level, family, i))
3554          ac_print_nonshadowed_reg(gfx_level, family, i);
3555    }
3556 
3557    for (unsigned i = 0x28000; i < 0x28FFF; i += 4) {
3558       if (ac_register_exists(gfx_level, family, i))
3559          ac_print_nonshadowed_reg(gfx_level, family, i);
3560    }
3561 
3562    for (unsigned i = 0x30000; i < 0x31FFF; i += 4) {
3563       if (ac_register_exists(gfx_level, family, i))
3564          ac_print_nonshadowed_reg(gfx_level, family, i);
3565    }
3566 }
3567 
ac_build_load_reg(const struct radeon_info * info,pm4_cmd_add_fn pm4_cmd_add,void * pm4_cmdbuf,enum ac_reg_range_type type,uint64_t gpu_address)3568 static void ac_build_load_reg(const struct radeon_info *info,
3569                               pm4_cmd_add_fn pm4_cmd_add, void *pm4_cmdbuf,
3570                               enum ac_reg_range_type type,
3571                               uint64_t gpu_address)
3572 {
3573    unsigned packet, num_ranges, offset;
3574    const struct ac_reg_range *ranges;
3575 
3576    ac_get_reg_ranges(info->gfx_level, info->family,
3577                      type, &num_ranges, &ranges);
3578 
3579    switch (type) {
3580    case SI_REG_RANGE_UCONFIG:
3581       gpu_address += SI_SHADOWED_UCONFIG_REG_OFFSET;
3582       offset = CIK_UCONFIG_REG_OFFSET;
3583       packet = PKT3_LOAD_UCONFIG_REG;
3584       break;
3585    case SI_REG_RANGE_CONTEXT:
3586       gpu_address += SI_SHADOWED_CONTEXT_REG_OFFSET;
3587       offset = SI_CONTEXT_REG_OFFSET;
3588       packet = PKT3_LOAD_CONTEXT_REG;
3589       break;
3590    default:
3591       gpu_address += SI_SHADOWED_SH_REG_OFFSET;
3592       offset = SI_SH_REG_OFFSET;
3593       packet = PKT3_LOAD_SH_REG;
3594       break;
3595    }
3596 
3597    pm4_cmd_add(pm4_cmdbuf, PKT3(packet, 1 + num_ranges * 2, 0));
3598    pm4_cmd_add(pm4_cmdbuf, gpu_address);
3599    pm4_cmd_add(pm4_cmdbuf, gpu_address >> 32);
3600    for (unsigned i = 0; i < num_ranges; i++) {
3601       pm4_cmd_add(pm4_cmdbuf, (ranges[i].offset - offset) / 4);
3602       pm4_cmd_add(pm4_cmdbuf, ranges[i].size / 4);
3603    }
3604 }
3605 
ac_create_shadowing_ib_preamble(const struct radeon_info * info,pm4_cmd_add_fn pm4_cmd_add,void * pm4_cmdbuf,uint64_t gpu_address,bool dpbb_allowed)3606 void ac_create_shadowing_ib_preamble(const struct radeon_info *info,
3607                                      pm4_cmd_add_fn pm4_cmd_add, void *pm4_cmdbuf,
3608                                      uint64_t gpu_address,
3609                                      bool dpbb_allowed)
3610 {
3611    if (dpbb_allowed) {
3612       pm4_cmd_add(pm4_cmdbuf, PKT3(PKT3_EVENT_WRITE, 0, 0));
3613       pm4_cmd_add(pm4_cmdbuf, EVENT_TYPE(V_028A90_BREAK_BATCH) | EVENT_INDEX(0));
3614    }
3615 
3616    /* Wait for idle, because we'll update VGT ring pointers. */
3617    pm4_cmd_add(pm4_cmdbuf, PKT3(PKT3_EVENT_WRITE, 0, 0));
3618    pm4_cmd_add(pm4_cmdbuf, EVENT_TYPE(V_028A90_VS_PARTIAL_FLUSH) | EVENT_INDEX(4));
3619 
3620    /* VGT_FLUSH is required even if VGT is idle. It resets VGT pointers. */
3621    pm4_cmd_add(pm4_cmdbuf, PKT3(PKT3_EVENT_WRITE, 0, 0));
3622    pm4_cmd_add(pm4_cmdbuf, EVENT_TYPE(V_028A90_VGT_FLUSH) | EVENT_INDEX(0));
3623 
3624    if (info->gfx_level >= GFX11) {
3625       uint64_t rb_mask = BITFIELD64_MASK(info->max_render_backends);
3626 
3627       pm4_cmd_add(pm4_cmdbuf, PKT3(PKT3_EVENT_WRITE, 2, 0));
3628       pm4_cmd_add(pm4_cmdbuf, EVENT_TYPE(V_028A90_PIXEL_PIPE_STAT_CONTROL) | EVENT_INDEX(1));
3629       pm4_cmd_add(pm4_cmdbuf, PIXEL_PIPE_STATE_CNTL_COUNTER_ID(0) |
3630                               PIXEL_PIPE_STATE_CNTL_STRIDE(2) |
3631                               PIXEL_PIPE_STATE_CNTL_INSTANCE_EN_LO(rb_mask));
3632       pm4_cmd_add(pm4_cmdbuf, PIXEL_PIPE_STATE_CNTL_INSTANCE_EN_HI(rb_mask));
3633 
3634       /* We must wait for idle using an EOP event before changing the attribute ring registers.
3635        * Use the bottom-of-pipe EOP event, but increment the PWS counter instead of writing memory.
3636        */
3637       pm4_cmd_add(pm4_cmdbuf, PKT3(PKT3_RELEASE_MEM, 6, 0));
3638       pm4_cmd_add(pm4_cmdbuf, S_490_EVENT_TYPE(V_028A90_BOTTOM_OF_PIPE_TS) |
3639                               S_490_EVENT_INDEX(5) |
3640                               S_490_PWS_ENABLE(1));
3641       pm4_cmd_add(pm4_cmdbuf, 0); /* DST_SEL, INT_SEL, DATA_SEL */
3642       pm4_cmd_add(pm4_cmdbuf, 0); /* ADDRESS_LO */
3643       pm4_cmd_add(pm4_cmdbuf, 0); /* ADDRESS_HI */
3644       pm4_cmd_add(pm4_cmdbuf, 0); /* DATA_LO */
3645       pm4_cmd_add(pm4_cmdbuf, 0); /* DATA_HI */
3646       pm4_cmd_add(pm4_cmdbuf, 0); /* INT_CTXID */
3647 
3648       unsigned gcr_cntl = S_586_GL2_INV(1) | S_586_GL2_WB(1) |
3649                           S_586_GLM_INV(1) | S_586_GLM_WB(1) |
3650                           S_586_GL1_INV(1) | S_586_GLV_INV(1) |
3651                           S_586_GLK_INV(1) | S_586_GLI_INV(V_586_GLI_ALL);
3652 
3653       /* Wait for the PWS counter. */
3654       pm4_cmd_add(pm4_cmdbuf, PKT3(PKT3_ACQUIRE_MEM, 6, 0));
3655       pm4_cmd_add(pm4_cmdbuf, S_580_PWS_STAGE_SEL(V_580_CP_PFP) |
3656                               S_580_PWS_COUNTER_SEL(V_580_TS_SELECT) |
3657                               S_580_PWS_ENA2(1) |
3658                               S_580_PWS_COUNT(0));
3659       pm4_cmd_add(pm4_cmdbuf, 0xffffffff); /* GCR_SIZE */
3660       pm4_cmd_add(pm4_cmdbuf, 0x01ffffff); /* GCR_SIZE_HI */
3661       pm4_cmd_add(pm4_cmdbuf, 0); /* GCR_BASE_LO */
3662       pm4_cmd_add(pm4_cmdbuf, 0); /* GCR_BASE_HI */
3663       pm4_cmd_add(pm4_cmdbuf, S_585_PWS_ENA(1));
3664       pm4_cmd_add(pm4_cmdbuf, gcr_cntl); /* GCR_CNTL */
3665    } else if (info->gfx_level >= GFX10) {
3666       unsigned gcr_cntl = S_586_GL2_INV(1) | S_586_GL2_WB(1) |
3667                           S_586_GLM_INV(1) | S_586_GLM_WB(1) |
3668                           S_586_GL1_INV(1) | S_586_GLV_INV(1) |
3669                           S_586_GLK_INV(1) | S_586_GLI_INV(V_586_GLI_ALL);
3670 
3671       pm4_cmd_add(pm4_cmdbuf, PKT3(PKT3_ACQUIRE_MEM, 6, 0));
3672       pm4_cmd_add(pm4_cmdbuf, 0);           /* CP_COHER_CNTL */
3673       pm4_cmd_add(pm4_cmdbuf, 0xffffffff);  /* CP_COHER_SIZE */
3674       pm4_cmd_add(pm4_cmdbuf, 0xffffff);    /* CP_COHER_SIZE_HI */
3675       pm4_cmd_add(pm4_cmdbuf, 0);           /* CP_COHER_BASE */
3676       pm4_cmd_add(pm4_cmdbuf, 0);           /* CP_COHER_BASE_HI */
3677       pm4_cmd_add(pm4_cmdbuf, 0x0000000A);  /* POLL_INTERVAL */
3678       pm4_cmd_add(pm4_cmdbuf, gcr_cntl);    /* GCR_CNTL */
3679 
3680       pm4_cmd_add(pm4_cmdbuf, PKT3(PKT3_PFP_SYNC_ME, 0, 0));
3681       pm4_cmd_add(pm4_cmdbuf, 0);
3682    } else if (info->gfx_level == GFX9) {
3683       unsigned cp_coher_cntl = S_0301F0_SH_ICACHE_ACTION_ENA(1) |
3684                                S_0301F0_SH_KCACHE_ACTION_ENA(1) |
3685                                S_0301F0_TC_ACTION_ENA(1) |
3686                                S_0301F0_TCL1_ACTION_ENA(1) |
3687                                S_0301F0_TC_WB_ACTION_ENA(1);
3688 
3689       pm4_cmd_add(pm4_cmdbuf, PKT3(PKT3_ACQUIRE_MEM, 5, 0));
3690       pm4_cmd_add(pm4_cmdbuf, cp_coher_cntl); /* CP_COHER_CNTL */
3691       pm4_cmd_add(pm4_cmdbuf, 0xffffffff);    /* CP_COHER_SIZE */
3692       pm4_cmd_add(pm4_cmdbuf, 0xffffff);      /* CP_COHER_SIZE_HI */
3693       pm4_cmd_add(pm4_cmdbuf, 0);             /* CP_COHER_BASE */
3694       pm4_cmd_add(pm4_cmdbuf, 0);             /* CP_COHER_BASE_HI */
3695       pm4_cmd_add(pm4_cmdbuf, 0x0000000A);    /* POLL_INTERVAL */
3696 
3697       pm4_cmd_add(pm4_cmdbuf, PKT3(PKT3_PFP_SYNC_ME, 0, 0));
3698       pm4_cmd_add(pm4_cmdbuf, 0);
3699    } else {
3700       unreachable("invalid chip");
3701    }
3702 
3703    pm4_cmd_add(pm4_cmdbuf, PKT3(PKT3_CONTEXT_CONTROL, 1, 0));
3704    pm4_cmd_add(pm4_cmdbuf,
3705                CC0_UPDATE_LOAD_ENABLES(1) |
3706                CC0_LOAD_PER_CONTEXT_STATE(1) |
3707                CC0_LOAD_CS_SH_REGS(1) |
3708                CC0_LOAD_GFX_SH_REGS(1) |
3709                CC0_LOAD_GLOBAL_UCONFIG(1));
3710    pm4_cmd_add(pm4_cmdbuf,
3711                CC1_UPDATE_SHADOW_ENABLES(1) |
3712                CC1_SHADOW_PER_CONTEXT_STATE(1) |
3713                CC1_SHADOW_CS_SH_REGS(1) |
3714                CC1_SHADOW_GFX_SH_REGS(1) |
3715                CC1_SHADOW_GLOBAL_UCONFIG(1) |
3716                CC1_SHADOW_GLOBAL_CONFIG(1));
3717 
3718    if (!info->has_fw_based_shadowing) {
3719       for (unsigned i = 0; i < SI_NUM_REG_RANGES; i++)
3720          ac_build_load_reg(info, pm4_cmd_add, pm4_cmdbuf, i, gpu_address);
3721    }
3722 }
3723