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