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