ac_shadowed_regs.c revision 7ec681f3
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
39static 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
78static 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
161static 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
192static 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
223static 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
262static 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
297static 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
356static 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
403static 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
478static 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
521static 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
625static 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
684static 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
731static 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
819void 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 */
881static 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 */
1540static 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 */
2236static 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
2931void 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 */
2952void 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 */
2998void 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