ac: implement register shadowing for gfx11
authorMarek Olšák <marek.olsak@amd.com>
Sun, 27 Feb 2022 02:32:42 +0000 (21:32 -0500)
committerMarge Bot <emma+marge@anholt.net>
Tue, 10 May 2022 04:29:54 +0000 (04:29 +0000)
Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16328>

src/amd/common/ac_shadowed_regs.c

index 93ee0e5..240daff 100644 (file)
@@ -829,117 +829,1188 @@ static const struct ac_reg_range Gfx103NonShadowedRanges[] = {
    },
    /* These are not defined in Mesa. */
    /*{
-      mmATC_PERFCOUNTER0_CFG,
-      mmATC_PERFCOUNTER_HI - mmATC_PERFCOUNTER0_CFG + 1
+      ATC_PERFCOUNTER0_CFG,
+      ATC_PERFCOUNTER_HI - ATC_PERFCOUNTER0_CFG + 4
    },
    {
-      mmRPB_PERFCOUNTER_LO,
-      mmRPB_PERFCOUNTER_RSLT_CNTL - mmRPB_PERFCOUNTER_LO + 1
+      RPB_PERFCOUNTER_LO,
+      RPB_PERFCOUNTER_RSLT_CNTL - RPB_PERFCOUNTER_LO + 4
    },*/
 };
 
-void ac_get_reg_ranges(enum chip_class chip_class, enum radeon_family family,
-                       enum ac_reg_range_type type, unsigned *num_ranges,
-                       const struct ac_reg_range **ranges)
+static const struct ac_reg_range Gfx11ShShadowRange[] =
 {
-#define RETURN(array)                                                                              \
-   do {                                                                                            \
-      *ranges = array;                                                                             \
-      *num_ranges = ARRAY_SIZE(array);                                                             \
-   } while (0)
+   {
+      R_00B018_SPI_SHADER_PGM_CHKSUM_PS,
+      4,
+   },
+   {
+      R_00B020_SPI_SHADER_PGM_LO_PS,
+      R_00B0AC_SPI_SHADER_USER_DATA_PS_31 - R_00B020_SPI_SHADER_PGM_LO_PS + 4,
+   },
+   {
+      R_00B0C8_SPI_SHADER_USER_ACCUM_PS_0,
+      R_00B0D4_SPI_SHADER_USER_ACCUM_PS_3 - R_00B0C8_SPI_SHADER_USER_ACCUM_PS_0 + 4,
+   },
+   {
+      R_00B320_SPI_SHADER_PGM_LO_ES,
+      R_00B324_SPI_SHADER_PGM_HI_ES - R_00B320_SPI_SHADER_PGM_LO_ES + 4,
+   },
+   {
+      R_00B520_SPI_SHADER_PGM_LO_LS,
+      R_00B524_SPI_SHADER_PGM_HI_LS - R_00B520_SPI_SHADER_PGM_LO_LS + 4,
+   },
+   {
+      R_00B200_SPI_SHADER_PGM_CHKSUM_GS,
+      4,
+   },
+   {
+      R_00B220_SPI_SHADER_PGM_LO_GS,
+      R_00B2AC_SPI_SHADER_USER_DATA_GS_31 - R_00B220_SPI_SHADER_PGM_LO_GS + 4,
+   },
+   {
+      R_00B2C8_SPI_SHADER_USER_ACCUM_ESGS_0,
+      R_00B2D4_SPI_SHADER_USER_ACCUM_ESGS_3 - R_00B2C8_SPI_SHADER_USER_ACCUM_ESGS_0 + 4,
+   },
+   {
+      R_00B400_SPI_SHADER_PGM_CHKSUM_HS,
+      4,
+   },
+   {
+      R_00B420_SPI_SHADER_PGM_LO_HS,
+      R_00B4AC_SPI_SHADER_USER_DATA_HS_31 - R_00B420_SPI_SHADER_PGM_LO_HS + 4,
+   },
+   {
+      R_00B4C8_SPI_SHADER_USER_ACCUM_LSHS_0,
+      R_00B4D4_SPI_SHADER_USER_ACCUM_LSHS_3 - R_00B4C8_SPI_SHADER_USER_ACCUM_LSHS_0 + 4,
+   },
+   {
+      R_00B0C0_SPI_SHADER_REQ_CTRL_PS,
+      4,
+   },
+};
+
+static const struct ac_reg_range Gfx11CsShShadowRange[] =
+{
+   {
+      R_00B810_COMPUTE_START_X,
+      R_00B824_COMPUTE_NUM_THREAD_Z - R_00B810_COMPUTE_START_X + 4,
+   },
+   {
+      R_00B82C_COMPUTE_PERFCOUNT_ENABLE,
+      R_00B834_COMPUTE_PGM_HI - R_00B82C_COMPUTE_PERFCOUNT_ENABLE + 4,
+   },
+   {
+      R_00B840_COMPUTE_DISPATCH_SCRATCH_BASE_LO,
+      R_00B84C_COMPUTE_PGM_RSRC2 - R_00B840_COMPUTE_DISPATCH_SCRATCH_BASE_LO + 4,
+   },
+   {
+      R_00B854_COMPUTE_RESOURCE_LIMITS,
+      4,
+   },
+   {
+      R_00B860_COMPUTE_TMPRING_SIZE,
+      4,
+   },
+   {
+      R_00B878_COMPUTE_THREAD_TRACE_ENABLE,
+      4,
+   },
+   {
+      R_00B890_COMPUTE_USER_ACCUM_0,
+      R_00B8A0_COMPUTE_PGM_RSRC3 - R_00B890_COMPUTE_USER_ACCUM_0 + 4,
+   },
+   {
+      R_00B8A8_COMPUTE_SHADER_CHKSUM,
+      4,
+   },
+   {
+      R_00B8BC_COMPUTE_DISPATCH_INTERLEAVE,
+      4,
+   },
+   {
+      R_00B900_COMPUTE_USER_DATA_0,
+      R_00B93C_COMPUTE_USER_DATA_15 - R_00B900_COMPUTE_USER_DATA_0 + 4,
+   },
+   {
+      R_00B9F4_COMPUTE_DISPATCH_TUNNEL,
+      4,
+   },
+};
+
+/* Defines the set of ranges of context registers we shadow when mid command buffer preemption
+ * is enabled.
+ */
+static const struct ac_reg_range Gfx11ContextShadowRange[] =
+{
+   {
+      R_028000_DB_RENDER_CONTROL,
+      R_028084_TA_BC_BASE_ADDR_HI - R_028000_DB_RENDER_CONTROL + 4,
+   },
+   {
+      R_0281E8_COHER_DEST_BASE_HI_0,
+      R_02835C_PA_SC_TILE_STEERING_OVERRIDE - R_0281E8_COHER_DEST_BASE_HI_0 + 4,
+   },
+   {
+      R_0283D0_PA_SC_VRS_OVERRIDE_CNTL,
+      R_0283E4_PA_SC_VRS_RATE_CACHE_CNTL - R_0283D0_PA_SC_VRS_OVERRIDE_CNTL + 4,
+   },
+   {
+      R_0283F0_PA_SC_VRS_RATE_BASE,
+      R_0283F8_PA_SC_VRS_RATE_SIZE_XY - R_0283F0_PA_SC_VRS_RATE_BASE + 4,
+   },
+   {
+      R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX,
+      R_028618_PA_CL_UCP_5_W - R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX + 4,
+   },
+   {
+      R_028644_SPI_PS_INPUT_CNTL_0,
+      R_0286F0_SPI_GFX_SCRATCH_BASE_HI - R_028644_SPI_PS_INPUT_CNTL_0 + 4,
+   },
+   {
+      R_028708_SPI_SHADER_IDX_FORMAT,
+      R_028714_SPI_SHADER_COL_FORMAT - R_028708_SPI_SHADER_IDX_FORMAT + 4,
+   },
+   {
+      R_028750_SX_PS_DOWNCONVERT_CONTROL,
+      R_02879C_CB_BLEND7_CONTROL - R_028750_SX_PS_DOWNCONVERT_CONTROL + 4,
+   },
+   {
+      R_0287D4_PA_CL_POINT_X_RAD,
+      R_0287E0_PA_CL_POINT_CULL_RAD - R_0287D4_PA_CL_POINT_X_RAD + 4,
+   },
+   {
+      R_0287FC_GE_MAX_OUTPUT_PER_SUBGROUP,
+      R_028848_PA_CL_VRS_CNTL - R_0287FC_GE_MAX_OUTPUT_PER_SUBGROUP + 4,
+   },
+   {
+      R_028A00_PA_SU_POINT_SIZE,
+      R_028A0C_PA_SC_LINE_STIPPLE - R_028A00_PA_SU_POINT_SIZE + 4,
+   },
+   {
+      R_028A18_VGT_HOS_MAX_TESS_LEVEL,
+      R_028A1C_VGT_HOS_MIN_TESS_LEVEL - R_028A18_VGT_HOS_MAX_TESS_LEVEL + 4,
+   },
+   {
+      R_028A48_PA_SC_MODE_CNTL_0,
+      R_028A50_VGT_ENHANCE - R_028A48_PA_SC_MODE_CNTL_0 + 4,
+   },
+   {
+      R_028A84_VGT_PRIMITIVEID_EN,
+      4,
+   },
+   {
+      R_028A8C_VGT_PRIMITIVEID_RESET,
+      4,
+   },
+   {
+      R_028A98_VGT_DRAW_PAYLOAD_CNTL,
+      4,
+   },
+   {
+      R_028AAC_VGT_ESGS_RING_ITEMSIZE,
+      R_028AC4_DB_SRESULTS_COMPARE_STATE1 - R_028AAC_VGT_ESGS_RING_ITEMSIZE + 4,
+   },
+   {
+      R_028B28_VGT_STRMOUT_DRAW_OPAQUE_OFFSET,
+      R_028B38_VGT_GS_MAX_VERT_OUT - R_028B28_VGT_STRMOUT_DRAW_OPAQUE_OFFSET + 4,
+   },
+   {
+      R_028B4C_GE_NGG_SUBGRP_CNTL,
+      R_028B58_VGT_LS_HS_CONFIG - R_028B4C_GE_NGG_SUBGRP_CNTL + 4,
+   },
+   {
+      R_028B6C_VGT_TF_PARAM,
+      R_028B90_VGT_GS_INSTANCE_CNT - R_028B6C_VGT_TF_PARAM + 4,
+   },
+   {
+      R_028BD4_PA_SC_CENTROID_PRIORITY_0,
+      R_028C54_PA_SC_BINNER_CNTL_2 - R_028BD4_PA_SC_CENTROID_PRIORITY_0 + 4,
+   },
+   {
+      R_028C60_CB_COLOR0_BASE,
+      4,
+   },
+   {
+      R_028C6C_CB_COLOR0_VIEW,
+      R_028C78_CB_COLOR0_FDCC_CONTROL - R_028C6C_CB_COLOR0_VIEW + 4,
+   },
+   {
+      R_028C94_CB_COLOR0_DCC_BASE,
+      R_028C9C_CB_COLOR1_BASE - R_028C94_CB_COLOR0_DCC_BASE + 4,
+   },
+   {
+      R_028CA8_CB_COLOR1_VIEW,
+      R_028CB4_CB_COLOR1_FDCC_CONTROL - R_028CA8_CB_COLOR1_VIEW + 4,
+   },
+   {
+      R_028CD0_CB_COLOR1_DCC_BASE,
+      R_028CD8_CB_COLOR2_BASE - R_028CD0_CB_COLOR1_DCC_BASE + 4,
+   },
+   {
+      R_028CE4_CB_COLOR2_VIEW,
+      R_028CF0_CB_COLOR2_FDCC_CONTROL - R_028CE4_CB_COLOR2_VIEW + 4,
+   },
+   {
+      R_028D0C_CB_COLOR2_DCC_BASE,
+      R_028D14_CB_COLOR3_BASE - R_028D0C_CB_COLOR2_DCC_BASE + 4,
+   },
+   {
+      R_028D20_CB_COLOR3_VIEW,
+      R_028D2C_CB_COLOR3_FDCC_CONTROL - R_028D20_CB_COLOR3_VIEW + 4,
+   },
+   {
+      R_028D48_CB_COLOR3_DCC_BASE,
+      R_028D50_CB_COLOR4_BASE - R_028D48_CB_COLOR3_DCC_BASE + 4,
+   },
+   {
+      R_028D5C_CB_COLOR4_VIEW,
+      R_028D68_CB_COLOR4_FDCC_CONTROL - R_028D5C_CB_COLOR4_VIEW + 4,
+   },
+   {
+      R_028D84_CB_COLOR4_DCC_BASE,
+      R_028D8C_CB_COLOR5_BASE - R_028D84_CB_COLOR4_DCC_BASE + 4,
+   },
+   {
+      R_028D98_CB_COLOR5_VIEW,
+      R_028DA4_CB_COLOR5_FDCC_CONTROL - R_028D98_CB_COLOR5_VIEW + 4,
+   },
+   {
+      R_028DC0_CB_COLOR5_DCC_BASE,
+      R_028DC8_CB_COLOR6_BASE - R_028DC0_CB_COLOR5_DCC_BASE + 4,
+   },
+   {
+      R_028DD4_CB_COLOR6_VIEW,
+      R_028DE0_CB_COLOR6_FDCC_CONTROL - R_028DD4_CB_COLOR6_VIEW + 4,
+   },
+   {
+      R_028DFC_CB_COLOR6_DCC_BASE,
+      R_028E04_CB_COLOR7_BASE - R_028DFC_CB_COLOR6_DCC_BASE + 4,
+   },
+   {
+      R_028E10_CB_COLOR7_VIEW,
+      R_028E1C_CB_COLOR7_FDCC_CONTROL - R_028E10_CB_COLOR7_VIEW + 4,
+   },
+   {
+      R_028E38_CB_COLOR7_DCC_BASE,
+      R_028E5C_CB_COLOR7_BASE_EXT - R_028E38_CB_COLOR7_DCC_BASE + 4,
+   },
+   {
+      R_028EA0_CB_COLOR0_DCC_BASE_EXT,
+      R_028EFC_CB_COLOR7_ATTRIB3 - R_028EA0_CB_COLOR0_DCC_BASE_EXT + 4,
+   },
+};
+
+static const struct ac_reg_range Gfx11UserConfigShadowRange[] =
+{
+   {
+      R_030908_VGT_PRIMITIVE_TYPE,
+      4,
+   },
+   {
+      R_030998_VGT_GS_OUT_PRIM_TYPE,
+      4,
+   },
+   {
+      R_030964_GE_MAX_VTX_INDX,
+      4,
+   },
+   {
+      R_030924_GE_MIN_VTX_INDX,
+      R_03092C_GE_MULTI_PRIM_IB_RESET_EN - R_030924_GE_MIN_VTX_INDX + 4,
+   },
+   {
+      R_008974_VGT_NUM_INSTANCES,
+      R_030940_VGT_TF_MEMORY_BASE - R_008974_VGT_NUM_INSTANCES + 4,
+   },
+   {
+      R_03097C_GE_STEREO_CNTL,
+      R_030984_VGT_TF_MEMORY_BASE_HI - R_03097C_GE_STEREO_CNTL + 4,
+   },
+   {
+      R_03096C_GE_CNTL,
+      4,
+   },
+   {
+      R_030968_VGT_INSTANCE_BASE_ID,
+      4,
+   },
+   {
+      R_030E00_TA_CS_BC_BASE_ADDR,
+      R_030E04_TA_CS_BC_BASE_ADDR_HI - R_030E00_TA_CS_BC_BASE_ADDR + 4,
+   },
+   {
+      R_030988_GE_USER_VGPR_EN,
+      R_03098C_GE_VRS_RATE - R_030988_GE_USER_VGPR_EN + 4,
+   },
+   {
+      R_031110_SPI_GS_THROTTLE_CNTL1,
+      R_03111C_SPI_ATTRIBUTE_RING_SIZE - R_031110_SPI_GS_THROTTLE_CNTL1 + 4,
+   },
+};
+
+/* Defines the set of ranges of registers which cannot be shadowed for various reasons. */
+static const struct ac_reg_range Gfx11NonShadowedRanges[] =
+{
+
+   /* VGT_INDEX_TYPE and VGT_DMA_INDEX_TYPE are a special case and neither of these should
+    * be shadowed.
+    */
+   {
+      R_028A7C_VGT_DMA_INDEX_TYPE,
+      4,
+   },
+   {
+      R_03090C_VGT_INDEX_TYPE,
+      4,
+   },
+   {
+      R_028A88_VGT_DMA_NUM_INSTANCES,
+      4,
+   },
+   {
+      R_00B01C_SPI_SHADER_PGM_RSRC3_PS,
+      4,
+   },
+   {
+      R_00B004_SPI_SHADER_PGM_RSRC4_PS,
+      4,
+   },
+   {
+      R_00B404_SPI_SHADER_PGM_RSRC4_HS,
+      4,
+   },
+   {
+      R_00B204_SPI_SHADER_PGM_RSRC4_GS,
+      4,
+   },
+   {
+      R_00B858_COMPUTE_STATIC_THREAD_MGMT_SE0,
+      R_00B85C_COMPUTE_STATIC_THREAD_MGMT_SE1 - R_00B858_COMPUTE_STATIC_THREAD_MGMT_SE0 + 4,
+   },
+   {
+      R_00B864_COMPUTE_STATIC_THREAD_MGMT_SE2,
+      R_00B868_COMPUTE_STATIC_THREAD_MGMT_SE3 - R_00B864_COMPUTE_STATIC_THREAD_MGMT_SE2 + 4,
+   },
+   {
+      R_030800_GRBM_GFX_INDEX,
+      4,
+   },
+   {
+      R_030A00_PA_SU_LINE_STIPPLE_VALUE,
+      R_030A04_PA_SC_LINE_STIPPLE_STATE - R_030A00_PA_SU_LINE_STIPPLE_VALUE + 4,
+   },
+   /* SQ thread trace registers are always not shadowed. */
+   {
+      R_0367A0_SQ_THREAD_TRACE_BUF0_BASE,
+      R_0367D4_SQ_THREAD_TRACE_STATUS2 - R_0367A0_SQ_THREAD_TRACE_BUF0_BASE + 4,
+   },
+   {
+      R_030D00_SQ_THREAD_TRACE_USERDATA_0,
+      R_030D1C_SQ_THREAD_TRACE_USERDATA_7 - R_030D00_SQ_THREAD_TRACE_USERDATA_0 + 4,
+   },
+   /* Perf counter registers are always not shadowed. Most of them are in the perf register
+    * space, but some legacy registers are still outside of it. The SPM registers are
+    * in the perf range as well.
+    */
+   {
+      SI_UCONFIG_PERF_REG_OFFSET,
+      SI_UCONFIG_PERF_REG_SPACE_SIZE,
+   },
+   /* These aren't defined in Mesa. */
+   /*{
+      RPB_PERFCOUNTER_LO,
+      RPB_PERFCOUNTER_RSLT_CNTL - RPB_PERFCOUNTER_LO + 4,
+   },*/
+   {
+      R_037890_SDMA0_PERFCOUNTER0_SELECT,
+      R_03789C_SDMA0_PERFCOUNTER1_SELECT1 - R_037890_SDMA0_PERFCOUNTER0_SELECT + 4,
+   },
+   {
+      R_0378C0_SDMA1_PERFCOUNTER0_SELECT,
+      R_0378CC_SDMA1_PERFCOUNTER1_SELECT1 - R_0378C0_SDMA1_PERFCOUNTER0_SELECT + 4,
+   },
+   {
+      R_0359B0_SDMA1_PERFCNT_PERFCOUNTER_LO,
+      R_0359C4_SDMA1_PERFCOUNTER1_HI - R_0359B0_SDMA1_PERFCNT_PERFCOUNTER_LO + 4,
+   },
+   {
+      R_035980_SDMA0_PERFCNT_PERFCOUNTER_LO,
+      R_035994_SDMA0_PERFCOUNTER1_HI - R_035980_SDMA0_PERFCNT_PERFCOUNTER_LO + 4,
+   },
+};
+
+void ac_get_reg_ranges(enum chip_class chip_class, enum radeon_family family,
+                       enum ac_reg_range_type type, unsigned *num_ranges,
+                       const struct ac_reg_range **ranges)
+{
+#define RETURN(array)                                                                              \
+   do {                                                                                            \
+      *ranges = array;                                                                             \
+      *num_ranges = ARRAY_SIZE(array);                                                             \
+   } while (0)
+
+   *num_ranges = 0;
+   *ranges = NULL;
+
+   switch (type) {
+   case SI_REG_RANGE_UCONFIG:
+      if (chip_class == GFX11)
+         RETURN(Gfx11UserConfigShadowRange);
+      else if (chip_class == GFX10_3)
+         RETURN(Gfx103UserConfigShadowRange);
+      else if (chip_class == GFX10)
+         RETURN(Nv10UserConfigShadowRange);
+      else if (chip_class == GFX9)
+         RETURN(Gfx9UserConfigShadowRange);
+      break;
+   case SI_REG_RANGE_CONTEXT:
+      if (chip_class == GFX11)
+         RETURN(Gfx11ContextShadowRange);
+      else if (chip_class == GFX10_3)
+         RETURN(Gfx103ContextShadowRange);
+      else if (chip_class == GFX10)
+         RETURN(Nv10ContextShadowRange);
+      else if (chip_class == GFX9)
+         RETURN(Gfx9ContextShadowRange);
+      break;
+   case SI_REG_RANGE_SH:
+      if (chip_class == GFX11)
+         RETURN(Gfx11ShShadowRange);
+      else if (chip_class == GFX10_3 || chip_class == GFX10)
+         RETURN(Gfx10ShShadowRange);
+      else if (family == CHIP_RAVEN2 || family == CHIP_RENOIR)
+         RETURN(Gfx9ShShadowRangeRaven2);
+      else if (chip_class == GFX9)
+         RETURN(Gfx9ShShadowRange);
+      break;
+   case SI_REG_RANGE_CS_SH:
+      if (chip_class == GFX11)
+         RETURN(Gfx11CsShShadowRange);
+      else if (chip_class == GFX10_3 || chip_class == GFX10)
+         RETURN(Gfx10CsShShadowRange);
+      else if (family == CHIP_RAVEN2 || family == CHIP_RENOIR)
+         RETURN(Gfx9CsShShadowRangeRaven2);
+      else if (chip_class == GFX9)
+         RETURN(Gfx9CsShShadowRange);
+      break;
+   case SI_REG_RANGE_NON_SHADOWED:
+      if (chip_class == GFX11)
+         RETURN(Gfx11NonShadowedRanges);
+      else if (chip_class == GFX10_3)
+         RETURN(Gfx103NonShadowedRanges);
+      else if (chip_class == GFX10)
+         RETURN(Navi10NonShadowedRanges);
+      else
+         assert(0);
+      break;
+   default:
+      break;
+   }
+}
+
+/**
+ * Emulate CLEAR_STATE.
+ */
+static void gfx9_emulate_clear_state(struct radeon_cmdbuf *cs,
+                                     set_context_reg_seq_array_fn set_context_reg_seq_array)
+{
+   static const uint32_t DbRenderControlGfx9[] = {
+      0x0,        // DB_RENDER_CONTROL
+      0x0,        // DB_COUNT_CONTROL
+      0x0,        // DB_DEPTH_VIEW
+      0x0,        // DB_RENDER_OVERRIDE
+      0x0,        // DB_RENDER_OVERRIDE2
+      0x0,        // DB_HTILE_DATA_BASE
+      0x0,        // DB_HTILE_DATA_BASE_HI
+      0x0,        // DB_DEPTH_SIZE
+      0x0,        // DB_DEPTH_BOUNDS_MIN
+      0x0,        // DB_DEPTH_BOUNDS_MAX
+      0x0,        // DB_STENCIL_CLEAR
+      0x0,        // DB_DEPTH_CLEAR
+      0x0,        // PA_SC_SCREEN_SCISSOR_TL
+      0x40004000, // PA_SC_SCREEN_SCISSOR_BR
+      0x0,        // DB_Z_INFO
+      0x0,        // DB_STENCIL_INFO
+      0x0,        // DB_Z_READ_BASE
+      0x0,        // DB_Z_READ_BASE_HI
+      0x0,        // DB_STENCIL_READ_BASE
+      0x0,        // DB_STENCIL_READ_BASE_HI
+      0x0,        // DB_Z_WRITE_BASE
+      0x0,        // DB_Z_WRITE_BASE_HI
+      0x0,        // DB_STENCIL_WRITE_BASE
+      0x0,        // DB_STENCIL_WRITE_BASE_HI
+      0x0,        // DB_DFSM_CONTROL
+      0x0,        //
+      0x0,        // DB_Z_INFO2
+      0x0,        // DB_STENCIL_INFO2
+      0x0,        //
+      0x0,        //
+      0x0,        //
+      0x0,        //
+      0x0,        // TA_BC_BASE_ADDR
+      0x0         // TA_BC_BASE_ADDR_HI
+   };
+   static const uint32_t CoherDestBaseHi0Gfx9[] = {
+      0x0,        // COHER_DEST_BASE_HI_0
+      0x0,        // COHER_DEST_BASE_HI_1
+      0x0,        // COHER_DEST_BASE_HI_2
+      0x0,        // COHER_DEST_BASE_HI_3
+      0x0,        // COHER_DEST_BASE_2
+      0x0,        // COHER_DEST_BASE_3
+      0x0,        // PA_SC_WINDOW_OFFSET
+      0x80000000, // PA_SC_WINDOW_SCISSOR_TL
+      0x40004000, // PA_SC_WINDOW_SCISSOR_BR
+      0xffff,     // PA_SC_CLIPRECT_RULE
+      0x0,        // PA_SC_CLIPRECT_0_TL
+      0x40004000, // PA_SC_CLIPRECT_0_BR
+      0x0,        // PA_SC_CLIPRECT_1_TL
+      0x40004000, // PA_SC_CLIPRECT_1_BR
+      0x0,        // PA_SC_CLIPRECT_2_TL
+      0x40004000, // PA_SC_CLIPRECT_2_BR
+      0x0,        // PA_SC_CLIPRECT_3_TL
+      0x40004000, // PA_SC_CLIPRECT_3_BR
+      0xaa99aaaa, // PA_SC_EDGERULE
+      0x0,        // PA_SU_HARDWARE_SCREEN_OFFSET
+      0xffffffff, // CB_TARGET_MASK
+      0xffffffff, // CB_SHADER_MASK
+      0x80000000, // PA_SC_GENERIC_SCISSOR_TL
+      0x40004000, // PA_SC_GENERIC_SCISSOR_BR
+      0x0,        // COHER_DEST_BASE_0
+      0x0,        // COHER_DEST_BASE_1
+      0x80000000, // PA_SC_VPORT_SCISSOR_0_TL
+      0x40004000, // PA_SC_VPORT_SCISSOR_0_BR
+      0x80000000, // PA_SC_VPORT_SCISSOR_1_TL
+      0x40004000, // PA_SC_VPORT_SCISSOR_1_BR
+      0x80000000, // PA_SC_VPORT_SCISSOR_2_TL
+      0x40004000, // PA_SC_VPORT_SCISSOR_2_BR
+      0x80000000, // PA_SC_VPORT_SCISSOR_3_TL
+      0x40004000, // PA_SC_VPORT_SCISSOR_3_BR
+      0x80000000, // PA_SC_VPORT_SCISSOR_4_TL
+      0x40004000, // PA_SC_VPORT_SCISSOR_4_BR
+      0x80000000, // PA_SC_VPORT_SCISSOR_5_TL
+      0x40004000, // PA_SC_VPORT_SCISSOR_5_BR
+      0x80000000, // PA_SC_VPORT_SCISSOR_6_TL
+      0x40004000, // PA_SC_VPORT_SCISSOR_6_BR
+      0x80000000, // PA_SC_VPORT_SCISSOR_7_TL
+      0x40004000, // PA_SC_VPORT_SCISSOR_7_BR
+      0x80000000, // PA_SC_VPORT_SCISSOR_8_TL
+      0x40004000, // PA_SC_VPORT_SCISSOR_8_BR
+      0x80000000, // PA_SC_VPORT_SCISSOR_9_TL
+      0x40004000, // PA_SC_VPORT_SCISSOR_9_BR
+      0x80000000, // PA_SC_VPORT_SCISSOR_10_TL
+      0x40004000, // PA_SC_VPORT_SCISSOR_10_BR
+      0x80000000, // PA_SC_VPORT_SCISSOR_11_TL
+      0x40004000, // PA_SC_VPORT_SCISSOR_11_BR
+      0x80000000, // PA_SC_VPORT_SCISSOR_12_TL
+      0x40004000, // PA_SC_VPORT_SCISSOR_12_BR
+      0x80000000, // PA_SC_VPORT_SCISSOR_13_TL
+      0x40004000, // PA_SC_VPORT_SCISSOR_13_BR
+      0x80000000, // PA_SC_VPORT_SCISSOR_14_TL
+      0x40004000, // PA_SC_VPORT_SCISSOR_14_BR
+      0x80000000, // PA_SC_VPORT_SCISSOR_15_TL
+      0x40004000, // PA_SC_VPORT_SCISSOR_15_BR
+      0x0,        // PA_SC_VPORT_ZMIN_0
+      0x3f800000, // PA_SC_VPORT_ZMAX_0
+      0x0,        // PA_SC_VPORT_ZMIN_1
+      0x3f800000, // PA_SC_VPORT_ZMAX_1
+      0x0,        // PA_SC_VPORT_ZMIN_2
+      0x3f800000, // PA_SC_VPORT_ZMAX_2
+      0x0,        // PA_SC_VPORT_ZMIN_3
+      0x3f800000, // PA_SC_VPORT_ZMAX_3
+      0x0,        // PA_SC_VPORT_ZMIN_4
+      0x3f800000, // PA_SC_VPORT_ZMAX_4
+      0x0,        // PA_SC_VPORT_ZMIN_5
+      0x3f800000, // PA_SC_VPORT_ZMAX_5
+      0x0,        // PA_SC_VPORT_ZMIN_6
+      0x3f800000, // PA_SC_VPORT_ZMAX_6
+      0x0,        // PA_SC_VPORT_ZMIN_7
+      0x3f800000, // PA_SC_VPORT_ZMAX_7
+      0x0,        // PA_SC_VPORT_ZMIN_8
+      0x3f800000, // PA_SC_VPORT_ZMAX_8
+      0x0,        // PA_SC_VPORT_ZMIN_9
+      0x3f800000, // PA_SC_VPORT_ZMAX_9
+      0x0,        // PA_SC_VPORT_ZMIN_10
+      0x3f800000, // PA_SC_VPORT_ZMAX_10
+      0x0,        // PA_SC_VPORT_ZMIN_11
+      0x3f800000, // PA_SC_VPORT_ZMAX_11
+      0x0,        // PA_SC_VPORT_ZMIN_12
+      0x3f800000, // PA_SC_VPORT_ZMAX_12
+      0x0,        // PA_SC_VPORT_ZMIN_13
+      0x3f800000, // PA_SC_VPORT_ZMAX_13
+      0x0,        // PA_SC_VPORT_ZMIN_14
+      0x3f800000, // PA_SC_VPORT_ZMAX_14
+      0x0,        // PA_SC_VPORT_ZMIN_15
+      0x3f800000, // PA_SC_VPORT_ZMAX_15
+      0x0,        // PA_SC_RASTER_CONFIG
+      0x0,        // PA_SC_RASTER_CONFIG_1
+      0x0,        //
+      0x0         // PA_SC_TILE_STEERING_OVERRIDE
+   };
+   static const uint32_t VgtMultiPrimIbResetIndxGfx9[] = {
+      0x0 // VGT_MULTI_PRIM_IB_RESET_INDX
+   };
+   static const uint32_t CbBlendRedGfx9[] = {
+      0x0,       // CB_BLEND_RED
+      0x0,       // CB_BLEND_GREEN
+      0x0,       // CB_BLEND_BLUE
+      0x0,       // CB_BLEND_ALPHA
+      0x0,       // CB_DCC_CONTROL
+      0x0,       //
+      0x0,       // DB_STENCIL_CONTROL
+      0x1000000, // DB_STENCILREFMASK
+      0x1000000, // DB_STENCILREFMASK_BF
+      0x0,       //
+      0x0,       // PA_CL_VPORT_XSCALE
+      0x0,       // PA_CL_VPORT_XOFFSET
+      0x0,       // PA_CL_VPORT_YSCALE
+      0x0,       // PA_CL_VPORT_YOFFSET
+      0x0,       // PA_CL_VPORT_ZSCALE
+      0x0,       // PA_CL_VPORT_ZOFFSET
+      0x0,       // PA_CL_VPORT_XSCALE_1
+      0x0,       // PA_CL_VPORT_XOFFSET_1
+      0x0,       // PA_CL_VPORT_YSCALE_1
+      0x0,       // PA_CL_VPORT_YOFFSET_1
+      0x0,       // PA_CL_VPORT_ZSCALE_1
+      0x0,       // PA_CL_VPORT_ZOFFSET_1
+      0x0,       // PA_CL_VPORT_XSCALE_2
+      0x0,       // PA_CL_VPORT_XOFFSET_2
+      0x0,       // PA_CL_VPORT_YSCALE_2
+      0x0,       // PA_CL_VPORT_YOFFSET_2
+      0x0,       // PA_CL_VPORT_ZSCALE_2
+      0x0,       // PA_CL_VPORT_ZOFFSET_2
+      0x0,       // PA_CL_VPORT_XSCALE_3
+      0x0,       // PA_CL_VPORT_XOFFSET_3
+      0x0,       // PA_CL_VPORT_YSCALE_3
+      0x0,       // PA_CL_VPORT_YOFFSET_3
+      0x0,       // PA_CL_VPORT_ZSCALE_3
+      0x0,       // PA_CL_VPORT_ZOFFSET_3
+      0x0,       // PA_CL_VPORT_XSCALE_4
+      0x0,       // PA_CL_VPORT_XOFFSET_4
+      0x0,       // PA_CL_VPORT_YSCALE_4
+      0x0,       // PA_CL_VPORT_YOFFSET_4
+      0x0,       // PA_CL_VPORT_ZSCALE_4
+      0x0,       // PA_CL_VPORT_ZOFFSET_4
+      0x0,       // PA_CL_VPORT_XSCALE_5
+      0x0,       // PA_CL_VPORT_XOFFSET_5
+      0x0,       // PA_CL_VPORT_YSCALE_5
+      0x0,       // PA_CL_VPORT_YOFFSET_5
+      0x0,       // PA_CL_VPORT_ZSCALE_5
+      0x0,       // PA_CL_VPORT_ZOFFSET_5
+      0x0,       // PA_CL_VPORT_XSCALE_6
+      0x0,       // PA_CL_VPORT_XOFFSET_6
+      0x0,       // PA_CL_VPORT_YSCALE_6
+      0x0,       // PA_CL_VPORT_YOFFSET_6
+      0x0,       // PA_CL_VPORT_ZSCALE_6
+      0x0,       // PA_CL_VPORT_ZOFFSET_6
+      0x0,       // PA_CL_VPORT_XSCALE_7
+      0x0,       // PA_CL_VPORT_XOFFSET_7
+      0x0,       // PA_CL_VPORT_YSCALE_7
+      0x0,       // PA_CL_VPORT_YOFFSET_7
+      0x0,       // PA_CL_VPORT_ZSCALE_7
+      0x0,       // PA_CL_VPORT_ZOFFSET_7
+      0x0,       // PA_CL_VPORT_XSCALE_8
+      0x0,       // PA_CL_VPORT_XOFFSET_8
+      0x0,       // PA_CL_VPORT_YSCALE_8
+      0x0,       // PA_CL_VPORT_YOFFSET_8
+      0x0,       // PA_CL_VPORT_ZSCALE_8
+      0x0,       // PA_CL_VPORT_ZOFFSET_8
+      0x0,       // PA_CL_VPORT_XSCALE_9
+      0x0,       // PA_CL_VPORT_XOFFSET_9
+      0x0,       // PA_CL_VPORT_YSCALE_9
+      0x0,       // PA_CL_VPORT_YOFFSET_9
+      0x0,       // PA_CL_VPORT_ZSCALE_9
+      0x0,       // PA_CL_VPORT_ZOFFSET_9
+      0x0,       // PA_CL_VPORT_XSCALE_10
+      0x0,       // PA_CL_VPORT_XOFFSET_10
+      0x0,       // PA_CL_VPORT_YSCALE_10
+      0x0,       // PA_CL_VPORT_YOFFSET_10
+      0x0,       // PA_CL_VPORT_ZSCALE_10
+      0x0,       // PA_CL_VPORT_ZOFFSET_10
+      0x0,       // PA_CL_VPORT_XSCALE_11
+      0x0,       // PA_CL_VPORT_XOFFSET_11
+      0x0,       // PA_CL_VPORT_YSCALE_11
+      0x0,       // PA_CL_VPORT_YOFFSET_11
+      0x0,       // PA_CL_VPORT_ZSCALE_11
+      0x0,       // PA_CL_VPORT_ZOFFSET_11
+      0x0,       // PA_CL_VPORT_XSCALE_12
+      0x0,       // PA_CL_VPORT_XOFFSET_12
+      0x0,       // PA_CL_VPORT_YSCALE_12
+      0x0,       // PA_CL_VPORT_YOFFSET_12
+      0x0,       // PA_CL_VPORT_ZSCALE_12
+      0x0,       // PA_CL_VPORT_ZOFFSET_12
+      0x0,       // PA_CL_VPORT_XSCALE_13
+      0x0,       // PA_CL_VPORT_XOFFSET_13
+      0x0,       // PA_CL_VPORT_YSCALE_13
+      0x0,       // PA_CL_VPORT_YOFFSET_13
+      0x0,       // PA_CL_VPORT_ZSCALE_13
+      0x0,       // PA_CL_VPORT_ZOFFSET_13
+      0x0,       // PA_CL_VPORT_XSCALE_14
+      0x0,       // PA_CL_VPORT_XOFFSET_14
+      0x0,       // PA_CL_VPORT_YSCALE_14
+      0x0,       // PA_CL_VPORT_YOFFSET_14
+      0x0,       // PA_CL_VPORT_ZSCALE_14
+      0x0,       // PA_CL_VPORT_ZOFFSET_14
+      0x0,       // PA_CL_VPORT_XSCALE_15
+      0x0,       // PA_CL_VPORT_XOFFSET_15
+      0x0,       // PA_CL_VPORT_YSCALE_15
+      0x0,       // PA_CL_VPORT_YOFFSET_15
+      0x0,       // PA_CL_VPORT_ZSCALE_15
+      0x0,       // PA_CL_VPORT_ZOFFSET_15
+      0x0,       // PA_CL_UCP_0_X
+      0x0,       // PA_CL_UCP_0_Y
+      0x0,       // PA_CL_UCP_0_Z
+      0x0,       // PA_CL_UCP_0_W
+      0x0,       // PA_CL_UCP_1_X
+      0x0,       // PA_CL_UCP_1_Y
+      0x0,       // PA_CL_UCP_1_Z
+      0x0,       // PA_CL_UCP_1_W
+      0x0,       // PA_CL_UCP_2_X
+      0x0,       // PA_CL_UCP_2_Y
+      0x0,       // PA_CL_UCP_2_Z
+      0x0,       // PA_CL_UCP_2_W
+      0x0,       // PA_CL_UCP_3_X
+      0x0,       // PA_CL_UCP_3_Y
+      0x0,       // PA_CL_UCP_3_Z
+      0x0,       // PA_CL_UCP_3_W
+      0x0,       // PA_CL_UCP_4_X
+      0x0,       // PA_CL_UCP_4_Y
+      0x0,       // PA_CL_UCP_4_Z
+      0x0,       // PA_CL_UCP_4_W
+      0x0,       // PA_CL_UCP_5_X
+      0x0,       // PA_CL_UCP_5_Y
+      0x0,       // PA_CL_UCP_5_Z
+      0x0        // PA_CL_UCP_5_W
+   };
+   static const uint32_t SpiPsInputCntl0Gfx9[] = {
+      0x0, // SPI_PS_INPUT_CNTL_0
+      0x0, // SPI_PS_INPUT_CNTL_1
+      0x0, // SPI_PS_INPUT_CNTL_2
+      0x0, // SPI_PS_INPUT_CNTL_3
+      0x0, // SPI_PS_INPUT_CNTL_4
+      0x0, // SPI_PS_INPUT_CNTL_5
+      0x0, // SPI_PS_INPUT_CNTL_6
+      0x0, // SPI_PS_INPUT_CNTL_7
+      0x0, // SPI_PS_INPUT_CNTL_8
+      0x0, // SPI_PS_INPUT_CNTL_9
+      0x0, // SPI_PS_INPUT_CNTL_10
+      0x0, // SPI_PS_INPUT_CNTL_11
+      0x0, // SPI_PS_INPUT_CNTL_12
+      0x0, // SPI_PS_INPUT_CNTL_13
+      0x0, // SPI_PS_INPUT_CNTL_14
+      0x0, // SPI_PS_INPUT_CNTL_15
+      0x0, // SPI_PS_INPUT_CNTL_16
+      0x0, // SPI_PS_INPUT_CNTL_17
+      0x0, // SPI_PS_INPUT_CNTL_18
+      0x0, // SPI_PS_INPUT_CNTL_19
+      0x0, // SPI_PS_INPUT_CNTL_20
+      0x0, // SPI_PS_INPUT_CNTL_21
+      0x0, // SPI_PS_INPUT_CNTL_22
+      0x0, // SPI_PS_INPUT_CNTL_23
+      0x0, // SPI_PS_INPUT_CNTL_24
+      0x0, // SPI_PS_INPUT_CNTL_25
+      0x0, // SPI_PS_INPUT_CNTL_26
+      0x0, // SPI_PS_INPUT_CNTL_27
+      0x0, // SPI_PS_INPUT_CNTL_28
+      0x0, // SPI_PS_INPUT_CNTL_29
+      0x0, // SPI_PS_INPUT_CNTL_30
+      0x0, // SPI_PS_INPUT_CNTL_31
+      0x0, // SPI_VS_OUT_CONFIG
+      0x0, //
+      0x0, // SPI_PS_INPUT_ENA
+      0x0, // SPI_PS_INPUT_ADDR
+      0x0, // SPI_INTERP_CONTROL_0
+      0x2, // SPI_PS_IN_CONTROL
+      0x0, //
+      0x0, // SPI_BARYC_CNTL
+      0x0, //
+      0x0, // SPI_TMPRING_SIZE
+      0x0, //
+      0x0, //
+      0x0, //
+      0x0, //
+      0x0, //
+      0x0, //
+      0x0, //
+      0x0, //
+      0x0, // SPI_SHADER_POS_FORMAT
+      0x0, // SPI_SHADER_Z_FORMAT
+      0x0  // SPI_SHADER_COL_FORMAT
+   };
+   static const uint32_t SxPsDownconvertGfx9[] = {
+      0x0, // SX_PS_DOWNCONVERT
+      0x0, // SX_BLEND_OPT_EPSILON
+      0x0, // SX_BLEND_OPT_CONTROL
+      0x0, // SX_MRT0_BLEND_OPT
+      0x0, // SX_MRT1_BLEND_OPT
+      0x0, // SX_MRT2_BLEND_OPT
+      0x0, // SX_MRT3_BLEND_OPT
+      0x0, // SX_MRT4_BLEND_OPT
+      0x0, // SX_MRT5_BLEND_OPT
+      0x0, // SX_MRT6_BLEND_OPT
+      0x0, // SX_MRT7_BLEND_OPT
+      0x0, // CB_BLEND0_CONTROL
+      0x0, // CB_BLEND1_CONTROL
+      0x0, // CB_BLEND2_CONTROL
+      0x0, // CB_BLEND3_CONTROL
+      0x0, // CB_BLEND4_CONTROL
+      0x0, // CB_BLEND5_CONTROL
+      0x0, // CB_BLEND6_CONTROL
+      0x0, // CB_BLEND7_CONTROL
+      0x0, // CB_MRT0_EPITCH
+      0x0, // CB_MRT1_EPITCH
+      0x0, // CB_MRT2_EPITCH
+      0x0, // CB_MRT3_EPITCH
+      0x0, // CB_MRT4_EPITCH
+      0x0, // CB_MRT5_EPITCH
+      0x0, // CB_MRT6_EPITCH
+      0x0  // CB_MRT7_EPITCH
+   };
+   static const uint32_t DbDepthControlGfx9[] = {
+      0x0,     // DB_DEPTH_CONTROL
+      0x0,     // DB_EQAA
+      0x0,     // CB_COLOR_CONTROL
+      0x0,     // DB_SHADER_CONTROL
+      0x90000, // PA_CL_CLIP_CNTL
+      0x4,     // PA_SU_SC_MODE_CNTL
+      0x0,     // PA_CL_VTE_CNTL
+      0x0,     // PA_CL_VS_OUT_CNTL
+      0x0,     // PA_CL_NANINF_CNTL
+      0x0,     // PA_SU_LINE_STIPPLE_CNTL
+      0x0,     // PA_SU_LINE_STIPPLE_SCALE
+      0x0,     // PA_SU_PRIM_FILTER_CNTL
+      0x0,     // PA_SU_SMALL_PRIM_FILTER_CNTL
+      0x0,     // PA_CL_OBJPRIM_ID_CNTL
+      0x0,     // PA_CL_NGG_CNTL
+      0x0,     // PA_SU_OVER_RASTERIZATION_CNTL
+      0x0      // PA_STEREO_CNTL
+   };
+   static const uint32_t PaSuPointSizeGfx9[] = {
+      0x0, // PA_SU_POINT_SIZE
+      0x0, // PA_SU_POINT_MINMAX
+      0x0, // PA_SU_LINE_CNTL
+      0x0  // PA_SC_LINE_STIPPLE
+   };
+   static const uint32_t VgtHosMaxTessLevelGfx9[] = {
+      0x0, // VGT_HOS_MAX_TESS_LEVEL
+      0x0  // VGT_HOS_MIN_TESS_LEVEL
+   };
+   static const uint32_t VgtGsModeGfx9[] = {
+      0x0,   // VGT_GS_MODE
+      0x0,   // VGT_GS_ONCHIP_CNTL
+      0x0,   // PA_SC_MODE_CNTL_0
+      0x0,   // PA_SC_MODE_CNTL_1
+      0x0,   // VGT_ENHANCE
+      0x100, // VGT_GS_PER_ES
+      0x80,  // VGT_ES_PER_GS
+      0x2,   // VGT_GS_PER_VS
+      0x0,   // VGT_GSVS_RING_OFFSET_1
+      0x0,   // VGT_GSVS_RING_OFFSET_2
+      0x0,   // VGT_GSVS_RING_OFFSET_3
+      0x0    // VGT_GS_OUT_PRIM_TYPE
+   };
+   static const uint32_t VgtPrimitiveidEnGfx9[] = {
+      0x0 // VGT_PRIMITIVEID_EN
+   };
+   static const uint32_t VgtPrimitiveidResetGfx9[] = {
+      0x0 // VGT_PRIMITIVEID_RESET
+   };
+   static const uint32_t VgtGsMaxPrimsPerSubgroupGfx9[] = {
+      0x0, // VGT_GS_MAX_PRIMS_PER_SUBGROUP
+      0x0, // VGT_DRAW_PAYLOAD_CNTL
+      0x0, //
+      0x0, // VGT_INSTANCE_STEP_RATE_0
+      0x0, // VGT_INSTANCE_STEP_RATE_1
+      0x0, //
+      0x0, // VGT_ESGS_RING_ITEMSIZE
+      0x0, // VGT_GSVS_RING_ITEMSIZE
+      0x0, // VGT_REUSE_OFF
+      0x0, // VGT_VTX_CNT_EN
+      0x0, // DB_HTILE_SURFACE
+      0x0, // DB_SRESULTS_COMPARE_STATE0
+      0x0, // DB_SRESULTS_COMPARE_STATE1
+      0x0, // DB_PRELOAD_CONTROL
+      0x0, //
+      0x0, // VGT_STRMOUT_BUFFER_SIZE_0
+      0x0  // VGT_STRMOUT_VTX_STRIDE_0
+   };
+   static const uint32_t VgtStrmoutBufferSize1Gfx9[] = {
+      0x0, // VGT_STRMOUT_BUFFER_SIZE_1
+      0x0  // VGT_STRMOUT_VTX_STRIDE_1
+   };
+   static const uint32_t VgtStrmoutBufferSize2Gfx9[] = {
+      0x0, // VGT_STRMOUT_BUFFER_SIZE_2
+      0x0  // VGT_STRMOUT_VTX_STRIDE_2
+   };
+   static const uint32_t VgtStrmoutBufferSize3Gfx9[] = {
+      0x0, // VGT_STRMOUT_BUFFER_SIZE_3
+      0x0  // VGT_STRMOUT_VTX_STRIDE_3
+   };
+   static const uint32_t VgtStrmoutDrawOpaqueOffsetGfx9[] = {
+      0x0, // VGT_STRMOUT_DRAW_OPAQUE_OFFSET
+      0x0, // VGT_STRMOUT_DRAW_OPAQUE_BUFFER_FILLED_SIZE
+      0x0  // VGT_STRMOUT_DRAW_OPAQUE_VERTEX_STRIDE
+   };
+   static const uint32_t VgtGsMaxVertOutGfx9[] = {
+      0x0, // VGT_GS_MAX_VERT_OUT
+      0x0, //
+      0x0, //
+      0x0, //
+      0x0, //
+      0x0, //
+      0x0, // VGT_TESS_DISTRIBUTION
+      0x0, // VGT_SHADER_STAGES_EN
+      0x0, // VGT_LS_HS_CONFIG
+      0x0, // VGT_GS_VERT_ITEMSIZE
+      0x0, // VGT_GS_VERT_ITEMSIZE_1
+      0x0, // VGT_GS_VERT_ITEMSIZE_2
+      0x0, // VGT_GS_VERT_ITEMSIZE_3
+      0x0, // VGT_TF_PARAM
+      0x0, // DB_ALPHA_TO_MASK
+      0x0, // VGT_DISPATCH_DRAW_INDEX
+      0x0, // PA_SU_POLY_OFFSET_DB_FMT_CNTL
+      0x0, // PA_SU_POLY_OFFSET_CLAMP
+      0x0, // PA_SU_POLY_OFFSET_FRONT_SCALE
+      0x0, // PA_SU_POLY_OFFSET_FRONT_OFFSET
+      0x0, // PA_SU_POLY_OFFSET_BACK_SCALE
+      0x0, // PA_SU_POLY_OFFSET_BACK_OFFSET
+      0x0, // VGT_GS_INSTANCE_CNT
+      0x0, // VGT_STRMOUT_CONFIG
+      0x0  // VGT_STRMOUT_BUFFER_CONFIG
+   };
+   static const uint32_t PaScCentroidPriority0Gfx9[] = {
+      0x0,        // PA_SC_CENTROID_PRIORITY_0
+      0x0,        // PA_SC_CENTROID_PRIORITY_1
+      0x1000,     // PA_SC_LINE_CNTL
+      0x0,        // PA_SC_AA_CONFIG
+      0x5,        // PA_SU_VTX_CNTL
+      0x3f800000, // PA_CL_GB_VERT_CLIP_ADJ
+      0x3f800000, // PA_CL_GB_VERT_DISC_ADJ
+      0x3f800000, // PA_CL_GB_HORZ_CLIP_ADJ
+      0x3f800000, // PA_CL_GB_HORZ_DISC_ADJ
+      0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_0
+      0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_1
+      0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_2
+      0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_3
+      0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_0
+      0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_1
+      0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_2
+      0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_3
+      0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_0
+      0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_1
+      0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_2
+      0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_3
+      0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_0
+      0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_1
+      0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_2
+      0x0,        // PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_3
+      0xffffffff, // PA_SC_AA_MASK_X0Y0_X1Y0
+      0xffffffff, // PA_SC_AA_MASK_X0Y1_X1Y1
+      0x0,        // PA_SC_SHADER_CONTROL
+      0x3,        // PA_SC_BINNER_CNTL_0
+      0x0,        // PA_SC_BINNER_CNTL_1
+      0x100000,   // PA_SC_CONSERVATIVE_RASTERIZATION_CNTL
+      0x0,        // PA_SC_NGG_MODE_CNTL
+      0x0,        //
+      0x1e,       // VGT_VERTEX_REUSE_BLOCK_CNTL
+      0x20,       // VGT_OUT_DEALLOC_CNTL
+      0x0,        // CB_COLOR0_BASE
+      0x0,        // CB_COLOR0_BASE_EXT
+      0x0,        // CB_COLOR0_ATTRIB2
+      0x0,        // CB_COLOR0_VIEW
+      0x0,        // CB_COLOR0_INFO
+      0x0,        // CB_COLOR0_ATTRIB
+      0x0,        // CB_COLOR0_DCC_CONTROL
+      0x0,        // CB_COLOR0_CMASK
+      0x0,        // CB_COLOR0_CMASK_BASE_EXT
+      0x0,        // CB_COLOR0_FMASK
+      0x0,        // CB_COLOR0_FMASK_BASE_EXT
+      0x0,        // CB_COLOR0_CLEAR_WORD0
+      0x0,        // CB_COLOR0_CLEAR_WORD1
+      0x0,        // CB_COLOR0_DCC_BASE
+      0x0,        // CB_COLOR0_DCC_BASE_EXT
+      0x0,        // CB_COLOR1_BASE
+      0x0,        // CB_COLOR1_BASE_EXT
+      0x0,        // CB_COLOR1_ATTRIB2
+      0x0,        // CB_COLOR1_VIEW
+      0x0,        // CB_COLOR1_INFO
+      0x0,        // CB_COLOR1_ATTRIB
+      0x0,        // CB_COLOR1_DCC_CONTROL
+      0x0,        // CB_COLOR1_CMASK
+      0x0,        // CB_COLOR1_CMASK_BASE_EXT
+      0x0,        // CB_COLOR1_FMASK
+      0x0,        // CB_COLOR1_FMASK_BASE_EXT
+      0x0,        // CB_COLOR1_CLEAR_WORD0
+      0x0,        // CB_COLOR1_CLEAR_WORD1
+      0x0,        // CB_COLOR1_DCC_BASE
+      0x0,        // CB_COLOR1_DCC_BASE_EXT
+      0x0,        // CB_COLOR2_BASE
+      0x0,        // CB_COLOR2_BASE_EXT
+      0x0,        // CB_COLOR2_ATTRIB2
+      0x0,        // CB_COLOR2_VIEW
+      0x0,        // CB_COLOR2_INFO
+      0x0,        // CB_COLOR2_ATTRIB
+      0x0,        // CB_COLOR2_DCC_CONTROL
+      0x0,        // CB_COLOR2_CMASK
+      0x0,        // CB_COLOR2_CMASK_BASE_EXT
+      0x0,        // CB_COLOR2_FMASK
+      0x0,        // CB_COLOR2_FMASK_BASE_EXT
+      0x0,        // CB_COLOR2_CLEAR_WORD0
+      0x0,        // CB_COLOR2_CLEAR_WORD1
+      0x0,        // CB_COLOR2_DCC_BASE
+      0x0,        // CB_COLOR2_DCC_BASE_EXT
+      0x0,        // CB_COLOR3_BASE
+      0x0,        // CB_COLOR3_BASE_EXT
+      0x0,        // CB_COLOR3_ATTRIB2
+      0x0,        // CB_COLOR3_VIEW
+      0x0,        // CB_COLOR3_INFO
+      0x0,        // CB_COLOR3_ATTRIB
+      0x0,        // CB_COLOR3_DCC_CONTROL
+      0x0,        // CB_COLOR3_CMASK
+      0x0,        // CB_COLOR3_CMASK_BASE_EXT
+      0x0,        // CB_COLOR3_FMASK
+      0x0,        // CB_COLOR3_FMASK_BASE_EXT
+      0x0,        // CB_COLOR3_CLEAR_WORD0
+      0x0,        // CB_COLOR3_CLEAR_WORD1
+      0x0,        // CB_COLOR3_DCC_BASE
+      0x0,        // CB_COLOR3_DCC_BASE_EXT
+      0x0,        // CB_COLOR4_BASE
+      0x0,        // CB_COLOR4_BASE_EXT
+      0x0,        // CB_COLOR4_ATTRIB2
+      0x0,        // CB_COLOR4_VIEW
+      0x0,        // CB_COLOR4_INFO
+      0x0,        // CB_COLOR4_ATTRIB
+      0x0,        // CB_COLOR4_DCC_CONTROL
+      0x0,        // CB_COLOR4_CMASK
+      0x0,        // CB_COLOR4_CMASK_BASE_EXT
+      0x0,        // CB_COLOR4_FMASK
+      0x0,        // CB_COLOR4_FMASK_BASE_EXT
+      0x0,        // CB_COLOR4_CLEAR_WORD0
+      0x0,        // CB_COLOR4_CLEAR_WORD1
+      0x0,        // CB_COLOR4_DCC_BASE
+      0x0,        // CB_COLOR4_DCC_BASE_EXT
+      0x0,        // CB_COLOR5_BASE
+      0x0,        // CB_COLOR5_BASE_EXT
+      0x0,        // CB_COLOR5_ATTRIB2
+      0x0,        // CB_COLOR5_VIEW
+      0x0,        // CB_COLOR5_INFO
+      0x0,        // CB_COLOR5_ATTRIB
+      0x0,        // CB_COLOR5_DCC_CONTROL
+      0x0,        // CB_COLOR5_CMASK
+      0x0,        // CB_COLOR5_CMASK_BASE_EXT
+      0x0,        // CB_COLOR5_FMASK
+      0x0,        // CB_COLOR5_FMASK_BASE_EXT
+      0x0,        // CB_COLOR5_CLEAR_WORD0
+      0x0,        // CB_COLOR5_CLEAR_WORD1
+      0x0,        // CB_COLOR5_DCC_BASE
+      0x0,        // CB_COLOR5_DCC_BASE_EXT
+      0x0,        // CB_COLOR6_BASE
+      0x0,        // CB_COLOR6_BASE_EXT
+      0x0,        // CB_COLOR6_ATTRIB2
+      0x0,        // CB_COLOR6_VIEW
+      0x0,        // CB_COLOR6_INFO
+      0x0,        // CB_COLOR6_ATTRIB
+      0x0,        // CB_COLOR6_DCC_CONTROL
+      0x0,        // CB_COLOR6_CMASK
+      0x0,        // CB_COLOR6_CMASK_BASE_EXT
+      0x0,        // CB_COLOR6_FMASK
+      0x0,        // CB_COLOR6_FMASK_BASE_EXT
+      0x0,        // CB_COLOR6_CLEAR_WORD0
+      0x0,        // CB_COLOR6_CLEAR_WORD1
+      0x0,        // CB_COLOR6_DCC_BASE
+      0x0,        // CB_COLOR6_DCC_BASE_EXT
+      0x0,        // CB_COLOR7_BASE
+      0x0,        // CB_COLOR7_BASE_EXT
+      0x0,        // CB_COLOR7_ATTRIB2
+      0x0,        // CB_COLOR7_VIEW
+      0x0,        // CB_COLOR7_INFO
+      0x0,        // CB_COLOR7_ATTRIB
+      0x0,        // CB_COLOR7_DCC_CONTROL
+      0x0,        // CB_COLOR7_CMASK
+      0x0,        // CB_COLOR7_CMASK_BASE_EXT
+      0x0,        // CB_COLOR7_FMASK
+      0x0,        // CB_COLOR7_FMASK_BASE_EXT
+      0x0,        // CB_COLOR7_CLEAR_WORD0
+      0x0,        // CB_COLOR7_CLEAR_WORD1
+      0x0,        // CB_COLOR7_DCC_BASE
+      0x0         // CB_COLOR7_DCC_BASE_EXT
+   };
 
-   *num_ranges = 0;
-   *ranges = NULL;
+#define SET(array) ARRAY_SIZE(array), array
 
-   switch (type) {
-   case SI_REG_RANGE_UCONFIG:
-      if (chip_class == GFX10_3)
-         RETURN(Gfx103UserConfigShadowRange);
-      else if (chip_class == GFX10)
-         RETURN(Nv10UserConfigShadowRange);
-      else if (chip_class == GFX9)
-         RETURN(Gfx9UserConfigShadowRange);
-      break;
-   case SI_REG_RANGE_CONTEXT:
-      if (chip_class == GFX10_3)
-         RETURN(Gfx103ContextShadowRange);
-      else if (chip_class == GFX10)
-         RETURN(Nv10ContextShadowRange);
-      else if (chip_class == GFX9)
-         RETURN(Gfx9ContextShadowRange);
-      break;
-   case SI_REG_RANGE_SH:
-      if (chip_class == GFX10_3 || chip_class == GFX10)
-         RETURN(Gfx10ShShadowRange);
-      else if (family == CHIP_RAVEN2 || family == CHIP_RENOIR)
-         RETURN(Gfx9ShShadowRangeRaven2);
-      else if (chip_class == GFX9)
-         RETURN(Gfx9ShShadowRange);
-      break;
-   case SI_REG_RANGE_CS_SH:
-      if (chip_class == GFX10_3 || chip_class == GFX10)
-         RETURN(Gfx10CsShShadowRange);
-      else if (family == CHIP_RAVEN2 || family == CHIP_RENOIR)
-         RETURN(Gfx9CsShShadowRangeRaven2);
-      else if (chip_class == GFX9)
-         RETURN(Gfx9CsShShadowRange);
-      break;
-   case SI_REG_RANGE_NON_SHADOWED:
-      if (chip_class == GFX10_3)
-         RETURN(Gfx103NonShadowedRanges);
-      else if (chip_class == GFX10)
-         RETURN(Navi10NonShadowedRanges);
-      else
-         assert(0);
-      break;
-   default:
-      break;
-   }
+   set_context_reg_seq_array(cs, R_028000_DB_RENDER_CONTROL, SET(DbRenderControlGfx9));
+   set_context_reg_seq_array(cs, R_0281E8_COHER_DEST_BASE_HI_0, SET(CoherDestBaseHi0Gfx9));
+   set_context_reg_seq_array(cs, R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX,
+                             SET(VgtMultiPrimIbResetIndxGfx9));
+   set_context_reg_seq_array(cs, R_028414_CB_BLEND_RED, SET(CbBlendRedGfx9));
+   set_context_reg_seq_array(cs, R_028644_SPI_PS_INPUT_CNTL_0, SET(SpiPsInputCntl0Gfx9));
+   set_context_reg_seq_array(cs, R_028754_SX_PS_DOWNCONVERT, SET(SxPsDownconvertGfx9));
+   set_context_reg_seq_array(cs, R_028800_DB_DEPTH_CONTROL, SET(DbDepthControlGfx9));
+   set_context_reg_seq_array(cs, R_028A00_PA_SU_POINT_SIZE, SET(PaSuPointSizeGfx9));
+   set_context_reg_seq_array(cs, R_028A18_VGT_HOS_MAX_TESS_LEVEL, SET(VgtHosMaxTessLevelGfx9));
+   set_context_reg_seq_array(cs, R_028A40_VGT_GS_MODE, SET(VgtGsModeGfx9));
+   set_context_reg_seq_array(cs, R_028A84_VGT_PRIMITIVEID_EN, SET(VgtPrimitiveidEnGfx9));
+   set_context_reg_seq_array(cs, R_028A8C_VGT_PRIMITIVEID_RESET, SET(VgtPrimitiveidResetGfx9));
+   set_context_reg_seq_array(cs, R_028A94_VGT_GS_MAX_PRIMS_PER_SUBGROUP,
+                             SET(VgtGsMaxPrimsPerSubgroupGfx9));
+   set_context_reg_seq_array(cs, R_028AE0_VGT_STRMOUT_BUFFER_SIZE_1,
+                             SET(VgtStrmoutBufferSize1Gfx9));
+   set_context_reg_seq_array(cs, R_028AF0_VGT_STRMOUT_BUFFER_SIZE_2,
+                             SET(VgtStrmoutBufferSize2Gfx9));
+   set_context_reg_seq_array(cs, R_028B00_VGT_STRMOUT_BUFFER_SIZE_3,
+                             SET(VgtStrmoutBufferSize3Gfx9));
+   set_context_reg_seq_array(cs, R_028B28_VGT_STRMOUT_DRAW_OPAQUE_OFFSET,
+                             SET(VgtStrmoutDrawOpaqueOffsetGfx9));
+   set_context_reg_seq_array(cs, R_028B38_VGT_GS_MAX_VERT_OUT, SET(VgtGsMaxVertOutGfx9));
+   set_context_reg_seq_array(cs, R_028BD4_PA_SC_CENTROID_PRIORITY_0,
+                             SET(PaScCentroidPriority0Gfx9));
 }
 
 /**
- * Emulate CLEAR_STATE.
+ * Emulate CLEAR_STATE. Additionally, initialize num_reg_pairs registers specified
+ * via reg_offsets and reg_values.
  */
-static void gfx9_emulate_clear_state(struct radeon_cmdbuf *cs,
-                                     set_context_reg_seq_array_fn set_context_reg_seq_array)
+static void gfx10_emulate_clear_state(struct radeon_cmdbuf *cs, unsigned num_reg_pairs,
+                                      unsigned *reg_offsets, uint32_t *reg_values,
+                                      set_context_reg_seq_array_fn set_context_reg_seq_array)
 {
-   static const uint32_t DbRenderControlGfx9[] = {
+   static const uint32_t DbRenderControlNv10[] = {
       0x0,        // DB_RENDER_CONTROL
       0x0,        // DB_COUNT_CONTROL
       0x0,        // DB_DEPTH_VIEW
       0x0,        // DB_RENDER_OVERRIDE
       0x0,        // DB_RENDER_OVERRIDE2
       0x0,        // DB_HTILE_DATA_BASE
-      0x0,        // DB_HTILE_DATA_BASE_HI
-      0x0,        // DB_DEPTH_SIZE
+      0x0,        //
+      0x0,        // DB_DEPTH_SIZE_XY
       0x0,        // DB_DEPTH_BOUNDS_MIN
       0x0,        // DB_DEPTH_BOUNDS_MAX
       0x0,        // DB_STENCIL_CLEAR
       0x0,        // DB_DEPTH_CLEAR
       0x0,        // PA_SC_SCREEN_SCISSOR_TL
       0x40004000, // PA_SC_SCREEN_SCISSOR_BR
+      0x0,        // DB_DFSM_CONTROL
+      0x0,        // DB_RESERVED_REG_2
       0x0,        // DB_Z_INFO
       0x0,        // DB_STENCIL_INFO
       0x0,        // DB_Z_READ_BASE
-      0x0,        // DB_Z_READ_BASE_HI
       0x0,        // DB_STENCIL_READ_BASE
-      0x0,        // DB_STENCIL_READ_BASE_HI
       0x0,        // DB_Z_WRITE_BASE
-      0x0,        // DB_Z_WRITE_BASE_HI
       0x0,        // DB_STENCIL_WRITE_BASE
-      0x0,        // DB_STENCIL_WRITE_BASE_HI
-      0x0,        // DB_DFSM_CONTROL
-      0x0,        //
-      0x0,        // DB_Z_INFO2
-      0x0,        // DB_STENCIL_INFO2
       0x0,        //
       0x0,        //
       0x0,        //
       0x0,        //
+      0x0,        // DB_Z_READ_BASE_HI
+      0x0,        // DB_STENCIL_READ_BASE_HI
+      0x0,        // DB_Z_WRITE_BASE_HI
+      0x0,        // DB_STENCIL_WRITE_BASE_HI
+      0x0,        // DB_HTILE_DATA_BASE_HI
+      0x0,        // DB_RMI_L2_CACHE_CONTROL
       0x0,        // TA_BC_BASE_ADDR
       0x0         // TA_BC_BASE_ADDR_HI
    };
-   static const uint32_t CoherDestBaseHi0Gfx9[] = {
+   static const uint32_t CoherDestBaseHi0Nv10[] = {
       0x0,        // COHER_DEST_BASE_HI_0
       0x0,        // COHER_DEST_BASE_HI_1
       0x0,        // COHER_DEST_BASE_HI_2
@@ -1035,16 +2106,15 @@ static void gfx9_emulate_clear_state(struct radeon_cmdbuf *cs,
       0x0,        //
       0x0         // PA_SC_TILE_STEERING_OVERRIDE
    };
-   static const uint32_t VgtMultiPrimIbResetIndxGfx9[] = {
-      0x0 // VGT_MULTI_PRIM_IB_RESET_INDX
-   };
-   static const uint32_t CbBlendRedGfx9[] = {
+   static const uint32_t VgtMultiPrimIbResetIndxNv10[] = {
+      0x0,       // VGT_MULTI_PRIM_IB_RESET_INDX
+      0x0,       // CB_RMI_GL2_CACHE_CONTROL
       0x0,       // CB_BLEND_RED
       0x0,       // CB_BLEND_GREEN
       0x0,       // CB_BLEND_BLUE
       0x0,       // CB_BLEND_ALPHA
       0x0,       // CB_DCC_CONTROL
-      0x0,       //
+      0x0,       // CB_COVERAGE_OUT_CONTROL
       0x0,       // DB_STENCIL_CONTROL
       0x1000000, // DB_STENCILREFMASK
       0x1000000, // DB_STENCILREFMASK_BF
@@ -1170,7 +2240,7 @@ static void gfx9_emulate_clear_state(struct radeon_cmdbuf *cs,
       0x0,       // PA_CL_UCP_5_Z
       0x0        // PA_CL_UCP_5_W
    };
-   static const uint32_t SpiPsInputCntl0Gfx9[] = {
+   static const uint32_t SpiPsInputCntl0Nv10[] = {
       0x0, // SPI_PS_INPUT_CNTL_0
       0x0, // SPI_PS_INPUT_CNTL_1
       0x0, // SPI_PS_INPUT_CNTL_2
@@ -1220,12 +2290,12 @@ static void gfx9_emulate_clear_state(struct radeon_cmdbuf *cs,
       0x0, //
       0x0, //
       0x0, //
-      0x0, //
+      0x0, // SPI_SHADER_IDX_FORMAT
       0x0, // SPI_SHADER_POS_FORMAT
       0x0, // SPI_SHADER_Z_FORMAT
       0x0  // SPI_SHADER_COL_FORMAT
    };
-   static const uint32_t SxPsDownconvertGfx9[] = {
+   static const uint32_t SxPsDownconvertNv10[] = {
       0x0, // SX_PS_DOWNCONVERT
       0x0, // SX_BLEND_OPT_EPSILON
       0x0, // SX_BLEND_OPT_CONTROL
@@ -1244,17 +2314,16 @@ static void gfx9_emulate_clear_state(struct radeon_cmdbuf *cs,
       0x0, // CB_BLEND4_CONTROL
       0x0, // CB_BLEND5_CONTROL
       0x0, // CB_BLEND6_CONTROL
-      0x0, // CB_BLEND7_CONTROL
-      0x0, // CB_MRT0_EPITCH
-      0x0, // CB_MRT1_EPITCH
-      0x0, // CB_MRT2_EPITCH
-      0x0, // CB_MRT3_EPITCH
-      0x0, // CB_MRT4_EPITCH
-      0x0, // CB_MRT5_EPITCH
-      0x0, // CB_MRT6_EPITCH
-      0x0  // CB_MRT7_EPITCH
+      0x0  // CB_BLEND7_CONTROL
    };
-   static const uint32_t DbDepthControlGfx9[] = {
+   static const uint32_t PaClPointXRadNv10[] = {
+      0x0, // PA_CL_POINT_X_RAD
+      0x0, // PA_CL_POINT_Y_RAD
+      0x0, // PA_CL_POINT_SIZE
+      0x0  // PA_CL_POINT_CULL_RAD
+   };
+   static const uint32_t GeMaxOutputPerSubgroupNv10[] = {
+      0x0,     // GE_MAX_OUTPUT_PER_SUBGROUP
       0x0,     // DB_DEPTH_CONTROL
       0x0,     // DB_EQAA
       0x0,     // CB_COLOR_CONTROL
@@ -1271,19 +2340,20 @@ static void gfx9_emulate_clear_state(struct radeon_cmdbuf *cs,
       0x0,     // PA_CL_OBJPRIM_ID_CNTL
       0x0,     // PA_CL_NGG_CNTL
       0x0,     // PA_SU_OVER_RASTERIZATION_CNTL
-      0x0      // PA_STEREO_CNTL
+      0x0,     // PA_STEREO_CNTL
+      0x0      // PA_STATE_STEREO_X
    };
-   static const uint32_t PaSuPointSizeGfx9[] = {
+   static const uint32_t PaSuPointSizeNv10[] = {
       0x0, // PA_SU_POINT_SIZE
       0x0, // PA_SU_POINT_MINMAX
       0x0, // PA_SU_LINE_CNTL
       0x0  // PA_SC_LINE_STIPPLE
    };
-   static const uint32_t VgtHosMaxTessLevelGfx9[] = {
+   static const uint32_t VgtHosMaxTessLevelNv10[] = {
       0x0, // VGT_HOS_MAX_TESS_LEVEL
       0x0  // VGT_HOS_MIN_TESS_LEVEL
    };
-   static const uint32_t VgtGsModeGfx9[] = {
+   static const uint32_t VgtGsModeNv10[] = {
       0x0,   // VGT_GS_MODE
       0x0,   // VGT_GS_ONCHIP_CNTL
       0x0,   // PA_SC_MODE_CNTL_0
@@ -1297,19 +2367,18 @@ static void gfx9_emulate_clear_state(struct radeon_cmdbuf *cs,
       0x0,   // VGT_GSVS_RING_OFFSET_3
       0x0    // VGT_GS_OUT_PRIM_TYPE
    };
-   static const uint32_t VgtPrimitiveidEnGfx9[] = {
+   static const uint32_t VgtPrimitiveidEnNv10[] = {
       0x0 // VGT_PRIMITIVEID_EN
    };
-   static const uint32_t VgtPrimitiveidResetGfx9[] = {
+   static const uint32_t VgtPrimitiveidResetNv10[] = {
       0x0 // VGT_PRIMITIVEID_RESET
    };
-   static const uint32_t VgtGsMaxPrimsPerSubgroupGfx9[] = {
-      0x0, // VGT_GS_MAX_PRIMS_PER_SUBGROUP
+   static const uint32_t VgtDrawPayloadCntlNv10[] = {
       0x0, // VGT_DRAW_PAYLOAD_CNTL
       0x0, //
       0x0, // VGT_INSTANCE_STEP_RATE_0
       0x0, // VGT_INSTANCE_STEP_RATE_1
-      0x0, //
+      0x0, // IA_MULTI_VGT_PARAM
       0x0, // VGT_ESGS_RING_ITEMSIZE
       0x0, // VGT_GSVS_RING_ITEMSIZE
       0x0, // VGT_REUSE_OFF
@@ -1320,32 +2389,37 @@ static void gfx9_emulate_clear_state(struct radeon_cmdbuf *cs,
       0x0, // DB_PRELOAD_CONTROL
       0x0, //
       0x0, // VGT_STRMOUT_BUFFER_SIZE_0
-      0x0  // VGT_STRMOUT_VTX_STRIDE_0
-   };
-   static const uint32_t VgtStrmoutBufferSize1Gfx9[] = {
+      0x0, // VGT_STRMOUT_VTX_STRIDE_0
+      0x0, //
+      0x0, // VGT_STRMOUT_BUFFER_OFFSET_0
       0x0, // VGT_STRMOUT_BUFFER_SIZE_1
-      0x0  // VGT_STRMOUT_VTX_STRIDE_1
-   };
-   static const uint32_t VgtStrmoutBufferSize2Gfx9[] = {
+      0x0, // VGT_STRMOUT_VTX_STRIDE_1
+      0x0, //
+      0x0, // VGT_STRMOUT_BUFFER_OFFSET_1
       0x0, // VGT_STRMOUT_BUFFER_SIZE_2
-      0x0  // VGT_STRMOUT_VTX_STRIDE_2
-   };
-   static const uint32_t VgtStrmoutBufferSize3Gfx9[] = {
+      0x0, // VGT_STRMOUT_VTX_STRIDE_2
+      0x0, //
+      0x0, // VGT_STRMOUT_BUFFER_OFFSET_2
       0x0, // VGT_STRMOUT_BUFFER_SIZE_3
-      0x0  // VGT_STRMOUT_VTX_STRIDE_3
-   };
-   static const uint32_t VgtStrmoutDrawOpaqueOffsetGfx9[] = {
+      0x0, // VGT_STRMOUT_VTX_STRIDE_3
+      0x0, //
+      0x0, // VGT_STRMOUT_BUFFER_OFFSET_3
+      0x0, //
+      0x0, //
+      0x0, //
+      0x0, //
+      0x0, //
+      0x0, //
       0x0, // VGT_STRMOUT_DRAW_OPAQUE_OFFSET
       0x0, // VGT_STRMOUT_DRAW_OPAQUE_BUFFER_FILLED_SIZE
-      0x0  // VGT_STRMOUT_DRAW_OPAQUE_VERTEX_STRIDE
-   };
-   static const uint32_t VgtGsMaxVertOutGfx9[] = {
-      0x0, // VGT_GS_MAX_VERT_OUT
+      0x0, // VGT_STRMOUT_DRAW_OPAQUE_VERTEX_STRIDE
       0x0, //
+      0x0, // VGT_GS_MAX_VERT_OUT
       0x0, //
       0x0, //
       0x0, //
       0x0, //
+      0x0, // GE_NGG_SUBGRP_CNTL
       0x0, // VGT_TESS_DISTRIBUTION
       0x0, // VGT_SHADER_STAGES_EN
       0x0, // VGT_LS_HS_CONFIG
@@ -1366,7 +2440,7 @@ static void gfx9_emulate_clear_state(struct radeon_cmdbuf *cs,
       0x0, // VGT_STRMOUT_CONFIG
       0x0  // VGT_STRMOUT_BUFFER_CONFIG
    };
-   static const uint32_t PaScCentroidPriority0Gfx9[] = {
+   static const uint32_t PaScCentroidPriority0Nv10[] = {
       0x0,        // PA_SC_CENTROID_PRIORITY_0
       0x0,        // PA_SC_CENTROID_PRIORITY_1
       0x1000,     // PA_SC_LINE_CNTL
@@ -1403,166 +2477,206 @@ static void gfx9_emulate_clear_state(struct radeon_cmdbuf *cs,
       0x1e,       // VGT_VERTEX_REUSE_BLOCK_CNTL
       0x20,       // VGT_OUT_DEALLOC_CNTL
       0x0,        // CB_COLOR0_BASE
-      0x0,        // CB_COLOR0_BASE_EXT
-      0x0,        // CB_COLOR0_ATTRIB2
+      0x0,        //
+      0x0,        //
       0x0,        // CB_COLOR0_VIEW
       0x0,        // CB_COLOR0_INFO
       0x0,        // CB_COLOR0_ATTRIB
       0x0,        // CB_COLOR0_DCC_CONTROL
       0x0,        // CB_COLOR0_CMASK
-      0x0,        // CB_COLOR0_CMASK_BASE_EXT
+      0x0,        //
       0x0,        // CB_COLOR0_FMASK
-      0x0,        // CB_COLOR0_FMASK_BASE_EXT
+      0x0,        //
       0x0,        // CB_COLOR0_CLEAR_WORD0
       0x0,        // CB_COLOR0_CLEAR_WORD1
       0x0,        // CB_COLOR0_DCC_BASE
-      0x0,        // CB_COLOR0_DCC_BASE_EXT
+      0x0,        //
       0x0,        // CB_COLOR1_BASE
-      0x0,        // CB_COLOR1_BASE_EXT
-      0x0,        // CB_COLOR1_ATTRIB2
+      0x0,        //
+      0x0,        //
       0x0,        // CB_COLOR1_VIEW
       0x0,        // CB_COLOR1_INFO
       0x0,        // CB_COLOR1_ATTRIB
       0x0,        // CB_COLOR1_DCC_CONTROL
       0x0,        // CB_COLOR1_CMASK
-      0x0,        // CB_COLOR1_CMASK_BASE_EXT
+      0x0,        //
       0x0,        // CB_COLOR1_FMASK
-      0x0,        // CB_COLOR1_FMASK_BASE_EXT
+      0x0,        //
       0x0,        // CB_COLOR1_CLEAR_WORD0
       0x0,        // CB_COLOR1_CLEAR_WORD1
       0x0,        // CB_COLOR1_DCC_BASE
-      0x0,        // CB_COLOR1_DCC_BASE_EXT
+      0x0,        //
       0x0,        // CB_COLOR2_BASE
-      0x0,        // CB_COLOR2_BASE_EXT
-      0x0,        // CB_COLOR2_ATTRIB2
+      0x0,        //
+      0x0,        //
       0x0,        // CB_COLOR2_VIEW
       0x0,        // CB_COLOR2_INFO
       0x0,        // CB_COLOR2_ATTRIB
       0x0,        // CB_COLOR2_DCC_CONTROL
       0x0,        // CB_COLOR2_CMASK
-      0x0,        // CB_COLOR2_CMASK_BASE_EXT
+      0x0,        //
       0x0,        // CB_COLOR2_FMASK
-      0x0,        // CB_COLOR2_FMASK_BASE_EXT
+      0x0,        //
       0x0,        // CB_COLOR2_CLEAR_WORD0
       0x0,        // CB_COLOR2_CLEAR_WORD1
       0x0,        // CB_COLOR2_DCC_BASE
-      0x0,        // CB_COLOR2_DCC_BASE_EXT
+      0x0,        //
       0x0,        // CB_COLOR3_BASE
-      0x0,        // CB_COLOR3_BASE_EXT
-      0x0,        // CB_COLOR3_ATTRIB2
+      0x0,        //
+      0x0,        //
       0x0,        // CB_COLOR3_VIEW
       0x0,        // CB_COLOR3_INFO
       0x0,        // CB_COLOR3_ATTRIB
       0x0,        // CB_COLOR3_DCC_CONTROL
       0x0,        // CB_COLOR3_CMASK
-      0x0,        // CB_COLOR3_CMASK_BASE_EXT
+      0x0,        //
       0x0,        // CB_COLOR3_FMASK
-      0x0,        // CB_COLOR3_FMASK_BASE_EXT
+      0x0,        //
       0x0,        // CB_COLOR3_CLEAR_WORD0
       0x0,        // CB_COLOR3_CLEAR_WORD1
       0x0,        // CB_COLOR3_DCC_BASE
-      0x0,        // CB_COLOR3_DCC_BASE_EXT
+      0x0,        //
       0x0,        // CB_COLOR4_BASE
-      0x0,        // CB_COLOR4_BASE_EXT
-      0x0,        // CB_COLOR4_ATTRIB2
+      0x0,        //
+      0x0,        //
       0x0,        // CB_COLOR4_VIEW
       0x0,        // CB_COLOR4_INFO
       0x0,        // CB_COLOR4_ATTRIB
       0x0,        // CB_COLOR4_DCC_CONTROL
       0x0,        // CB_COLOR4_CMASK
-      0x0,        // CB_COLOR4_CMASK_BASE_EXT
+      0x0,        //
       0x0,        // CB_COLOR4_FMASK
-      0x0,        // CB_COLOR4_FMASK_BASE_EXT
+      0x0,        //
       0x0,        // CB_COLOR4_CLEAR_WORD0
       0x0,        // CB_COLOR4_CLEAR_WORD1
       0x0,        // CB_COLOR4_DCC_BASE
-      0x0,        // CB_COLOR4_DCC_BASE_EXT
+      0x0,        //
       0x0,        // CB_COLOR5_BASE
-      0x0,        // CB_COLOR5_BASE_EXT
-      0x0,        // CB_COLOR5_ATTRIB2
+      0x0,        //
+      0x0,        //
       0x0,        // CB_COLOR5_VIEW
       0x0,        // CB_COLOR5_INFO
       0x0,        // CB_COLOR5_ATTRIB
       0x0,        // CB_COLOR5_DCC_CONTROL
       0x0,        // CB_COLOR5_CMASK
-      0x0,        // CB_COLOR5_CMASK_BASE_EXT
+      0x0,        //
       0x0,        // CB_COLOR5_FMASK
-      0x0,        // CB_COLOR5_FMASK_BASE_EXT
+      0x0,        //
       0x0,        // CB_COLOR5_CLEAR_WORD0
       0x0,        // CB_COLOR5_CLEAR_WORD1
       0x0,        // CB_COLOR5_DCC_BASE
-      0x0,        // CB_COLOR5_DCC_BASE_EXT
+      0x0,        //
       0x0,        // CB_COLOR6_BASE
-      0x0,        // CB_COLOR6_BASE_EXT
-      0x0,        // CB_COLOR6_ATTRIB2
+      0x0,        //
+      0x0,        //
       0x0,        // CB_COLOR6_VIEW
       0x0,        // CB_COLOR6_INFO
       0x0,        // CB_COLOR6_ATTRIB
       0x0,        // CB_COLOR6_DCC_CONTROL
       0x0,        // CB_COLOR6_CMASK
-      0x0,        // CB_COLOR6_CMASK_BASE_EXT
+      0x0,        //
       0x0,        // CB_COLOR6_FMASK
-      0x0,        // CB_COLOR6_FMASK_BASE_EXT
+      0x0,        //
       0x0,        // CB_COLOR6_CLEAR_WORD0
       0x0,        // CB_COLOR6_CLEAR_WORD1
       0x0,        // CB_COLOR6_DCC_BASE
-      0x0,        // CB_COLOR6_DCC_BASE_EXT
+      0x0,        //
       0x0,        // CB_COLOR7_BASE
-      0x0,        // CB_COLOR7_BASE_EXT
-      0x0,        // CB_COLOR7_ATTRIB2
+      0x0,        //
+      0x0,        //
       0x0,        // CB_COLOR7_VIEW
       0x0,        // CB_COLOR7_INFO
       0x0,        // CB_COLOR7_ATTRIB
       0x0,        // CB_COLOR7_DCC_CONTROL
       0x0,        // CB_COLOR7_CMASK
-      0x0,        // CB_COLOR7_CMASK_BASE_EXT
+      0x0,        //
       0x0,        // CB_COLOR7_FMASK
-      0x0,        // CB_COLOR7_FMASK_BASE_EXT
+      0x0,        //
       0x0,        // CB_COLOR7_CLEAR_WORD0
       0x0,        // CB_COLOR7_CLEAR_WORD1
       0x0,        // CB_COLOR7_DCC_BASE
-      0x0         // CB_COLOR7_DCC_BASE_EXT
+      0x0,        //
+      0x0,        // CB_COLOR0_BASE_EXT
+      0x0,        // CB_COLOR1_BASE_EXT
+      0x0,        // CB_COLOR2_BASE_EXT
+      0x0,        // CB_COLOR3_BASE_EXT
+      0x0,        // CB_COLOR4_BASE_EXT
+      0x0,        // CB_COLOR5_BASE_EXT
+      0x0,        // CB_COLOR6_BASE_EXT
+      0x0,        // CB_COLOR7_BASE_EXT
+      0x0,        // CB_COLOR0_CMASK_BASE_EXT
+      0x0,        // CB_COLOR1_CMASK_BASE_EXT
+      0x0,        // CB_COLOR2_CMASK_BASE_EXT
+      0x0,        // CB_COLOR3_CMASK_BASE_EXT
+      0x0,        // CB_COLOR4_CMASK_BASE_EXT
+      0x0,        // CB_COLOR5_CMASK_BASE_EXT
+      0x0,        // CB_COLOR6_CMASK_BASE_EXT
+      0x0,        // CB_COLOR7_CMASK_BASE_EXT
+      0x0,        // CB_COLOR0_FMASK_BASE_EXT
+      0x0,        // CB_COLOR1_FMASK_BASE_EXT
+      0x0,        // CB_COLOR2_FMASK_BASE_EXT
+      0x0,        // CB_COLOR3_FMASK_BASE_EXT
+      0x0,        // CB_COLOR4_FMASK_BASE_EXT
+      0x0,        // CB_COLOR5_FMASK_BASE_EXT
+      0x0,        // CB_COLOR6_FMASK_BASE_EXT
+      0x0,        // CB_COLOR7_FMASK_BASE_EXT
+      0x0,        // CB_COLOR0_DCC_BASE_EXT
+      0x0,        // CB_COLOR1_DCC_BASE_EXT
+      0x0,        // CB_COLOR2_DCC_BASE_EXT
+      0x0,        // CB_COLOR3_DCC_BASE_EXT
+      0x0,        // CB_COLOR4_DCC_BASE_EXT
+      0x0,        // CB_COLOR5_DCC_BASE_EXT
+      0x0,        // CB_COLOR6_DCC_BASE_EXT
+      0x0,        // CB_COLOR7_DCC_BASE_EXT
+      0x0,        // CB_COLOR0_ATTRIB2
+      0x0,        // CB_COLOR1_ATTRIB2
+      0x0,        // CB_COLOR2_ATTRIB2
+      0x0,        // CB_COLOR3_ATTRIB2
+      0x0,        // CB_COLOR4_ATTRIB2
+      0x0,        // CB_COLOR5_ATTRIB2
+      0x0,        // CB_COLOR6_ATTRIB2
+      0x0,        // CB_COLOR7_ATTRIB2
+      0x0,        // CB_COLOR0_ATTRIB3
+      0x0,        // CB_COLOR1_ATTRIB3
+      0x0,        // CB_COLOR2_ATTRIB3
+      0x0,        // CB_COLOR3_ATTRIB3
+      0x0,        // CB_COLOR4_ATTRIB3
+      0x0,        // CB_COLOR5_ATTRIB3
+      0x0,        // CB_COLOR6_ATTRIB3
+      0x0         // CB_COLOR7_ATTRIB3
    };
 
-#define SET(array) ARRAY_SIZE(array), array
-
-   set_context_reg_seq_array(cs, R_028000_DB_RENDER_CONTROL, SET(DbRenderControlGfx9));
-   set_context_reg_seq_array(cs, R_0281E8_COHER_DEST_BASE_HI_0, SET(CoherDestBaseHi0Gfx9));
+   set_context_reg_seq_array(cs, R_028000_DB_RENDER_CONTROL, SET(DbRenderControlNv10));
+   set_context_reg_seq_array(cs, R_0281E8_COHER_DEST_BASE_HI_0, SET(CoherDestBaseHi0Nv10));
    set_context_reg_seq_array(cs, R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX,
-                             SET(VgtMultiPrimIbResetIndxGfx9));
-   set_context_reg_seq_array(cs, R_028414_CB_BLEND_RED, SET(CbBlendRedGfx9));
-   set_context_reg_seq_array(cs, R_028644_SPI_PS_INPUT_CNTL_0, SET(SpiPsInputCntl0Gfx9));
-   set_context_reg_seq_array(cs, R_028754_SX_PS_DOWNCONVERT, SET(SxPsDownconvertGfx9));
-   set_context_reg_seq_array(cs, R_028800_DB_DEPTH_CONTROL, SET(DbDepthControlGfx9));
-   set_context_reg_seq_array(cs, R_028A00_PA_SU_POINT_SIZE, SET(PaSuPointSizeGfx9));
-   set_context_reg_seq_array(cs, R_028A18_VGT_HOS_MAX_TESS_LEVEL, SET(VgtHosMaxTessLevelGfx9));
-   set_context_reg_seq_array(cs, R_028A40_VGT_GS_MODE, SET(VgtGsModeGfx9));
-   set_context_reg_seq_array(cs, R_028A84_VGT_PRIMITIVEID_EN, SET(VgtPrimitiveidEnGfx9));
-   set_context_reg_seq_array(cs, R_028A8C_VGT_PRIMITIVEID_RESET, SET(VgtPrimitiveidResetGfx9));
-   set_context_reg_seq_array(cs, R_028A94_VGT_GS_MAX_PRIMS_PER_SUBGROUP,
-                             SET(VgtGsMaxPrimsPerSubgroupGfx9));
-   set_context_reg_seq_array(cs, R_028AE0_VGT_STRMOUT_BUFFER_SIZE_1,
-                             SET(VgtStrmoutBufferSize1Gfx9));
-   set_context_reg_seq_array(cs, R_028AF0_VGT_STRMOUT_BUFFER_SIZE_2,
-                             SET(VgtStrmoutBufferSize2Gfx9));
-   set_context_reg_seq_array(cs, R_028B00_VGT_STRMOUT_BUFFER_SIZE_3,
-                             SET(VgtStrmoutBufferSize3Gfx9));
-   set_context_reg_seq_array(cs, R_028B28_VGT_STRMOUT_DRAW_OPAQUE_OFFSET,
-                             SET(VgtStrmoutDrawOpaqueOffsetGfx9));
-   set_context_reg_seq_array(cs, R_028B38_VGT_GS_MAX_VERT_OUT, SET(VgtGsMaxVertOutGfx9));
+                             SET(VgtMultiPrimIbResetIndxNv10));
+   set_context_reg_seq_array(cs, R_028644_SPI_PS_INPUT_CNTL_0, SET(SpiPsInputCntl0Nv10));
+   set_context_reg_seq_array(cs, R_028754_SX_PS_DOWNCONVERT, SET(SxPsDownconvertNv10));
+   set_context_reg_seq_array(cs, R_0287D4_PA_CL_POINT_X_RAD, SET(PaClPointXRadNv10));
+   set_context_reg_seq_array(cs, R_0287FC_GE_MAX_OUTPUT_PER_SUBGROUP,
+                             SET(GeMaxOutputPerSubgroupNv10));
+   set_context_reg_seq_array(cs, R_028A00_PA_SU_POINT_SIZE, SET(PaSuPointSizeNv10));
+   set_context_reg_seq_array(cs, R_028A18_VGT_HOS_MAX_TESS_LEVEL, SET(VgtHosMaxTessLevelNv10));
+   set_context_reg_seq_array(cs, R_028A40_VGT_GS_MODE, SET(VgtGsModeNv10));
+   set_context_reg_seq_array(cs, R_028A84_VGT_PRIMITIVEID_EN, SET(VgtPrimitiveidEnNv10));
+   set_context_reg_seq_array(cs, R_028A8C_VGT_PRIMITIVEID_RESET, SET(VgtPrimitiveidResetNv10));
+   set_context_reg_seq_array(cs, R_028A98_VGT_DRAW_PAYLOAD_CNTL, SET(VgtDrawPayloadCntlNv10));
    set_context_reg_seq_array(cs, R_028BD4_PA_SC_CENTROID_PRIORITY_0,
-                             SET(PaScCentroidPriority0Gfx9));
+                             SET(PaScCentroidPriority0Nv10));
+
+   for (unsigned i = 0; i < num_reg_pairs; i++)
+      set_context_reg_seq_array(cs, reg_offsets[i], 1, &reg_values[i]);
 }
 
 /**
  * Emulate CLEAR_STATE. Additionally, initialize num_reg_pairs registers specified
  * via reg_offsets and reg_values.
  */
-static void gfx10_emulate_clear_state(struct radeon_cmdbuf *cs, unsigned num_reg_pairs,
-                                      unsigned *reg_offsets, uint32_t *reg_values,
-                                      set_context_reg_seq_array_fn set_context_reg_seq_array)
+static void gfx103_emulate_clear_state(struct radeon_cmdbuf *cs, unsigned num_reg_pairs,
+                                       unsigned *reg_offsets, uint32_t *reg_values,
+                                       set_context_reg_seq_array_fn set_context_reg_seq_array)
 {
-   static const uint32_t DbRenderControlNv10[] = {
+   static const uint32_t DbRenderControlGfx103[] = {
       0x0,        // DB_RENDER_CONTROL
       0x0,        // DB_COUNT_CONTROL
       0x0,        // DB_DEPTH_VIEW
@@ -1598,7 +2712,7 @@ static void gfx10_emulate_clear_state(struct radeon_cmdbuf *cs, unsigned num_reg
       0x0,        // TA_BC_BASE_ADDR
       0x0         // TA_BC_BASE_ADDR_HI
    };
-   static const uint32_t CoherDestBaseHi0Nv10[] = {
+   static const uint32_t CoherDestBaseHi0Gfx103[] = {
       0x0,        // COHER_DEST_BASE_HI_0
       0x0,        // COHER_DEST_BASE_HI_1
       0x0,        // COHER_DEST_BASE_HI_2
@@ -1694,7 +2808,7 @@ static void gfx10_emulate_clear_state(struct radeon_cmdbuf *cs, unsigned num_reg
       0x0,        //
       0x0         // PA_SC_TILE_STEERING_OVERRIDE
    };
-   static const uint32_t VgtMultiPrimIbResetIndxNv10[] = {
+   static const uint32_t VgtMultiPrimIbResetIndxGfx103[] = {
       0x0,       // VGT_MULTI_PRIM_IB_RESET_INDX
       0x0,       // CB_RMI_GL2_CACHE_CONTROL
       0x0,       // CB_BLEND_RED
@@ -1828,7 +2942,7 @@ static void gfx10_emulate_clear_state(struct radeon_cmdbuf *cs, unsigned num_reg
       0x0,       // PA_CL_UCP_5_Z
       0x0        // PA_CL_UCP_5_W
    };
-   static const uint32_t SpiPsInputCntl0Nv10[] = {
+   static const uint32_t SpiPsInputCntl0Gfx103[] = {
       0x0, // SPI_PS_INPUT_CNTL_0
       0x0, // SPI_PS_INPUT_CNTL_1
       0x0, // SPI_PS_INPUT_CNTL_2
@@ -1883,7 +2997,8 @@ static void gfx10_emulate_clear_state(struct radeon_cmdbuf *cs, unsigned num_reg
       0x0, // SPI_SHADER_Z_FORMAT
       0x0  // SPI_SHADER_COL_FORMAT
    };
-   static const uint32_t SxPsDownconvertNv10[] = {
+   static const uint32_t SxPsDownconvertControlGfx103[] = {
+      0x0, // SX_PS_DOWNCONVERT_CONTROL
       0x0, // SX_PS_DOWNCONVERT
       0x0, // SX_BLEND_OPT_EPSILON
       0x0, // SX_BLEND_OPT_CONTROL
@@ -1904,13 +3019,13 @@ static void gfx10_emulate_clear_state(struct radeon_cmdbuf *cs, unsigned num_reg
       0x0, // CB_BLEND6_CONTROL
       0x0  // CB_BLEND7_CONTROL
    };
-   static const uint32_t PaClPointXRadNv10[] = {
+   static const uint32_t PaClPointXRadGfx103[] = {
       0x0, // PA_CL_POINT_X_RAD
       0x0, // PA_CL_POINT_Y_RAD
       0x0, // PA_CL_POINT_SIZE
       0x0  // PA_CL_POINT_CULL_RAD
    };
-   static const uint32_t GeMaxOutputPerSubgroupNv10[] = {
+   static const uint32_t GeMaxOutputPerSubgroupGfx103[] = {
       0x0,     // GE_MAX_OUTPUT_PER_SUBGROUP
       0x0,     // DB_DEPTH_CONTROL
       0x0,     // DB_EQAA
@@ -1929,19 +3044,20 @@ static void gfx10_emulate_clear_state(struct radeon_cmdbuf *cs, unsigned num_reg
       0x0,     // PA_CL_NGG_CNTL
       0x0,     // PA_SU_OVER_RASTERIZATION_CNTL
       0x0,     // PA_STEREO_CNTL
-      0x0      // PA_STATE_STEREO_X
+      0x0,     // PA_STATE_STEREO_X
+      0x0      // PA_CL_VRS_CNTL
    };
-   static const uint32_t PaSuPointSizeNv10[] = {
+   static const uint32_t PaSuPointSizeGfx103[] = {
       0x0, // PA_SU_POINT_SIZE
       0x0, // PA_SU_POINT_MINMAX
       0x0, // PA_SU_LINE_CNTL
       0x0  // PA_SC_LINE_STIPPLE
    };
-   static const uint32_t VgtHosMaxTessLevelNv10[] = {
+   static const uint32_t VgtHosMaxTessLevelGfx103[] = {
       0x0, // VGT_HOS_MAX_TESS_LEVEL
       0x0  // VGT_HOS_MIN_TESS_LEVEL
    };
-   static const uint32_t VgtGsModeNv10[] = {
+   static const uint32_t VgtGsModeGfx103[] = {
       0x0,   // VGT_GS_MODE
       0x0,   // VGT_GS_ONCHIP_CNTL
       0x0,   // PA_SC_MODE_CNTL_0
@@ -1955,13 +3071,13 @@ static void gfx10_emulate_clear_state(struct radeon_cmdbuf *cs, unsigned num_reg
       0x0,   // VGT_GSVS_RING_OFFSET_3
       0x0    // VGT_GS_OUT_PRIM_TYPE
    };
-   static const uint32_t VgtPrimitiveidEnNv10[] = {
+   static const uint32_t VgtPrimitiveidEnGfx103[] = {
       0x0 // VGT_PRIMITIVEID_EN
    };
-   static const uint32_t VgtPrimitiveidResetNv10[] = {
+   static const uint32_t VgtPrimitiveidResetGfx103[] = {
       0x0 // VGT_PRIMITIVEID_RESET
    };
-   static const uint32_t VgtDrawPayloadCntlNv10[] = {
+   static const uint32_t VgtDrawPayloadCntlGfx103[] = {
       0x0, // VGT_DRAW_PAYLOAD_CNTL
       0x0, //
       0x0, // VGT_INSTANCE_STEP_RATE_0
@@ -2017,7 +3133,7 @@ static void gfx10_emulate_clear_state(struct radeon_cmdbuf *cs, unsigned num_reg
       0x0, // VGT_GS_VERT_ITEMSIZE_3
       0x0, // VGT_TF_PARAM
       0x0, // DB_ALPHA_TO_MASK
-      0x0, // VGT_DISPATCH_DRAW_INDEX
+      0x0, //
       0x0, // PA_SU_POLY_OFFSET_DB_FMT_CNTL
       0x0, // PA_SU_POLY_OFFSET_CLAMP
       0x0, // PA_SU_POLY_OFFSET_FRONT_SCALE
@@ -2028,7 +3144,7 @@ static void gfx10_emulate_clear_state(struct radeon_cmdbuf *cs, unsigned num_reg
       0x0, // VGT_STRMOUT_CONFIG
       0x0  // VGT_STRMOUT_BUFFER_CONFIG
    };
-   static const uint32_t PaScCentroidPriority0Nv10[] = {
+   static const uint32_t PaScCentroidPriority0Gfx103[] = {
       0x0,        // PA_SC_CENTROID_PRIORITY_0
       0x0,        // PA_SC_CENTROID_PRIORITY_1
       0x1000,     // PA_SC_LINE_CNTL
@@ -2234,23 +3350,24 @@ static void gfx10_emulate_clear_state(struct radeon_cmdbuf *cs, unsigned num_reg
       0x0         // CB_COLOR7_ATTRIB3
    };
 
-   set_context_reg_seq_array(cs, R_028000_DB_RENDER_CONTROL, SET(DbRenderControlNv10));
-   set_context_reg_seq_array(cs, R_0281E8_COHER_DEST_BASE_HI_0, SET(CoherDestBaseHi0Nv10));
+   set_context_reg_seq_array(cs, R_028000_DB_RENDER_CONTROL, SET(DbRenderControlGfx103));
+   set_context_reg_seq_array(cs, R_0281E8_COHER_DEST_BASE_HI_0, SET(CoherDestBaseHi0Gfx103));
    set_context_reg_seq_array(cs, R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX,
-                             SET(VgtMultiPrimIbResetIndxNv10));
-   set_context_reg_seq_array(cs, R_028644_SPI_PS_INPUT_CNTL_0, SET(SpiPsInputCntl0Nv10));
-   set_context_reg_seq_array(cs, R_028754_SX_PS_DOWNCONVERT, SET(SxPsDownconvertNv10));
-   set_context_reg_seq_array(cs, R_0287D4_PA_CL_POINT_X_RAD, SET(PaClPointXRadNv10));
+                             SET(VgtMultiPrimIbResetIndxGfx103));
+   set_context_reg_seq_array(cs, R_028644_SPI_PS_INPUT_CNTL_0, SET(SpiPsInputCntl0Gfx103));
+   set_context_reg_seq_array(cs, R_028750_SX_PS_DOWNCONVERT_CONTROL,
+                             SET(SxPsDownconvertControlGfx103));
+   set_context_reg_seq_array(cs, R_0287D4_PA_CL_POINT_X_RAD, SET(PaClPointXRadGfx103));
    set_context_reg_seq_array(cs, R_0287FC_GE_MAX_OUTPUT_PER_SUBGROUP,
-                             SET(GeMaxOutputPerSubgroupNv10));
-   set_context_reg_seq_array(cs, R_028A00_PA_SU_POINT_SIZE, SET(PaSuPointSizeNv10));
-   set_context_reg_seq_array(cs, R_028A18_VGT_HOS_MAX_TESS_LEVEL, SET(VgtHosMaxTessLevelNv10));
-   set_context_reg_seq_array(cs, R_028A40_VGT_GS_MODE, SET(VgtGsModeNv10));
-   set_context_reg_seq_array(cs, R_028A84_VGT_PRIMITIVEID_EN, SET(VgtPrimitiveidEnNv10));
-   set_context_reg_seq_array(cs, R_028A8C_VGT_PRIMITIVEID_RESET, SET(VgtPrimitiveidResetNv10));
-   set_context_reg_seq_array(cs, R_028A98_VGT_DRAW_PAYLOAD_CNTL, SET(VgtDrawPayloadCntlNv10));
+                             SET(GeMaxOutputPerSubgroupGfx103));
+   set_context_reg_seq_array(cs, R_028A00_PA_SU_POINT_SIZE, SET(PaSuPointSizeGfx103));
+   set_context_reg_seq_array(cs, R_028A18_VGT_HOS_MAX_TESS_LEVEL, SET(VgtHosMaxTessLevelGfx103));
+   set_context_reg_seq_array(cs, R_028A40_VGT_GS_MODE, SET(VgtGsModeGfx103));
+   set_context_reg_seq_array(cs, R_028A84_VGT_PRIMITIVEID_EN, SET(VgtPrimitiveidEnGfx103));
+   set_context_reg_seq_array(cs, R_028A8C_VGT_PRIMITIVEID_RESET, SET(VgtPrimitiveidResetGfx103));
+   set_context_reg_seq_array(cs, R_028A98_VGT_DRAW_PAYLOAD_CNTL, SET(VgtDrawPayloadCntlGfx103));
    set_context_reg_seq_array(cs, R_028BD4_PA_SC_CENTROID_PRIORITY_0,
-                             SET(PaScCentroidPriority0Nv10));
+                             SET(PaScCentroidPriority0Gfx103));
 
    for (unsigned i = 0; i < num_reg_pairs; i++)
       set_context_reg_seq_array(cs, reg_offsets[i], 1, &reg_values[i]);
@@ -2260,11 +3377,11 @@ static void gfx10_emulate_clear_state(struct radeon_cmdbuf *cs, unsigned num_reg
  * Emulate CLEAR_STATE. Additionally, initialize num_reg_pairs registers specified
  * via reg_offsets and reg_values.
  */
-static void gfx103_emulate_clear_state(struct radeon_cmdbuf *cs, unsigned num_reg_pairs,
-                                       unsigned *reg_offsets, uint32_t *reg_values,
-                                       set_context_reg_seq_array_fn set_context_reg_seq_array)
+static void gfx11_emulate_clear_state(struct radeon_cmdbuf *cs, unsigned num_reg_pairs,
+                                      unsigned *reg_offsets, uint32_t *reg_values,
+                                      set_context_reg_seq_array_fn set_context_reg_seq_array)
 {
-   static const uint32_t DbRenderControlGfx103[] = {
+   static const uint32_t DbRenderControlGfx11[] = {
       0x0,        // DB_RENDER_CONTROL
       0x0,        // DB_COUNT_CONTROL
       0x0,        // DB_DEPTH_VIEW
@@ -2279,7 +3396,7 @@ static void gfx103_emulate_clear_state(struct radeon_cmdbuf *cs, unsigned num_re
       0x0,        // DB_DEPTH_CLEAR
       0x0,        // PA_SC_SCREEN_SCISSOR_TL
       0x40004000, // PA_SC_SCREEN_SCISSOR_BR
-      0x0,        // DB_DFSM_CONTROL
+      0x0,        //
       0x0,        // DB_RESERVED_REG_2
       0x0,        // DB_Z_INFO
       0x0,        // DB_STENCIL_INFO
@@ -2287,9 +3404,9 @@ static void gfx103_emulate_clear_state(struct radeon_cmdbuf *cs, unsigned num_re
       0x0,        // DB_STENCIL_READ_BASE
       0x0,        // DB_Z_WRITE_BASE
       0x0,        // DB_STENCIL_WRITE_BASE
-      0x0,        //
-      0x0,        //
-      0x0,        //
+      0x0,        // DB_RESERVED_REG_1
+      0x0,        // DB_RESERVED_REG_3
+      0x0,        // DB_SPI_VRS_CENTER_LOCATION
       0x0,        //
       0x0,        // DB_Z_READ_BASE_HI
       0x0,        // DB_STENCIL_READ_BASE_HI
@@ -2298,9 +3415,9 @@ static void gfx103_emulate_clear_state(struct radeon_cmdbuf *cs, unsigned num_re
       0x0,        // DB_HTILE_DATA_BASE_HI
       0x0,        // DB_RMI_L2_CACHE_CONTROL
       0x0,        // TA_BC_BASE_ADDR
-      0x0         // TA_BC_BASE_ADDR_HI
+      0x0,        // TA_BC_BASE_ADDR_HI
    };
-   static const uint32_t CoherDestBaseHi0Gfx103[] = {
+   static const uint32_t CoherDestBaseHi0Gfx11[] = {
       0x0,        // COHER_DEST_BASE_HI_0
       0x0,        // COHER_DEST_BASE_HI_1
       0x0,        // COHER_DEST_BASE_HI_2
@@ -2394,345 +3511,316 @@ static void gfx103_emulate_clear_state(struct radeon_cmdbuf *cs, unsigned num_re
       0x0,        // PA_SC_RASTER_CONFIG
       0x0,        // PA_SC_RASTER_CONFIG_1
       0x0,        //
-      0x0         // PA_SC_TILE_STEERING_OVERRIDE
-   };
-   static const uint32_t VgtMultiPrimIbResetIndxGfx103[] = {
-      0x0,       // VGT_MULTI_PRIM_IB_RESET_INDX
-      0x0,       // CB_RMI_GL2_CACHE_CONTROL
-      0x0,       // CB_BLEND_RED
-      0x0,       // CB_BLEND_GREEN
-      0x0,       // CB_BLEND_BLUE
-      0x0,       // CB_BLEND_ALPHA
-      0x0,       // CB_DCC_CONTROL
-      0x0,       // CB_COVERAGE_OUT_CONTROL
-      0x0,       // DB_STENCIL_CONTROL
-      0x1000000, // DB_STENCILREFMASK
-      0x1000000, // DB_STENCILREFMASK_BF
-      0x0,       //
-      0x0,       // PA_CL_VPORT_XSCALE
-      0x0,       // PA_CL_VPORT_XOFFSET
-      0x0,       // PA_CL_VPORT_YSCALE
-      0x0,       // PA_CL_VPORT_YOFFSET
-      0x0,       // PA_CL_VPORT_ZSCALE
-      0x0,       // PA_CL_VPORT_ZOFFSET
-      0x0,       // PA_CL_VPORT_XSCALE_1
-      0x0,       // PA_CL_VPORT_XOFFSET_1
-      0x0,       // PA_CL_VPORT_YSCALE_1
-      0x0,       // PA_CL_VPORT_YOFFSET_1
-      0x0,       // PA_CL_VPORT_ZSCALE_1
-      0x0,       // PA_CL_VPORT_ZOFFSET_1
-      0x0,       // PA_CL_VPORT_XSCALE_2
-      0x0,       // PA_CL_VPORT_XOFFSET_2
-      0x0,       // PA_CL_VPORT_YSCALE_2
-      0x0,       // PA_CL_VPORT_YOFFSET_2
-      0x0,       // PA_CL_VPORT_ZSCALE_2
-      0x0,       // PA_CL_VPORT_ZOFFSET_2
-      0x0,       // PA_CL_VPORT_XSCALE_3
-      0x0,       // PA_CL_VPORT_XOFFSET_3
-      0x0,       // PA_CL_VPORT_YSCALE_3
-      0x0,       // PA_CL_VPORT_YOFFSET_3
-      0x0,       // PA_CL_VPORT_ZSCALE_3
-      0x0,       // PA_CL_VPORT_ZOFFSET_3
-      0x0,       // PA_CL_VPORT_XSCALE_4
-      0x0,       // PA_CL_VPORT_XOFFSET_4
-      0x0,       // PA_CL_VPORT_YSCALE_4
-      0x0,       // PA_CL_VPORT_YOFFSET_4
-      0x0,       // PA_CL_VPORT_ZSCALE_4
-      0x0,       // PA_CL_VPORT_ZOFFSET_4
-      0x0,       // PA_CL_VPORT_XSCALE_5
-      0x0,       // PA_CL_VPORT_XOFFSET_5
-      0x0,       // PA_CL_VPORT_YSCALE_5
-      0x0,       // PA_CL_VPORT_YOFFSET_5
-      0x0,       // PA_CL_VPORT_ZSCALE_5
-      0x0,       // PA_CL_VPORT_ZOFFSET_5
-      0x0,       // PA_CL_VPORT_XSCALE_6
-      0x0,       // PA_CL_VPORT_XOFFSET_6
-      0x0,       // PA_CL_VPORT_YSCALE_6
-      0x0,       // PA_CL_VPORT_YOFFSET_6
-      0x0,       // PA_CL_VPORT_ZSCALE_6
-      0x0,       // PA_CL_VPORT_ZOFFSET_6
-      0x0,       // PA_CL_VPORT_XSCALE_7
-      0x0,       // PA_CL_VPORT_XOFFSET_7
-      0x0,       // PA_CL_VPORT_YSCALE_7
-      0x0,       // PA_CL_VPORT_YOFFSET_7
-      0x0,       // PA_CL_VPORT_ZSCALE_7
-      0x0,       // PA_CL_VPORT_ZOFFSET_7
-      0x0,       // PA_CL_VPORT_XSCALE_8
-      0x0,       // PA_CL_VPORT_XOFFSET_8
-      0x0,       // PA_CL_VPORT_YSCALE_8
-      0x0,       // PA_CL_VPORT_YOFFSET_8
-      0x0,       // PA_CL_VPORT_ZSCALE_8
-      0x0,       // PA_CL_VPORT_ZOFFSET_8
-      0x0,       // PA_CL_VPORT_XSCALE_9
-      0x0,       // PA_CL_VPORT_XOFFSET_9
-      0x0,       // PA_CL_VPORT_YSCALE_9
-      0x0,       // PA_CL_VPORT_YOFFSET_9
-      0x0,       // PA_CL_VPORT_ZSCALE_9
-      0x0,       // PA_CL_VPORT_ZOFFSET_9
-      0x0,       // PA_CL_VPORT_XSCALE_10
-      0x0,       // PA_CL_VPORT_XOFFSET_10
-      0x0,       // PA_CL_VPORT_YSCALE_10
-      0x0,       // PA_CL_VPORT_YOFFSET_10
-      0x0,       // PA_CL_VPORT_ZSCALE_10
-      0x0,       // PA_CL_VPORT_ZOFFSET_10
-      0x0,       // PA_CL_VPORT_XSCALE_11
-      0x0,       // PA_CL_VPORT_XOFFSET_11
-      0x0,       // PA_CL_VPORT_YSCALE_11
-      0x0,       // PA_CL_VPORT_YOFFSET_11
-      0x0,       // PA_CL_VPORT_ZSCALE_11
-      0x0,       // PA_CL_VPORT_ZOFFSET_11
-      0x0,       // PA_CL_VPORT_XSCALE_12
-      0x0,       // PA_CL_VPORT_XOFFSET_12
-      0x0,       // PA_CL_VPORT_YSCALE_12
-      0x0,       // PA_CL_VPORT_YOFFSET_12
-      0x0,       // PA_CL_VPORT_ZSCALE_12
-      0x0,       // PA_CL_VPORT_ZOFFSET_12
-      0x0,       // PA_CL_VPORT_XSCALE_13
-      0x0,       // PA_CL_VPORT_XOFFSET_13
-      0x0,       // PA_CL_VPORT_YSCALE_13
-      0x0,       // PA_CL_VPORT_YOFFSET_13
-      0x0,       // PA_CL_VPORT_ZSCALE_13
-      0x0,       // PA_CL_VPORT_ZOFFSET_13
-      0x0,       // PA_CL_VPORT_XSCALE_14
-      0x0,       // PA_CL_VPORT_XOFFSET_14
-      0x0,       // PA_CL_VPORT_YSCALE_14
-      0x0,       // PA_CL_VPORT_YOFFSET_14
-      0x0,       // PA_CL_VPORT_ZSCALE_14
-      0x0,       // PA_CL_VPORT_ZOFFSET_14
-      0x0,       // PA_CL_VPORT_XSCALE_15
-      0x0,       // PA_CL_VPORT_XOFFSET_15
-      0x0,       // PA_CL_VPORT_YSCALE_15
-      0x0,       // PA_CL_VPORT_YOFFSET_15
-      0x0,       // PA_CL_VPORT_ZSCALE_15
-      0x0,       // PA_CL_VPORT_ZOFFSET_15
-      0x0,       // PA_CL_UCP_0_X
-      0x0,       // PA_CL_UCP_0_Y
-      0x0,       // PA_CL_UCP_0_Z
-      0x0,       // PA_CL_UCP_0_W
-      0x0,       // PA_CL_UCP_1_X
-      0x0,       // PA_CL_UCP_1_Y
-      0x0,       // PA_CL_UCP_1_Z
-      0x0,       // PA_CL_UCP_1_W
-      0x0,       // PA_CL_UCP_2_X
-      0x0,       // PA_CL_UCP_2_Y
-      0x0,       // PA_CL_UCP_2_Z
-      0x0,       // PA_CL_UCP_2_W
-      0x0,       // PA_CL_UCP_3_X
-      0x0,       // PA_CL_UCP_3_Y
-      0x0,       // PA_CL_UCP_3_Z
-      0x0,       // PA_CL_UCP_3_W
-      0x0,       // PA_CL_UCP_4_X
-      0x0,       // PA_CL_UCP_4_Y
-      0x0,       // PA_CL_UCP_4_Z
-      0x0,       // PA_CL_UCP_4_W
-      0x0,       // PA_CL_UCP_5_X
-      0x0,       // PA_CL_UCP_5_Y
-      0x0,       // PA_CL_UCP_5_Z
-      0x0        // PA_CL_UCP_5_W
-   };
-   static const uint32_t SpiPsInputCntl0Gfx103[] = {
-      0x0, // SPI_PS_INPUT_CNTL_0
-      0x0, // SPI_PS_INPUT_CNTL_1
-      0x0, // SPI_PS_INPUT_CNTL_2
-      0x0, // SPI_PS_INPUT_CNTL_3
-      0x0, // SPI_PS_INPUT_CNTL_4
-      0x0, // SPI_PS_INPUT_CNTL_5
-      0x0, // SPI_PS_INPUT_CNTL_6
-      0x0, // SPI_PS_INPUT_CNTL_7
-      0x0, // SPI_PS_INPUT_CNTL_8
-      0x0, // SPI_PS_INPUT_CNTL_9
-      0x0, // SPI_PS_INPUT_CNTL_10
-      0x0, // SPI_PS_INPUT_CNTL_11
-      0x0, // SPI_PS_INPUT_CNTL_12
-      0x0, // SPI_PS_INPUT_CNTL_13
-      0x0, // SPI_PS_INPUT_CNTL_14
-      0x0, // SPI_PS_INPUT_CNTL_15
-      0x0, // SPI_PS_INPUT_CNTL_16
-      0x0, // SPI_PS_INPUT_CNTL_17
-      0x0, // SPI_PS_INPUT_CNTL_18
-      0x0, // SPI_PS_INPUT_CNTL_19
-      0x0, // SPI_PS_INPUT_CNTL_20
-      0x0, // SPI_PS_INPUT_CNTL_21
-      0x0, // SPI_PS_INPUT_CNTL_22
-      0x0, // SPI_PS_INPUT_CNTL_23
-      0x0, // SPI_PS_INPUT_CNTL_24
-      0x0, // SPI_PS_INPUT_CNTL_25
-      0x0, // SPI_PS_INPUT_CNTL_26
-      0x0, // SPI_PS_INPUT_CNTL_27
-      0x0, // SPI_PS_INPUT_CNTL_28
-      0x0, // SPI_PS_INPUT_CNTL_29
-      0x0, // SPI_PS_INPUT_CNTL_30
-      0x0, // SPI_PS_INPUT_CNTL_31
-      0x0, // SPI_VS_OUT_CONFIG
-      0x0, //
-      0x0, // SPI_PS_INPUT_ENA
-      0x0, // SPI_PS_INPUT_ADDR
-      0x0, // SPI_INTERP_CONTROL_0
-      0x2, // SPI_PS_IN_CONTROL
-      0x0, //
-      0x0, // SPI_BARYC_CNTL
-      0x0, //
-      0x0, // SPI_TMPRING_SIZE
-      0x0, //
-      0x0, //
-      0x0, //
-      0x0, //
-      0x0, //
-      0x0, //
-      0x0, //
-      0x0, // SPI_SHADER_IDX_FORMAT
-      0x0, // SPI_SHADER_POS_FORMAT
-      0x0, // SPI_SHADER_Z_FORMAT
-      0x0  // SPI_SHADER_COL_FORMAT
+      0x0,        // PA_SC_TILE_STEERING_OVERRIDE
    };
-   static const uint32_t SxPsDownconvertControlGfx103[] = {
-      0x0, // SX_PS_DOWNCONVERT_CONTROL
-      0x0, // SX_PS_DOWNCONVERT
-      0x0, // SX_BLEND_OPT_EPSILON
-      0x0, // SX_BLEND_OPT_CONTROL
-      0x0, // SX_MRT0_BLEND_OPT
-      0x0, // SX_MRT1_BLEND_OPT
-      0x0, // SX_MRT2_BLEND_OPT
-      0x0, // SX_MRT3_BLEND_OPT
-      0x0, // SX_MRT4_BLEND_OPT
-      0x0, // SX_MRT5_BLEND_OPT
-      0x0, // SX_MRT6_BLEND_OPT
-      0x0, // SX_MRT7_BLEND_OPT
-      0x0, // CB_BLEND0_CONTROL
-      0x0, // CB_BLEND1_CONTROL
-      0x0, // CB_BLEND2_CONTROL
-      0x0, // CB_BLEND3_CONTROL
-      0x0, // CB_BLEND4_CONTROL
-      0x0, // CB_BLEND5_CONTROL
-      0x0, // CB_BLEND6_CONTROL
-      0x0  // CB_BLEND7_CONTROL
+   static const uint32_t PaScVrsOverrideCntlGfx11[] = {
+      0x0,        // PA_SC_VRS_OVERRIDE_CNTL
+      0x0,        // PA_SC_VRS_RATE_FEEDBACK_BASE
+      0x0,        // PA_SC_VRS_RATE_FEEDBACK_BASE_EXT
+      0x0,        // PA_SC_VRS_RATE_FEEDBACK_SIZE_XY
+      0x0,        //
+      0x0,        // PA_SC_VRS_RATE_CACHE_CNTL
    };
-   static const uint32_t PaClPointXRadGfx103[] = {
-      0x0, // PA_CL_POINT_X_RAD
-      0x0, // PA_CL_POINT_Y_RAD
-      0x0, // PA_CL_POINT_SIZE
-      0x0  // PA_CL_POINT_CULL_RAD
+   static const uint32_t PaScVrsRateBaseGfx11[] = {
+      0x0,        // PA_SC_VRS_RATE_BASE
+      0x0,        // PA_SC_VRS_RATE_BASE_EXT
+      0x0,        // PA_SC_VRS_RATE_SIZE_XY
    };
-   static const uint32_t GeMaxOutputPerSubgroupGfx103[] = {
-      0x0,     // GE_MAX_OUTPUT_PER_SUBGROUP
-      0x0,     // DB_DEPTH_CONTROL
-      0x0,     // DB_EQAA
-      0x0,     // CB_COLOR_CONTROL
-      0x0,     // DB_SHADER_CONTROL
-      0x90000, // PA_CL_CLIP_CNTL
-      0x4,     // PA_SU_SC_MODE_CNTL
-      0x0,     // PA_CL_VTE_CNTL
-      0x0,     // PA_CL_VS_OUT_CNTL
-      0x0,     // PA_CL_NANINF_CNTL
-      0x0,     // PA_SU_LINE_STIPPLE_CNTL
-      0x0,     // PA_SU_LINE_STIPPLE_SCALE
-      0x0,     // PA_SU_PRIM_FILTER_CNTL
-      0x0,     // PA_SU_SMALL_PRIM_FILTER_CNTL
-      0x0,     // PA_CL_OBJPRIM_ID_CNTL
-      0x0,     // PA_CL_NGG_CNTL
-      0x0,     // PA_SU_OVER_RASTERIZATION_CNTL
-      0x0,     // PA_STEREO_CNTL
-      0x0,     // PA_STATE_STEREO_X
-      0x0      // PA_CL_VRS_CNTL
+   static const uint32_t VgtMultiPrimIbResetIndxGfx11[] = {
+      0x0,        // VGT_MULTI_PRIM_IB_RESET_INDX
+      0x0,        // CB_RMI_GL2_CACHE_CONTROL
+      0x0,        // CB_BLEND_RED
+      0x0,        // CB_BLEND_GREEN
+      0x0,        // CB_BLEND_BLUE
+      0x0,        // CB_BLEND_ALPHA
+      0x0,        // CB_FDCC_CONTROL
+      0x0,        // CB_COVERAGE_OUT_CONTROL
+      0x0,        // DB_STENCIL_CONTROL
+      0x1000000,  // DB_STENCILREFMASK
+      0x1000000,  // DB_STENCILREFMASK_BF
+      0x0,        //
+      0x0,        // PA_CL_VPORT_XSCALE
+      0x0,        // PA_CL_VPORT_XOFFSET
+      0x0,        // PA_CL_VPORT_YSCALE
+      0x0,        // PA_CL_VPORT_YOFFSET
+      0x0,        // PA_CL_VPORT_ZSCALE
+      0x0,        // PA_CL_VPORT_ZOFFSET
+      0x0,        // PA_CL_VPORT_XSCALE_1
+      0x0,        // PA_CL_VPORT_XOFFSET_1
+      0x0,        // PA_CL_VPORT_YSCALE_1
+      0x0,        // PA_CL_VPORT_YOFFSET_1
+      0x0,        // PA_CL_VPORT_ZSCALE_1
+      0x0,        // PA_CL_VPORT_ZOFFSET_1
+      0x0,        // PA_CL_VPORT_XSCALE_2
+      0x0,        // PA_CL_VPORT_XOFFSET_2
+      0x0,        // PA_CL_VPORT_YSCALE_2
+      0x0,        // PA_CL_VPORT_YOFFSET_2
+      0x0,        // PA_CL_VPORT_ZSCALE_2
+      0x0,        // PA_CL_VPORT_ZOFFSET_2
+      0x0,        // PA_CL_VPORT_XSCALE_3
+      0x0,        // PA_CL_VPORT_XOFFSET_3
+      0x0,        // PA_CL_VPORT_YSCALE_3
+      0x0,        // PA_CL_VPORT_YOFFSET_3
+      0x0,        // PA_CL_VPORT_ZSCALE_3
+      0x0,        // PA_CL_VPORT_ZOFFSET_3
+      0x0,        // PA_CL_VPORT_XSCALE_4
+      0x0,        // PA_CL_VPORT_XOFFSET_4
+      0x0,        // PA_CL_VPORT_YSCALE_4
+      0x0,        // PA_CL_VPORT_YOFFSET_4
+      0x0,        // PA_CL_VPORT_ZSCALE_4
+      0x0,        // PA_CL_VPORT_ZOFFSET_4
+      0x0,        // PA_CL_VPORT_XSCALE_5
+      0x0,        // PA_CL_VPORT_XOFFSET_5
+      0x0,        // PA_CL_VPORT_YSCALE_5
+      0x0,        // PA_CL_VPORT_YOFFSET_5
+      0x0,        // PA_CL_VPORT_ZSCALE_5
+      0x0,        // PA_CL_VPORT_ZOFFSET_5
+      0x0,        // PA_CL_VPORT_XSCALE_6
+      0x0,        // PA_CL_VPORT_XOFFSET_6
+      0x0,        // PA_CL_VPORT_YSCALE_6
+      0x0,        // PA_CL_VPORT_YOFFSET_6
+      0x0,        // PA_CL_VPORT_ZSCALE_6
+      0x0,        // PA_CL_VPORT_ZOFFSET_6
+      0x0,        // PA_CL_VPORT_XSCALE_7
+      0x0,        // PA_CL_VPORT_XOFFSET_7
+      0x0,        // PA_CL_VPORT_YSCALE_7
+      0x0,        // PA_CL_VPORT_YOFFSET_7
+      0x0,        // PA_CL_VPORT_ZSCALE_7
+      0x0,        // PA_CL_VPORT_ZOFFSET_7
+      0x0,        // PA_CL_VPORT_XSCALE_8
+      0x0,        // PA_CL_VPORT_XOFFSET_8
+      0x0,        // PA_CL_VPORT_YSCALE_8
+      0x0,        // PA_CL_VPORT_YOFFSET_8
+      0x0,        // PA_CL_VPORT_ZSCALE_8
+      0x0,        // PA_CL_VPORT_ZOFFSET_8
+      0x0,        // PA_CL_VPORT_XSCALE_9
+      0x0,        // PA_CL_VPORT_XOFFSET_9
+      0x0,        // PA_CL_VPORT_YSCALE_9
+      0x0,        // PA_CL_VPORT_YOFFSET_9
+      0x0,        // PA_CL_VPORT_ZSCALE_9
+      0x0,        // PA_CL_VPORT_ZOFFSET_9
+      0x0,        // PA_CL_VPORT_XSCALE_10
+      0x0,        // PA_CL_VPORT_XOFFSET_10
+      0x0,        // PA_CL_VPORT_YSCALE_10
+      0x0,        // PA_CL_VPORT_YOFFSET_10
+      0x0,        // PA_CL_VPORT_ZSCALE_10
+      0x0,        // PA_CL_VPORT_ZOFFSET_10
+      0x0,        // PA_CL_VPORT_XSCALE_11
+      0x0,        // PA_CL_VPORT_XOFFSET_11
+      0x0,        // PA_CL_VPORT_YSCALE_11
+      0x0,        // PA_CL_VPORT_YOFFSET_11
+      0x0,        // PA_CL_VPORT_ZSCALE_11
+      0x0,        // PA_CL_VPORT_ZOFFSET_11
+      0x0,        // PA_CL_VPORT_XSCALE_12
+      0x0,        // PA_CL_VPORT_XOFFSET_12
+      0x0,        // PA_CL_VPORT_YSCALE_12
+      0x0,        // PA_CL_VPORT_YOFFSET_12
+      0x0,        // PA_CL_VPORT_ZSCALE_12
+      0x0,        // PA_CL_VPORT_ZOFFSET_12
+      0x0,        // PA_CL_VPORT_XSCALE_13
+      0x0,        // PA_CL_VPORT_XOFFSET_13
+      0x0,        // PA_CL_VPORT_YSCALE_13
+      0x0,        // PA_CL_VPORT_YOFFSET_13
+      0x0,        // PA_CL_VPORT_ZSCALE_13
+      0x0,        // PA_CL_VPORT_ZOFFSET_13
+      0x0,        // PA_CL_VPORT_XSCALE_14
+      0x0,        // PA_CL_VPORT_XOFFSET_14
+      0x0,        // PA_CL_VPORT_YSCALE_14
+      0x0,        // PA_CL_VPORT_YOFFSET_14
+      0x0,        // PA_CL_VPORT_ZSCALE_14
+      0x0,        // PA_CL_VPORT_ZOFFSET_14
+      0x0,        // PA_CL_VPORT_XSCALE_15
+      0x0,        // PA_CL_VPORT_XOFFSET_15
+      0x0,        // PA_CL_VPORT_YSCALE_15
+      0x0,        // PA_CL_VPORT_YOFFSET_15
+      0x0,        // PA_CL_VPORT_ZSCALE_15
+      0x0,        // PA_CL_VPORT_ZOFFSET_15
+      0x0,        // PA_CL_UCP_0_X
+      0x0,        // PA_CL_UCP_0_Y
+      0x0,        // PA_CL_UCP_0_Z
+      0x0,        // PA_CL_UCP_0_W
+      0x0,        // PA_CL_UCP_1_X
+      0x0,        // PA_CL_UCP_1_Y
+      0x0,        // PA_CL_UCP_1_Z
+      0x0,        // PA_CL_UCP_1_W
+      0x0,        // PA_CL_UCP_2_X
+      0x0,        // PA_CL_UCP_2_Y
+      0x0,        // PA_CL_UCP_2_Z
+      0x0,        // PA_CL_UCP_2_W
+      0x0,        // PA_CL_UCP_3_X
+      0x0,        // PA_CL_UCP_3_Y
+      0x0,        // PA_CL_UCP_3_Z
+      0x0,        // PA_CL_UCP_3_W
+      0x0,        // PA_CL_UCP_4_X
+      0x0,        // PA_CL_UCP_4_Y
+      0x0,        // PA_CL_UCP_4_Z
+      0x0,        // PA_CL_UCP_4_W
+      0x0,        // PA_CL_UCP_5_X
+      0x0,        // PA_CL_UCP_5_Y
+      0x0,        // PA_CL_UCP_5_Z
+      0x0,        // PA_CL_UCP_5_W
    };
-   static const uint32_t PaSuPointSizeGfx103[] = {
-      0x0, // PA_SU_POINT_SIZE
-      0x0, // PA_SU_POINT_MINMAX
-      0x0, // PA_SU_LINE_CNTL
-      0x0  // PA_SC_LINE_STIPPLE
+   static const uint32_t SpiPsInputCntl0Gfx11[] = {
+      0x0,        // SPI_PS_INPUT_CNTL_0
+      0x0,        // SPI_PS_INPUT_CNTL_1
+      0x0,        // SPI_PS_INPUT_CNTL_2
+      0x0,        // SPI_PS_INPUT_CNTL_3
+      0x0,        // SPI_PS_INPUT_CNTL_4
+      0x0,        // SPI_PS_INPUT_CNTL_5
+      0x0,        // SPI_PS_INPUT_CNTL_6
+      0x0,        // SPI_PS_INPUT_CNTL_7
+      0x0,        // SPI_PS_INPUT_CNTL_8
+      0x0,        // SPI_PS_INPUT_CNTL_9
+      0x0,        // SPI_PS_INPUT_CNTL_10
+      0x0,        // SPI_PS_INPUT_CNTL_11
+      0x0,        // SPI_PS_INPUT_CNTL_12
+      0x0,        // SPI_PS_INPUT_CNTL_13
+      0x0,        // SPI_PS_INPUT_CNTL_14
+      0x0,        // SPI_PS_INPUT_CNTL_15
+      0x0,        // SPI_PS_INPUT_CNTL_16
+      0x0,        // SPI_PS_INPUT_CNTL_17
+      0x0,        // SPI_PS_INPUT_CNTL_18
+      0x0,        // SPI_PS_INPUT_CNTL_19
+      0x0,        // SPI_PS_INPUT_CNTL_20
+      0x0,        // SPI_PS_INPUT_CNTL_21
+      0x0,        // SPI_PS_INPUT_CNTL_22
+      0x0,        // SPI_PS_INPUT_CNTL_23
+      0x0,        // SPI_PS_INPUT_CNTL_24
+      0x0,        // SPI_PS_INPUT_CNTL_25
+      0x0,        // SPI_PS_INPUT_CNTL_26
+      0x0,        // SPI_PS_INPUT_CNTL_27
+      0x0,        // SPI_PS_INPUT_CNTL_28
+      0x0,        // SPI_PS_INPUT_CNTL_29
+      0x0,        // SPI_PS_INPUT_CNTL_30
+      0x0,        // SPI_PS_INPUT_CNTL_31
+      0x0,        // SPI_VS_OUT_CONFIG
+      0x0,        //
+      0x0,        // SPI_PS_INPUT_ENA
+      0x0,        // SPI_PS_INPUT_ADDR
+      0x0,        // SPI_INTERP_CONTROL_0
+      0x2,        // SPI_PS_IN_CONTROL
+      0x0,        // SPI_BARYC_SSAA_CNTL
+      0x0,        // SPI_BARYC_CNTL
+      0x0,        //
+      0x0,        // SPI_TMPRING_SIZE
+      0x0,        // SPI_GFX_SCRATCH_BASE_LO
+      0x0,        // SPI_GFX_SCRATCH_BASE_HI
    };
-   static const uint32_t VgtHosMaxTessLevelGfx103[] = {
-      0x0, // VGT_HOS_MAX_TESS_LEVEL
-      0x0  // VGT_HOS_MIN_TESS_LEVEL
+   static const uint32_t SpiShaderIdxFormatGfx11[] = {
+      0x0,        // SPI_SHADER_IDX_FORMAT
+      0x0,        // SPI_SHADER_POS_FORMAT
+      0x0,        // SPI_SHADER_Z_FORMAT
+      0x0,        // SPI_SHADER_COL_FORMAT
    };
-   static const uint32_t VgtGsModeGfx103[] = {
-      0x0,   // VGT_GS_MODE
-      0x0,   // VGT_GS_ONCHIP_CNTL
-      0x0,   // PA_SC_MODE_CNTL_0
-      0x0,   // PA_SC_MODE_CNTL_1
-      0x0,   // VGT_ENHANCE
-      0x100, // VGT_GS_PER_ES
-      0x80,  // VGT_ES_PER_GS
-      0x2,   // VGT_GS_PER_VS
-      0x0,   // VGT_GSVS_RING_OFFSET_1
-      0x0,   // VGT_GSVS_RING_OFFSET_2
-      0x0,   // VGT_GSVS_RING_OFFSET_3
-      0x0    // VGT_GS_OUT_PRIM_TYPE
+   static const uint32_t SxPsDownconvertControlGfx11[] = {
+      0x0,        // SX_PS_DOWNCONVERT_CONTROL
+      0x0,        // SX_PS_DOWNCONVERT
+      0x0,        // SX_BLEND_OPT_EPSILON
+      0x0,        // SX_BLEND_OPT_CONTROL
+      0x0,        // SX_MRT0_BLEND_OPT
+      0x0,        // SX_MRT1_BLEND_OPT
+      0x0,        // SX_MRT2_BLEND_OPT
+      0x0,        // SX_MRT3_BLEND_OPT
+      0x0,        // SX_MRT4_BLEND_OPT
+      0x0,        // SX_MRT5_BLEND_OPT
+      0x0,        // SX_MRT6_BLEND_OPT
+      0x0,        // SX_MRT7_BLEND_OPT
+      0x0,        // CB_BLEND0_CONTROL
+      0x0,        // CB_BLEND1_CONTROL
+      0x0,        // CB_BLEND2_CONTROL
+      0x0,        // CB_BLEND3_CONTROL
+      0x0,        // CB_BLEND4_CONTROL
+      0x0,        // CB_BLEND5_CONTROL
+      0x0,        // CB_BLEND6_CONTROL
+      0x0,        // CB_BLEND7_CONTROL
    };
-   static const uint32_t VgtPrimitiveidEnGfx103[] = {
-      0x0 // VGT_PRIMITIVEID_EN
+   static const uint32_t PaClPointXRadGfx11[] = {
+      0x0,        // PA_CL_POINT_X_RAD
+      0x0,        // PA_CL_POINT_Y_RAD
+      0x0,        // PA_CL_POINT_SIZE
+      0x0,        // PA_CL_POINT_CULL_RAD
    };
-   static const uint32_t VgtPrimitiveidResetGfx103[] = {
-      0x0 // VGT_PRIMITIVEID_RESET
+   static const uint32_t GeMaxOutputPerSubgroupGfx11[] = {
+      0x0,        // GE_MAX_OUTPUT_PER_SUBGROUP
+      0x0,        // DB_DEPTH_CONTROL
+      0x0,        // DB_EQAA
+      0x0,        // CB_COLOR_CONTROL
+      0x0,        // DB_SHADER_CONTROL
+      0x90000,    // PA_CL_CLIP_CNTL
+      0x4,        // PA_SU_SC_MODE_CNTL
+      0x0,        // PA_CL_VTE_CNTL
+      0x0,        // PA_CL_VS_OUT_CNTL
+      0x0,        // PA_CL_NANINF_CNTL
+      0x0,        // PA_SU_LINE_STIPPLE_CNTL
+      0x0,        // PA_SU_LINE_STIPPLE_SCALE
+      0x0,        // PA_SU_PRIM_FILTER_CNTL
+      0x0,        // PA_SU_SMALL_PRIM_FILTER_CNTL
+      0x0,        //
+      0x0,        // PA_CL_NGG_CNTL
+      0x0,        // PA_SU_OVER_RASTERIZATION_CNTL
+      0x0,        // PA_STEREO_CNTL
+      0x0,        // PA_STATE_STEREO_X
+      0x0,        // PA_CL_VRS_CNTL
    };
-   static const uint32_t VgtDrawPayloadCntlGfx103[] = {
-      0x0, // VGT_DRAW_PAYLOAD_CNTL
-      0x0, //
-      0x0, // VGT_INSTANCE_STEP_RATE_0
-      0x0, // VGT_INSTANCE_STEP_RATE_1
-      0x0, // IA_MULTI_VGT_PARAM
-      0x0, // VGT_ESGS_RING_ITEMSIZE
-      0x0, // VGT_GSVS_RING_ITEMSIZE
-      0x0, // VGT_REUSE_OFF
-      0x0, // VGT_VTX_CNT_EN
-      0x0, // DB_HTILE_SURFACE
-      0x0, // DB_SRESULTS_COMPARE_STATE0
-      0x0, // DB_SRESULTS_COMPARE_STATE1
-      0x0, // DB_PRELOAD_CONTROL
-      0x0, //
-      0x0, // VGT_STRMOUT_BUFFER_SIZE_0
-      0x0, // VGT_STRMOUT_VTX_STRIDE_0
-      0x0, //
-      0x0, // VGT_STRMOUT_BUFFER_OFFSET_0
-      0x0, // VGT_STRMOUT_BUFFER_SIZE_1
-      0x0, // VGT_STRMOUT_VTX_STRIDE_1
-      0x0, //
-      0x0, // VGT_STRMOUT_BUFFER_OFFSET_1
-      0x0, // VGT_STRMOUT_BUFFER_SIZE_2
-      0x0, // VGT_STRMOUT_VTX_STRIDE_2
-      0x0, //
-      0x0, // VGT_STRMOUT_BUFFER_OFFSET_2
-      0x0, // VGT_STRMOUT_BUFFER_SIZE_3
-      0x0, // VGT_STRMOUT_VTX_STRIDE_3
-      0x0, //
-      0x0, // VGT_STRMOUT_BUFFER_OFFSET_3
-      0x0, //
-      0x0, //
-      0x0, //
-      0x0, //
-      0x0, //
-      0x0, //
-      0x0, // VGT_STRMOUT_DRAW_OPAQUE_OFFSET
-      0x0, // VGT_STRMOUT_DRAW_OPAQUE_BUFFER_FILLED_SIZE
-      0x0, // VGT_STRMOUT_DRAW_OPAQUE_VERTEX_STRIDE
-      0x0, //
-      0x0, // VGT_GS_MAX_VERT_OUT
-      0x0, //
-      0x0, //
-      0x0, //
-      0x0, //
-      0x0, // GE_NGG_SUBGRP_CNTL
-      0x0, // VGT_TESS_DISTRIBUTION
-      0x0, // VGT_SHADER_STAGES_EN
-      0x0, // VGT_LS_HS_CONFIG
-      0x0, // VGT_GS_VERT_ITEMSIZE
-      0x0, // VGT_GS_VERT_ITEMSIZE_1
-      0x0, // VGT_GS_VERT_ITEMSIZE_2
-      0x0, // VGT_GS_VERT_ITEMSIZE_3
-      0x0, // VGT_TF_PARAM
-      0x0, // DB_ALPHA_TO_MASK
-      0x0, //
-      0x0, // PA_SU_POLY_OFFSET_DB_FMT_CNTL
-      0x0, // PA_SU_POLY_OFFSET_CLAMP
-      0x0, // PA_SU_POLY_OFFSET_FRONT_SCALE
-      0x0, // PA_SU_POLY_OFFSET_FRONT_OFFSET
-      0x0, // PA_SU_POLY_OFFSET_BACK_SCALE
-      0x0, // PA_SU_POLY_OFFSET_BACK_OFFSET
-      0x0, // VGT_GS_INSTANCE_CNT
-      0x0, // VGT_STRMOUT_CONFIG
-      0x0  // VGT_STRMOUT_BUFFER_CONFIG
+   static const uint32_t PaSuPointSizeGfx11[] = {
+      0x0,        // PA_SU_POINT_SIZE
+      0x0,        // PA_SU_POINT_MINMAX
+      0x0,        // PA_SU_LINE_CNTL
+      0x0,        // PA_SC_LINE_STIPPLE
    };
-   static const uint32_t PaScCentroidPriority0Gfx103[] = {
+   static const uint32_t VgtHosMaxTessLevelGfx11[] = {
+      0x0,        // VGT_HOS_MAX_TESS_LEVEL
+      0x0,        // VGT_HOS_MIN_TESS_LEVEL
+   };
+   static const uint32_t PaScModeCntl0Gfx11[] = {
+      0x0,        // PA_SC_MODE_CNTL_0
+      0x0,        // PA_SC_MODE_CNTL_1
+      0x0,        // VGT_ENHANCE
+   };
+   static const uint32_t VgtPrimitiveidEnGfx11[] = {
+      0x0,        // VGT_PRIMITIVEID_EN
+   };
+   static const uint32_t VgtPrimitiveidResetGfx11[] = {
+      0x0,        // VGT_PRIMITIVEID_RESET
+   };
+   static const uint32_t VgtDrawPayloadCntlGfx11[] = {
+      0x0,        // VGT_DRAW_PAYLOAD_CNTL
+   };
+   static const uint32_t VgtEsgsRingItemsizeGfx11[] = {
+      0x0,        // VGT_ESGS_RING_ITEMSIZE
+      0x0,        //
+      0x0,        // VGT_REUSE_OFF
+      0x0,        //
+      0x0,        // DB_HTILE_SURFACE
+      0x0,        // DB_SRESULTS_COMPARE_STATE0
+      0x0,        // DB_SRESULTS_COMPARE_STATE1
+   };
+   static const uint32_t VgtStrmoutDrawOpaqueOffsetGfx11[] = {
+      0x0,        // VGT_STRMOUT_DRAW_OPAQUE_OFFSET
+      0x0,        // VGT_STRMOUT_DRAW_OPAQUE_BUFFER_FILLED_SIZE
+      0x0,        // VGT_STRMOUT_DRAW_OPAQUE_VERTEX_STRIDE
+      0x0,        //
+      0x0,        // VGT_GS_MAX_VERT_OUT
+   };
+   static const uint32_t GeNggSubgrpCntlGfx11[] = {
+      0x0,        // GE_NGG_SUBGRP_CNTL
+      0x0,        // VGT_TESS_DISTRIBUTION
+      0x0,        // VGT_SHADER_STAGES_EN
+      0x0,        // VGT_LS_HS_CONFIG
+   };
+   static const uint32_t VgtTfParamGfx11[] = {
+      0x0,        // VGT_TF_PARAM
+      0x0,        // DB_ALPHA_TO_MASK
+      0x0,        //
+      0x0,        // PA_SU_POLY_OFFSET_DB_FMT_CNTL
+      0x0,        // PA_SU_POLY_OFFSET_CLAMP
+      0x0,        // PA_SU_POLY_OFFSET_FRONT_SCALE
+      0x0,        // PA_SU_POLY_OFFSET_FRONT_OFFSET
+      0x0,        // PA_SU_POLY_OFFSET_BACK_SCALE
+      0x0,        // PA_SU_POLY_OFFSET_BACK_OFFSET
+      0x0,        // VGT_GS_INSTANCE_CNT
+   };
+   static const uint32_t PaScCentroidPriority0Gfx11[] = {
       0x0,        // PA_SC_CENTROID_PRIORITY_0
       0x0,        // PA_SC_CENTROID_PRIORITY_1
       0x1000,     // PA_SC_LINE_CNTL
@@ -2765,127 +3853,95 @@ static void gfx103_emulate_clear_state(struct radeon_cmdbuf *cs, unsigned num_re
       0x0,        // PA_SC_BINNER_CNTL_1
       0x100000,   // PA_SC_CONSERVATIVE_RASTERIZATION_CNTL
       0x0,        // PA_SC_NGG_MODE_CNTL
-      0x0,        //
-      0x1e,       // VGT_VERTEX_REUSE_BLOCK_CNTL
-      0x20,       // VGT_OUT_DEALLOC_CNTL
+      0x0,        // PA_SC_BINNER_CNTL_2
+   };
+   static const uint32_t CbColor0BaseGfx11[] = {
       0x0,        // CB_COLOR0_BASE
-      0x0,        //
-      0x0,        //
+   };
+   static const uint32_t CbColor0ViewGfx11[] = {
       0x0,        // CB_COLOR0_VIEW
       0x0,        // CB_COLOR0_INFO
       0x0,        // CB_COLOR0_ATTRIB
       0x0,        // CB_COLOR0_DCC_CONTROL
-      0x0,        // CB_COLOR0_CMASK
-      0x0,        //
-      0x0,        // CB_COLOR0_FMASK
-      0x0,        //
-      0x0,        // CB_COLOR0_CLEAR_WORD0
-      0x0,        // CB_COLOR0_CLEAR_WORD1
+   };
+   static const uint32_t CbColor0DccBaseGfx11[] = {
       0x0,        // CB_COLOR0_DCC_BASE
       0x0,        //
       0x0,        // CB_COLOR1_BASE
-      0x0,        //
-      0x0,        //
+   };
+   static const uint32_t CbColor1ViewGfx11[] = {
       0x0,        // CB_COLOR1_VIEW
       0x0,        // CB_COLOR1_INFO
       0x0,        // CB_COLOR1_ATTRIB
       0x0,        // CB_COLOR1_DCC_CONTROL
-      0x0,        // CB_COLOR1_CMASK
-      0x0,        //
-      0x0,        // CB_COLOR1_FMASK
-      0x0,        //
-      0x0,        // CB_COLOR1_CLEAR_WORD0
-      0x0,        // CB_COLOR1_CLEAR_WORD1
+   };
+   static const uint32_t CbColor1DccBaseGfx11[] = {
       0x0,        // CB_COLOR1_DCC_BASE
       0x0,        //
       0x0,        // CB_COLOR2_BASE
-      0x0,        //
-      0x0,        //
+   };
+   static const uint32_t CbColor2ViewGfx11[] = {
       0x0,        // CB_COLOR2_VIEW
       0x0,        // CB_COLOR2_INFO
       0x0,        // CB_COLOR2_ATTRIB
       0x0,        // CB_COLOR2_DCC_CONTROL
-      0x0,        // CB_COLOR2_CMASK
-      0x0,        //
-      0x0,        // CB_COLOR2_FMASK
-      0x0,        //
-      0x0,        // CB_COLOR2_CLEAR_WORD0
-      0x0,        // CB_COLOR2_CLEAR_WORD1
+   };
+   static const uint32_t CbColor2DccBaseGfx11[] = {
       0x0,        // CB_COLOR2_DCC_BASE
       0x0,        //
       0x0,        // CB_COLOR3_BASE
-      0x0,        //
-      0x0,        //
+   };
+   static const uint32_t CbColor3ViewGfx11[] = {
       0x0,        // CB_COLOR3_VIEW
       0x0,        // CB_COLOR3_INFO
       0x0,        // CB_COLOR3_ATTRIB
       0x0,        // CB_COLOR3_DCC_CONTROL
-      0x0,        // CB_COLOR3_CMASK
-      0x0,        //
-      0x0,        // CB_COLOR3_FMASK
-      0x0,        //
-      0x0,        // CB_COLOR3_CLEAR_WORD0
-      0x0,        // CB_COLOR3_CLEAR_WORD1
+   };
+   static const uint32_t CbColor3DccBaseGfx11[] = {
       0x0,        // CB_COLOR3_DCC_BASE
       0x0,        //
       0x0,        // CB_COLOR4_BASE
-      0x0,        //
-      0x0,        //
+   };
+   static const uint32_t CbColor4ViewGfx11[] = {
       0x0,        // CB_COLOR4_VIEW
       0x0,        // CB_COLOR4_INFO
       0x0,        // CB_COLOR4_ATTRIB
       0x0,        // CB_COLOR4_DCC_CONTROL
-      0x0,        // CB_COLOR4_CMASK
-      0x0,        //
-      0x0,        // CB_COLOR4_FMASK
-      0x0,        //
-      0x0,        // CB_COLOR4_CLEAR_WORD0
-      0x0,        // CB_COLOR4_CLEAR_WORD1
+   };
+   static const uint32_t CbColor4DccBaseGfx11[] = {
       0x0,        // CB_COLOR4_DCC_BASE
       0x0,        //
       0x0,        // CB_COLOR5_BASE
-      0x0,        //
-      0x0,        //
+   };
+   static const uint32_t CbColor5ViewGfx11[] = {
       0x0,        // CB_COLOR5_VIEW
       0x0,        // CB_COLOR5_INFO
       0x0,        // CB_COLOR5_ATTRIB
       0x0,        // CB_COLOR5_DCC_CONTROL
-      0x0,        // CB_COLOR5_CMASK
-      0x0,        //
-      0x0,        // CB_COLOR5_FMASK
-      0x0,        //
-      0x0,        // CB_COLOR5_CLEAR_WORD0
-      0x0,        // CB_COLOR5_CLEAR_WORD1
+   };
+   static const uint32_t CbColor5DccBaseGfx11[] = {
       0x0,        // CB_COLOR5_DCC_BASE
       0x0,        //
       0x0,        // CB_COLOR6_BASE
-      0x0,        //
-      0x0,        //
+   };
+   static const uint32_t CbColor6ViewGfx11[] = {
       0x0,        // CB_COLOR6_VIEW
       0x0,        // CB_COLOR6_INFO
       0x0,        // CB_COLOR6_ATTRIB
       0x0,        // CB_COLOR6_DCC_CONTROL
-      0x0,        // CB_COLOR6_CMASK
-      0x0,        //
-      0x0,        // CB_COLOR6_FMASK
-      0x0,        //
-      0x0,        // CB_COLOR6_CLEAR_WORD0
-      0x0,        // CB_COLOR6_CLEAR_WORD1
+   };
+   static const uint32_t CbColor6DccBaseGfx11[] = {
       0x0,        // CB_COLOR6_DCC_BASE
       0x0,        //
       0x0,        // CB_COLOR7_BASE
-      0x0,        //
-      0x0,        //
+   };
+   static const uint32_t CbColor7ViewGfx11[] = {
       0x0,        // CB_COLOR7_VIEW
       0x0,        // CB_COLOR7_INFO
       0x0,        // CB_COLOR7_ATTRIB
       0x0,        // CB_COLOR7_DCC_CONTROL
-      0x0,        // CB_COLOR7_CMASK
-      0x0,        //
-      0x0,        // CB_COLOR7_FMASK
-      0x0,        //
-      0x0,        // CB_COLOR7_CLEAR_WORD0
-      0x0,        // CB_COLOR7_CLEAR_WORD1
+   };
+   static const uint32_t CbColor7DccBaseGfx11[] = {
       0x0,        // CB_COLOR7_DCC_BASE
       0x0,        //
       0x0,        // CB_COLOR0_BASE_EXT
@@ -2896,22 +3952,8 @@ static void gfx103_emulate_clear_state(struct radeon_cmdbuf *cs, unsigned num_re
       0x0,        // CB_COLOR5_BASE_EXT
       0x0,        // CB_COLOR6_BASE_EXT
       0x0,        // CB_COLOR7_BASE_EXT
-      0x0,        // CB_COLOR0_CMASK_BASE_EXT
-      0x0,        // CB_COLOR1_CMASK_BASE_EXT
-      0x0,        // CB_COLOR2_CMASK_BASE_EXT
-      0x0,        // CB_COLOR3_CMASK_BASE_EXT
-      0x0,        // CB_COLOR4_CMASK_BASE_EXT
-      0x0,        // CB_COLOR5_CMASK_BASE_EXT
-      0x0,        // CB_COLOR6_CMASK_BASE_EXT
-      0x0,        // CB_COLOR7_CMASK_BASE_EXT
-      0x0,        // CB_COLOR0_FMASK_BASE_EXT
-      0x0,        // CB_COLOR1_FMASK_BASE_EXT
-      0x0,        // CB_COLOR2_FMASK_BASE_EXT
-      0x0,        // CB_COLOR3_FMASK_BASE_EXT
-      0x0,        // CB_COLOR4_FMASK_BASE_EXT
-      0x0,        // CB_COLOR5_FMASK_BASE_EXT
-      0x0,        // CB_COLOR6_FMASK_BASE_EXT
-      0x0,        // CB_COLOR7_FMASK_BASE_EXT
+   };
+   static const uint32_t CbColor0DccBaseExtGfx11[] = {
       0x0,        // CB_COLOR0_DCC_BASE_EXT
       0x0,        // CB_COLOR1_DCC_BASE_EXT
       0x0,        // CB_COLOR2_DCC_BASE_EXT
@@ -2935,27 +3977,48 @@ static void gfx103_emulate_clear_state(struct radeon_cmdbuf *cs, unsigned num_re
       0x0,        // CB_COLOR4_ATTRIB3
       0x0,        // CB_COLOR5_ATTRIB3
       0x0,        // CB_COLOR6_ATTRIB3
-      0x0         // CB_COLOR7_ATTRIB3
+      0x0,        // CB_COLOR7_ATTRIB3
    };
 
-   set_context_reg_seq_array(cs, R_028000_DB_RENDER_CONTROL, SET(DbRenderControlGfx103));
-   set_context_reg_seq_array(cs, R_0281E8_COHER_DEST_BASE_HI_0, SET(CoherDestBaseHi0Gfx103));
-   set_context_reg_seq_array(cs, R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX,
-                             SET(VgtMultiPrimIbResetIndxGfx103));
-   set_context_reg_seq_array(cs, R_028644_SPI_PS_INPUT_CNTL_0, SET(SpiPsInputCntl0Gfx103));
-   set_context_reg_seq_array(cs, R_028750_SX_PS_DOWNCONVERT_CONTROL,
-                             SET(SxPsDownconvertControlGfx103));
-   set_context_reg_seq_array(cs, R_0287D4_PA_CL_POINT_X_RAD, SET(PaClPointXRadGfx103));
-   set_context_reg_seq_array(cs, R_0287FC_GE_MAX_OUTPUT_PER_SUBGROUP,
-                             SET(GeMaxOutputPerSubgroupGfx103));
-   set_context_reg_seq_array(cs, R_028A00_PA_SU_POINT_SIZE, SET(PaSuPointSizeGfx103));
-   set_context_reg_seq_array(cs, R_028A18_VGT_HOS_MAX_TESS_LEVEL, SET(VgtHosMaxTessLevelGfx103));
-   set_context_reg_seq_array(cs, R_028A40_VGT_GS_MODE, SET(VgtGsModeGfx103));
-   set_context_reg_seq_array(cs, R_028A84_VGT_PRIMITIVEID_EN, SET(VgtPrimitiveidEnGfx103));
-   set_context_reg_seq_array(cs, R_028A8C_VGT_PRIMITIVEID_RESET, SET(VgtPrimitiveidResetGfx103));
-   set_context_reg_seq_array(cs, R_028A98_VGT_DRAW_PAYLOAD_CNTL, SET(VgtDrawPayloadCntlGfx103));
-   set_context_reg_seq_array(cs, R_028BD4_PA_SC_CENTROID_PRIORITY_0,
-                             SET(PaScCentroidPriority0Gfx103));
+   set_context_reg_seq_array(cs, R_028000_DB_RENDER_CONTROL, SET(DbRenderControlGfx11));
+   set_context_reg_seq_array(cs, R_0281E8_COHER_DEST_BASE_HI_0, SET(CoherDestBaseHi0Gfx11));
+   set_context_reg_seq_array(cs, R_0283D0_PA_SC_VRS_OVERRIDE_CNTL, SET(PaScVrsOverrideCntlGfx11));
+   set_context_reg_seq_array(cs, R_0283F0_PA_SC_VRS_RATE_BASE, SET(PaScVrsRateBaseGfx11));
+   set_context_reg_seq_array(cs, R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX, SET(VgtMultiPrimIbResetIndxGfx11));
+   set_context_reg_seq_array(cs, R_028644_SPI_PS_INPUT_CNTL_0, SET(SpiPsInputCntl0Gfx11));
+   set_context_reg_seq_array(cs, R_028708_SPI_SHADER_IDX_FORMAT, SET(SpiShaderIdxFormatGfx11));
+   set_context_reg_seq_array(cs, R_028750_SX_PS_DOWNCONVERT_CONTROL, SET(SxPsDownconvertControlGfx11));
+   set_context_reg_seq_array(cs, R_0287D4_PA_CL_POINT_X_RAD, SET(PaClPointXRadGfx11));
+   set_context_reg_seq_array(cs, R_0287FC_GE_MAX_OUTPUT_PER_SUBGROUP, SET(GeMaxOutputPerSubgroupGfx11));
+   set_context_reg_seq_array(cs, R_028A00_PA_SU_POINT_SIZE, SET(PaSuPointSizeGfx11));
+   set_context_reg_seq_array(cs, R_028A18_VGT_HOS_MAX_TESS_LEVEL, SET(VgtHosMaxTessLevelGfx11));
+   set_context_reg_seq_array(cs, R_028A48_PA_SC_MODE_CNTL_0, SET(PaScModeCntl0Gfx11));
+   set_context_reg_seq_array(cs, R_028A84_VGT_PRIMITIVEID_EN, SET(VgtPrimitiveidEnGfx11));
+   set_context_reg_seq_array(cs, R_028A8C_VGT_PRIMITIVEID_RESET, SET(VgtPrimitiveidResetGfx11));
+   set_context_reg_seq_array(cs, R_028A98_VGT_DRAW_PAYLOAD_CNTL, SET(VgtDrawPayloadCntlGfx11));
+   set_context_reg_seq_array(cs, R_028AAC_VGT_ESGS_RING_ITEMSIZE, SET(VgtEsgsRingItemsizeGfx11));
+   set_context_reg_seq_array(cs, R_028B28_VGT_STRMOUT_DRAW_OPAQUE_OFFSET, SET(VgtStrmoutDrawOpaqueOffsetGfx11));
+   set_context_reg_seq_array(cs, R_028B4C_GE_NGG_SUBGRP_CNTL, SET(GeNggSubgrpCntlGfx11));
+   set_context_reg_seq_array(cs, R_028B6C_VGT_TF_PARAM, SET(VgtTfParamGfx11));
+   set_context_reg_seq_array(cs, R_028BD4_PA_SC_CENTROID_PRIORITY_0, SET(PaScCentroidPriority0Gfx11));
+   set_context_reg_seq_array(cs, R_028C60_CB_COLOR0_BASE, SET(CbColor0BaseGfx11));
+   set_context_reg_seq_array(cs, R_028C6C_CB_COLOR0_VIEW, SET(CbColor0ViewGfx11));
+   set_context_reg_seq_array(cs, R_028C94_CB_COLOR0_DCC_BASE, SET(CbColor0DccBaseGfx11));
+   set_context_reg_seq_array(cs, R_028CA8_CB_COLOR1_VIEW, SET(CbColor1ViewGfx11));
+   set_context_reg_seq_array(cs, R_028CD0_CB_COLOR1_DCC_BASE, SET(CbColor1DccBaseGfx11));
+   set_context_reg_seq_array(cs, R_028CE4_CB_COLOR2_VIEW, SET(CbColor2ViewGfx11));
+   set_context_reg_seq_array(cs, R_028D0C_CB_COLOR2_DCC_BASE, SET(CbColor2DccBaseGfx11));
+   set_context_reg_seq_array(cs, R_028D20_CB_COLOR3_VIEW, SET(CbColor3ViewGfx11));
+   set_context_reg_seq_array(cs, R_028D48_CB_COLOR3_DCC_BASE, SET(CbColor3DccBaseGfx11));
+   set_context_reg_seq_array(cs, R_028D5C_CB_COLOR4_VIEW, SET(CbColor4ViewGfx11));
+   set_context_reg_seq_array(cs, R_028D84_CB_COLOR4_DCC_BASE, SET(CbColor4DccBaseGfx11));
+   set_context_reg_seq_array(cs, R_028D98_CB_COLOR5_VIEW, SET(CbColor5ViewGfx11));
+   set_context_reg_seq_array(cs, R_028DC0_CB_COLOR5_DCC_BASE, SET(CbColor5DccBaseGfx11));
+   set_context_reg_seq_array(cs, R_028DD4_CB_COLOR6_VIEW, SET(CbColor6ViewGfx11));
+   set_context_reg_seq_array(cs, R_028DFC_CB_COLOR6_DCC_BASE, SET(CbColor6DccBaseGfx11));
+   set_context_reg_seq_array(cs, R_028E10_CB_COLOR7_VIEW, SET(CbColor7ViewGfx11));
+   set_context_reg_seq_array(cs, R_028E38_CB_COLOR7_DCC_BASE, SET(CbColor7DccBaseGfx11));
+   set_context_reg_seq_array(cs, R_028C98_CB_COLOR0_DCC_BASE_EXT, SET(CbColor0DccBaseExtGfx11));
 
    for (unsigned i = 0; i < num_reg_pairs; i++)
       set_context_reg_seq_array(cs, reg_offsets[i], 1, &reg_values[i]);
@@ -2968,7 +4031,9 @@ void ac_emulate_clear_state(const struct radeon_info *info, struct radeon_cmdbuf
    unsigned reg_offset = R_02835C_PA_SC_TILE_STEERING_OVERRIDE;
    uint32_t reg_value = info->pa_sc_tile_steering_override;
 
-   if (info->chip_class == GFX10_3) {
+   if (info->chip_class >= GFX11) {
+      gfx11_emulate_clear_state(cs, 1, &reg_offset, &reg_value, set_context_reg_seq_array);
+   } else if (info->chip_class == GFX10_3) {
       gfx103_emulate_clear_state(cs, 1, &reg_offset, &reg_value, set_context_reg_seq_array);
    } else if (info->chip_class == GFX10) {
       gfx10_emulate_clear_state(cs, 1, &reg_offset, &reg_value, set_context_reg_seq_array);