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